<?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>220101</bug_id>
          
          <creation_ts>2020-12-22 13:22:36 -0800</creation_ts>
          <short_desc>Remove non-inclusive language from libwebrtc</short_desc>
          <delta_ts>2021-01-07 00:10:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.chromium.org/p/webrtc/issues/detail?id=11680</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>213092</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1716350</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2020-12-22 13:22:36 -0800</bug_when>
    <thetext>See results of &apos;report-non-inclusive-language --verbose&apos; inside Source/ThirdParty/libwebrtc/Source/webrtc below. I took a look at https://webrtc.googlesource.com/src, and it&apos;s only marginally improved, with 84 occurrences of non-inclusive terms down from 93, so updating to a newer libwebrtc will only get us so far. We should try to make changes upstream as well.

.gn: whitelist: 2
tools_webrtc/vim/webrtc.ycm_extra_conf.py: whitelist: 1
tools_webrtc/msan/suppressions.txt: blacklist: 2
tools_webrtc/ubsan/vptr_suppressions.txt: blacklist: 5
tools_webrtc/ubsan/suppressions.txt: blacklist: 2
rtc_base/message_digest.h: whitelist: 1
rtc_base/win/windows_version.h: blacklist: 1
build_overrides/build.gni: blacklist: 3
sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java: blacklist: 1
sdk/android/api/org/webrtc/HardwareVideoDecoderFactory.java: blacklist: 2
sdk/android/api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java: whitelist: 2
sdk/android/src/java/org/webrtc/audio/WebRtcAudioEffects.java: blacklist: 2
sdk/android/src/jni/audio_device/audio_device_module.cc: blacklist: 2
modules/audio_device/android/audio_manager.h: blacklist: 3
modules/audio_device/android/audio_manager.cc: blacklist: 7
modules/audio_device/android/audio_device_template.h: blacklist: 3
modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java: blacklist: 16
modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java: blacklist: 16
modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioManager.java: blacklist: 18
logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc: whitelist: 4
Total: 93 (blacklist: 83, whitelist: 10, slave: 0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716819</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-29 13:23:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/72727968&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717117</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-04 07:57:03 -0800</bug_when>
    <thetext>We can remove the sdk/android and modules/audio_device/android folders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717200</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-04 13:54:46 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #2)
&gt; We can remove the sdk/android and modules/audio_device/android folders

Oh, that&apos;s a good idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717266</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-05 03:19:49 -0800</bug_when>
    <thetext>Related upstream issue is https://bugs.chromium.org/p/webrtc/issues/detail?id=11680</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717267</commentid>
    <comment_count>5</comment_count>
      <attachid>416986</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-05 03:20:06 -0800</bug_when>
    <thetext>Created attachment 416986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717280</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-05 04:56:03 -0800</bug_when>
    <thetext>Patch removes corresponding files except for rtc_base/message_digest.h.
I added a comment about this file in https://bugs.chromium.org/p/webrtc/issues/detail?id=11680</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717345</commentid>
    <comment_count>7</comment_count>
      <attachid>416986</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-05 09:35:58 -0800</bug_when>
    <thetext>Comment on attachment 416986
Patch

All red patch, how exciting! Thanks Youenn!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717349</commentid>
    <comment_count>8</comment_count>
      <attachid>416986</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-05 09:44:53 -0800</bug_when>
    <thetext>Comment on attachment 416986
Patch

Last remaining instance is being fixed upstream. I&apos;ll cherry pick the change when it lands upstream</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717356</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-05 09:55:54 -0800</bug_when>
    <thetext>Committed r271150: &lt;https://trac.webkit.org/changeset/271150&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 416986.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717376</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-01-05 10:15:21 -0800</bug_when>
    <thetext>The patch that landed had some additional new logging in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717387</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-05 10:31:50 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; The patch that landed had some additional new logging in it.

Thanks, I will revert them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717610</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-06 02:27:51 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717611</commentid>
    <comment_count>13</comment_count>
      <attachid>417076</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-06 02:27:54 -0800</bug_when>
    <thetext>Created attachment 417076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717886</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-07 00:10:51 -0800</bug_when>
    <thetext>Committed r271227: &lt;https://trac.webkit.org/changeset/271227&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417076.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416986</attachid>
            <date>2021-01-05 03:20:06 -0800</date>
            <delta_ts>2021-01-06 02:27:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220101-20210105121936.patch</filename>
            <type>text/plain</type>
            <size>2643195</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCAwMzdhZjE5ODMyODIwYzlmN2YxYjg4ZjMyNDU1Y2E3ODEyNmQxODA5Li5kZTYy
ODg1OTMxNTBhYmQ2NDI0YTUxYjEzZWNmNmQ3NWFjMGY3MDBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wMS0wNSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG5vbi1pbmNsdXNpdmUg
bGFuZ3VhZ2UgZnJvbSBsaWJ3ZWJydGMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDEwMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzI3Mjc5Njg+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2J1aWxkX292ZXJyaWRlczogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQ6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9ydGNfYmFzZS93aW46IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL3Rvb2xzX3dl
YnJ0Yy9tc2FuOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvdG9vbHNfd2VicnRj
L3Vic2FuOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvdG9vbHNfd2VicnRjL3Zp
bTogUmVtb3ZlZC4KKwogMjAyMC0xMi0yMSAgUnlhbiBIb3N0ZXRsZXIgIDxyaG9zdEBhcHBsZS5j
b20+CiAKICAgICAgICAgJChmaW5kc3RyaW5nIGlwaG9uZSwkKFNES1JPT1QpKSBmYWlscyB3aGVu
IFNES1JPT1QgaXMgbm90IGxvd2VyY2FzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGRfb3ZlcnJpZGVzL09XTkVSUyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1aWxkX292ZXJyaWRlcy9PV05FUlMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZTY5Mjc3NDZmMTg0ZWNjOTZjYjQ2NzVk
NDIxMWYyZmUxOWVhMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGRfb3Zl
cnJpZGVzL09XTkVSUworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW1ib25hZGVpQHdlYnJ0
Yy5vcmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2J1aWxkX292ZXJyaWRlcy9SRUFETUUubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9idWlsZF9vdmVycmlkZXMvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5MDYxMzZlNTBlZWRlMGRiOWRmM2NhYWQ2ZDdiZTY0NTYxYjcxZmY3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1aWxkX292ZXJyaWRlcy9SRUFETUUu
bWQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMgQnVpbGQgb3ZlcnJpZGVzIGluIEdO
Ci0KLVRoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYWxsb3cgdXMgdG8gY3VzdG9taXplIHZhcmlh
YmxlcyB0aGF0IGRpZmZlciBiZXR3ZWVuCi1XZWJSVEMgYmVpbmcgYnVpbHQgYXMgc3RhbmRhbG9u
ZSBhbmQgYXMgYSBwYXJ0IG9mIENocm9taXVtLgotCi1UaGVyZSdzIGFub3RoZXIgYnVpbGRfb3Zl
cnJpZGVzIGluIENocm9taXVtIHRoYXQgbmVlZHMgdG8gY29udGFpbiB0aGUgc2FtZQotc2V0IG9m
IGZpbGVzIHdpdGggdGhlIHNhbWUgc2V0IG9mIHZhcmlhYmxlcyAoYnV0IHdpdGggZGlmZmVyZW50
IHZhbHVlcykuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9idWlsZF9vdmVycmlkZXMvYnVpbGQuZ25pIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGRfb3ZlcnJpZGVzL2J1aWxkLmduaQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjM5NDJlZmE2NjNjNjM0ZjQ1NGNkZDIxNzk4ZmYzMmUwNTRh
NjgyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9idWlsZF9vdmVycmlkZXMvYnVp
bGQuZ25pCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIw
MTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0j
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0jIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSMgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotIyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLQotIyBTb21lIG5vbi1DaHJv
bWl1bSBidWlsZHMgZG9uJ3Qgc3VwcG9ydCBidWlsZGluZyBqYXZhIHRhcmdldHMuCi1lbmFibGVf
amF2YV90ZW1wbGF0ZXMgPSB0cnVlCi0KLSMgU29tZSBub24tQ2hyb21pdW0gYnVpbGRzIGRvbid0
IHVzZSBDaHJvbWl1bSdzIHRoaXJkX3BhcnR5L2JpbnV0aWxzLgotbGludXhfdXNlX2J1bmRsZWRf
YmludXRpbHNfb3ZlcnJpZGUgPSB0cnVlCi0KLSMgRG9uJ3Qgc2V0IHRoaXMgdmFyaWFibGUgdG8g
dHJ1ZSB3aGVuIGJ1aWxkaW5nIHN0YWRhbG9uZSBXZWJSVEMsIGl0IGlzCi0jIG9ubHkgbmVlZGVk
IHRvIHN1cHBvcnQgYm90aCBXZWJSVEMgc3RhbmRhbG9uZSBhbmQgQ2hyb21pdW0gYnVpbGRzLgot
YnVpbGRfd2l0aF9jaHJvbWl1bSA9IGZhbHNlCi0KLSMgV2ViUlRDIGNoZWNrcyBvdXQgZ29vZ2xl
X2JlbmNobWFyayBieSBkZWZhdWx0IHNpbmNlIGl0IGlzIGFsd2F5cyB1c2VkLgotY2hlY2tvdXRf
Z29vZ2xlX2JlbmNobWFyayA9IHRydWUKLQotIyBVc2Ugb3VyIG93biBzdXBwcmVzc2lvbnMgZmls
ZXMuCi1hc2FuX3N1cHByZXNzaW9uc19maWxlID0gIi8vYnVpbGQvc2FuaXRpemVycy9hc2FuX3N1
cHByZXNzaW9ucy5jYyIKLWxzYW5fc3VwcHJlc3Npb25zX2ZpbGUgPSAiLy90b29sc193ZWJydGMv
c2FuaXRpemVycy9sc2FuX3N1cHByZXNzaW9uc193ZWJydGMuY2MiCi10c2FuX3N1cHByZXNzaW9u
c19maWxlID0gIi8vdG9vbHNfd2VicnRjL3Nhbml0aXplcnMvdHNhbl9zdXBwcmVzc2lvbnNfd2Vi
cnRjLmNjIgotbXNhbl9ibGFja2xpc3RfcGF0aCA9Ci0gICAgcmViYXNlX3BhdGgoIi8vdG9vbHNf
d2VicnRjL21zYW4vc3VwcHJlc3Npb25zLnR4dCIsIHJvb3RfYnVpbGRfZGlyKQotdWJzYW5fYmxh
Y2tsaXN0X3BhdGggPQotICAgIHJlYmFzZV9wYXRoKCIvL3Rvb2xzX3dlYnJ0Yy91YnNhbi9zdXBw
cmVzc2lvbnMudHh0Iiwgcm9vdF9idWlsZF9kaXIpCi11YnNhbl92cHRyX2JsYWNrbGlzdF9wYXRo
ID0KLSAgICByZWJhc2VfcGF0aCgiLy90b29sc193ZWJydGMvdWJzYW4vdnB0cl9zdXBwcmVzc2lv
bnMudHh0Iiwgcm9vdF9idWlsZF9kaXIpCi0KLSMgRm9yIENocm9taXVtLCBBbmRyb2lkIDMyLWJp
dCBub24tY29tcG9uZW50LCBub24tY2xhbmcgYnVpbGRzIGhpdCBhIDRHaUIgc2l6ZQotIyBsaW1p
dCwgbWFraW5nIHRoZW0gcmVxdWlyaW5nIHN5bWJvbF9sZXZlbD0yLiBXZWJSVEMgZG9lc24ndCBo
aXQgdGhhdCBwcm9ibGVtCi0jIHNvIHdlIGp1c3QgaWdub3JlIHRoYXQgYXNzZXJ0LiBTZWUgaHR0
cHM6Ly9jcmJ1Zy5jb20vNjQ4OTQ4IGZvciBtb3JlIGluZm8uCi1pZ25vcmVfZWxmMzJfbGltaXRh
dGlvbnMgPSB0cnVlCi0KLSMgVXNlIGJ1bmRsZWQgaGVybWV0aWMgWGNvZGUgaW5zdGFsbGF0aW9u
IG1haW50YWludGVkIGJ5IENocm9taXVtLAotIyBleGNlcHQgZm9yIGxvY2FsIGlPUyBidWlsZHMg
d2hlcmUgaXQncyB1bnN1cHBvcnRlZC4KLWlmIChob3N0X29zID09ICJtYWMiKSB7Ci0gIF9yZXN1
bHQgPSBleGVjX3NjcmlwdCgiLy9idWlsZC9tYWMvc2hvdWxkX3VzZV9oZXJtZXRpY194Y29kZS5w
eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbIHRhcmdldF9vcyBdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgInZhbHVlIikKLSAgYXNzZXJ0KF9yZXN1bHQgIT0gMiwKLSAgICAgICAgICJE
byBub3QgYWxsb3cgYnVpbGRpbmcgdGFyZ2V0cyB3aXRoIHRoZSBkZWZhdWx0ICIgKwotICAgICAg
ICAgICAgICJoZXJtZXRpYyB0b29sY2hhaW4gaWYgdGhlIG1pbmltdW0gT1MgdmVyc2lvbiBpcyBu
b3QgbWV0LiIpCi0gIHVzZV9zeXN0ZW1feGNvZGUgPSBfcmVzdWx0ID09IDAKLX0KLQotZGVjbGFy
ZV9hcmdzKCkgewotICAjIFdlYlJUQyBkb2Vzbid0IGRlcGVuZCBvbiAvL2Jhc2UgZnJvbSBwcm9k
dWN0aW9uIGNvZGUgYnV0IG9ubHkgZm9yIHRlc3RpbmcKLSAgIyBwdXJwb3Nlcy4gSW4gYW55IGNh
c2UsIGl0IGRvZXNuJ3QgZGVwZW5kIG9uIC8vdGhpcmRfcGFydHkvcGVyZmV0dG8gd2hpY2gKLSAg
IyBpcyB1c2VkIGZvciBiYXNlIHRyYWNpbmcsIHNvIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZC4K
LSAgZW5hYmxlX2Jhc2VfdHJhY2luZyA9IGZhbHNlCi0gIHVzZV9wZXJmZXR0b19jbGllbnRfbGli
cmFyeSA9IGZhbHNlCi0KLSAgIyBJZiB0cnVlLCBpdCBhc3N1bWVzIHRoYXQgLy90aGlyZF9wYXJ0
eS9hYnNlaWwtY3BwIGlzIGFuIGF2YWlsYWJsZQotICAjIGRlcGVuZGVuY3kgZm9yIGdvb2dsZXRl
c3QuCi0gIGd0ZXN0X2VuYWJsZV9hYnNsX3ByaW50ZXJzID0gdHJ1ZQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGRfb3ZlcnJpZGVz
L2d0ZXN0LmduaSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1
aWxkX292ZXJyaWRlcy9ndGVzdC5nbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
N2NjZTc0NmNmZDY2ODYxMmUxYjg5ZGY0NGNlOTQ3OWQzYzgwNjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYnVpbGRfb3ZlcnJpZGVzL2d0ZXN0LmduaQorKysgL2Rldi9udWxsCkBA
IC0xLDE5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotIyB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0jIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSMgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0KLSMgSW5jbHVkZSBzdXBwb3J0IGZvciByZWdpc3RlcmluZyBtYWlu
IGZ1bmN0aW9uIGluIG11bHRpLXByb2Nlc3MgdGVzdHMuCi1ndGVzdF9pbmNsdWRlX211bHRpcHJv
Y2VzcyA9IHRydWUKLQotIyBJbmNsdWRlIHN1cHBvcnQgZm9yIHBsYXRmb3JtLXNwZWNpZmljIG9w
ZXJhdGlvbnMgYWNyb3NzIHVuaXQgdGVzdHMuCi1ndGVzdF9pbmNsdWRlX3BsYXRmb3JtX3Rlc3Qg
PSB0cnVlCi0KLSMgRXhjbHVkZSBzdXBwb3J0IGZvciB0ZXN0aW5nIE9iamVjdGl2ZSBDIGNvZGUg
b24gT1MgWCBhbmQgaU9TLgotZ3Rlc3RfaW5jbHVkZV9vYmpjX3N1cHBvcnQgPSB0cnVlCi0KLSMg
RXhjbHVkZSBzdXBwb3J0IGZvciBmbHVzaGluZyBjb3ZlcmFnZSBmaWxlcyBvbiBpT1MuCi1ndGVz
dF9pbmNsdWRlX2lvc19jb3ZlcmFnZSA9IHRydWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YWF1ZGlvX3BsYXllci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYWF1ZGlvX3BsYXllci5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQzMTBlZDhlNGY1MGQ1YTgxNjY5Mjg1OGQ4ZDgwZjE5
NTcxYjZiZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2FhdWRpb19wbGF5ZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2FhdWRpb19wbGF5ZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2lu
Y2x1ZGUgImFwaS9hcnJheV92aWV3LmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2Uv
ZmluZV9hdWRpb19idWZmZXIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNs
dWRlICJydGNfYmFzZS9sb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1lbnVtIEF1
ZGlvRGV2aWNlTWVzc2FnZVR5cGUgOiB1aW50MzJfdCB7Ci0gIGtNZXNzYWdlT3V0cHV0U3RyZWFt
RGlzY29ubmVjdGVkLAotfTsKLQotQUF1ZGlvUGxheWVyOjpBQXVkaW9QbGF5ZXIoQXVkaW9NYW5h
Z2VyKiBhdWRpb19tYW5hZ2VyKQotICAgIDogbWFpbl90aHJlYWRfKHJ0Yzo6VGhyZWFkOjpDdXJy
ZW50KCkpLAotICAgICAgYWF1ZGlvXyhhdWRpb19tYW5hZ2VyLCBBQVVESU9fRElSRUNUSU9OX09V
VFBVVCwgdGhpcykgewotICBSVENfTE9HKElORk8pIDw8ICJjdG9yIjsKLSAgdGhyZWFkX2NoZWNr
ZXJfYWF1ZGlvXy5EZXRhY2goKTsKLX0KLQotQUF1ZGlvUGxheWVyOjp+QUF1ZGlvUGxheWVyKCkg
ewotICBSVENfTE9HKElORk8pIDw8ICJkdG9yIjsKLSAgUlRDX0RDSEVDS19SVU5fT04oJm1haW5f
dGhyZWFkX2NoZWNrZXJfKTsKLSAgVGVybWluYXRlKCk7Ci0gIFJUQ19MT0coSU5GTykgPDwgIiNk
ZXRlY3RlZCB1bmRlcnJ1bnM6ICIgPDwgdW5kZXJydW5fY291bnRfOwotfQotCi1pbnQgQUF1ZGlv
UGxheWVyOjpJbml0KCkgewotICBSVENfTE9HKElORk8pIDw8ICJJbml0IjsKLSAgUlRDX0RDSEVD
S19SVU5fT04oJm1haW5fdGhyZWFkX2NoZWNrZXJfKTsKLSAgaWYgKGFhdWRpb18uYXVkaW9fcGFy
YW1ldGVycygpLmNoYW5uZWxzKCkgPT0gMikgewotICAgIFJUQ19ETE9HKExTX1dBUk5JTkcpIDw8
ICJTdGVyZW8gbW9kZSBpcyBlbmFibGVkIjsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW50IEFB
dWRpb1BsYXllcjo6VGVybWluYXRlKCkgewotICBSVENfTE9HKElORk8pIDw8ICJUZXJtaW5hdGUi
OwotICBSVENfRENIRUNLX1JVTl9PTigmbWFpbl90aHJlYWRfY2hlY2tlcl8pOwotICBTdG9wUGxh
eW91dCgpOwotICByZXR1cm4gMDsKLX0KLQotaW50IEFBdWRpb1BsYXllcjo6SW5pdFBsYXlvdXQo
KSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkluaXRQbGF5b3V0IjsKLSAgUlRDX0RDSEVDS19SVU5f
T04oJm1haW5fdGhyZWFkX2NoZWNrZXJfKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsK
LSAgUlRDX0RDSEVDSyghcGxheWluZ18pOwotICBpZiAoIWFhdWRpb18uSW5pdCgpKSB7Ci0gICAg
cmV0dXJuIC0xOwotICB9Ci0gIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gIHJldHVybiAwOwotfQot
Ci1ib29sIEFBdWRpb1BsYXllcjo6UGxheW91dElzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0gIFJU
Q19EQ0hFQ0tfUlVOX09OKCZtYWluX3RocmVhZF9jaGVja2VyXyk7Ci0gIHJldHVybiBpbml0aWFs
aXplZF87Ci19Ci0KLWludCBBQXVkaW9QbGF5ZXI6OlN0YXJ0UGxheW91dCgpIHsKLSAgUlRDX0xP
RyhJTkZPKSA8PCAiU3RhcnRQbGF5b3V0IjsKLSAgUlRDX0RDSEVDS19SVU5fT04oJm1haW5fdGhy
ZWFkX2NoZWNrZXJfKTsKLSAgUlRDX0RDSEVDSyghcGxheWluZ18pOwotICBpZiAoIWluaXRpYWxp
emVkXykgewotICAgIFJUQ19ETE9HKExTX1dBUk5JTkcpCi0gICAgICAgIDw8ICJQbGF5b3V0IGNh
biBub3Qgc3RhcnQgc2luY2UgSW5pdFBsYXlvdXQgbXVzdCBzdWNjZWVkIGZpcnN0IjsKLSAgICBy
ZXR1cm4gMDsKLSAgfQotICBpZiAoZmluZV9hdWRpb19idWZmZXJfKSB7Ci0gICAgZmluZV9hdWRp
b19idWZmZXJfLT5SZXNldFBsYXlvdXQoKTsKLSAgfQotICBpZiAoIWFhdWRpb18uU3RhcnQoKSkg
ewotICAgIHJldHVybiAtMTsKLSAgfQotICB1bmRlcnJ1bl9jb3VudF8gPSBhYXVkaW9fLnhydW5f
Y291bnQoKTsKLSAgZmlyc3RfZGF0YV9jYWxsYmFja18gPSB0cnVlOwotICBwbGF5aW5nXyA9IHRy
dWU7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgQUF1ZGlvUGxheWVyOjpTdG9wUGxheW91dCgpIHsK
LSAgUlRDX0xPRyhJTkZPKSA8PCAiU3RvcFBsYXlvdXQiOwotICBSVENfRENIRUNLX1JVTl9PTigm
bWFpbl90aHJlYWRfY2hlY2tlcl8pOwotICBpZiAoIWluaXRpYWxpemVkXyB8fCAhcGxheWluZ18p
IHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWFhdWRpb18uU3RvcCgpKSB7Ci0gICAgUlRD
X0xPRyhMU19FUlJPUikgPDwgIlN0b3BQbGF5b3V0IGZhaWxlZCI7Ci0gICAgcmV0dXJuIC0xOwot
ICB9Ci0gIHRocmVhZF9jaGVja2VyX2FhdWRpb18uRGV0YWNoKCk7Ci0gIGluaXRpYWxpemVkXyA9
IGZhbHNlOwotICBwbGF5aW5nXyA9IGZhbHNlOwotICByZXR1cm4gMDsKLX0KLQotYm9vbCBBQXVk
aW9QbGF5ZXI6OlBsYXlpbmcoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZtYWluX3Ro
cmVhZF9jaGVja2VyXyk7Ci0gIHJldHVybiBwbGF5aW5nXzsKLX0KLQotdm9pZCBBQXVkaW9QbGF5
ZXI6OkF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcikgewot
ICBSVENfRExPRyhJTkZPKSA8PCAiQXR0YWNoQXVkaW9CdWZmZXIiOwotICBSVENfRENIRUNLX1JV
Tl9PTigmbWFpbl90aHJlYWRfY2hlY2tlcl8pOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXyA9IGF1
ZGlvQnVmZmVyOwotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMgYXVkaW9fcGFyYW1ldGVycyA9IGFh
dWRpb18uYXVkaW9fcGFyYW1ldGVycygpOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0UGxh
eW91dFNhbXBsZVJhdGUoYXVkaW9fcGFyYW1ldGVycy5zYW1wbGVfcmF0ZSgpKTsKLSAgYXVkaW9f
ZGV2aWNlX2J1ZmZlcl8tPlNldFBsYXlvdXRDaGFubmVscyhhdWRpb19wYXJhbWV0ZXJzLmNoYW5u
ZWxzKCkpOwotICBSVENfQ0hFQ0soYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICAvLyBDcmVhdGUg
YSBtb2RpZmllZCBhdWRpbyBidWZmZXIgY2xhc3Mgd2hpY2ggYWxsb3dzIHVzIHRvIGFzayBmb3Ig
YW55IG51bWJlcgotICAvLyBvZiBzYW1wbGVzIChhbmQgbm90IG9ubHkgbXVsdGlwbGUgb2YgMTBt
cykgdG8gbWF0Y2ggdGhlIG9wdGltYWwgYnVmZmVyCi0gIC8vIHNpemUgcGVyIGNhbGxiYWNrIHVz
ZWQgYnkgQUF1ZGlvLgotICBmaW5lX2F1ZGlvX2J1ZmZlcl8gPSBzdGQ6Om1ha2VfdW5pcXVlPEZp
bmVBdWRpb0J1ZmZlcj4oYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotfQotCi1pbnQgQUF1ZGlvUGxh
eWVyOjpTcGVha2VyVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSB7Ci0gIGF2YWls
YWJsZSA9IGZhbHNlOwotICByZXR1cm4gMDsKLX0KLQotdm9pZCBBQXVkaW9QbGF5ZXI6Ok9uRXJy
b3JDYWxsYmFjayhhYXVkaW9fcmVzdWx0X3QgZXJyb3IpIHsKLSAgUlRDX0xPRyhMU19FUlJPUikg
PDwgIk9uRXJyb3JDYWxsYmFjazogIiA8PCBBQXVkaW9fY29udmVydFJlc3VsdFRvVGV4dChlcnJv
cik7Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIGlmIHdlIGNhbiB1c2UgYSB0aHJl
YWQgY2hlY2tlciBoZXJlLiBJbml0aWFsCi0gIC8vIHRlc3RzIHNob3dzIHRoYXQgdGhpcyBjYWxs
YmFjayBjYW4gc29tZXRpbWVzIGJlIGNhbGxlZCBvbiBhIHVuaXF1ZSB0aHJlYWQKLSAgLy8gYnV0
IGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiBpdCBzaG91bGQgYmUgb24gdGhlIHNhbWUg
dGhyZWFkIGFzIHRoZQotICAvLyBkYXRhIGNhbGxiYWNrLgotICAvLyBSVENfRENIRUNLX1JVTl9P
TigmdGhyZWFkX2NoZWNrZXJfYWF1ZGlvXyk7Ci0gIGlmIChhYXVkaW9fLnN0cmVhbV9zdGF0ZSgp
ID09IEFBVURJT19TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEKSB7Ci0gICAgLy8gVGhlIHN0cmVh
bSBpcyBkaXNjb25uZWN0ZWQgYW5kIGFueSBhdHRlbXB0IHRvIHVzZSBpdCB3aWxsIHJldHVybgot
ICAgIC8vIEFBVURJT19FUlJPUl9ESVNDT05ORUNURUQuCi0gICAgUlRDX0xPRyhXQVJOSU5HKSA8
PCAiT3V0cHV0IHN0cmVhbSBkaXNjb25uZWN0ZWQiOwotICAgIC8vIEFBdWRpbyBkb2N1bWVudGF0
aW9uIHN0YXRlczogIllvdSBzaG91bGQgbm90IGNsb3NlIG9yIHJlb3BlbiB0aGUgc3RyZWFtCi0g
ICAgLy8gZnJvbSB0aGUgY2FsbGJhY2ssIHVzZSBhbm90aGVyIHRocmVhZCBpbnN0ZWFkIi4gQSBt
ZXNzYWdlIGlzIHRoZXJlZm9yZQotICAgIC8vIHNlbnQgdG8gdGhlIG1haW4gdGhyZWFkIHRvIGRv
IHRoZSByZXN0YXJ0IG9wZXJhdGlvbi4KLSAgICBSVENfRENIRUNLKG1haW5fdGhyZWFkXyk7Ci0g
ICAgbWFpbl90aHJlYWRfLT5Qb3N0KFJUQ19GUk9NX0hFUkUsIHRoaXMsIGtNZXNzYWdlT3V0cHV0
U3RyZWFtRGlzY29ubmVjdGVkKTsKLSAgfQotfQotCi1hYXVkaW9fZGF0YV9jYWxsYmFja19yZXN1
bHRfdCBBQXVkaW9QbGF5ZXI6Ok9uRGF0YUNhbGxiYWNrKHZvaWQqIGF1ZGlvX2RhdGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgbnVtX2ZyYW1lcykgewotICBSVENfRENIRUNLX1JVTl9PTigmdGhyZWFkX2NoZWNrZXJf
YWF1ZGlvXyk7Ci0gIC8vIExvZyBkZXZpY2UgaWQgaW4gZmlyc3QgZGF0YSBjYWxsYmFjayB0byBl
bnN1cmUgdGhhdCBhIHZhbGlkIGRldmljZSBpcwotICAvLyB1dGlsaXplZC4KLSAgaWYgKGZpcnN0
X2RhdGFfY2FsbGJhY2tfKSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCAiLS0tIEZpcnN0IG91dHB1
dCBkYXRhIGNhbGxiYWNrOiAiCi0gICAgICAgICAgICAgICAgICAgICAiZGV2aWNlIGlkPSIKLSAg
ICAgICAgICAgICAgICAgIDw8IGFhdWRpb18uZGV2aWNlX2lkKCk7Ci0gICAgZmlyc3RfZGF0YV9j
YWxsYmFja18gPSBmYWxzZTsKLSAgfQotCi0gIC8vIENoZWNrIGlmIHRoZSB1bmRlcnJ1biBjb3Vu
dCBoYXMgaW5jcmVhc2VkLiBJZiBpdCBoYXMsIGluY3JlYXNlIHRoZSBidWZmZXIKLSAgLy8gc2l6
ZSBieSBhZGRpbmcgdGhlIHNpemUgb2YgYSBidXJzdC4gSXQgd2lsbCByZWR1Y2UgdGhlIHJpc2sg
b2YgdW5kZXJydW5zCi0gIC8vIGF0IHRoZSBleHBlbnNlIG9mIGFuIGluY3JlYXNlZCBsYXRlbmN5
LgotICAvLyBUT0RPKGhlbnJpa2EpOiBlbmFibGUgcG9zc2liaWxpdHkgdG8gZGlzYWJsZSBhbmQv
b3IgdHVuZSB0aGUgYWxnb3JpdGhtLgotICBjb25zdCBpbnQzMl90IHVuZGVycnVuX2NvdW50ID0g
YWF1ZGlvXy54cnVuX2NvdW50KCk7Ci0gIGlmICh1bmRlcnJ1bl9jb3VudCA+IHVuZGVycnVuX2Nv
dW50XykgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJVbmRlcnJ1biBkZXRlY3RlZDogIiA8
PCB1bmRlcnJ1bl9jb3VudDsKLSAgICB1bmRlcnJ1bl9jb3VudF8gPSB1bmRlcnJ1bl9jb3VudDsK
LSAgICBhYXVkaW9fLkluY3JlYXNlT3V0cHV0QnVmZmVyU2l6ZSgpOwotICB9Ci0KLSAgLy8gRXN0
aW1hdGUgbGF0ZW5jeSBiZXR3ZWVuIHdyaXRpbmcgYW4gYXVkaW8gZnJhbWUgdG8gdGhlIG91dHB1
dCBzdHJlYW0gYW5kCi0gIC8vIHRoZSB0aW1lIHRoYXQgc2FtZSBmcmFtZSBpcyBwbGF5ZWQgb3V0
IG9uIHRoZSBvdXRwdXQgYXVkaW8gZGV2aWNlLgotICBsYXRlbmN5X21pbGxpc18gPSBhYXVkaW9f
LkVzdGltYXRlTGF0ZW5jeU1pbGxpcygpOwotICAvLyBUT0RPKGhlbnJpa2EpOiB1c2UgZm9yIGRl
dmVsb3BtZW50IG9ubHkuCi0gIGlmIChhYXVkaW9fLmZyYW1lc193cml0dGVuKCkgJSAoMTAwMCAq
IGFhdWRpb18uZnJhbWVzX3Blcl9idXJzdCgpKSA9PSAwKSB7Ci0gICAgUlRDX0RMT0coSU5GTykg
PDwgIm91dHB1dCBsYXRlbmN5OiAiIDw8IGxhdGVuY3lfbWlsbGlzXwotICAgICAgICAgICAgICAg
ICAgIDw8ICIsIG51bV9mcmFtZXM6ICIgPDwgbnVtX2ZyYW1lczsKLSAgfQotCi0gIC8vIFJlYWQg
YXVkaW8gZGF0YSBmcm9tIHRoZSBXZWJSVEMgc291cmNlIHVzaW5nIHRoZSBGaW5lQXVkaW9CdWZm
ZXIgb2JqZWN0Ci0gIC8vIGFuZCB3cml0ZSB0aGF0IGRhdGEgaW50byB8YXVkaW9fZGF0YXwgdG8g
YmUgcGxheWVkIG91dCBieSBBQXVkaW8uCi0gIC8vIFByaW1lIG91dHB1dCB3aXRoIHplcm9zIGR1
cmluZyBhIHNob3J0IGluaXRpYWwgcGhhc2UgdG8gYXZvaWQgZGlzdG9ydGlvbi4KLSAgLy8gVE9E
TyhoZW5yaWthKTogZG8gbW9yZSB3b3JrIHRvIGZpZ3VyZSBvdXQgb2YgaWYgdGhlIGluaXRpYWwg
Zm9yY2VkIHNpbGVuY2UKLSAgLy8gcGVyaW9kIGlzIHJlYWxseSBuZWVkZWQuCi0gIGlmIChhYXVk
aW9fLmZyYW1lc193cml0dGVuKCkgPCA1MCAqIGFhdWRpb18uZnJhbWVzX3Blcl9idXJzdCgpKSB7
Ci0gICAgY29uc3Qgc2l6ZV90IG51bV9ieXRlcyA9Ci0gICAgICAgIHNpemVvZihpbnQxNl90KSAq
IGFhdWRpb18uc2FtcGxlc19wZXJfZnJhbWUoKSAqIG51bV9mcmFtZXM7Ci0gICAgbWVtc2V0KGF1
ZGlvX2RhdGEsIDAsIG51bV9ieXRlcyk7Ci0gIH0gZWxzZSB7Ci0gICAgZmluZV9hdWRpb19idWZm
ZXJfLT5HZXRQbGF5b3V0RGF0YSgKLSAgICAgICAgcnRjOjpNYWtlQXJyYXlWaWV3KHN0YXRpY19j
YXN0PGludDE2X3QqPihhdWRpb19kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFh
dWRpb18uc2FtcGxlc19wZXJfZnJhbWUoKSAqIG51bV9mcmFtZXMpLAotICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGxhdGVuY3lfbWlsbGlzXyArIDAuNSkpOwotICB9Ci0KLSAgLy8gVE9ETyhoZW5y
aWthKTogcG9zc2libHkgYWRkIHRyYWNlIGhlcmUgdG8gYmUgaW5jbHVkZWQgaW4gc3lzdHJhY2Uu
Ci0gIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vcHJvZmlsZS9z
eXN0cmFjZS1jb21tYW5kbGluZS5odG1sLgotICByZXR1cm4gQUFVRElPX0NBTExCQUNLX1JFU1VM
VF9DT05USU5VRTsKLX0KLQotdm9pZCBBQXVkaW9QbGF5ZXI6Ok9uTWVzc2FnZShydGM6Ok1lc3Nh
Z2UqIG1zZykgewotICBSVENfRENIRUNLX1JVTl9PTigmbWFpbl90aHJlYWRfY2hlY2tlcl8pOwot
ICBzd2l0Y2ggKG1zZy0+bWVzc2FnZV9pZCkgewotICAgIGNhc2Uga01lc3NhZ2VPdXRwdXRTdHJl
YW1EaXNjb25uZWN0ZWQ6Ci0gICAgICBIYW5kbGVTdHJlYW1EaXNjb25uZWN0ZWQoKTsKLSAgICAg
IGJyZWFrOwotICB9Ci19Ci0KLXZvaWQgQUF1ZGlvUGxheWVyOjpIYW5kbGVTdHJlYW1EaXNjb25u
ZWN0ZWQoKSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZtYWluX3RocmVhZF9jaGVja2VyXyk7Ci0g
IFJUQ19ETE9HKElORk8pIDw8ICJIYW5kbGVTdHJlYW1EaXNjb25uZWN0ZWQiOwotICBpZiAoIWlu
aXRpYWxpemVkXyB8fCAhcGxheWluZ18pIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gUGVyZm9y
bSBhIHJlc3RhcnQgYnkgZmlyc3QgY2xvc2luZyB0aGUgZGlzY29ubmVjdGVkIHN0cmVhbSBhbmQg
dGhlbiBzdGFydAotICAvLyBhIG5ldyBzdHJlYW07IHRoaXMgdGltZSB1c2luZyB0aGUgbmV3IChw
cmVmZXJyZWQpIGF1ZGlvIG91dHB1dCBkZXZpY2UuCi0gIFN0b3BQbGF5b3V0KCk7Ci0gIEluaXRQ
bGF5b3V0KCk7Ci0gIFN0YXJ0UGxheW91dCgpOwotfQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Ywpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hYXVkaW9fcGxheWVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2FhdWRpb19wbGF5ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIwZDI3OWQ2
ZTAyOWUwZmJjYjJiOWFkMmNlZWRlODI1ZTZkMjI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2FhdWRpb19wbGF5ZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxOCBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lm
bmRlZiBNT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FBVURJT19QTEFZRVJfSF8KLSNkZWZp
bmUgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BQVVESU9fUExBWUVSX0hfCi0KLSNpbmNs
dWRlIDxhYXVkaW8vQUF1ZGlvLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJt
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2FhdWRpb193cmFwcGVyLmgiCi0jaW5jbHVkZSAi
bW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2lu
Y2x1ZGUgInJ0Y19iYXNlL21lc3NhZ2VfaGFuZGxlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3Ro
cmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9hbm5vdGF0aW9ucy5oIgotI2luY2x1
ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1j
bGFzcyBBdWRpb0RldmljZUJ1ZmZlcjsKLWNsYXNzIEZpbmVBdWRpb0J1ZmZlcjsKLWNsYXNzIEF1
ZGlvTWFuYWdlcjsKLQotLy8gSW1wbGVtZW50cyBsb3ctbGF0ZW5jeSAxNi1iaXQgbW9ubyBQQ00g
YXVkaW8gb3V0cHV0IHN1cHBvcnQgZm9yIEFuZHJvaWQKLS8vIHVzaW5nIHRoZSBDIGJhc2VkIEFB
dWRpbyBBUEkuCi0vLwotLy8gQW4gaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95
ZWQgb24gb25lIGFuZCB0aGUgc2FtZSB0aHJlYWQuCi0vLyBBbGwgcHVibGljIG1ldGhvZHMgbXVz
dCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQuIEEgdGhyZWFkIGNoZWNrZXIKLS8v
IHdpbGwgRENIRUNLIGlmIGFueSBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFk
LiBBdWRpbyBidWZmZXJzCi0vLyBhcmUgcmVxdWVzdGVkIG9uIGEgZGVkaWNhdGVkIGhpZ2gtcHJp
b3JpdHkgdGhyZWFkIG93bmVkIGJ5IEFBdWRpby4KLS8vCi0vLyBUaGUgZXhpc3RpbmcgZGVzaWdu
IGZvcmNlcyB0aGUgdXNlciB0byBjYWxsIEluaXRQbGF5b3V0KCkgYWZ0ZXIgU3RvcFBsYXlvdXQo
KQotLy8gdG8gYmUgYWJsZSB0byBjYWxsIFN0YXJ0UGxheW91dCgpIGFnYWluLiBUaGlzIGlzIGlu
IGxpbmUgd2l0aCBob3cgdGhlIEphdmEtCi0vLyBiYXNlZCBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4K
LS8vCi0vLyBBbiBhdWRpbyBzdHJlYW0gY2FuIGJlIGRpc2Nvbm5lY3RlZCwgZS5nLiB3aGVuIGFu
IGF1ZGlvIGRldmljZSBpcyByZW1vdmVkLgotLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIHJl
c3RhcnQgdGhlIGF1ZGlvIHN0cmVhbSB1c2luZyB0aGUgbmV3IHByZWZlcnJlZAotLy8gZGV2aWNl
IGlmIHN1Y2ggYW4gZXZlbnQgaGFwcGVucy4KLS8vCi0vLyBBbHNvIHN1cHBvcnRzIGF1dG9tYXRp
YyBidWZmZXItc2l6ZSBhZGp1c3RtZW50IGJhc2VkIG9uIHVuZGVycnVuIGRldGVjdGlvbnMKLS8v
IHdoZXJlIHRoZSBpbnRlcm5hbCBBQXVkaW8gYnVmZmVyIGNhbiBiZSBpbmNyZWFzZWQgd2hlbiBu
ZWVkZWQuIEl0IHdpbGwKLS8vIHJlZHVjZSB0aGUgcmlzayBvZiB1bmRlcnJ1bnMgKH5nbGl0Y2hl
cykgYXQgdGhlIGV4cGVuc2Ugb2YgYW4gaW5jcmVhc2VkCi0vLyBsYXRlbmN5LgotY2xhc3MgQUF1
ZGlvUGxheWVyIGZpbmFsIDogcHVibGljIEFBdWRpb09ic2VydmVySW50ZXJmYWNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgewotIHB1Ymxp
YzoKLSAgZXhwbGljaXQgQUF1ZGlvUGxheWVyKEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcik7
Ci0gIH5BQXVkaW9QbGF5ZXIoKTsKLQotICBpbnQgSW5pdCgpOwotICBpbnQgVGVybWluYXRlKCk7
Ci0KLSAgaW50IEluaXRQbGF5b3V0KCk7Ci0gIGJvb2wgUGxheW91dElzSW5pdGlhbGl6ZWQoKSBj
b25zdDsKLQotICBpbnQgU3RhcnRQbGF5b3V0KCk7Ci0gIGludCBTdG9wUGxheW91dCgpOwotICBi
b29sIFBsYXlpbmcoKSBjb25zdDsKLQotICB2b2lkIEF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2
aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcik7Ci0KLSAgLy8gTm90IGltcGxlbWVudGVkIGluIEFBdWRp
by4KLSAgaW50IFNwZWFrZXJWb2x1bWVJc0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpOyAgLy8g
Tk9MSU5UCi0gIGludCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkgeyByZXR1cm4g
LTE7IH0KLSAgaW50IFNwZWFrZXJWb2x1bWUodWludDMyX3QmIHZvbHVtZSkgY29uc3QgeyByZXR1
cm4gLTE7IH0gICAgICAgIC8vIE5PTElOVAotICBpbnQgTWF4U3BlYWtlclZvbHVtZSh1aW50MzJf
dCYgbWF4Vm9sdW1lKSBjb25zdCB7IHJldHVybiAtMTsgfSAgLy8gTk9MSU5UCi0gIGludCBNaW5T
cGVha2VyVm9sdW1lKHVpbnQzMl90JiBtaW5Wb2x1bWUpIGNvbnN0IHsgcmV0dXJuIC0xOyB9ICAv
LyBOT0xJTlQKLQotIHByb3RlY3RlZDoKLSAgLy8gQUF1ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UgaW1w
bGVtZW50YXRpb24uCi0KLSAgLy8gRm9yIGFuIG91dHB1dCBzdHJlYW0sIHRoaXMgZnVuY3Rpb24g
c2hvdWxkIHJlbmRlciBhbmQgd3JpdGUgfG51bV9mcmFtZXN8Ci0gIC8vIG9mIGRhdGEgaW4gdGhl
IHN0cmVhbXMgY3VycmVudCBkYXRhIGZvcm1hdCB0byB0aGUgfGF1ZGlvX2RhdGF8IGJ1ZmZlci4K
LSAgLy8gQ2FsbGVkIG9uIGEgcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBBQXVkaW8uCi0gIGFh
dWRpb19kYXRhX2NhbGxiYWNrX3Jlc3VsdF90IE9uRGF0YUNhbGxiYWNrKHZvaWQqIGF1ZGlvX2Rh
dGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMy
X3QgbnVtX2ZyYW1lcykgb3ZlcnJpZGU7Ci0gIC8vIEFBdWRpbyBjYWxscyB0aGlzIGZ1bmN0aW9u
cyBpZiBhbnkgZXJyb3Igb2NjdXJzIG9uIGEgY2FsbGJhY2sgdGhyZWFkLgotICAvLyBDYWxsZWQg
b24gYSByZWFsLXRpbWUgdGhyZWFkIG93bmVkIGJ5IEFBdWRpby4KLSAgdm9pZCBPbkVycm9yQ2Fs
bGJhY2soYWF1ZGlvX3Jlc3VsdF90IGVycm9yKSBvdmVycmlkZTsKLQotICAvLyBydGM6Ok1lc3Nh
Z2VIYW5kbGVyIHVzZWQgZm9yIHJlc3RhcnQgbWVzc2FnZXMgZnJvbSB0aGUgZXJyb3ItY2FsbGJh
Y2sKLSAgLy8gdGhyZWFkIHRvIHRoZSBtYWluIChjcmVhdGluZykgdGhyZWFkLgotICB2b2lkIE9u
TWVzc2FnZShydGM6Ok1lc3NhZ2UqIG1zZykgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICAvLyBD
bG9zZXMgdGhlIGV4aXN0aW5nIHN0cmVhbSBhbmQgc3RhcnRzIGEgbmV3IHN0cmVhbS4KLSAgdm9p
ZCBIYW5kbGVTdHJlYW1EaXNjb25uZWN0ZWQoKTsKLQotICAvLyBFbnN1cmVzIHRoYXQgbWV0aG9k
cyBhcmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgdGhyZWFkIGFzIHRoaXMgb2JqZWN0IGlzCi0gIC8v
IGNyZWF0ZWQgb24uCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciBtYWluX3RocmVhZF9jaGVja2VyXzsK
LQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8gQUF1ZGlvUGxheWVyOjpP
bkRhdGFDYWxsYmFjayBmcm9tIGEKLSAgLy8gcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBBQXVk
aW8uIERldGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcwotICAvLyBvYmplY3QuCi0g
IHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl9hYXVkaW9fOwotCi0gIC8vIFRoZSB0
aHJlYWQgb24gd2hpY2ggdGhpcyBvYmplY3QgaXMgY3JlYXRlZCBvbi4KLSAgcnRjOjpUaHJlYWQq
IG1haW5fdGhyZWFkXzsKLQotICAvLyBXcmFwcyBhbGwgQUF1ZGlvIHJlc291cmNlcy4gQ29udGFp
bnMgYW4gb3V0cHV0IHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdAotICAvLyBvdXRwdXQgYXVkaW8g
ZGV2aWNlLiBDYW4gYmUgYWNjZXNzZWQgb24gYm90aCB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZQot
ICAvLyByZWFsLXRpbWUgdGhyZWFkIG93bmVkIGJ5IEFBdWRpby4gU2VlIHNlcGFyYXRlIEFBdWRp
byBkb2N1bWVudGF0aW9uIGFib3V0Ci0gIC8vIHRocmVhZCBzYWZldHkuCi0gIEFBdWRpb1dyYXBw
ZXIgYWF1ZGlvXzsKLQotICAvLyBGaW5lQXVkaW9CdWZmZXIgdGFrZXMgYW4gQXVkaW9EZXZpY2VC
dWZmZXIgd2hpY2ggZGVsaXZlcnMgYXVkaW8gZGF0YQotICAvLyBpbiBjaHVua3Mgb2YgMTBtcy4g
SXQgdGhlbiBhbGxvd3MgZm9yIHRoaXMgZGF0YSB0byBiZSBwdWxsZWQgaW4KLSAgLy8gYSBmaW5l
ciBvciBjb2Fyc2VyIGdyYW51bGFyaXR5LiBJLmUuIGludGVyYWN0aW5nIHdpdGggdGhpcyBjbGFz
cyBpbnN0ZWFkCi0gIC8vIG9mIGRpcmVjdGx5IHdpdGggdGhlIEF1ZGlvRGV2aWNlQnVmZmVyIG9u
ZSBjYW4gYXNrIGZvciBhbnkgbnVtYmVyIG9mCi0gIC8vIGF1ZGlvIGRhdGEgc2FtcGxlcy4KLSAg
Ly8gRXhhbXBsZTogbmF0aXZlIGJ1ZmZlciBzaXplIGNhbiBiZSAxOTIgYXVkaW8gZnJhbWVzIGF0
IDQ4a0h6IHNhbXBsZSByYXRlLgotICAvLyBXZWJSVEMgd2lsbCBwcm92aWRlIDQ4MCBhdWRpbyBm
cmFtZXMgcGVyIDEwbXMgYnV0IEFBdWRpbyBhc2tzIGZvciAxOTIKLSAgLy8gaW4gZWFjaCBjYWxs
YmFjayAob25jZSBldmVyeSA0dGggbXMpLiBUaGlzIGNsYXNzIGNhbiB0aGVuIGFzayBmb3IgMTky
IGFuZAotICAvLyB0aGUgRmluZUF1ZGlvQnVmZmVyIHdpbGwgYXNrIFdlYlJUQyBmb3IgbmV3IGRh
dGEgYXBwcm94aW1hdGVseSBvbmx5IGV2ZXJ5Ci0gIC8vIHNlY29uZCBjYWxsYmFjayBhbmQgYWxz
byBjYWNoZSBub24tdXRpbGl6ZWQgYXVkaW8uCi0gIHN0ZDo6dW5pcXVlX3B0cjxGaW5lQXVkaW9C
dWZmZXI+IGZpbmVfYXVkaW9fYnVmZmVyXzsKLQotICAvLyBDb3VudHMgbnVtYmVyIG9mIGRldGVj
dGVkIHVuZGVycnVuIGV2ZW50cyByZXBvcnRlZCBieSBBQXVkaW8uCi0gIGludDMyX3QgdW5kZXJy
dW5fY291bnRfID0gMDsKLQotICAvLyBUcnVlIG9ubHkgZm9yIHRoZSBmaXJzdCBkYXRhIGNhbGxi
YWNrIGluIGVhY2ggYXVkaW8gc2Vzc2lvbi4KLSAgYm9vbCBmaXJzdF9kYXRhX2NhbGxiYWNrXyA9
IHRydWU7Ci0KLSAgLy8gUmF3IHBvaW50ZXIgaGFuZGxlIHByb3ZpZGVkIHRvIHVzIGluIEF0dGFj
aEF1ZGlvQnVmZmVyKCkuIE93bmVkIGJ5IHRoZQotICAvLyBBdWRpb0RldmljZU1vZHVsZUltcGwg
Y2xhc3MgYW5kIHNldCBieSBBdWRpb0RldmljZU1vZHVsZTo6Q3JlYXRlKCkuCi0gIEF1ZGlvRGV2
aWNlQnVmZmVyKiBhdWRpb19kZXZpY2VfYnVmZmVyXyBSVENfR1VBUkRFRF9CWShtYWluX3RocmVh
ZF9jaGVja2VyXykgPQotICAgICAgbnVsbHB0cjsKLQotICBib29sIGluaXRpYWxpemVkXyBSVENf
R1VBUkRFRF9CWShtYWluX3RocmVhZF9jaGVja2VyXykgPSBmYWxzZTsKLSAgYm9vbCBwbGF5aW5n
XyBSVENfR1VBUkRFRF9CWShtYWluX3RocmVhZF9jaGVja2VyXykgPSBmYWxzZTsKLQotICAvLyBF
c3RpbWF0ZWQgbGF0ZW5jeSBiZXR3ZWVuIHdyaXRpbmcgYW4gYXVkaW8gZnJhbWUgdG8gdGhlIG91
dHB1dCBzdHJlYW0gYW5kCi0gIC8vIHRoZSB0aW1lIHRoYXQgc2FtZSBmcmFtZSBpcyBwbGF5ZWQg
b3V0IG9uIHRoZSBvdXRwdXQgYXVkaW8gZGV2aWNlLgotICBkb3VibGUgbGF0ZW5jeV9taWxsaXNf
IFJUQ19HVUFSREVEX0JZKHRocmVhZF9jaGVja2VyX2FhdWRpb18pID0gMDsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBNT0RVTEVTX0FVRElPX0RFVklDRV9BTkRS
T0lEX0FBVURJT19QTEFZRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYWF1ZGlvX3Jl
Y29yZGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hYXVkaW9fcmVjb3JkZXIuY2MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNhMjliYjgwZmJkOTg0NTQ0MTk0ZDU3YTg0ZWEwNzNjNmQ2Zjcw
YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hYXVkaW9fcmVjb3JkZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2FhdWRpb19yZWNvcmRlci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5j
bHVkZSAiYXBpL2FycmF5X3ZpZXcuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9m
aW5lX2F1ZGlvX2J1ZmZlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotI2luY2x1
ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1lX3V0aWxzLmgi
Ci0jaW5jbHVkZSAic3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvc2xlZXAuaCIKLQotbmFtZXNwYWNl
IHdlYnJ0YyB7Ci0KLWVudW0gQXVkaW9EZXZpY2VNZXNzYWdlVHlwZSA6IHVpbnQzMl90IHsKLSAg
a01lc3NhZ2VJbnB1dFN0cmVhbURpc2Nvbm5lY3RlZCwKLX07Ci0KLUFBdWRpb1JlY29yZGVyOjpB
QXVkaW9SZWNvcmRlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBtYWluX3Ro
cmVhZF8ocnRjOjpUaHJlYWQ6OkN1cnJlbnQoKSksCi0gICAgICBhYXVkaW9fKGF1ZGlvX21hbmFn
ZXIsIEFBVURJT19ESVJFQ1RJT05fSU5QVVQsIHRoaXMpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAi
Y3RvciI7Ci0gIHRocmVhZF9jaGVja2VyX2FhdWRpb18uRGV0YWNoKCk7Ci19Ci0KLUFBdWRpb1Jl
Y29yZGVyOjp+QUF1ZGlvUmVjb3JkZXIoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgImR0b3IiOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFRlcm1pbmF0ZSgp
OwotICBSVENfTE9HKElORk8pIDw8ICJkZXRlY3RlZCBvd2VyZmxvd3M6ICIgPDwgb3ZlcmZsb3df
Y291bnRfOwotfQotCi1pbnQgQUF1ZGlvUmVjb3JkZXI6OkluaXQoKSB7Ci0gIFJUQ19MT0coSU5G
TykgPDwgIkluaXQiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7
Ci0gIGlmIChhYXVkaW9fLmF1ZGlvX3BhcmFtZXRlcnMoKS5jaGFubmVscygpID09IDIpIHsKLSAg
ICBSVENfRExPRyhMU19XQVJOSU5HKSA8PCAiU3RlcmVvIG1vZGUgaXMgZW5hYmxlZCI7Ci0gIH0K
LSAgcmV0dXJuIDA7Ci19Ci0KLWludCBBQXVkaW9SZWNvcmRlcjo6VGVybWluYXRlKCkgewotICBS
VENfTE9HKElORk8pIDw8ICJUZXJtaW5hdGUiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
Xy5Jc0N1cnJlbnQoKSk7Ci0gIFN0b3BSZWNvcmRpbmcoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBBQXVkaW9SZWNvcmRlcjo6SW5pdFJlY29yZGluZygpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAi
SW5pdFJlY29yZGluZyI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkaW5n
Xyk7Ci0gIGlmICghYWF1ZGlvXy5Jbml0KCkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaW5p
dGlhbGl6ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBBQXVkaW9SZWNvcmRlcjo6
U3RhcnRSZWNvcmRpbmcoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlN0YXJ0UmVjb3JkaW5nIjsK
LSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENfRENIRUNL
KGluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGluZ18pOwotICBpZiAoZmluZV9h
dWRpb19idWZmZXJfKSB7Ci0gICAgZmluZV9hdWRpb19idWZmZXJfLT5SZXNldFBsYXlvdXQoKTsK
LSAgfQotICBpZiAoIWFhdWRpb18uU3RhcnQoKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBv
dmVyZmxvd19jb3VudF8gPSBhYXVkaW9fLnhydW5fY291bnQoKTsKLSAgZmlyc3RfZGF0YV9jYWxs
YmFja18gPSB0cnVlOwotICByZWNvcmRpbmdfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBBQXVkaW9SZWNvcmRlcjo6U3RvcFJlY29yZGluZygpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAi
U3RvcFJlY29yZGluZyI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgaWYgKCFpbml0aWFsaXplZF8gfHwgIXJlY29yZGluZ18pIHsKLSAgICByZXR1cm4gMDsK
LSAgfQotICBpZiAoIWFhdWRpb18uU3RvcCgpKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIHRo
cmVhZF9jaGVja2VyX2FhdWRpb18uRGV0YWNoKCk7Ci0gIGluaXRpYWxpemVkXyA9IGZhbHNlOwot
ICByZWNvcmRpbmdfID0gZmFsc2U7Ci0gIHJldHVybiAwOwotfQotCi12b2lkIEFBdWRpb1JlY29y
ZGVyOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIpIHsK
LSAgUlRDX0xPRyhJTkZPKSA8PCAiQXR0YWNoQXVkaW9CdWZmZXIiOwotICBSVENfRENIRUNLKHRo
cmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfID0gYXVk
aW9CdWZmZXI7Ci0gIGNvbnN0IEF1ZGlvUGFyYW1ldGVycyBhdWRpb19wYXJhbWV0ZXJzID0gYWF1
ZGlvXy5hdWRpb19wYXJhbWV0ZXJzKCk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRSZWNv
cmRpbmdTYW1wbGVSYXRlKGF1ZGlvX3BhcmFtZXRlcnMuc2FtcGxlX3JhdGUoKSk7Ci0gIGF1ZGlv
X2RldmljZV9idWZmZXJfLT5TZXRSZWNvcmRpbmdDaGFubmVscyhhdWRpb19wYXJhbWV0ZXJzLmNo
YW5uZWxzKCkpOwotICBSVENfQ0hFQ0soYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICAvLyBDcmVh
dGUgYSBtb2RpZmllZCBhdWRpbyBidWZmZXIgY2xhc3Mgd2hpY2ggYWxsb3dzIHVzIHRvIGRlbGl2
ZXIgYW55IG51bWJlcgotICAvLyBvZiBzYW1wbGVzIChhbmQgbm90IG9ubHkgbXVsdGlwbGVzIG9m
IDEwbXMgd2hpY2ggV2ViUlRDIHVzZXMpIHRvIG1hdGNoIHRoZQotICAvLyBuYXRpdmUgQUF1ZGlv
IGJ1ZmZlciBzaXplLgotICBmaW5lX2F1ZGlvX2J1ZmZlcl8gPSBzdGQ6Om1ha2VfdW5pcXVlPEZp
bmVBdWRpb0J1ZmZlcj4oYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotfQotCi1pbnQgQUF1ZGlvUmVj
b3JkZXI6OkVuYWJsZUJ1aWx0SW5BRUMoYm9vbCBlbmFibGUpIHsKLSAgUlRDX0xPRyhJTkZPKSA8
PCAiRW5hYmxlQnVpbHRJbkFFQzogIiA8PCBlbmFibGU7Ci0gIFJUQ19MT0coTFNfRVJST1IpIDw8
ICJOb3QgaW1wbGVtZW50ZWQiOwotICByZXR1cm4gLTE7Ci19Ci0KLWludCBBQXVkaW9SZWNvcmRl
cjo6RW5hYmxlQnVpbHRJbkFHQyhib29sIGVuYWJsZSkgewotICBSVENfTE9HKElORk8pIDw8ICJF
bmFibGVCdWlsdEluQUdDOiAiIDw8IGVuYWJsZTsKLSAgUlRDX0xPRyhMU19FUlJPUikgPDwgIk5v
dCBpbXBsZW1lbnRlZCI7Ci0gIHJldHVybiAtMTsKLX0KLQotaW50IEFBdWRpb1JlY29yZGVyOjpF
bmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiRW5hYmxl
QnVpbHRJbk5TOiAiIDw8IGVuYWJsZTsKLSAgUlRDX0xPRyhMU19FUlJPUikgPDwgIk5vdCBpbXBs
ZW1lbnRlZCI7Ci0gIHJldHVybiAtMTsKLX0KLQotdm9pZCBBQXVkaW9SZWNvcmRlcjo6T25FcnJv
ckNhbGxiYWNrKGFhdWRpb19yZXN1bHRfdCBlcnJvcikgewotICBSVENfTE9HKExTX0VSUk9SKSA8
PCAiT25FcnJvckNhbGxiYWNrOiAiIDw8IEFBdWRpb19jb252ZXJ0UmVzdWx0VG9UZXh0KGVycm9y
KTsKLSAgLy8gUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl9hYXVkaW9fLklzQ3VycmVudCgpKTsK
LSAgaWYgKGFhdWRpb18uc3RyZWFtX3N0YXRlKCkgPT0gQUFVRElPX1NUUkVBTV9TVEFURV9ESVND
T05ORUNURUQpIHsKLSAgICAvLyBUaGUgc3RyZWFtIGlzIGRpc2Nvbm5lY3RlZCBhbmQgYW55IGF0
dGVtcHQgdG8gdXNlIGl0IHdpbGwgcmV0dXJuCi0gICAgLy8gQUFVRElPX0VSUk9SX0RJU0NPTk5F
Q1RFRC4uCi0gICAgUlRDX0xPRyhXQVJOSU5HKSA8PCAiSW5wdXQgc3RyZWFtIGRpc2Nvbm5lY3Rl
ZCA9PiByZXN0YXJ0IGlzIHJlcXVpcmVkIjsKLSAgICAvLyBBQXVkaW8gZG9jdW1lbnRhdGlvbiBz
dGF0ZXM6ICJZb3Ugc2hvdWxkIG5vdCBjbG9zZSBvciByZW9wZW4gdGhlIHN0cmVhbQotICAgIC8v
IGZyb20gdGhlIGNhbGxiYWNrLCB1c2UgYW5vdGhlciB0aHJlYWQgaW5zdGVhZCIuIEEgbWVzc2Fn
ZSBpcyB0aGVyZWZvcmUKLSAgICAvLyBzZW50IHRvIHRoZSBtYWluIHRocmVhZCB0byBkbyB0aGUg
cmVzdGFydCBvcGVyYXRpb24uCi0gICAgUlRDX0RDSEVDSyhtYWluX3RocmVhZF8pOwotICAgIG1h
aW5fdGhyZWFkXy0+UG9zdChSVENfRlJPTV9IRVJFLCB0aGlzLCBrTWVzc2FnZUlucHV0U3RyZWFt
RGlzY29ubmVjdGVkKTsKLSAgfQotfQotCi0vLyBSZWFkIGFuZCBwcm9jZXNzIHxudW1fZnJhbWVz
fCBvZiBkYXRhIGZyb20gdGhlIHxhdWRpb19kYXRhfCBidWZmZXIuCi0vLyBUT0RPKGhlbnJpa2Ep
OiBwb3NzaWJseSBhZGQgdHJhY2UgaGVyZSB0byBiZSBpbmNsdWRlZCBpbiBzeXN0cmFjZS4KLS8v
IFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vcHJvZmlsZS9zeXN0cmFj
ZS1jb21tYW5kbGluZS5odG1sLgotYWF1ZGlvX2RhdGFfY2FsbGJhY2tfcmVzdWx0X3QgQUF1ZGlv
UmVjb3JkZXI6Ok9uRGF0YUNhbGxiYWNrKAotICAgIHZvaWQqIGF1ZGlvX2RhdGEsCi0gICAgaW50
MzJfdCBudW1fZnJhbWVzKSB7Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGZpZ3VyZSBvdXQgd2h5IHdl
IHNvbWV0aW1lcyBoaXQgdGhpcyBvbmUuCi0gIC8vIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJf
YWF1ZGlvXy5Jc0N1cnJlbnQoKSk7Ci0gIC8vIFJUQ19MT0coSU5GTykgPDwgIk9uRGF0YUNhbGxi
YWNrOiAiIDw8IG51bV9mcmFtZXM7Ci0gIC8vIERyYWluIHRoZSBpbnB1dCBidWZmZXIgYXQgZmly
c3QgY2FsbGJhY2sgdG8gZW5zdXJlIHRoYXQgaXQgZG9lcyBub3QKLSAgLy8gY29udGFpbiBhbnkg
b2xkIGRhdGEuIFdpbGwgYWxzbyBlbnN1cmUgdGhhdCB0aGUgbG93ZXN0IHBvc3NpYmxlIGxhdGVu
Y3kKLSAgLy8gaXMgb2J0YWluZWQuCi0gIGlmIChmaXJzdF9kYXRhX2NhbGxiYWNrXykgewotICAg
IFJUQ19MT0coSU5GTykgPDwgIi0tLSBGaXJzdCBpbnB1dCBkYXRhIGNhbGxiYWNrOiAiCi0gICAg
ICAgICAgICAgICAgICAgICAiZGV2aWNlIGlkPSIKLSAgICAgICAgICAgICAgICAgIDw8IGFhdWRp
b18uZGV2aWNlX2lkKCk7Ci0gICAgYWF1ZGlvXy5DbGVhcklucHV0U3RyZWFtKGF1ZGlvX2RhdGEs
IG51bV9mcmFtZXMpOwotICAgIGZpcnN0X2RhdGFfY2FsbGJhY2tfID0gZmFsc2U7Ci0gIH0KLSAg
Ly8gQ2hlY2sgaWYgdGhlIG92ZXJmbG93IGNvdW50ZXIgaGFzIGluY3JlYXNlZCBhbmQgaWYgc28g
bG9nIGEgd2FybmluZy4KLSAgLy8gVE9ETyhoZW5yaWthKTogcG9zc2libGUgYWRkIFVNQSBzdGF0
IG9yIGNhcGFjaXR5IGV4dGVuc2lvbi4KLSAgY29uc3QgaW50MzJfdCBvdmVyZmxvd19jb3VudCA9
IGFhdWRpb18ueHJ1bl9jb3VudCgpOwotICBpZiAob3ZlcmZsb3dfY291bnQgPiBvdmVyZmxvd19j
b3VudF8pIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiT3ZlcmZsb3cgZGV0ZWN0ZWQ6ICIg
PDwgb3ZlcmZsb3dfY291bnQ7Ci0gICAgb3ZlcmZsb3dfY291bnRfID0gb3ZlcmZsb3dfY291bnQ7
Ci0gIH0KLSAgLy8gRXN0aW1hdGVkIHRpbWUgYmV0d2VlbiBhbiBhdWRpbyBmcmFtZSB3YXMgcmVj
b3JkZWQgYnkgdGhlIGlucHV0IGRldmljZSBhbmQKLSAgLy8gaXQgY2FuIHJlYWQgb24gdGhlIGlu
cHV0IHN0cmVhbS4KLSAgbGF0ZW5jeV9taWxsaXNfID0gYWF1ZGlvXy5Fc3RpbWF0ZUxhdGVuY3lN
aWxsaXMoKTsKLSAgLy8gVE9ETyhoZW5yaWthKTogdXNlIGZvciBkZXZlbG9wbWVudCBvbmx5Lgot
ICBpZiAoYWF1ZGlvXy5mcmFtZXNfcmVhZCgpICUgKDEwMDAgKiBhYXVkaW9fLmZyYW1lc19wZXJf
YnVyc3QoKSkgPT0gMCkgewotICAgIFJUQ19ETE9HKElORk8pIDw8ICJpbnB1dCBsYXRlbmN5OiAi
IDw8IGxhdGVuY3lfbWlsbGlzXwotICAgICAgICAgICAgICAgICAgIDw8ICIsIG51bV9mcmFtZXM6
ICIgPDwgbnVtX2ZyYW1lczsKLSAgfQotICAvLyBDb3B5IHJlY29yZGVkIGF1ZGlvIGluIHxhdWRp
b19kYXRhfCB0byB0aGUgV2ViUlRDIHNpbmsgdXNpbmcgdGhlCi0gIC8vIEZpbmVBdWRpb0J1ZmZl
ciBvYmplY3QuCi0gIGZpbmVfYXVkaW9fYnVmZmVyXy0+RGVsaXZlclJlY29yZGVkRGF0YSgKLSAg
ICAgIHJ0Yzo6TWFrZUFycmF5VmlldyhzdGF0aWNfY2FzdDxjb25zdCBpbnQxNl90Kj4oYXVkaW9f
ZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWF1ZGlvXy5zYW1wbGVzX3Blcl9mcmFt
ZSgpICogbnVtX2ZyYW1lcyksCi0gICAgICBzdGF0aWNfY2FzdDxpbnQ+KGxhdGVuY3lfbWlsbGlz
XyArIDAuNSkpOwotCi0gIHJldHVybiBBQVVESU9fQ0FMTEJBQ0tfUkVTVUxUX0NPTlRJTlVFOwot
fQotCi12b2lkIEFBdWRpb1JlY29yZGVyOjpPbk1lc3NhZ2UocnRjOjpNZXNzYWdlKiBtc2cpIHsK
LSAgUlRDX0RDSEVDS19SVU5fT04oJnRocmVhZF9jaGVja2VyXyk7Ci0gIHN3aXRjaCAobXNnLT5t
ZXNzYWdlX2lkKSB7Ci0gICAgY2FzZSBrTWVzc2FnZUlucHV0U3RyZWFtRGlzY29ubmVjdGVkOgot
ICAgICAgSGFuZGxlU3RyZWFtRGlzY29ubmVjdGVkKCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkludmFsaWQgbWVzc2FnZSBpZDogIiA8
PCBtc2ctPm1lc3NhZ2VfaWQ7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12b2lkIEFBdWRpb1Jl
Y29yZGVyOjpIYW5kbGVTdHJlYW1EaXNjb25uZWN0ZWQoKSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09O
KCZ0aHJlYWRfY2hlY2tlcl8pOwotICBSVENfTE9HKElORk8pIDw8ICJIYW5kbGVTdHJlYW1EaXNj
b25uZWN0ZWQiOwotICBpZiAoIWluaXRpYWxpemVkXyB8fCAhcmVjb3JkaW5nXykgewotICAgIHJl
dHVybjsKLSAgfQotICAvLyBQZXJmb3JtIGEgcmVzdGFydCBieSBmaXJzdCBjbG9zaW5nIHRoZSBk
aXNjb25uZWN0ZWQgc3RyZWFtIGFuZCB0aGVuIHN0YXJ0Ci0gIC8vIGEgbmV3IHN0cmVhbTsgdGhp
cyB0aW1lIHVzaW5nIHRoZSBuZXcgKHByZWZlcnJlZCkgYXVkaW8gaW5wdXQgZGV2aWNlLgotICAv
LyBUT0RPKGhlbnJpa2EpOiByZXNvbHZlIGlzc3VlIHdoZXJlIGEgb25lIHJlc3RhcnQgYXR0ZW1w
dCBsZWFkcyB0byBhIGxvbmcKLSAgLy8gc2VxdWVuY2Ugb2YgbmV3IGNhbGxzIHRvIE9uRXJyb3JD
YWxsYmFjaygpLgotICAvLyBTZWUgYi83MzE0ODk3NiBmb3IgZGV0YWlscy4KLSAgU3RvcFJlY29y
ZGluZygpOwotICBJbml0UmVjb3JkaW5nKCk7Ci0gIFN0YXJ0UmVjb3JkaW5nKCk7Ci19Ci19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2FhdWRpb19yZWNv
cmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hYXVkaW9fcmVjb3JkZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDk0MjdlMmFlY2Y2ZDAwYmRhOGMwY2RiYTBlOThhODU2NjY0MzliMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2FhdWRpb19yZWNvcmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJP
SURfQUFVRElPX1JFQ09SREVSX0hfCi0jZGVmaW5lIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJP
SURfQUFVRElPX1JFQ09SREVSX0hfCi0KLSNpbmNsdWRlIDxhYXVkaW8vQUF1ZGlvLmg+Ci0KLSNp
bmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2FhdWRpb193cmFwcGVyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVk
ZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL21lc3NhZ2VfaGFu
ZGxlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNl
L3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1jbGFzcyBBdWRpb0Rl
dmljZUJ1ZmZlcjsKLWNsYXNzIEZpbmVBdWRpb0J1ZmZlcjsKLWNsYXNzIEF1ZGlvTWFuYWdlcjsK
LQotLy8gSW1wbGVtZW50cyBsb3ctbGF0ZW5jeSAxNi1iaXQgbW9ubyBQQ00gYXVkaW8gaW5wdXQg
c3VwcG9ydCBmb3IgQW5kcm9pZAotLy8gdXNpbmcgdGhlIEMgYmFzZWQgQUF1ZGlvIEFQSS4KLS8v
Ci0vLyBBbiBpbnN0YW5jZSBtdXN0IGJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBvbmUgYW5k
IHRoZSBzYW1lIHRocmVhZC4KLS8vIEFsbCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUgY2Fs
bGVkIG9uIHRoZSBzYW1lIHRocmVhZC4gQSB0aHJlYWQgY2hlY2tlcgotLy8gd2lsbCBSVENfRENI
RUNLIGlmIGFueSBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLiBBdWRpbyBi
dWZmZXJzCi0vLyBhcmUgZGVsaXZlcmVkIG9uIGEgZGVkaWNhdGVkIGhpZ2gtcHJpb3JpdHkgdGhy
ZWFkIG93bmVkIGJ5IEFBdWRpby4KLS8vCi0vLyBUaGUgZXhpc3RpbmcgZGVzaWduIGZvcmNlcyB0
aGUgdXNlciB0byBjYWxsIEluaXRSZWNvcmRpbmcoKSBhZnRlcgotLy8gU3RvcFJlY29yZGluZygp
IHRvIGJlIGFibGUgdG8gY2FsbCBTdGFydFJlY29yZGluZygpIGFnYWluLiBUaGlzIGlzIGluIGxp
bmUKLS8vIHdpdGggaG93IHRoZSBKYXZhLSBiYXNlZCBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4KLS8v
Ci0vLyBUT0RPKGhlbnJpa2EpOiBhZGQgY29tbWVudHMgYWJvdXQgZGV2aWNlIGNoYW5nZXMgYW5k
IGFkYXB0aXZlIGJ1ZmZlcgotLy8gbWFuYWdlbWVudC4KLWNsYXNzIEFBdWRpb1JlY29yZGVyIDog
cHVibGljIEFBdWRpb09ic2VydmVySW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgcnRjOjpNZXNzYWdlSGFuZGxlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBBQXVkaW9S
ZWNvcmRlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpOwotICB+QUF1ZGlvUmVjb3JkZXIo
KTsKLQotICBpbnQgSW5pdCgpOwotICBpbnQgVGVybWluYXRlKCk7Ci0KLSAgaW50IEluaXRSZWNv
cmRpbmcoKTsKLSAgYm9vbCBSZWNvcmRpbmdJc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4g
aW5pdGlhbGl6ZWRfOyB9Ci0KLSAgaW50IFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGludCBTdG9wUmVj
b3JkaW5nKCk7Ci0gIGJvb2wgUmVjb3JkaW5nKCkgY29uc3QgeyByZXR1cm4gcmVjb3JkaW5nXzsg
fQotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVm
ZmVyKTsKLQotICBkb3VibGUgbGF0ZW5jeV9taWxsaXMoKSBjb25zdCB7IHJldHVybiBsYXRlbmN5
X21pbGxpc187IH0KLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCB1c2luZyBBQXVk
aW8gQVBJcyB3aGVuIGF2YWlsYWJsZS4KLSAgaW50IEVuYWJsZUJ1aWx0SW5BRUMoYm9vbCBlbmFi
bGUpOwotICBpbnQgRW5hYmxlQnVpbHRJbkFHQyhib29sIGVuYWJsZSk7Ci0gIGludCBFbmFibGVC
dWlsdEluTlMoYm9vbCBlbmFibGUpOwotCi0gcHJvdGVjdGVkOgotICAvLyBBQXVkaW9PYnNlcnZl
ckludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KLQotICAvLyBGb3IgYW4gaW5wdXQgc3RyZWFtLCB0
aGlzIGZ1bmN0aW9uIHNob3VsZCByZWFkIHxudW1fZnJhbWVzfCBvZiByZWNvcmRlZAotICAvLyBk
YXRhLCBpbiB0aGUgc3RyZWFtJ3MgY3VycmVudCBkYXRhIGZvcm1hdCwgZnJvbSB0aGUgfGF1ZGlv
X2RhdGF8IGJ1ZmZlci4KLSAgLy8gQ2FsbGVkIG9uIGEgcmVhbC10aW1lIHRocmVhZCBvd25lZCBi
eSBBQXVkaW8uCi0gIGFhdWRpb19kYXRhX2NhbGxiYWNrX3Jlc3VsdF90IE9uRGF0YUNhbGxiYWNr
KHZvaWQqIGF1ZGlvX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgbnVtX2ZyYW1lcykgb3ZlcnJpZGU7Ci0KLSAgLy8gQUF1ZGlvIGNh
bGxzIHRoaXMgZnVuY3Rpb24gaWYgYW55IGVycm9yIG9jY3VycyBvbiBhIGNhbGxiYWNrIHRocmVh
ZC4KLSAgLy8gQ2FsbGVkIG9uIGEgcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBBQXVkaW8uCi0g
IHZvaWQgT25FcnJvckNhbGxiYWNrKGFhdWRpb19yZXN1bHRfdCBlcnJvcikgb3ZlcnJpZGU7Ci0K
LSAgLy8gcnRjOjpNZXNzYWdlSGFuZGxlciB1c2VkIGZvciByZXN0YXJ0IG1lc3NhZ2VzLgotICB2
b2lkIE9uTWVzc2FnZShydGM6Ok1lc3NhZ2UqIG1zZykgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgot
ICAvLyBDbG9zZXMgdGhlIGV4aXN0aW5nIHN0cmVhbSBhbmQgc3RhcnRzIGEgbmV3IHN0cmVhbS4K
LSAgdm9pZCBIYW5kbGVTdHJlYW1EaXNjb25uZWN0ZWQoKTsKLQotICAvLyBFbnN1cmVzIHRoYXQg
bWV0aG9kcyBhcmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgdGhyZWFkIGFzIHRoaXMgb2JqZWN0IGlz
Ci0gIC8vIGNyZWF0ZWQgb24uCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87
Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiBmaXJzdCBjYWxsIHRvIEFBdWRpb1BsYXllcjo6
T25EYXRhQ2FsbGJhY2sgZnJvbSBhCi0gIC8vIHJlYWwtdGltZSB0aHJlYWQgb3duZWQgYnkgQUF1
ZGlvLiBEZXRhY2hlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMKLSAgLy8gb2JqZWN0Lgot
ICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfYWF1ZGlvXzsKLQotICAvLyBUaGUg
dGhyZWFkIG9uIHdoaWNoIHRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgb24uCi0gIHJ0Yzo6VGhyZWFk
KiBtYWluX3RocmVhZF87Ci0KLSAgLy8gV3JhcHMgYWxsIEFBdWRpbyByZXNvdXJjZXMuIENvbnRh
aW5zIGFuIGlucHV0IHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdAotICAvLyBpbnB1dCBhdWRpbyBk
ZXZpY2UuCi0gIEFBdWRpb1dyYXBwZXIgYWF1ZGlvXzsKLQotICAvLyBSYXcgcG9pbnRlciBoYW5k
bGUgcHJvdmlkZWQgdG8gdXMgaW4gQXR0YWNoQXVkaW9CdWZmZXIoKS4gT3duZWQgYnkgdGhlCi0g
IC8vIEF1ZGlvRGV2aWNlTW9kdWxlSW1wbCBjbGFzcyBhbmQgY2FsbGVkIGJ5IEF1ZGlvRGV2aWNl
TW9kdWxlOjpDcmVhdGUoKS4KLSAgQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2RldmljZV9idWZm
ZXJfID0gbnVsbHB0cjsKLQotICBib29sIGluaXRpYWxpemVkXyA9IGZhbHNlOwotICBib29sIHJl
Y29yZGluZ18gPSBmYWxzZTsKLQotICAvLyBDb25zdW1lcyBhdWRpbyBvZiBuYXRpdmUgYnVmZmVy
IHNpemUgYW5kIGZlZWRzIHRoZSBXZWJSVEMgbGF5ZXIgd2l0aCAxMG1zCi0gIC8vIGNodW5rcyBv
ZiBhdWRpby4KLSAgc3RkOjp1bmlxdWVfcHRyPEZpbmVBdWRpb0J1ZmZlcj4gZmluZV9hdWRpb19i
dWZmZXJfOwotCi0gIC8vIENvdW50cyBudW1iZXIgb2YgZGV0ZWN0ZWQgb3ZlcmZsb3cgZXZlbnRz
IHJlcG9ydGVkIGJ5IEFBdWRpby4KLSAgaW50MzJfdCBvdmVyZmxvd19jb3VudF8gPSAwOwotCi0g
IC8vIEVzdGltYXRlZCB0aW1lIGJldHdlZW4gYW4gYXVkaW8gZnJhbWUgd2FzIHJlY29yZGVkIGJ5
IHRoZSBpbnB1dCBkZXZpY2UgYW5kCi0gIC8vIGl0IGNhbiByZWFkIG9uIHRoZSBpbnB1dCBzdHJl
YW0uCi0gIGRvdWJsZSBsYXRlbmN5X21pbGxpc18gPSAwOwotCi0gIC8vIFRydWUgb25seSBmb3Ig
dGhlIGZpcnN0IGRhdGEgY2FsbGJhY2sgaW4gZWFjaCBhdWRpbyBzZXNzaW9uLgotICBib29sIGZp
cnN0X2RhdGFfY2FsbGJhY2tfID0gdHJ1ZTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMK
LQotI2VuZGlmICAvLyBNT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FBVURJT19SRUNPUkRF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hYXVkaW9fd3JhcHBlci5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvYWF1ZGlvX3dyYXBwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFiMTI3ODQzNmU0ZDA5YmVmMGY5OTFmYThjOTI5YWY4MjhiZDFjZDMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hYXVkaW9fd3Jh
cHBlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYWF1ZGlvX3dy
YXBwZXIuaCIKLQotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9f
bWFuYWdlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJydGNf
YmFzZS9zdHJpbmdzL3N0cmluZ19idWlsZGVyLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGltZV91
dGlscy5oIgotCi0jZGVmaW5lIExPR19PTl9FUlJPUihvcCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgYWF1ZGlvX3Jlc3VsdF90IHJlc3VsdCA9IChvcCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHJlc3VsdCAhPSBBQVVESU9fT0spIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBS
VENfTE9HKExTX0VSUk9SKSA8PCAjb3AgPDwgIjogIiA8PCBBQXVkaW9fY29udmVydFJlc3VsdFRv
VGV4dChyZXN1bHQpOyBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0K
LSNkZWZpbmUgUkVUVVJOX09OX0VSUk9SKG9wLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYXVk
aW9fcmVzdWx0X3QgcmVzdWx0ID0gKG9wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBpZiAocmVzdWx0ICE9IEFBVURJT19PSykgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFJUQ19MT0coTFNf
RVJST1IpIDw8ICNvcCA8PCAiOiAiIDw8IEFBdWRpb19jb252ZXJ0UmVzdWx0VG9UZXh0KHJlc3Vs
dCk7IFwKLSAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
fSB3aGlsZSAoMCkKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0
IGNoYXIqIERpcmVjdGlvblRvU3RyaW5nKGFhdWRpb19kaXJlY3Rpb25fdCBkaXJlY3Rpb24pIHsK
LSAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIEFBVURJT19ESVJFQ1RJT05fT1VUUFVU
OgotICAgICAgcmV0dXJuICJPVVRQVVQiOwotICAgIGNhc2UgQUFVRElPX0RJUkVDVElPTl9JTlBV
VDoKLSAgICAgIHJldHVybiAiSU5QVVQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gIlVO
S05PV04iOwotICB9Ci19Ci0KLWNvbnN0IGNoYXIqIFNoYXJpbmdNb2RlVG9TdHJpbmcoYWF1ZGlv
X3NoYXJpbmdfbW9kZV90IG1vZGUpIHsKLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBQVVE
SU9fU0hBUklOR19NT0RFX0VYQ0xVU0lWRToKLSAgICAgIHJldHVybiAiRVhDTFVTSVZFIjsKLSAg
ICBjYXNlIEFBVURJT19TSEFSSU5HX01PREVfU0hBUkVEOgotICAgICAgcmV0dXJuICJTSEFSRUQi
OwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gIlVOS05PV04iOwotICB9Ci19Ci0KLWNvbnN0
IGNoYXIqIFBlcmZvcm1hbmNlTW9kZVRvU3RyaW5nKGFhdWRpb19wZXJmb3JtYW5jZV9tb2RlX3Qg
bW9kZSkgewotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFBVURJT19QRVJGT1JNQU5DRV9N
T0RFX05PTkU6Ci0gICAgICByZXR1cm4gIk5PTkUiOwotICAgIGNhc2UgQUFVRElPX1BFUkZPUk1B
TkNFX01PREVfUE9XRVJfU0FWSU5HOgotICAgICAgcmV0dXJuICJQT1dFUl9TQVZJTkciOwotICAg
IGNhc2UgQUFVRElPX1BFUkZPUk1BTkNFX01PREVfTE9XX0xBVEVOQ1k6Ci0gICAgICByZXR1cm4g
IkxPV19MQVRFTkNZIjsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuICJVTktOT1dOIjsKLSAg
fQotfQotCi1jb25zdCBjaGFyKiBGb3JtYXRUb1N0cmluZyhpbnQzMl90IGlkKSB7Ci0gIHN3aXRj
aCAoaWQpIHsKLSAgICBjYXNlIEFBVURJT19GT1JNQVRfSU5WQUxJRDoKLSAgICAgIHJldHVybiAi
SU5WQUxJRCI7Ci0gICAgY2FzZSBBQVVESU9fRk9STUFUX1VOU1BFQ0lGSUVEOgotICAgICAgcmV0
dXJuICJVTlNQRUNJRklFRCI7Ci0gICAgY2FzZSBBQVVESU9fRk9STUFUX1BDTV9JMTY6Ci0gICAg
ICByZXR1cm4gIlBDTV9JMTYiOwotICAgIGNhc2UgQUFVRElPX0ZPUk1BVF9QQ01fRkxPQVQ6Ci0g
ICAgICByZXR1cm4gIkZMT0FUIjsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuICJVTktOT1dO
IjsKLSAgfQotfQotCi12b2lkIEVycm9yQ2FsbGJhY2soQUF1ZGlvU3RyZWFtKiBzdHJlYW0sCi0g
ICAgICAgICAgICAgICAgICAgdm9pZCogdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgIGFh
dWRpb19yZXN1bHRfdCBlcnJvcikgewotICBSVENfRENIRUNLKHVzZXJfZGF0YSk7Ci0gIEFBdWRp
b1dyYXBwZXIqIGFhdWRpb193cmFwcGVyID0gcmVpbnRlcnByZXRfY2FzdDxBQXVkaW9XcmFwcGVy
Kj4odXNlcl9kYXRhKTsKLSAgUlRDX0xPRyhXQVJOSU5HKSA8PCAiRXJyb3JDYWxsYmFjazogIgot
ICAgICAgICAgICAgICAgICAgIDw8IERpcmVjdGlvblRvU3RyaW5nKGFhdWRpb193cmFwcGVyLT5k
aXJlY3Rpb24oKSk7Ci0gIFJUQ19EQ0hFQ0soYWF1ZGlvX3dyYXBwZXItPm9ic2VydmVyKCkpOwot
ICBhYXVkaW9fd3JhcHBlci0+b2JzZXJ2ZXIoKS0+T25FcnJvckNhbGxiYWNrKGVycm9yKTsKLX0K
LQotYWF1ZGlvX2RhdGFfY2FsbGJhY2tfcmVzdWx0X3QgRGF0YUNhbGxiYWNrKEFBdWRpb1N0cmVh
bSogc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkKiBhdWRpb19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgbnVtX2ZyYW1lcykgewotICBSVENfRENIRUNLKHVzZXJfZGF0YSk7Ci0g
IFJUQ19EQ0hFQ0soYXVkaW9fZGF0YSk7Ci0gIEFBdWRpb1dyYXBwZXIqIGFhdWRpb193cmFwcGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxBQXVkaW9XcmFwcGVyKj4odXNlcl9kYXRhKTsKLSAgUlRDX0RD
SEVDSyhhYXVkaW9fd3JhcHBlci0+b2JzZXJ2ZXIoKSk7Ci0gIHJldHVybiBhYXVkaW9fd3JhcHBl
ci0+b2JzZXJ2ZXIoKS0+T25EYXRhQ2FsbGJhY2soYXVkaW9fZGF0YSwgbnVtX2ZyYW1lcyk7Ci19
Ci0KLS8vIFdyYXBzIHRoZSBzdHJlYW0gYnVpbGRlciBvYmplY3QgdG8gZW5zdXJlIHRoYXQgaXQg
aXMgcmVsZWFzZWQgcHJvcGVybHkgd2hlbgotLy8gdGhlIHN0cmVhbSBidWlsZGVyIGdvZXMgb3V0
IG9mIHNjb3BlLgotY2xhc3MgU2NvcGVkU3RyZWFtQnVpbGRlciB7Ci0gcHVibGljOgotICBTY29w
ZWRTdHJlYW1CdWlsZGVyKCkgewotICAgIExPR19PTl9FUlJPUihBQXVkaW9fY3JlYXRlU3RyZWFt
QnVpbGRlcigmYnVpbGRlcl8pKTsKLSAgICBSVENfRENIRUNLKGJ1aWxkZXJfKTsKLSAgfQotICB+
U2NvcGVkU3RyZWFtQnVpbGRlcigpIHsKLSAgICBpZiAoYnVpbGRlcl8pIHsKLSAgICAgIExPR19P
Tl9FUlJPUihBQXVkaW9TdHJlYW1CdWlsZGVyX2RlbGV0ZShidWlsZGVyXykpOwotICAgIH0KLSAg
fQotCi0gIEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIGJ1aWxkZXJf
OyB9Ci0KLSBwcml2YXRlOgotICBBQXVkaW9TdHJlYW1CdWlsZGVyKiBidWlsZGVyXyA9IG51bGxw
dHI7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotQUF1ZGlvV3JhcHBlcjo6QUF1ZGlvV3JhcHBl
cihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFhdWRpb19kaXJlY3Rpb25fdCBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFBdWRpb09ic2VydmVySW50ZXJmYWNlKiBvYnNlcnZlcikKLSAgICA6IGRpcmVjdGlv
bl8oZGlyZWN0aW9uKSwgb2JzZXJ2ZXJfKG9ic2VydmVyKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwg
ImN0b3IiOwotICBSVENfRENIRUNLKG9ic2VydmVyXyk7Ci0gIGRpcmVjdGlvbl8gPT0gQUFVRElP
X0RJUkVDVElPTl9PVVRQVVQKLSAgICAgID8gYXVkaW9fcGFyYW1ldGVyc18gPSBhdWRpb19tYW5h
Z2VyLT5HZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCkKLSAgICAgIDogYXVkaW9fcGFyYW1ldGVy
c18gPSBhdWRpb19tYW5hZ2VyLT5HZXRSZWNvcmRBdWRpb1BhcmFtZXRlcnMoKTsKLSAgYWF1ZGlv
X3RocmVhZF9jaGVja2VyXy5EZXRhY2goKTsKLSAgUlRDX0xPRyhJTkZPKSA8PCBhdWRpb19wYXJh
bWV0ZXJzXy5Ub1N0cmluZygpOwotfQotCi1BQXVkaW9XcmFwcGVyOjp+QUF1ZGlvV3JhcHBlcigp
IHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiZHRvciI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyghc3RyZWFtXyk7Ci19Ci0KLWJvb2wgQUF1
ZGlvV3JhcHBlcjo6SW5pdCgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiSW5pdCI7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgLy8gQ3JlYXRlcyBhIHN0cmVh
bSBidWlsZGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9wZW4gYW4gYXVkaW8gc3RyZWFtLgotICBT
Y29wZWRTdHJlYW1CdWlsZGVyIGJ1aWxkZXI7Ci0gIC8vIENvbmZpZ3VyZXMgdGhlIHN0cmVhbSBi
dWlsZGVyIHVzaW5nIGF1ZGlvIHBhcmFtZXRlcnMgZ2l2ZW4gYXQgY29uc3RydWN0aW9uLgotICBT
ZXRTdHJlYW1Db25maWd1cmF0aW9uKGJ1aWxkZXIuZ2V0KCkpOwotICAvLyBPcGVucyBhIHN0cmVh
bSBiYXNlZCBvbiBvcHRpb25zIGluIHRoZSBzdHJlYW0gYnVpbGRlci4KLSAgaWYgKCFPcGVuU3Ry
ZWFtKGJ1aWxkZXIuZ2V0KCkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8vIEVuc3Vy
ZXMgdGhhdCB0aGUgb3BlbmVkIHN0cmVhbSBjb3VsZCBhY3RpdmF0ZSB0aGUgcmVxdWVzdGVkIHNl
dHRpbmdzLgotICBpZiAoIVZlcmlmeVN0cmVhbUNvbmZpZ3VyYXRpb24oKSkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICAvLyBPcHRpbWl6ZXMgdGhlIGJ1ZmZlciBzY2hlbWUgZm9yIGxvd2Vz
dCBwb3NzaWJsZSBsYXRlbmN5IGFuZCBjcmVhdGVzCi0gIC8vIGFkZGl0aW9uYWwgYnVmZmVyIGxv
Z2ljIHRvIG1hdGNoIHRoZSAxMG1zIGJ1ZmZlciBzaXplIHVzZWQgaW4gV2ViUlRDLgotICBpZiAo
IU9wdGltaXplQnVmZmVycygpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIExvZ1N0cmVh
bVN0YXRlKCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFBdWRpb1dyYXBwZXI6OlN0YXJ0
KCkgewotICBSVENfTE9HKElORk8pIDw8ICJTdGFydCI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgLy8gVE9ETyhoZW5yaWthKTogdGhpcyBzdGF0ZSBjaGVj
ayBtaWdodCBub3QgYmUgbmVlZGVkLgotICBhYXVkaW9fc3RyZWFtX3N0YXRlX3QgY3VycmVudF9z
dGF0ZSA9IEFBdWRpb1N0cmVhbV9nZXRTdGF0ZShzdHJlYW1fKTsKLSAgaWYgKGN1cnJlbnRfc3Rh
dGUgIT0gQUFVRElPX1NUUkVBTV9TVEFURV9PUEVOKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikg
PDwgIkludmFsaWQgc3RhdGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBBQXVkaW9fY29u
dmVydFN0cmVhbVN0YXRlVG9UZXh0KGN1cnJlbnRfc3RhdGUpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICAvLyBBc3luY2hyb25vdXMgcmVxdWVzdCBmb3IgdGhlIHN0cmVhbSB0byBzdGFydC4K
LSAgUkVUVVJOX09OX0VSUk9SKEFBdWRpb1N0cmVhbV9yZXF1ZXN0U3RhcnQoc3RyZWFtXyksIGZh
bHNlKTsKLSAgTG9nU3RyZWFtU3RhdGUoKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQUF1
ZGlvV3JhcHBlcjo6U3RvcCgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiU3RvcDogIiA8PCBEaXJl
Y3Rpb25Ub1N0cmluZyhkaXJlY3Rpb24oKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJf
LklzQ3VycmVudCgpKTsKLSAgLy8gQXN5bmNocm9ub3VzIHJlcXVlc3QgZm9yIHRoZSBzdHJlYW0g
dG8gc3RvcC4KLSAgUkVUVVJOX09OX0VSUk9SKEFBdWRpb1N0cmVhbV9yZXF1ZXN0U3RvcChzdHJl
YW1fKSwgZmFsc2UpOwotICBDbG9zZVN0cmVhbSgpOwotICBhYXVkaW9fdGhyZWFkX2NoZWNrZXJf
LkRldGFjaCgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIEFBdWRpb1dyYXBwZXI6OkVz
dGltYXRlTGF0ZW5jeU1pbGxpcygpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsKLSAg
ZG91YmxlIGxhdGVuY3lfbWlsbGlzID0gMC4wOwotICBpZiAoZGlyZWN0aW9uKCkgPT0gQUFVRElP
X0RJUkVDVElPTl9JTlBVVCkgewotICAgIC8vIEZvciBpbnB1dCBzdHJlYW1zLiBCZXN0IGd1ZXNz
IHdlIGNhbiBkbyBpcyB0byB1c2UgdGhlIGN1cnJlbnQgYnVyc3Qgc2l6ZQotICAgIC8vIGFzIGRl
bGF5IGVzdGltYXRlLgotICAgIGxhdGVuY3lfbWlsbGlzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihm
cmFtZXNfcGVyX2J1cnN0KCkpIC8gc2FtcGxlX3JhdGUoKSAqCi0gICAgICAgICAgICAgICAgICAg
ICBydGM6OmtOdW1NaWxsaXNlY3NQZXJTZWM7Ci0gIH0gZWxzZSB7Ci0gICAgaW50NjRfdCBleGlz
dGluZ19mcmFtZV9pbmRleDsKLSAgICBpbnQ2NF90IGV4aXN0aW5nX2ZyYW1lX3ByZXNlbnRhdGlv
bl90aW1lOwotICAgIC8vIEdldCB0aGUgdGltZSBhdCB3aGljaCBhIHBhcnRpY3VsYXIgZnJhbWUg
d2FzIHByZXNlbnRlZCB0byBhdWRpbyBoYXJkd2FyZS4KLSAgICBhYXVkaW9fcmVzdWx0X3QgcmVz
dWx0ID0gQUF1ZGlvU3RyZWFtX2dldFRpbWVzdGFtcCgKLSAgICAgICAgc3RyZWFtXywgQ0xPQ0tf
TU9OT1RPTklDLCAmZXhpc3RpbmdfZnJhbWVfaW5kZXgsCi0gICAgICAgICZleGlzdGluZ19mcmFt
ZV9wcmVzZW50YXRpb25fdGltZSk7Ci0gICAgLy8gUmVzdWx0cyBhcmUgb25seSB2YWxpZCB3aGVu
IHRoZSBzdHJlYW0gaXMgaW4gQUFVRElPX1NUUkVBTV9TVEFURV9TVEFSVEVELgotICAgIGlmIChy
ZXN1bHQgPT0gQUFVRElPX09LKSB7Ci0gICAgICAvLyBHZXQgd3JpdGUgaW5kZXggZm9yIG5leHQg
YXVkaW8gZnJhbWUuCi0gICAgICBpbnQ2NF90IG5leHRfZnJhbWVfaW5kZXggPSBmcmFtZXNfd3Jp
dHRlbigpOwotICAgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyBiZXR3ZWVuIG5leHQgZnJhbWUgYW5k
IHRoZSBleGlzdGluZyBmcmFtZS4KLSAgICAgIGludDY0X3QgZnJhbWVfaW5kZXhfZGVsdGEgPSBu
ZXh0X2ZyYW1lX2luZGV4IC0gZXhpc3RpbmdfZnJhbWVfaW5kZXg7Ci0gICAgICAvLyBBc3N1bWUg
dGhlIG5leHQgZnJhbWUgd2lsbCBiZSB3cml0dGVuIG5vdy4KLSAgICAgIGludDY0X3QgbmV4dF9m
cmFtZV93cml0ZV90aW1lID0gcnRjOjpUaW1lTmFub3MoKTsKLSAgICAgIC8vIENhbGN1bGF0ZSB0
aW1lIHdoZW4gbmV4dCBmcmFtZSB3aWxsIGJlIHByZXNlbnRlZCB0byB0aGUgaGFyZHdhcmUgdGFr
aW5nCi0gICAgICAvLyBzYW1wbGUgcmF0ZSBpbnRvIGFjY291bnQuCi0gICAgICBpbnQ2NF90IGZy
YW1lX3RpbWVfZGVsdGEgPQotICAgICAgICAgIChmcmFtZV9pbmRleF9kZWx0YSAqIHJ0Yzo6a051
bU5hbm9zZWNzUGVyU2VjKSAvIHNhbXBsZV9yYXRlKCk7Ci0gICAgICBpbnQ2NF90IG5leHRfZnJh
bWVfcHJlc2VudGF0aW9uX3RpbWUgPQotICAgICAgICAgIGV4aXN0aW5nX2ZyYW1lX3ByZXNlbnRh
dGlvbl90aW1lICsgZnJhbWVfdGltZV9kZWx0YTsKLSAgICAgIC8vIERlcml2ZSBhIGxhdGVuY3kg
ZXN0aW1hdGUgZ2l2ZW4gcmVzdWx0cyBhYm92ZS4KLSAgICAgIGxhdGVuY3lfbWlsbGlzID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihuZXh0X2ZyYW1lX3ByZXNlbnRhdGlvbl90aW1lIC0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X2ZyYW1lX3dyaXRlX3RpbWUp
IC8KLSAgICAgICAgICAgICAgICAgICAgICAgcnRjOjprTnVtTmFub3NlY3NQZXJNaWxsaXNlYzsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIGxhdGVuY3lfbWlsbGlzOwotfQotCi0vLyBSZXR1cm5zIG5l
dyBidWZmZXIgc2l6ZSBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIGlmIGJ1ZmZlciBzaXplIGNv
dWxkIG5vdAotLy8gYmUgaW5jcmVhc2VkLgotYm9vbCBBQXVkaW9XcmFwcGVyOjpJbmNyZWFzZU91
dHB1dEJ1ZmZlclNpemUoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkluY3JlYXNlQnVmZmVyU2l6
ZSI7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIFJUQ19EQ0hFQ0soYWF1ZGlvX3RocmVhZF9j
aGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJUQ19EQ0hFQ0tfRVEoZGlyZWN0aW9uKCksIEFBVURJ
T19ESVJFQ1RJT05fT1VUUFVUKTsKLSAgYWF1ZGlvX3Jlc3VsdF90IGJ1ZmZlcl9zaXplID0gQUF1
ZGlvU3RyZWFtX2dldEJ1ZmZlclNpemVJbkZyYW1lcyhzdHJlYW1fKTsKLSAgLy8gVHJ5IHRvIGlu
Y3JlYXNlIHNpemUgb2YgYnVmZmVyIHdpdGggb25lIGJ1cnN0IHRvIHJlZHVjZSByaXNrIG9mIHVu
ZGVycnVuLgotICBidWZmZXJfc2l6ZSArPSBmcmFtZXNfcGVyX2J1cnN0KCk7Ci0gIC8vIFZlcmlm
eSB0aGF0IHRoZSBuZXcgYnVmZmVyIHNpemUgaXMgbm90IGxhcmdlciB0aGFuIG1heCBjYXBhY2l0
eS4KLSAgLy8gVE9ETyhoZW5yaWthKToga2VlcCB0cmFjayBvZiBjYXNlIHdoZW4gd2UgcmVhY2gg
dGhlIGNhcGFjaXR5IGxpbWl0LgotICBjb25zdCBpbnQzMl90IG1heF9idWZmZXJfc2l6ZSA9IGJ1
ZmZlcl9jYXBhY2l0eV9pbl9mcmFtZXMoKTsKLSAgaWYgKGJ1ZmZlcl9zaXplID4gbWF4X2J1ZmZl
cl9zaXplKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIlJlcXVpcmVkIGJ1ZmZlciBzaXpl
ICgiIDw8IGJ1ZmZlcl9zaXplCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIikgaXMgaGlnaGVy
IHRoYW4gbWF4OiAiIDw8IG1heF9idWZmZXJfc2l6ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LSAgUlRDX0xPRyhJTkZPKSA8PCAiVXBkYXRpbmcgYnVmZmVyIHNpemUgdG86ICIgPDwgYnVmZmVy
X3NpemUKLSAgICAgICAgICAgICAgICA8PCAiIChtYXg9IiA8PCBtYXhfYnVmZmVyX3NpemUgPDwg
IikiOwotICBidWZmZXJfc2l6ZSA9IEFBdWRpb1N0cmVhbV9zZXRCdWZmZXJTaXplSW5GcmFtZXMo
c3RyZWFtXywgYnVmZmVyX3NpemUpOwotICBpZiAoYnVmZmVyX3NpemUgPCAwKSB7Ci0gICAgUlRD
X0xPRyhMU19FUlJPUikgPDwgIkZhaWxlZCB0byBjaGFuZ2UgYnVmZmVyIHNpemU6ICIKLSAgICAg
ICAgICAgICAgICAgICAgICA8PCBBQXVkaW9fY29udmVydFJlc3VsdFRvVGV4dChidWZmZXJfc2l6
ZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIFJUQ19MT0coSU5GTykgPDwgIkJ1ZmZlciBz
aXplIGNoYW5nZWQgdG86ICIgPDwgYnVmZmVyX3NpemU7Ci0gIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEFBdWRpb1dyYXBwZXI6OkNsZWFySW5wdXRTdHJlYW0odm9pZCogYXVkaW9fZGF0YSwgaW50
MzJfdCBudW1fZnJhbWVzKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkNsZWFySW5wdXRTdHJlYW0i
OwotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICBSVENfRENIRUNLKGFhdWRpb190aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENfRENIRUNLX0VRKGRpcmVjdGlvbigpLCBBQVVESU9f
RElSRUNUSU9OX0lOUFVUKTsKLSAgYWF1ZGlvX3Jlc3VsdF90IGNsZWFyZWRfZnJhbWVzID0gMDsK
LSAgZG8gewotICAgIGNsZWFyZWRfZnJhbWVzID0gQUF1ZGlvU3RyZWFtX3JlYWQoc3RyZWFtXywg
YXVkaW9fZGF0YSwgbnVtX2ZyYW1lcywgMCk7Ci0gIH0gd2hpbGUgKGNsZWFyZWRfZnJhbWVzID4g
MCk7Ci19Ci0KLUFBdWRpb09ic2VydmVySW50ZXJmYWNlKiBBQXVkaW9XcmFwcGVyOjpvYnNlcnZl
cigpIGNvbnN0IHsKLSAgcmV0dXJuIG9ic2VydmVyXzsKLX0KLQotQXVkaW9QYXJhbWV0ZXJzIEFB
dWRpb1dyYXBwZXI6OmF1ZGlvX3BhcmFtZXRlcnMoKSBjb25zdCB7Ci0gIHJldHVybiBhdWRpb19w
YXJhbWV0ZXJzXzsKLX0KLQotaW50MzJfdCBBQXVkaW9XcmFwcGVyOjpzYW1wbGVzX3Blcl9mcmFt
ZSgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsKLSAgcmV0dXJuIEFBdWRpb1N0cmVh
bV9nZXRTYW1wbGVzUGVyRnJhbWUoc3RyZWFtXyk7Ci19Ci0KLWludDMyX3QgQUF1ZGlvV3JhcHBl
cjo6YnVmZmVyX3NpemVfaW5fZnJhbWVzKCkgY29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8p
OwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldEJ1ZmZlclNpemVJbkZyYW1lcyhzdHJlYW1fKTsK
LX0KLQotaW50MzJfdCBBQXVkaW9XcmFwcGVyOjpidWZmZXJfY2FwYWNpdHlfaW5fZnJhbWVzKCkg
Y29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dl
dEJ1ZmZlckNhcGFjaXR5SW5GcmFtZXMoc3RyZWFtXyk7Ci19Ci0KLWludDMyX3QgQUF1ZGlvV3Jh
cHBlcjo6ZGV2aWNlX2lkKCkgY29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICByZXR1
cm4gQUF1ZGlvU3RyZWFtX2dldERldmljZUlkKHN0cmVhbV8pOwotfQotCi1pbnQzMl90IEFBdWRp
b1dyYXBwZXI6OnhydW5fY291bnQoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0g
IHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0WFJ1bkNvdW50KHN0cmVhbV8pOwotfQotCi1pbnQzMl90
IEFBdWRpb1dyYXBwZXI6OmZvcm1hdCgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsK
LSAgcmV0dXJuIEFBdWRpb1N0cmVhbV9nZXRGb3JtYXQoc3RyZWFtXyk7Ci19Ci0KLWludDMyX3Qg
QUF1ZGlvV3JhcHBlcjo6c2FtcGxlX3JhdGUoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFt
Xyk7Ci0gIHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0U2FtcGxlUmF0ZShzdHJlYW1fKTsKLX0KLQot
aW50MzJfdCBBQXVkaW9XcmFwcGVyOjpjaGFubmVsX2NvdW50KCkgY29uc3QgewotICBSVENfRENI
RUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldENoYW5uZWxDb3VudChzdHJl
YW1fKTsKLX0KLQotaW50MzJfdCBBQXVkaW9XcmFwcGVyOjpmcmFtZXNfcGVyX2NhbGxiYWNrKCkg
Y29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dl
dEZyYW1lc1BlckRhdGFDYWxsYmFjayhzdHJlYW1fKTsKLX0KLQotYWF1ZGlvX3NoYXJpbmdfbW9k
ZV90IEFBdWRpb1dyYXBwZXI6OnNoYXJpbmdfbW9kZSgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhz
dHJlYW1fKTsKLSAgcmV0dXJuIEFBdWRpb1N0cmVhbV9nZXRTaGFyaW5nTW9kZShzdHJlYW1fKTsK
LX0KLQotYWF1ZGlvX3BlcmZvcm1hbmNlX21vZGVfdCBBQXVkaW9XcmFwcGVyOjpwZXJmb3JtYW5j
ZV9tb2RlKCkgY29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlv
U3RyZWFtX2dldFBlcmZvcm1hbmNlTW9kZShzdHJlYW1fKTsKLX0KLQotYWF1ZGlvX3N0cmVhbV9z
dGF0ZV90IEFBdWRpb1dyYXBwZXI6OnN0cmVhbV9zdGF0ZSgpIGNvbnN0IHsKLSAgUlRDX0RDSEVD
SyhzdHJlYW1fKTsKLSAgcmV0dXJuIEFBdWRpb1N0cmVhbV9nZXRTdGF0ZShzdHJlYW1fKTsKLX0K
LQotaW50NjRfdCBBQXVkaW9XcmFwcGVyOjpmcmFtZXNfd3JpdHRlbigpIGNvbnN0IHsKLSAgUlRD
X0RDSEVDSyhzdHJlYW1fKTsKLSAgcmV0dXJuIEFBdWRpb1N0cmVhbV9nZXRGcmFtZXNXcml0dGVu
KHN0cmVhbV8pOwotfQotCi1pbnQ2NF90IEFBdWRpb1dyYXBwZXI6OmZyYW1lc19yZWFkKCkgY29u
c3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldEZy
YW1lc1JlYWQoc3RyZWFtXyk7Ci19Ci0KLXZvaWQgQUF1ZGlvV3JhcHBlcjo6U2V0U3RyZWFtQ29u
ZmlndXJhdGlvbihBQXVkaW9TdHJlYW1CdWlsZGVyKiBidWlsZGVyKSB7Ci0gIFJUQ19MT0coSU5G
TykgPDwgIlNldFN0cmVhbUNvbmZpZ3VyYXRpb24iOwotICBSVENfRENIRUNLKGJ1aWxkZXIpOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIC8vIFJlcXVlc3Qg
dXNhZ2Ugb2YgZGVmYXVsdCBwcmltYXJ5IG91dHB1dC9pbnB1dCBkZXZpY2UuCi0gIC8vIFRPRE8o
aGVucmlrYSk6IHZlcmlmeSB0aGF0IGRlZmF1bHQgZGV2aWNlIGZvbGxvd3MgSmF2YSBBUElzLgot
ICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9tZWRp
YS9BdWRpb0RldmljZUluZm8uaHRtbC4KLSAgQUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXREZXZpY2VJ
ZChidWlsZGVyLCBBQVVESU9fVU5TUEVDSUZJRUQpOwotICAvLyBVc2UgcHJlZmVycmVkIHNhbXBs
ZSByYXRlIGdpdmVuIGJ5IHRoZSBhdWRpbyBwYXJhbWV0ZXJzLgotICBBQXVkaW9TdHJlYW1CdWls
ZGVyX3NldFNhbXBsZVJhdGUoYnVpbGRlciwgYXVkaW9fcGFyYW1ldGVycygpLnNhbXBsZV9yYXRl
KCkpOwotICAvLyBVc2UgcHJlZmVycmVkIGNoYW5uZWwgY29uZmlndXJhdGlvbiBnaXZlbiBieSB0
aGUgYXVkaW8gcGFyYW1ldGVycy4KLSAgQUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXRDaGFubmVsQ291
bnQoYnVpbGRlciwgYXVkaW9fcGFyYW1ldGVycygpLmNoYW5uZWxzKCkpOwotICAvLyBBbHdheXMg
dXNlIDE2LWJpdCBQQ00gYXVkaW8gc2FtcGxlIGZvcm1hdC4KLSAgQUF1ZGlvU3RyZWFtQnVpbGRl
cl9zZXRGb3JtYXQoYnVpbGRlciwgQUFVRElPX0ZPUk1BVF9QQ01fSTE2KTsKLSAgLy8gVE9ETyho
ZW5yaWthKTogaW52ZXN0aWdhdGUgZWZmZWN0IG9mIHVzaW5nIEFBVURJT19TSEFSSU5HX01PREVf
RVhDTFVTSVZFLgotICAvLyBBc2sgZm9yIGV4Y2x1c2l2ZSBtb2RlIHNpbmNlIHRoaXMgd2lsbCBn
aXZlIHVzIHRoZSBsb3dlc3QgcG9zc2libGUgbGF0ZW5jeS4KLSAgLy8gSWYgZXhjbHVzaXZlIG1v
ZGUgaXNuJ3QgYXZhaWxhYmxlLCBzaGFyZWQgbW9kZSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KLSAg
QUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXRTaGFyaW5nTW9kZShidWlsZGVyLCBBQVVESU9fU0hBUklO
R19NT0RFX1NIQVJFRCk7Ci0gIC8vIFVzZSB0aGUgZGlyZWN0aW9uIHRoYXQgd2FzIGdpdmVuIGF0
IGNvbnN0cnVjdGlvbi4KLSAgQUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXREaXJlY3Rpb24oYnVpbGRl
ciwgZGlyZWN0aW9uXyk7Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIHBlcmZvcm1h
bmNlIHVzaW5nIGRpZmZlcmVudCBwZXJmb3JtYW5jZSBtb2Rlcy4KLSAgQUF1ZGlvU3RyZWFtQnVp
bGRlcl9zZXRQZXJmb3JtYW5jZU1vZGUoYnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUFVRElPX1BFUkZPUk1BTkNFX01PREVfTE9XX0xBVEVOQ1kpOwot
ICAvLyBHaXZlbiB0aGF0IFdlYlJUQyBhcHBsaWNhdGlvbnMgcmVxdWlyZSBsb3cgbGF0ZW5jeSwg
b3VyIGF1ZGlvIHN0cmVhbSB1c2VzCi0gIC8vIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjayBmdW5j
dGlvbiB0byB0cmFuc2ZlciBkYXRhIHRvIGFuZCBmcm9tIHRoZQotICAvLyBhcHBsaWNhdGlvbi4g
QUF1ZGlvIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayBpbiBhIGhpZ2hlci1wcmlvcml0eSB0aHJlYWQg
dGhhdAotICAvLyBoYXMgYmV0dGVyIHBlcmZvcm1hbmNlLgotICBBQXVkaW9TdHJlYW1CdWlsZGVy
X3NldERhdGFDYWxsYmFjayhidWlsZGVyLCBEYXRhQ2FsbGJhY2ssIHRoaXMpOwotICAvLyBSZXF1
ZXN0IHRoYXQgQUF1ZGlvIGNhbGxzIHRoaXMgZnVuY3Rpb25zIGlmIGFueSBlcnJvciBvY2N1cnMg
b24gYSBjYWxsYmFjawotICAvLyB0aHJlYWQuCi0gIEFBdWRpb1N0cmVhbUJ1aWxkZXJfc2V0RXJy
b3JDYWxsYmFjayhidWlsZGVyLCBFcnJvckNhbGxiYWNrLCB0aGlzKTsKLX0KLQotYm9vbCBBQXVk
aW9XcmFwcGVyOjpPcGVuU3RyZWFtKEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIpIHsKLSAg
UlRDX0xPRyhJTkZPKSA8PCAiT3BlblN0cmVhbSI7Ci0gIFJUQ19EQ0hFQ0soYnVpbGRlcik7Ci0g
IEFBdWRpb1N0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsKLSAgUkVUVVJOX09OX0VSUk9SKEFBdWRp
b1N0cmVhbUJ1aWxkZXJfb3BlblN0cmVhbShidWlsZGVyLCAmc3RyZWFtKSwgZmFsc2UpOwotICBz
dHJlYW1fID0gc3RyZWFtOwotICBMb2dTdHJlYW1Db25maWd1cmF0aW9uKCk7Ci0gIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEFBdWRpb1dyYXBwZXI6OkNsb3NlU3RyZWFtKCkgewotICBSVENfTE9H
KElORk8pIDw8ICJDbG9zZVN0cmVhbSI7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIExPR19P
Tl9FUlJPUihBQXVkaW9TdHJlYW1fY2xvc2Uoc3RyZWFtXykpOwotICBzdHJlYW1fID0gbnVsbHB0
cjsKLX0KLQotdm9pZCBBQXVkaW9XcmFwcGVyOjpMb2dTdHJlYW1Db25maWd1cmF0aW9uKCkgewot
ICBSVENfRENIRUNLKHN0cmVhbV8pOwotICBjaGFyIHNzX2J1ZlsxMDI0XTsKLSAgcnRjOjpTaW1w
bGVTdHJpbmdCdWlsZGVyIHNzKHNzX2J1Zik7Ci0gIHNzIDw8ICJTdHJlYW0gQ29uZmlndXJhdGlv
bjogIjsKLSAgc3MgPDwgInNhbXBsZSByYXRlPSIgPDwgc2FtcGxlX3JhdGUoKSA8PCAiLCBjaGFu
bmVscz0iIDw8IGNoYW5uZWxfY291bnQoKTsKLSAgc3MgPDwgIiwgc2FtcGxlcyBwZXIgZnJhbWU9
IiA8PCBzYW1wbGVzX3Blcl9mcmFtZSgpOwotICBzcyA8PCAiLCBmb3JtYXQ9IiA8PCBGb3JtYXRU
b1N0cmluZyhmb3JtYXQoKSk7Ci0gIHNzIDw8ICIsIHNoYXJpbmcgbW9kZT0iIDw8IFNoYXJpbmdN
b2RlVG9TdHJpbmcoc2hhcmluZ19tb2RlKCkpOwotICBzcyA8PCAiLCBwZXJmb3JtYW5jZSBtb2Rl
PSIgPDwgUGVyZm9ybWFuY2VNb2RlVG9TdHJpbmcocGVyZm9ybWFuY2VfbW9kZSgpKTsKLSAgc3Mg
PDwgIiwgZGlyZWN0aW9uPSIgPDwgRGlyZWN0aW9uVG9TdHJpbmcoZGlyZWN0aW9uKCkpOwotICBz
cyA8PCAiLCBkZXZpY2UgaWQ9IiA8PCBBQXVkaW9TdHJlYW1fZ2V0RGV2aWNlSWQoc3RyZWFtXyk7
Ci0gIHNzIDw8ICIsIGZyYW1lcyBwZXIgY2FsbGJhY2s9IiA8PCBmcmFtZXNfcGVyX2NhbGxiYWNr
KCk7Ci0gIFJUQ19MT0coSU5GTykgPDwgc3Muc3RyKCk7Ci19Ci0KLXZvaWQgQUF1ZGlvV3JhcHBl
cjo6TG9nU3RyZWFtU3RhdGUoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkFBdWRpbyBzdHJlYW0g
c3RhdGU6ICIKLSAgICAgICAgICAgICAgICA8PCBBQXVkaW9fY29udmVydFN0cmVhbVN0YXRlVG9U
ZXh0KHN0cmVhbV9zdGF0ZSgpKTsKLX0KLQotYm9vbCBBQXVkaW9XcmFwcGVyOjpWZXJpZnlTdHJl
YW1Db25maWd1cmF0aW9uKCkgewotICBSVENfTE9HKElORk8pIDw8ICJWZXJpZnlTdHJlYW1Db25m
aWd1cmF0aW9uIjsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsKLSAgLy8gVE9ETyhoZW5yaWthKTog
c2hvdWxkIHdlIHZlcmlmeSBkZXZpY2UgSUQgYXMgd2VsbD8KLSAgaWYgKEFBdWRpb1N0cmVhbV9n
ZXRTYW1wbGVSYXRlKHN0cmVhbV8pICE9IGF1ZGlvX3BhcmFtZXRlcnMoKS5zYW1wbGVfcmF0ZSgp
KSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIlN0cmVhbSB1bmFibGUgdG8gdXNlIHJlcXVl
c3RlZCBzYW1wbGUgcmF0ZSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChBQXVkaW9T
dHJlYW1fZ2V0Q2hhbm5lbENvdW50KHN0cmVhbV8pICE9Ci0gICAgICBzdGF0aWNfY2FzdDxpbnQz
Ml90PihhdWRpb19wYXJhbWV0ZXJzKCkuY2hhbm5lbHMoKSkpIHsKLSAgICBSVENfTE9HKExTX0VS
Uk9SKSA8PCAiU3RyZWFtIHVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGNoYW5uZWwgY291bnQiOwot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoQUF1ZGlvU3RyZWFtX2dldEZvcm1hdChzdHJl
YW1fKSAhPSBBQVVESU9fRk9STUFUX1BDTV9JMTYpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8
PCAiU3RyZWFtIHVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGZvcm1hdCI7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci0gIGlmIChBQXVkaW9TdHJlYW1fZ2V0U2hhcmluZ01vZGUoc3RyZWFtXykgIT0g
QUFVRElPX1NIQVJJTkdfTU9ERV9TSEFSRUQpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAi
U3RyZWFtIHVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIHNoYXJpbmcgbW9kZSI7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0gIGlmIChBQXVkaW9TdHJlYW1fZ2V0UGVyZm9ybWFuY2VNb2RlKHN0cmVh
bV8pICE9Ci0gICAgICBBQVVESU9fUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFURU5DWSkgewotICAg
IFJUQ19MT0coTFNfRVJST1IpIDw8ICJTdHJlYW0gdW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgcGVy
Zm9ybWFuY2UgbW9kZSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChBQXVkaW9TdHJl
YW1fZ2V0RGlyZWN0aW9uKHN0cmVhbV8pICE9IGRpcmVjdGlvbigpKSB7Ci0gICAgUlRDX0xPRyhM
U19FUlJPUikgPDwgIlN0cmVhbSBkaXJlY3Rpb24gY291bGQgbm90IGJlIHNldCI7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIGlmIChBQXVkaW9TdHJlYW1fZ2V0U2FtcGxlc1BlckZyYW1lKHN0
cmVhbV8pICE9Ci0gICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhdWRpb19wYXJhbWV0ZXJzKCku
Y2hhbm5lbHMoKSkpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiSW52YWxpZCBudW1iZXIg
b2Ygc2FtcGxlcyBwZXIgZnJhbWUiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBBQXVkaW9XcmFwcGVyOjpPcHRpbWl6ZUJ1ZmZlcnMoKSB7Ci0gIFJU
Q19MT0coSU5GTykgPDwgIk9wdGltaXplQnVmZmVycyI7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7
Ci0gIC8vIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGNhbiBiZSBmaWxsZWQgd2l0aG91
dCBibG9ja2luZy4KLSAgUlRDX0xPRyhJTkZPKSA8PCAibWF4IGJ1ZmZlciBjYXBhY2l0eSBpbiBm
cmFtZXM6ICIKLSAgICAgICAgICAgICAgICA8PCBidWZmZXJfY2FwYWNpdHlfaW5fZnJhbWVzKCk7
Ci0gIC8vIFF1ZXJ5IHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHNo
b3VsZCByZWFkIG9yIHdyaXRlIGF0Ci0gIC8vIG9uZSB0aW1lIGZvciBvcHRpbWFsIHBlcmZvcm1h
bmNlLgotICBpbnQzMl90IGZyYW1lc19wZXJfYnVyc3QgPSBBQXVkaW9TdHJlYW1fZ2V0RnJhbWVz
UGVyQnVyc3Qoc3RyZWFtXyk7Ci0gIFJUQ19MT0coSU5GTykgPDwgImZyYW1lcyBwZXIgYnVyc3Qg
Zm9yIG9wdGltYWwgcGVyZm9ybWFuY2U6ICIKLSAgICAgICAgICAgICAgICA8PCBmcmFtZXNfcGVy
X2J1cnN0OwotICBmcmFtZXNfcGVyX2J1cnN0XyA9IGZyYW1lc19wZXJfYnVyc3Q7Ci0gIGlmIChk
aXJlY3Rpb24oKSA9PSBBQVVESU9fRElSRUNUSU9OX0lOUFVUKSB7Ci0gICAgLy8gVGhlcmUgaXMg
bm8gcG9pbnQgaW4gY2FsbGluZyBzZXRCdWZmZXJTaXplSW5GcmFtZXMoKSBmb3IgaW5wdXQgc3Ry
ZWFtcwotICAgIC8vIHNpbmNlIGl0IGhhcyBubyBlZmZlY3Qgb24gdGhlIHBlcmZvcm1hbmNlIChs
YXRlbmN5IGluIHRoaXMgY2FzZSkuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgLy8gU2V0IGJ1
ZmZlciBzaXplIHRvIHNhbWUgYXMgYnVyc3Qgc2l6ZSB0byBndWFyYW50ZWUgbG93ZXN0IHBvc3Np
YmxlIGxhdGVuY3kuCi0gIC8vIFRoaXMgc2l6ZSBtaWdodCBjaGFuZ2UgZm9yIG91dHB1dCBzdHJl
YW1zIGlmIHVuZGVycnVucyBhcmUgZGV0ZWN0ZWQgYW5kCi0gIC8vIGF1dG9tYXRpYyBidWZmZXIg
YWRqdXN0bWVudCBpcyBlbmFibGVkLgotICBBQXVkaW9TdHJlYW1fc2V0QnVmZmVyU2l6ZUluRnJh
bWVzKHN0cmVhbV8sIGZyYW1lc19wZXJfYnVyc3QpOwotICBpbnQzMl90IGJ1ZmZlcl9zaXplID0g
QUF1ZGlvU3RyZWFtX2dldEJ1ZmZlclNpemVJbkZyYW1lcyhzdHJlYW1fKTsKLSAgaWYgKGJ1ZmZl
cl9zaXplICE9IGZyYW1lc19wZXJfYnVyc3QpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAi
RmFpbGVkIHRvIHVzZSBvcHRpbWFsIGJ1ZmZlciBidXJzdCBzaXplIjsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgLy8gTWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgY2FuIGJlIGZpbGxl
ZCB3aXRob3V0IGJsb2NraW5nLgotICBSVENfTE9HKElORk8pIDw8ICJidWZmZXIgYnVyc3Qgc2l6
ZSBpbiBmcmFtZXM6ICIgPDwgYnVmZmVyX3NpemU7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2FhdWRpb193cmFw
cGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL2FhdWRpb193cmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQ5MTUwOTIxNDliOGI3ZWQ4MDQ2NDY3YzM0NzAwNmJlZjhhOTQ4Y2YuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9hYXVkaW9fd3JhcHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURf
QUFVRElPX1dSQVBQRVJfSF8KLSNkZWZpbmUgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9B
QVVESU9fV1JBUFBFUl9IXwotCi0jaW5jbHVkZSA8YWF1ZGlvL0FBdWRpby5oPgotCi0jaW5jbHVk
ZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgot
I2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMg
ewotCi1jbGFzcyBBdWRpb01hbmFnZXI7Ci0KLS8vIEFBdWRpbyBjYWxsYmFjayBpbnRlcmZhY2Ug
Zm9yIGF1ZGlvIHRyYW5zcG9ydCB0by9mcm9tIHRoZSBBQXVkaW8gc3RyZWFtLgotLy8gVGhlIGlu
dGVyZmFjZSBhbHNvIGNvbnRhaW5zIGFuIGVycm9yIGNhbGxiYWNrIG1ldGhvZCBmb3Igbm90aWZp
Y2F0aW9ucyBvZgotLy8gZS5nLiBkZXZpY2UgY2hhbmdlcy4KLWNsYXNzIEFBdWRpb09ic2VydmVy
SW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIC8vIEF1ZGlvIGRhdGEgd2lsbCBiZSBwYXNzZWQgaW4g
b3VyIG91dCBvZiB0aGlzIGZ1bmN0aW9uIGRlcGVuZG5pbmcgb24gdGhlCi0gIC8vIGRpcmVjdGlv
biBvZiB0aGUgYXVkaW8gc3RyZWFtLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs
bGVkIG9uIGEKLSAgLy8gcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBBQXVkaW8uCi0gIHZpcnR1
YWwgYWF1ZGlvX2RhdGFfY2FsbGJhY2tfcmVzdWx0X3QgT25EYXRhQ2FsbGJhY2sodm9pZCogYXVk
aW9fZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90IG51bV9mcmFtZXMpID0gMDsKLSAgLy8gQUF1ZGlvIHdpbGwgY2FsbCB0
aGlzIGZ1bmN0aW9ucyBpZiBhbnkgZXJyb3Igb2NjdXJzIG9uIGEgY2FsbGJhY2sgdGhyZWFkLgot
ICAvLyBJbiByZXNwb25zZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBzaWduYWwgb3IgbGF1bmNoIGFu
b3RoZXIgdGhyZWFkIHRvIHJlb3BlbgotICAvLyBhIHN0cmVhbSBvbiBhbm90aGVyIGRldmljZS4g
RG8gbm90IHJlb3BlbiB0aGUgc3RyZWFtIGluIHRoaXMgY2FsbGJhY2suCi0gIHZpcnR1YWwgdm9p
ZCBPbkVycm9yQ2FsbGJhY2soYWF1ZGlvX3Jlc3VsdF90IGVycm9yKSA9IDA7Ci0KLSBwcm90ZWN0
ZWQ6Ci0gIHZpcnR1YWwgfkFBdWRpb09ic2VydmVySW50ZXJmYWNlKCkge30KLX07Ci0KLS8vIFV0
aWxpdHkgY2xhc3Mgd2hpY2ggd3JhcHMgdGhlIEMtYmFzZWQgQUF1ZGlvIEFQSSBpbnRvIGEgbW9y
ZSBoYW5keSBDKysgY2xhc3MKLS8vIHdoZXJlIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlcyAoQUF1
ZGlvU3RyZWFtQnVpbGRlciBhbmQgQUF1ZGlvU3RyZWFtKSBhcmUKLS8vIGVuY2Fwc3VsYXRlZC4g
VXNlciBtdXN0IHNldCB0aGUgZGlyZWN0aW9uIChpbiBvciBvdXQpIGF0IGNvbnN0cnVjdGlvbiBz
aW5jZQotLy8gaXQgZGVmaW5lcyB0aGUgc3RyZWFtIHR5cGUgYW5kIHRoZSBkaXJlY3Rpb24gb2Yg
dGhlIGRhdGEgZmxvdyBpbiB0aGUKLS8vIEFBdWRpb09ic2VydmVySW50ZXJmYWNlLgotLy8KLS8v
IEFBdWRpbyBpcyBhIG5ldyBBbmRyb2lkIEMgQVBJIGludHJvZHVjZWQgaW4gdGhlIEFuZHJvaWQg
TyAoMjYpIHJlbGVhc2UuCi0vLyBJdCBpcyBkZXNpZ25lZCBmb3IgaGlnaC1wZXJmb3JtYW5jZSBh
dWRpbyBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIGxvdwotLy8gbGF0ZW5jeS4gQXBwbGljYXRp
b25zIGNvbW11bmljYXRlIHdpdGggQUF1ZGlvIGJ5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YQot
Ly8gdG8gc3RyZWFtcy4KLS8vCi0vLyBFYWNoIHN0cmVhbSBpcyBhdHRhY2hlZCB0byBhIHNpbmds
ZSBhdWRpbyBkZXZpY2UsIHdoZXJlIGVhY2ggYXVkaW8gZGV2aWNlCi0vLyBoYXMgYSB1bmlxdWUg
SUQuIFRoZSBJRCBjYW4gYmUgdXNlZCB0byBiaW5kIGFuIGF1ZGlvIHN0cmVhbSB0byBhIHNwZWNp
ZmljCi0vLyBhdWRpbyBkZXZpY2UgYnV0IHRoaXMgaW1wbGVtZW50YXRpb24gbGV0cyBBQXVkaW8g
Y2hvb3NlIHRoZSBkZWZhdWx0IHByaW1hcnkKLS8vIGRldmljZSBpbnN0ZWFkIChkZXZpY2Ugc2Vs
ZWN0aW9uIHRha2VzIHBsYWNlIGluIEphdmEpLiBBIHN0cmVhbSBjYW4gb25seQotLy8gbW92ZSBk
YXRhIGluIG9uZSBkaXJlY3Rpb24uIFdoZW4gYSBzdHJlYW0gaXMgb3BlbmVkLCBBbmRyb2lkIGNo
ZWNrcyB0bwotLy8gZW5zdXJlIHRoYXQgdGhlIGF1ZGlvIGRldmljZSBhbmQgc3RyZWFtIGRpcmVj
dGlvbiBhZ3JlZS4KLWNsYXNzIEFBdWRpb1dyYXBwZXIgewotIHB1YmxpYzoKLSAgQUF1ZGlvV3Jh
cHBlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIsCi0gICAgICAgICAgICAgICAgYWF1ZGlv
X2RpcmVjdGlvbl90IGRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICBBQXVkaW9PYnNlcnZlcklu
dGVyZmFjZSogb2JzZXJ2ZXIpOwotICB+QUF1ZGlvV3JhcHBlcigpOwotCi0gIGJvb2wgSW5pdCgp
OwotICBib29sIFN0YXJ0KCk7Ci0gIGJvb2wgU3RvcCgpOwotCi0gIC8vIEZvciBvdXRwdXQgc3Ry
ZWFtczogZXN0aW1hdGVzIGxhdGVuY3kgYmV0d2VlbiB3cml0aW5nIGFuIGF1ZGlvIGZyYW1lIHRv
Ci0gIC8vIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgdGltZSB0aGF0IHNhbWUgZnJhbWUgaXMg
cGxheWVkIG91dCBvbiB0aGUgb3V0cHV0Ci0gIC8vIGF1ZGlvIGRldmljZS4KLSAgLy8gRm9yIGlu
cHV0IHN0cmVhbXM6IGVzdGltYXRlcyBsYXRlbmN5IGJldHdlZW4gcmVhZGluZyBhbiBhdWRpbyBm
cmFtZSBmcm9tCi0gIC8vIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHRoZSB0aW1lIHRoYXQgc2FtZSBm
cmFtZSB3YXMgcmVjb3JkZWQgb24gdGhlIGlucHV0Ci0gIC8vIGF1ZGlvIGRldmljZS4KLSAgZG91
YmxlIEVzdGltYXRlTGF0ZW5jeU1pbGxpcygpIGNvbnN0OwotCi0gIC8vIEluY3JlYXNlcyB0aGUg
aW50ZXJuYWwgYnVmZmVyIHNpemUgZm9yIG91dHB1dCBzdHJlYW1zIGJ5IG9uZSBidXJzdCBzaXpl
IHRvCi0gIC8vIHJlZHVjZSB0aGUgcmlzayBvZiB1bmRlcnJ1bnMuIENhbiBiZSB1c2VkIHdoaWxl
IGEgc3RyZWFtIGlzIGFjdGl2ZS4KLSAgYm9vbCBJbmNyZWFzZU91dHB1dEJ1ZmZlclNpemUoKTsK
LQotICAvLyBEcmFpbnMgdGhlIHJlY29yZGluZyBzdHJlYW0gb2YgYW55IGV4aXN0aW5nIGRhdGEg
YnkgcmVhZGluZyBmcm9tIGl0IHVudGlsCi0gIC8vIGl0J3MgZW1wdHkuIENhbiBiZSB1c2VkIHRv
IGNsZWFyIG91dCBvbGQgZGF0YSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgYXVkaW8KLSAgLy8gc2Vz
c2lvbi4KLSAgdm9pZCBDbGVhcklucHV0U3RyZWFtKHZvaWQqIGF1ZGlvX2RhdGEsIGludDMyX3Qg
bnVtX2ZyYW1lcyk7Ci0KLSAgQUF1ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UqIG9ic2VydmVyKCkgY29u
c3Q7Ci0gIEF1ZGlvUGFyYW1ldGVycyBhdWRpb19wYXJhbWV0ZXJzKCkgY29uc3Q7Ci0gIGludDMy
X3Qgc2FtcGxlc19wZXJfZnJhbWUoKSBjb25zdDsKLSAgaW50MzJfdCBidWZmZXJfc2l6ZV9pbl9m
cmFtZXMoKSBjb25zdDsKLSAgaW50MzJfdCBidWZmZXJfY2FwYWNpdHlfaW5fZnJhbWVzKCkgY29u
c3Q7Ci0gIGludDMyX3QgZGV2aWNlX2lkKCkgY29uc3Q7Ci0gIGludDMyX3QgeHJ1bl9jb3VudCgp
IGNvbnN0OwotICBpbnQzMl90IGZvcm1hdCgpIGNvbnN0OwotICBpbnQzMl90IHNhbXBsZV9yYXRl
KCkgY29uc3Q7Ci0gIGludDMyX3QgY2hhbm5lbF9jb3VudCgpIGNvbnN0OwotICBpbnQzMl90IGZy
YW1lc19wZXJfY2FsbGJhY2soKSBjb25zdDsKLSAgYWF1ZGlvX3NoYXJpbmdfbW9kZV90IHNoYXJp
bmdfbW9kZSgpIGNvbnN0OwotICBhYXVkaW9fcGVyZm9ybWFuY2VfbW9kZV90IHBlcmZvcm1hbmNl
X21vZGUoKSBjb25zdDsKLSAgYWF1ZGlvX3N0cmVhbV9zdGF0ZV90IHN0cmVhbV9zdGF0ZSgpIGNv
bnN0OwotICBpbnQ2NF90IGZyYW1lc193cml0dGVuKCkgY29uc3Q7Ci0gIGludDY0X3QgZnJhbWVz
X3JlYWQoKSBjb25zdDsKLSAgYWF1ZGlvX2RpcmVjdGlvbl90IGRpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIGRpcmVjdGlvbl87IH0KLSAgQUF1ZGlvU3RyZWFtKiBzdHJlYW0oKSBjb25zdCB7IHJl
dHVybiBzdHJlYW1fOyB9Ci0gIGludDMyX3QgZnJhbWVzX3Blcl9idXJzdCgpIGNvbnN0IHsgcmV0
dXJuIGZyYW1lc19wZXJfYnVyc3RfOyB9Ci0KLSBwcml2YXRlOgotICB2b2lkIFNldFN0cmVhbUNv
bmZpZ3VyYXRpb24oQUF1ZGlvU3RyZWFtQnVpbGRlciogYnVpbGRlcik7Ci0gIGJvb2wgT3BlblN0
cmVhbShBQXVkaW9TdHJlYW1CdWlsZGVyKiBidWlsZGVyKTsKLSAgdm9pZCBDbG9zZVN0cmVhbSgp
OwotICB2b2lkIExvZ1N0cmVhbUNvbmZpZ3VyYXRpb24oKTsKLSAgdm9pZCBMb2dTdHJlYW1TdGF0
ZSgpOwotICBib29sIFZlcmlmeVN0cmVhbUNvbmZpZ3VyYXRpb24oKTsKLSAgYm9vbCBPcHRpbWl6
ZUJ1ZmZlcnMoKTsKLQotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotICBy
dGM6OlRocmVhZENoZWNrZXIgYWF1ZGlvX3RocmVhZF9jaGVja2VyXzsKLSAgQXVkaW9QYXJhbWV0
ZXJzIGF1ZGlvX3BhcmFtZXRlcnNfOwotICBjb25zdCBhYXVkaW9fZGlyZWN0aW9uX3QgZGlyZWN0
aW9uXzsKLSAgQUF1ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UqIG9ic2VydmVyXyA9IG51bGxwdHI7Ci0g
IEFBdWRpb1N0cmVhbSogc3RyZWFtXyA9IG51bGxwdHI7Ci0gIGludDMyX3QgZnJhbWVzX3Blcl9i
dXJzdF8gPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIE1P
RFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQUFVRElPX1dSQVBQRVJfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1v
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWVhNzMzYWE0OWM3YWM3NjlhNzJk
NDI0ZjIzNTZhNTlmNGQ5MTkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBNT0RVTEVTX0FV
RElPX0RFVklDRV9BTkRST0lEX0FVRElPX0NPTU1PTl9IXwotI2RlZmluZSBNT0RVTEVTX0FVRElP
X0RFVklDRV9BTkRST0lEX0FVRElPX0NPTU1PTl9IXwotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQot
Y29uc3QgaW50IGtEZWZhdWx0U2FtcGxlUmF0ZSA9IDQ0MTAwOwotLy8gRGVsYXkgZXN0aW1hdGVz
IGZvciB0aGUgdHdvIGRpZmZlcmVudCBzdXBwb3J0ZWQgbW9kZXMuIFRoZXNlIHZhbHVlcyBhcmUg
YmFzZWQKLS8vIG9uIHJlYWwtdGltZSByb3VuZC10cmlwIGRlbGF5IGVzdGltYXRlcyBvbiBhIGxh
cmdlIHNldCBvZiBkZXZpY2VzIGFuZCB0aGV5Ci0vLyBhcmUgbG93ZXIgYm91bmRzIHNpbmNlIHRo
ZSBmaWx0ZXIgbGVuZ3RoIGlzIDEyOCBtcywgc28gdGhlIEFFQyB3b3JrcyBmb3IKLS8vIGRlbGF5
cyBpbiB0aGUgcmFuZ2UgWzUwLCB+MTcwXSBtcyBhbmQgWzE1MCwgfjI3MF0gbXMuIE5vdGUgdGhh
dCwgaW4gbW9zdAotLy8gY2FzZXMsIHRoZSBsb3dlc3QgZGVsYXkgZXN0aW1hdGUgd2lsbCBub3Qg
YmUgdXRpbGl6ZWQgc2luY2UgZGV2aWNlcyB0aGF0Ci0vLyBzdXBwb3J0IGxvdy1sYXRlbmN5IG91
dHB1dCBhdWRpbyBvZnRlbiBzdXBwb3J0cyBIVyBBRUMgYXMgd2VsbC4KLWNvbnN0IGludCBrTG93
TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMgPSA1MDsKLWNvbnN0IGludCBr
SGlnaExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzID0gMTUwOwotCi19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gTU9EVUxFU19BVURJT19ERVZJQ0VfQU5E
Uk9JRF9BVURJT19DT01NT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fZGV2
aWNlX3RlbXBsYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2RldmljZV90ZW1wbGF0ZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjE4NTA0N2U1MmYzMjc3OGYwYzEwMWMwZDFl
NmYzNWFlZTAxMzdlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fZGV2aWNlX3RlbXBsYXRlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0NTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgTU9EVUxF
U19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19ERVZJQ0VfVEVNUExBVEVfSF8KLSNkZWZpbmUg
TU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19ERVZJQ0VfVEVNUExBVEVfSF8KLQot
I2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgot
I2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9nZW5lcmljLmgiCi0j
aW5jbHVkZSAicnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5o
IgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJy
dGMgewotCi0vLyBJbnB1dFR5cGUvT3V0cHV0VHlwZSBjYW4gYmUgYW55IGNsYXNzIHRoYXQgaW1w
bGVtZW50cyB0aGUgY2FwdHVyaW5nL3JlbmRlcmluZwotLy8gcGFydCBvZiB0aGUgQXVkaW9EZXZp
Y2VHZW5lcmljIEFQSS4KLS8vIENvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gbXVzdCBiZSBk
b25lIG9uIG9uZSBhbmQgdGhlIHNhbWUgdGhyZWFkLiBFYWNoCi0vLyBpbnRlcm5hbCBpbXBsZW1l
bnRhdGlvbiBvZiBJbnB1dFR5cGUgYW5kIE91dHB1dFR5cGUgd2lsbCBSVENfRENIRUNLIGlmIHRo
YXQKLS8vIGlzIG5vdCB0aGUgY2FzZS4gQWxsIGltcGxlbWVudGVkIG1ldGhvZHMgbXVzdCBhbHNv
IGJlIGNhbGxlZCBvbiB0aGUgc2FtZQotLy8gdGhyZWFkLiBTZWUgY29tbWVudHMgaW4gZWFjaCBJ
bnB1dFR5cGUvT3V0cHV0VHlwZSBjbGFzcyBmb3IgbW9yZSBpbmZvLgotLy8gSXQgaXMgcG9zc2li
bGUgdG8gY2FsbCB0aGUgdHdvIHN0YXRpYyBtZXRob2RzIChTZXRBbmRyb2lkQXVkaW9EZXZpY2VP
YmplY3RzCi0vLyBhbmQgQ2xlYXJBbmRyb2lkQXVkaW9EZXZpY2VPYmplY3RzKSBmcm9tIGEgZGlm
ZmVyZW50IHRocmVhZCBidXQgYm90aCB3aWxsCi0vLyBSVENfQ0hFQ0sgdGhhdCB0aGUgY2FsbGlu
ZyB0aHJlYWQgaXMgYXR0YWNoZWQgdG8gYSBKYXZhIFZNLgotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5w
dXRUeXBlLCBjbGFzcyBPdXRwdXRUeXBlPgotY2xhc3MgQXVkaW9EZXZpY2VUZW1wbGF0ZSA6IHB1
YmxpYyBBdWRpb0RldmljZUdlbmVyaWMgewotIHB1YmxpYzoKLSAgQXVkaW9EZXZpY2VUZW1wbGF0
ZShBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllciwKLSAgICAgICAgICAg
ICAgICAgICAgICBBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgICA6IGF1ZGlvX2xh
eWVyXyhhdWRpb19sYXllciksCi0gICAgICAgIGF1ZGlvX21hbmFnZXJfKGF1ZGlvX21hbmFnZXIp
LAotICAgICAgICBvdXRwdXRfKGF1ZGlvX21hbmFnZXJfKSwKLSAgICAgICAgaW5wdXRfKGF1ZGlv
X21hbmFnZXJfKSwKLSAgICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSB7Ci0gICAgUlRDX0xPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgUlRDX0NIRUNLKGF1ZGlvX21hbmFnZXIpOwotICAg
IGF1ZGlvX21hbmFnZXJfLT5TZXRBY3RpdmVBdWRpb0xheWVyKGF1ZGlvX2xheWVyKTsKLSAgfQot
Ci0gIHZpcnR1YWwgfkF1ZGlvRGV2aWNlVGVtcGxhdGUoKSB7IFJUQ19MT0coSU5GTykgPDwgX19G
VU5DVElPTl9fOyB9Ci0KLSAgaW50MzJfdCBBY3RpdmVBdWRpb0xheWVyKAotICAgICAgQXVkaW9E
ZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXImIGF1ZGlvTGF5ZXIpIGNvbnN0IG92ZXJyaWRlIHsKLSAg
ICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdWRpb0xheWVyID0gYXVkaW9f
bGF5ZXJfOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgSW5pdFN0YXR1cyBJbml0KCkgb3ZlcnJp
ZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIFJUQ19EQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgICBSVENfRENIRUNLKCFpbml0aWFsaXpl
ZF8pOwotICAgIGlmICghYXVkaW9fbWFuYWdlcl8tPkluaXQoKSkgewotICAgICAgcmV0dXJuIElu
aXRTdGF0dXM6Ok9USEVSX0VSUk9SOwotICAgIH0KLSAgICBpZiAob3V0cHV0Xy5Jbml0KCkgIT0g
MCkgewotICAgICAgYXVkaW9fbWFuYWdlcl8tPkNsb3NlKCk7Ci0gICAgICByZXR1cm4gSW5pdFN0
YXR1czo6UExBWU9VVF9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKGlucHV0Xy5Jbml0KCkgIT0gMCkg
ewotICAgICAgb3V0cHV0Xy5UZXJtaW5hdGUoKTsKLSAgICAgIGF1ZGlvX21hbmFnZXJfLT5DbG9z
ZSgpOwotICAgICAgcmV0dXJuIEluaXRTdGF0dXM6OlJFQ09SRElOR19FUlJPUjsKLSAgICB9Ci0g
ICAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gSW5pdFN0YXR1czo6T0s7Ci0gIH0K
LQotICBpbnQzMl90IFRlcm1pbmF0ZSgpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8
IF9fRlVOQ1RJT05fXzsKLSAgICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQo
KSk7Ci0gICAgaW50MzJfdCBlcnIgPSBpbnB1dF8uVGVybWluYXRlKCk7Ci0gICAgZXJyIHw9IG91
dHB1dF8uVGVybWluYXRlKCk7Ci0gICAgZXJyIHw9ICFhdWRpb19tYW5hZ2VyXy0+Q2xvc2UoKTsK
LSAgICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgICBSVENfRENIRUNLX0VRKGVyciwgMCk7Ci0g
ICAgcmV0dXJuIGVycjsKLSAgfQotCi0gIGJvb2wgSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlk
ZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgUlRDX0RDSEVDSyh0
aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICAgIHJldHVybiBpbml0aWFsaXplZF87Ci0g
IH0KLQotICBpbnQxNl90IFBsYXlvdXREZXZpY2VzKCkgb3ZlcnJpZGUgewotICAgIFJUQ19MT0co
SU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgaW50MTZfdCBS
ZWNvcmRpbmdEZXZpY2VzKCkgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5D
VElPTl9fOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgaW50MzJfdCBQbGF5b3V0RGV2aWNlTmFt
ZSh1aW50MTZfdCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIG5hbWVb
a0FkbU1heERldmljZU5hbWVTaXplXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
IGd1aWRba0FkbU1heEd1aWRTaXplXSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3Vs
ZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgUmVj
b3JkaW5nRGV2aWNlTmFtZSh1aW50MTZfdCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgbmFtZVtrQWRtTWF4RGV2aWNlTmFtZVNpemVdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciBndWlkW2tBZG1NYXhHdWlkU2l6ZV0pIG92ZXJyaWRlIHsKLSAg
ICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0g
IH0KLQotICBpbnQzMl90IFNldFBsYXlvdXREZXZpY2UodWludDE2X3QgaW5kZXgpIG92ZXJyaWRl
IHsKLSAgICAvLyBPSyB0byB1c2UgYnV0IGl0IGhhcyBubyBlZmZlY3QgY3VycmVudGx5IHNpbmNl
IGRldmljZSBzZWxlY3Rpb24gaXMKLSAgICAvLyBkb25lIHVzaW5nIEFuZG9pZCBBUElzIGluc3Rl
YWQuCi0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDA7Ci0g
IH0KLQotICBpbnQzMl90IFNldFBsYXlvdXREZXZpY2UoCi0gICAgICBBdWRpb0RldmljZU1vZHVs
ZTo6V2luZG93c0RldmljZVR5cGUgZGV2aWNlKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAi
U2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJf
dCBTZXRSZWNvcmRpbmdEZXZpY2UodWludDE2X3QgaW5kZXgpIG92ZXJyaWRlIHsKLSAgICAvLyBP
SyB0byB1c2UgYnV0IGl0IGhhcyBubyBlZmZlY3QgY3VycmVudGx5IHNpbmNlIGRldmljZSBzZWxl
Y3Rpb24gaXMKLSAgICAvLyBkb25lIHVzaW5nIEFuZG9pZCBBUElzIGluc3RlYWQuCi0gICAgUlRD
X0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQz
Ml90IFNldFJlY29yZGluZ0RldmljZSgKLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpXaW5kb3dz
RGV2aWNlVHlwZSBkZXZpY2UpIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2
ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFBsYXlvdXRJ
c0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8p
IDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdmFpbGFibGUgPSB0cnVlOwotICAgIHJldHVybiAwOwot
ICB9Ci0KLSAgaW50MzJfdCBJbml0UGxheW91dCgpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElO
Rk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gb3V0cHV0Xy5Jbml0UGxheW91dCgpOwot
ICB9Ci0KLSAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAg
ICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gb3V0cHV0Xy5QbGF5
b3V0SXNJbml0aWFsaXplZCgpOwotICB9Ci0KLSAgaW50MzJfdCBSZWNvcmRpbmdJc0F2YWlsYWJs
ZShib29sJiBhdmFpbGFibGUpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVO
Q1RJT05fXzsKLSAgICBhdmFpbGFibGUgPSB0cnVlOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAg
aW50MzJfdCBJbml0UmVjb3JkaW5nKCkgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwg
X19GVU5DVElPTl9fOwotICAgIHJldHVybiBpbnB1dF8uSW5pdFJlY29yZGluZygpOwotICB9Ci0K
LSAgYm9vbCBSZWNvcmRpbmdJc0luaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJU
Q19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBpbnB1dF8uUmVjb3JkaW5n
SXNJbml0aWFsaXplZCgpOwotICB9Ci0KLSAgaW50MzJfdCBTdGFydFBsYXlvdXQoKSBvdmVycmlk
ZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFhdWRpb19t
YW5hZ2VyXy0+SXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKSkgewotICAgICAgUlRDX0xPRyhX
QVJOSU5HKQotICAgICAgICAgIDw8ICJUaGUgYXBwbGljYXRpb24gc2hvdWxkIHVzZSBNT0RFX0lO
X0NPTU1VTklDQVRJT04gYXVkaW8gbW9kZSEiOwotICAgIH0KLSAgICByZXR1cm4gb3V0cHV0Xy5T
dGFydFBsYXlvdXQoKTsKLSAgfQotCi0gIGludDMyX3QgU3RvcFBsYXlvdXQoKSBvdmVycmlkZSB7
Ci0gICAgLy8gQXZvaWQgdXNpbmcgYXVkaW8gbWFuZ2VyIChKTkkvSmF2YSBjb3N0KSBpZiBwbGF5
b3V0IHdhcyBpbmFjdGl2ZS4KLSAgICBpZiAoIVBsYXlpbmcoKSkKLSAgICAgIHJldHVybiAwOwot
ICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGludDMyX3QgZXJyID0gb3V0
cHV0Xy5TdG9wUGxheW91dCgpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KLQotICBib29sIFBsYXlp
bmcoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187
Ci0gICAgcmV0dXJuIG91dHB1dF8uUGxheWluZygpOwotICB9Ci0KLSAgaW50MzJfdCBTdGFydFJl
Y29yZGluZygpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsK
LSAgICBpZiAoIWF1ZGlvX21hbmFnZXJfLT5Jc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpKSB7
Ci0gICAgICBSVENfTE9HKFdBUk5JTkcpCi0gICAgICAgICAgPDwgIlRoZSBhcHBsaWNhdGlvbiBz
aG91bGQgdXNlIE1PREVfSU5fQ09NTVVOSUNBVElPTiBhdWRpbyBtb2RlISI7Ci0gICAgfQotICAg
IHJldHVybiBpbnB1dF8uU3RhcnRSZWNvcmRpbmcoKTsKLSAgfQotCi0gIGludDMyX3QgU3RvcFJl
Y29yZGluZygpIG92ZXJyaWRlIHsKLSAgICAvLyBBdm9pZCB1c2luZyBhdWRpbyBtYW5nZXIgKEpO
SS9KYXZhIGNvc3QpIGlmIHJlY29yZGluZyB3YXMgaW5hY3RpdmUuCi0gICAgUlRDX0xPRyhJTkZP
KSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFSZWNvcmRpbmcoKSkKLSAgICAgIHJldHVybiAw
OwotICAgIGludDMyX3QgZXJyID0gaW5wdXRfLlN0b3BSZWNvcmRpbmcoKTsKLSAgICByZXR1cm4g
ZXJyOwotICB9Ci0KLSAgYm9vbCBSZWNvcmRpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBp
bnB1dF8uUmVjb3JkaW5nKCk7IH0KLQotICBpbnQzMl90IEluaXRTcGVha2VyKCkgb3ZlcnJpZGUg
ewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiAwOwotICB9
Ci0KLSAgYm9vbCBTcGVha2VySXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBS
VENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IGludDMyX3QgSW5pdE1pY3JvcGhvbmUoKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8
PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBib29sIE1pY3JvcGhvbmVJ
c0luaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19G
VU5DVElPTl9fOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW50MzJfdCBTcGVha2VyVm9s
dW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIG91dHB1dF8uU3BlYWtlclZvbHVtZUlz
QXZhaWxhYmxlKGF2YWlsYWJsZSk7Ci0gIH0KLQotICBpbnQzMl90IFNldFNwZWFrZXJWb2x1bWUo
dWludDMyX3Qgdm9sdW1lKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNU
SU9OX187Ci0gICAgcmV0dXJuIG91dHB1dF8uU2V0U3BlYWtlclZvbHVtZSh2b2x1bWUpOwotICB9
Ci0KLSAgaW50MzJfdCBTcGVha2VyVm9sdW1lKHVpbnQzMl90JiB2b2x1bWUpIGNvbnN0IG92ZXJy
aWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gb3V0
cHV0Xy5TcGVha2VyVm9sdW1lKHZvbHVtZSk7Ci0gIH0KLQotICBpbnQzMl90IE1heFNwZWFrZXJW
b2x1bWUodWludDMyX3QmIG1heFZvbHVtZSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJUQ19MT0co
SU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLk1heFNwZWFrZXJWb2x1
bWUobWF4Vm9sdW1lKTsKLSAgfQotCi0gIGludDMyX3QgTWluU3BlYWtlclZvbHVtZSh1aW50MzJf
dCYgbWluVm9sdW1lKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZV
TkNUSU9OX187Ci0gICAgcmV0dXJuIG91dHB1dF8uTWluU3BlYWtlclZvbHVtZShtaW5Wb2x1bWUp
OwotICB9Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYgYXZh
aWxhYmxlKSBvdmVycmlkZSB7Ci0gICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgcmV0dXJuIC0x
OwotICB9Ci0KLSAgaW50MzJfdCBTZXRNaWNyb3Bob25lVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkg
b3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAg
IHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgTWljcm9waG9uZVZvbHVtZSh1aW50MzJfdCYg
dm9sdW1lKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJl
IGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBNYXhNaWNyb3Bob25l
Vm9sdW1lKHVpbnQzMl90JiBtYXhWb2x1bWUpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgp
IDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBp
bnQzMl90IE1pbk1pY3JvcGhvbmVWb2x1bWUodWludDMyX3QmIG1pblZvbHVtZSkgY29uc3Qgb3Zl
cnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJl
dHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU3BlYWtlck11dGVJc0F2YWlsYWJsZShib29sJiBh
dmFpbGFibGUpIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFNldFNwZWFrZXJNdXRlKGJv
b2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNh
bGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBTcGVha2VyTXV0ZShib29s
JiBlbmFibGVkKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVy
IGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25l
TXV0ZUlzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkg
PDwgIk5vdCBpbXBsZW1lbnRlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBT
ZXRNaWNyb3Bob25lTXV0ZShib29sIGVuYWJsZSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwg
Ik5vdCBpbXBsZW1lbnRlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBNaWNy
b3Bob25lTXV0ZShib29sJiBlbmFibGVkKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8
PCAiTm90IGltcGxlbWVudGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGF1ZGlvIG1hbmFnZXIgaGFzIGJlZW4gY29uZmlndXJlZCB0byBzdXBwb3J0
IHN0ZXJlbwotICAvLyBhbmQgZmFsc2Ugb3RoZXJ3aXNlZC4gRGVmYXVsdCBpcyBtb25vLgotICBp
bnQzMl90IFN0ZXJlb1BsYXlvdXRJc0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpIG92ZXJyaWRl
IHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdmFpbGFibGUgPSBh
dWRpb19tYW5hZ2VyXy0+SXNTdGVyZW9QbGF5b3V0U3VwcG9ydGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci0gIH0KLQotICBpbnQzMl90IFNldFN0ZXJlb1BsYXlvdXQoYm9vbCBlbmFibGUpIG92ZXJyaWRl
IHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBib29sIGF2YWlsYWJs
ZSA9IGF1ZGlvX21hbmFnZXJfLT5Jc1N0ZXJlb1BsYXlvdXRTdXBwb3J0ZWQoKTsKLSAgICAvLyBB
bmRyb2lkIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdlcyBiZXR3ZWVuIG1vbm8gYW5kIHN0ZXJvIG9u
IHRoZSBmbHkuCi0gICAgLy8gSW5zdGVhZCwgdGhlIG5hdGl2ZSBhdWRpbyBsYXllciBpcyBjb25m
aWd1cmVkIHZpYSB0aGUgYXVkaW8gbWFuYWdlcgotICAgIC8vIHRvIGVpdGhlciBzdXBwb3J0IG1v
bm8gb3Igc3RlcmVvLiBJdCBpcyBhbGxvd2VkIHRvIGNhbGwgdGhpcyBtZXRob2QKLSAgICAvLyBp
ZiB0aGF0IHNhbWUgc3RhdGUgaXMgbm90IG1vZGlmaWVkLgotICAgIHJldHVybiAoZW5hYmxlID09
IGF2YWlsYWJsZSkgPyAwIDogLTE7Ci0gIH0KLQotICBpbnQzMl90IFN0ZXJlb1BsYXlvdXQoYm9v
bCYgZW5hYmxlZCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIGVuYWJsZWQgPSBhdWRpb19tYW5hZ2Vy
Xy0+SXNTdGVyZW9QbGF5b3V0U3VwcG9ydGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBp
bnQzMl90IFN0ZXJlb1JlY29yZGluZ0lzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJp
ZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGF2YWlsYWJsZSA9
IGF1ZGlvX21hbmFnZXJfLT5Jc1N0ZXJlb1JlY29yZFN1cHBvcnRlZCgpOwotICAgIHJldHVybiAw
OwotICB9Ci0KLSAgaW50MzJfdCBTZXRTdGVyZW9SZWNvcmRpbmcoYm9vbCBlbmFibGUpIG92ZXJy
aWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBib29sIGF2YWls
YWJsZSA9IGF1ZGlvX21hbmFnZXJfLT5Jc1N0ZXJlb1JlY29yZFN1cHBvcnRlZCgpOwotICAgIC8v
IEFuZHJvaWQgZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2VzIGJldHdlZW4gbW9ubyBhbmQgc3Rlcm8g
b24gdGhlIGZseS4KLSAgICAvLyBJbnN0ZWFkLCB0aGUgbmF0aXZlIGF1ZGlvIGxheWVyIGlzIGNv
bmZpZ3VyZWQgdmlhIHRoZSBhdWRpbyBtYW5hZ2VyCi0gICAgLy8gdG8gZWl0aGVyIHN1cHBvcnQg
bW9ubyBvciBzdGVyZW8uIEl0IGlzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIG1ldGhvZAotICAgIC8v
IGlmIHRoYXQgc2FtZSBzdGF0ZSBpcyBub3QgbW9kaWZpZWQuCi0gICAgcmV0dXJuIChlbmFibGUg
PT0gYXZhaWxhYmxlKSA/IDAgOiAtMTsKLSAgfQotCi0gIGludDMyX3QgU3RlcmVvUmVjb3JkaW5n
KGJvb2wmIGVuYWJsZWQpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9f
RlVOQ1RJT05fXzsKLSAgICBlbmFibGVkID0gYXVkaW9fbWFuYWdlcl8tPklzU3RlcmVvUmVjb3Jk
U3VwcG9ydGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90IFBsYXlvdXREZWxh
eSh1aW50MTZfdCYgZGVsYXlfbXMpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAvLyBCZXN0IGd1ZXNz
IHdlIGNhbiBkbyBpcyB0byB1c2UgaGFsZiBvZiB0aGUgZXN0aW1hdGVkIHRvdGFsIGRlbGF5Lgot
ICAgIGRlbGF5X21zID0gYXVkaW9fbWFuYWdlcl8tPkdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vj
b25kcygpIC8gMjsKLSAgICBSVENfRENIRUNLX0dUKGRlbGF5X21zLCAwKTsKLSAgICByZXR1cm4g
MDsKLSAgfQotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1
ZGlvQnVmZmVyKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187
Ci0gICAgb3V0cHV0Xy5BdHRhY2hBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcik7Ci0gICAgaW5wdXRf
LkF0dGFjaEF1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZGV2aWNlIGJvdGggc3VwcG9ydHMgYnVpbHQgaW4gQUVDIGFuZCB0aGUgZGV2aWNl
Ci0gIC8vIGlzIG5vdCBibGFja2xpc3RlZC4KLSAgLy8gQ3VycmVudGx5LCBpZiBPcGVuU0wgRVMg
aXMgdXNlZCBpbiBib3RoIGRpcmVjdGlvbnMsIHRoaXMgbWV0aG9kIHdpbGwgc3RpbGwKLSAgLy8g
cmVwb3J0IHRoZSBjb3JyZWN0IHZhbHVlIGFuZCBpdCBoYXMgdGhlIGNvcnJlY3QgZWZmZWN0LiBB
cyBhbiBleGFtcGxlOgotICAvLyBhIGRldmljZSBzdXBwb3J0cyBidWlsdCBpbiBBRUMgYW5kIHRo
aXMgbWV0aG9kIHJldHVybnMgdHJ1ZS4gTGliamluZ2xlCi0gIC8vIHdpbGwgdGhlbiBkaXNhYmxl
IHRoZSBXZWJSVEMgYmFzZWQgQUVDIGFuZCB0aGF0IHdpbGwgd29yayBmb3IgYWxsIGRldmljZXMK
LSAgLy8gKG1haW5seSBOZXh1cykgZXZlbiB3aGVuIE9wZW5TTCBFUyBpcyB1c2VkIGZvciBpbnB1
dCBzaW5jZSBvdXIgY3VycmVudAotICAvLyBpbXBsZW1lbnRhdGlvbiB3aWxsIGVuYWJsZSBidWls
dC1pbiBBRUMgYnkgZGVmYXVsdCBhbHNvIGZvciBPcGVuU0wgRVMuCi0gIC8vIFRoZSBvbmx5ICJi
YWQiIHRoaW5nIHRoYXQgaGFwcGVucyB0b2RheSBpcyB0aGF0IHdoZW4gTGliamluZ2xlIGNhbGxz
Ci0gIC8vIE9wZW5TTEVTUmVjb3JkZXI6OkVuYWJsZUJ1aWx0SW5BRUMoKSBpdCB3aWxsIG5vdCBo
YXZlIGFueSByZWFsIGVmZmVjdCBhbmQKLSAgLy8gYSAiTm90IEltcGxlbWVudGVkIiBsb2cgd2ls
bCBiZSBmaWxlZC4gVGhpcyBub24tcGVyZmVjdCBzdGF0ZSB3aWxsIHJlbWFpbgotICAvLyB1bnRp
bCBJIGhhdmUgYWRkZWQgZnVsbCBzdXBwb3J0IGZvciBhdWRpbyBlZmZlY3RzIGJhc2VkIG9uIE9w
ZW5TTCBFUyBBUElzLgotICBib29sIEJ1aWx0SW5BRUNJc0F2YWlsYWJsZSgpIGNvbnN0IG92ZXJy
aWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gYXVk
aW9fbWFuYWdlcl8tPklzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKTsKLSAgfQotCi0g
IC8vIFRPRE8oaGVucmlrYSk6IGFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgT3BlblNMIEVTIGJhc2Vk
IGF1ZGlvIGFzIHdlbGwuCi0gIGludDMyX3QgRW5hYmxlQnVpbHRJbkFFQyhib29sIGVuYWJsZSkg
b3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fIDw8ICIoIiA8PCBl
bmFibGUgPDwgIikiOwotICAgIFJUQ19DSEVDSyhCdWlsdEluQUVDSXNBdmFpbGFibGUoKSkgPDwg
IkhXIEFFQyBpcyBub3QgYXZhaWxhYmxlIjsKLSAgICByZXR1cm4gaW5wdXRfLkVuYWJsZUJ1aWx0
SW5BRUMoZW5hYmxlKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGJv
dGggc3VwcG9ydHMgYnVpbHQgaW4gQUdDIGFuZCB0aGUgZGV2aWNlCi0gIC8vIGlzIG5vdCBibGFj
a2xpc3RlZC4KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxlbWVudGF0aW9uIGZvciBPcGVu
U0wgRVMgYmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgLy8gSW4gYWRkaXRpb24sIHNlZSBjb21tZW50
cyBmb3IgQnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkuCi0gIGJvb2wgQnVpbHRJbkFHQ0lzQXZhaWxh
YmxlKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9f
OwotICAgIHJldHVybiBhdWRpb19tYW5hZ2VyXy0+SXNBdXRvbWF0aWNHYWluQ29udHJvbFN1cHBv
cnRlZCgpOwotICB9Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxlbWVudGF0aW9uIGZv
ciBPcGVuU0wgRVMgYmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgaW50MzJfdCBFbmFibGVCdWlsdElu
QUdDKGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNU
SU9OX18gPDwgIigiIDw8IGVuYWJsZSA8PCAiKSI7Ci0gICAgUlRDX0NIRUNLKEJ1aWx0SW5BR0NJ
c0F2YWlsYWJsZSgpKSA8PCAiSFcgQUdDIGlzIG5vdCBhdmFpbGFibGUiOwotICAgIHJldHVybiBp
bnB1dF8uRW5hYmxlQnVpbHRJbkFHQyhlbmFibGUpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBkZXZpY2UgYm90aCBzdXBwb3J0cyBidWlsdCBpbiBOUyBhbmQgdGhlIGRldmljZQot
ICAvLyBpcyBub3QgYmxhY2tsaXN0ZWQuCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBpbXBsZW1l
bnRhdGlvbiBmb3IgT3BlblNMIEVTIGJhc2VkIGF1ZGlvIGFzIHdlbGwuCi0gIC8vIEluIGFkZGl0
aW9uLCBzZWUgY29tbWVudHMgZm9yIEJ1aWx0SW5BRUNJc0F2YWlsYWJsZSgpLgotICBib29sIEJ1
aWx0SW5OU0lzQXZhaWxhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykg
PDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBhdWRpb19tYW5hZ2VyXy0+SXNOb2lzZVN1cHBy
ZXNzb3JTdXBwb3J0ZWQoKTsKLSAgfQotCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBpbXBsZW1l
bnRhdGlvbiBmb3IgT3BlblNMIEVTIGJhc2VkIGF1ZGlvIGFzIHdlbGwuCi0gIGludDMyX3QgRW5h
YmxlQnVpbHRJbk5TKGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8
PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IGVuYWJsZSA8PCAiKSI7Ci0gICAgUlRDX0NIRUNLKEJ1
aWx0SW5OU0lzQXZhaWxhYmxlKCkpIDw8ICJIVyBOUyBpcyBub3QgYXZhaWxhYmxlIjsKLSAgICBy
ZXR1cm4gaW5wdXRfLkVuYWJsZUJ1aWx0SW5OUyhlbmFibGUpOwotICB9Ci0KLSBwcml2YXRlOgot
ICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gIC8vIExvY2FsIGNvcHkg
b2YgdGhlIGF1ZGlvIGxheWVyIHNldCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoZQotICAvLyBB
dWRpb0RldmljZU1vZHVsZUltcGwgaW5zdGFuY2UuIFJlYWQgb25seSB2YWx1ZS4KLSAgY29uc3Qg
QXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXJfOwotCi0gIC8vIE5vbi1v
d25pbmcgcmF3IHBvaW50ZXIgdG8gQXVkaW9NYW5hZ2VyIGluc3RhbmNlIGdpdmVuIHRvIHVzZSBh
dAotICAvLyBjb25zdHJ1Y3Rpb24uIFRoZSByZWFsIG9iamVjdCBpcyBvd25lZCBieSBBdWRpb0Rl
dmljZU1vZHVsZUltcGwgYW5kIHRoZQotICAvLyBsaWZlIHRpbWUgaXMgdGhlIHNhbWUgYXMgdGhh
dCBvZiB0aGUgQXVkaW9EZXZpY2VNb2R1bGVJbXBsLCBoZW5jZSB0aGVyZQotICAvLyBpcyBubyBy
aXNrIG9mIHJlYWRpbmcgYSBOVUxMIHBvaW50ZXIgYXQgYW55IHRpbWUgaW4gdGhpcyBjbGFzcy4K
LSAgQXVkaW9NYW5hZ2VyKiBjb25zdCBhdWRpb19tYW5hZ2VyXzsKLQotICBPdXRwdXRUeXBlIG91
dHB1dF87Ci0KLSAgSW5wdXRUeXBlIGlucHV0XzsKLQotICBib29sIGluaXRpYWxpemVkXzsKLX07
Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBNT0RVTEVTX0FVRElPX0RF
VklDRV9BTkRST0lEX0FVRElPX0RFVklDRV9URU1QTEFURV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hdWRpb19kZXZpY2VfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2Rl
dmljZV91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjMzZjN2Mz
MWRlNTZjNWVhZDYyMDgwY2QzNzliOGYyMjBiMGIyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2RldmljZV91bml0dGVz
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwMjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1ZGlvX2Rldmlj
ZS5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRl
IDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxudW1lcmljPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJhcGkvc2NvcGVkX3JlZnB0
ci5oIgotI2luY2x1ZGUgImFwaS90YXNrX3F1ZXVlL2RlZmF1bHRfdGFza19xdWV1ZV9mYWN0b3J5
LmgiCi0jaW5jbHVkZSAiYXBpL3Rhc2tfcXVldWUvdGFza19xdWV1ZV9mYWN0b3J5LmgiCi0jaW5j
bHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNpbmNs
dWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNs
dWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8uaCIKLSNpbmNsdWRl
ICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2Vuc3VyZV9pbml0aWFsaXplZC5oIgotI2lu
Y2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9pbXBsLmgiCi0jaW5jbHVk
ZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9tb2NrX2F1ZGlvX3RyYW5zcG9ydC5oIgot
I2luY2x1ZGUgInJ0Y19iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2V2ZW50
LmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvZm9ybWF0X21hY3Jvcy5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL3N5bmNocm9uaXphdGlvbi9tdXRleC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RpbWVfdXRp
bHMuaCIKLSNpbmNsdWRlICJ0ZXN0L2dtb2NrLmgiCi0jaW5jbHVkZSAidGVzdC9ndGVzdC5oIgot
I2luY2x1ZGUgInRlc3QvdGVzdHN1cHBvcnQvZmlsZV91dGlscy5oIgotCi11c2luZyBzdGQ6OmNv
dXQ7Ci11c2luZyBzdGQ6OmVuZGw7Ci11c2luZyA6OnRlc3Rpbmc6Ol87Ci11c2luZyA6OnRlc3Rp
bmc6OkF0TGVhc3Q7Ci11c2luZyA6OnRlc3Rpbmc6Okd0OwotdXNpbmcgOjp0ZXN0aW5nOjpJbnZv
a2U7Ci11c2luZyA6OnRlc3Rpbmc6Ok5pY2VNb2NrOwotdXNpbmcgOjp0ZXN0aW5nOjpOb3ROdWxs
OwotdXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Ci0KLS8vICNkZWZpbmUgRU5BQkxFX0RFQlVHX1BS
SU5URgotI2lmZGVmIEVOQUJMRV9ERUJVR19QUklOVEYKLSNkZWZpbmUgUFJJTlREKC4uLikgZnBy
aW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKTsKLSNlbHNlCi0jZGVmaW5lIFBSSU5URCguLi4pICgo
dm9pZCkwKQotI2VuZGlmCi0jZGVmaW5lIFBSSU5UKC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFf
QVJHU19fKTsKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIE51bWJlciBvZiBjYWxsYmFja3Mg
KGlucHV0IG9yIG91dHB1dCkgdGhlIHRlc3RzIHdhaXRzIGZvciBiZWZvcmUgd2Ugc2V0Ci0vLyBh
biBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRlc3Qgd2FzIE9LLgotc3RhdGljIGNvbnN0IHNp
emVfdCBrTnVtQ2FsbGJhY2tzID0gMTA7Ci0vLyBNYXggYW1vdW50IG9mIHRpbWUgd2Ugd2FpdCBm
b3IgYW4gZXZlbnQgdG8gYmUgc2V0IHdoaWxlIGNvdW50aW5nIGNhbGxiYWNrcy4KLXN0YXRpYyBj
b25zdCBpbnQga1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29uZHMgPSAxMCAqIDEwMDA7Ci0vLyBBdmVy
YWdlIG51bWJlciBvZiBhdWRpbyBjYWxsYmFja3MgcGVyIHNlY29uZCBhc3N1bWluZyAxMG1zIHBh
Y2tldCBzaXplLgotc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtQ2FsbGJhY2tzUGVyU2Vjb25kID0g
MTAwOwotLy8gUGxheSBvdXQgYSB0ZXN0IGZpbGUgZHVyaW5nIHRoaXMgdGltZSAodW5pdCBpcyBp
biBzZWNvbmRzKS4KLXN0YXRpYyBjb25zdCBpbnQga0ZpbGVQbGF5VGltZUluU2VjID0gNTsKLXN0
YXRpYyBjb25zdCBzaXplX3Qga0JpdHNQZXJTYW1wbGUgPSAxNjsKLXN0YXRpYyBjb25zdCBzaXpl
X3Qga0J5dGVzUGVyU2FtcGxlID0ga0JpdHNQZXJTYW1wbGUgLyA4OwotLy8gUnVuIHRoZSBmdWxs
LWR1cGxleCB0ZXN0IGR1cmluZyB0aGlzIHRpbWUgKHVuaXQgaXMgaW4gc2Vjb25kcykuCi0vLyBO
b3RlIHRoYXQgZmlyc3QgfGtOdW1JZ25vcmVGaXJzdENhbGxiYWNrc3wgYXJlIGlnbm9yZWQuCi1z
dGF0aWMgY29uc3QgaW50IGtGdWxsRHVwbGV4VGltZUluU2VjID0gNTsKLS8vIFdhaXQgZm9yIHRo
ZSBjYWxsYmFjayBzZXF1ZW5jZSB0byBzdGFiaWxpemUgYnkgaWdub3JpbmcgdGhpcyBhbW91bnQg
b2YgdGhlCi0vLyBpbml0aWFsIGNhbGxiYWNrcyAoYXZvaWRzIGluaXRpYWwgRklGTyBhY2Nlc3Mp
LgotLy8gT25seSB1c2VkIGluIHRoZSBSdW5QbGF5b3V0QW5kUmVjb3JkaW5nSW5GdWxsRHVwbGV4
IHRlc3QuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1JZ25vcmVGaXJzdENhbGxiYWNrcyA9IDUw
OwotLy8gU2V0cyB0aGUgbnVtYmVyIG9mIGltcHVsc2VzIHBlciBzZWNvbmQgaW4gdGhlIGxhdGVu
Y3kgdGVzdC4KLXN0YXRpYyBjb25zdCBpbnQga0ltcHVsc2VGcmVxdWVuY3lJbkh6ID0gMTsKLS8v
IExlbmd0aCBvZiByb3VuZC10cmlwIGxhdGVuY3kgbWVhc3VyZW1lbnRzLiBOdW1iZXIgb2YgdHJh
bnNtaXR0ZWQgaW1wdWxzZXMKLS8vIGlzIGtJbXB1bHNlRnJlcXVlbmN5SW5IeiAqIGtNZWFzdXJl
TGF0ZW5jeVRpbWVJblNlYyAtIDEuCi1zdGF0aWMgY29uc3QgaW50IGtNZWFzdXJlTGF0ZW5jeVRp
bWVJblNlYyA9IDExOwotLy8gVXRpbGl6ZWQgaW4gcm91bmQtdHJpcCBsYXRlbmN5IG1lYXN1cmVt
ZW50cyB0byBhdm9pZCBjYXB0dXJpbmcgbm9pc2Ugc2FtcGxlcy4KLXN0YXRpYyBjb25zdCBpbnQg
a0ltcHVsc2VUaHJlc2hvbGQgPSAxMDAwOwotc3RhdGljIGNvbnN0IGNoYXIga1RhZ1tdID0gIlsu
Li4uLi4uLi4uXSAiOwotCi1lbnVtIFRyYW5zcG9ydFR5cGUgewotICBrUGxheW91dCA9IDB4MSwK
LSAga1JlY29yZGluZyA9IDB4MiwKLX07Ci0KLS8vIEludGVyZmFjZSBmb3IgcHJvY2Vzc2luZyB0
aGUgYXVkaW8gc3RyZWFtLiBSZWFsIGltcGxlbWVudGF0aW9ucyBjYW4gZS5nLgotLy8gcnVuIGF1
ZGlvIGluIGxvb3BiYWNrLCByZWFkIGF1ZGlvIGZyb20gYSBmaWxlIG9yIHBlcmZvcm0gbGF0ZW5j
eQotLy8gbWVhc3VyZW1lbnRzLgotY2xhc3MgQXVkaW9TdHJlYW1JbnRlcmZhY2UgewotIHB1Ymxp
YzoKLSAgdmlydHVhbCB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgc2l6ZV90IG51bV9m
cmFtZXMpID0gMDsKLSAgdmlydHVhbCB2b2lkIFJlYWQodm9pZCogZGVzdGluYXRpb24sIHNpemVf
dCBudW1fZnJhbWVzKSA9IDA7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgfkF1ZGlvU3RyZWFt
SW50ZXJmYWNlKCkge30KLX07Ci0KLS8vIFJlYWRzIGF1ZGlvIHNhbXBsZXMgZnJvbSBhIFBDTSBm
aWxlIHdoZXJlIHRoZSBmaWxlIGlzIHN0b3JlZCBpbiBtZW1vcnkgYXQKLS8vIGNvbnN0cnVjdGlv
bi4KLWNsYXNzIEZpbGVBdWRpb1N0cmVhbSA6IHB1YmxpYyBBdWRpb1N0cmVhbUludGVyZmFjZSB7
Ci0gcHVibGljOgotICBGaWxlQXVkaW9TdHJlYW0oc2l6ZV90IG51bV9jYWxsYmFja3MsCi0gICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZV9uYW1lLAotICAgICAgICAgICAg
ICAgICAgaW50IHNhbXBsZV9yYXRlKQotICAgICAgOiBmaWxlX3NpemVfaW5fYnl0ZXNfKDApLCBz
YW1wbGVfcmF0ZV8oc2FtcGxlX3JhdGUpLCBmaWxlX3Bvc18oMCkgewotICAgIGZpbGVfc2l6ZV9p
bl9ieXRlc18gPSB0ZXN0OjpHZXRGaWxlU2l6ZShmaWxlX25hbWUpOwotICAgIHNhbXBsZV9yYXRl
XyA9IHNhbXBsZV9yYXRlOwotICAgIEVYUEVDVF9HRShmaWxlX3NpemVfaW5fY2FsbGJhY2tzKCks
IG51bV9jYWxsYmFja3MpCi0gICAgICAgIDw8ICJTaXplIG9mIHRlc3QgZmlsZSBpcyBub3QgbGFy
Z2UgZW5vdWdoIHRvIGxhc3QgZHVyaW5nIHRoZSB0ZXN0LiI7Ci0gICAgY29uc3Qgc2l6ZV90IG51
bV8xNmJpdF9zYW1wbGVzID0KLSAgICAgICAgdGVzdDo6R2V0RmlsZVNpemUoZmlsZV9uYW1lKSAv
IGtCeXRlc1BlclNhbXBsZTsKLSAgICBmaWxlXy5yZXNldChuZXcgaW50MTZfdFtudW1fMTZiaXRf
c2FtcGxlc10pOwotICAgIEZJTEUqIGF1ZGlvX2ZpbGUgPSBmb3BlbihmaWxlX25hbWUuY19zdHIo
KSwgInJiIik7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX2ZpbGUsIG51bGxwdHIpOwotICAgIHNpemVf
dCBudW1fc2FtcGxlc19yZWFkID0KLSAgICAgICAgZnJlYWQoZmlsZV8uZ2V0KCksIHNpemVvZihp
bnQxNl90KSwgbnVtXzE2Yml0X3NhbXBsZXMsIGF1ZGlvX2ZpbGUpOwotICAgIEVYUEVDVF9FUShu
dW1fc2FtcGxlc19yZWFkLCBudW1fMTZiaXRfc2FtcGxlcyk7Ci0gICAgZmNsb3NlKGF1ZGlvX2Zp
bGUpOwotICB9Ci0KLSAgLy8gQXVkaW9TdHJlYW1JbnRlcmZhY2U6OldyaXRlKCkgaXMgbm90IGlt
cGxlbWVudGVkLgotICB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgc2l6ZV90IG51bV9m
cmFtZXMpIG92ZXJyaWRlIHt9Ci0KLSAgLy8gUmVhZCBzYW1wbGVzIGZyb20gZmlsZSBzdG9yZWQg
aW4gbWVtb3J5IChhdCBjb25zdHJ1Y3Rpb24pIGFuZCBjb3B5Ci0gIC8vIHxudW1fZnJhbWVzfCAo
PD0+IDEwbXMpIHRvIHRoZSB8ZGVzdGluYXRpb258IGJ5dGUgYnVmZmVyLgotICB2b2lkIFJlYWQo
dm9pZCogZGVzdGluYXRpb24sIHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7Ci0gICAgbWVt
Y3B5KGRlc3RpbmF0aW9uLCBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oJmZpbGVfW2ZpbGVfcG9zX10p
LAotICAgICAgICAgICBudW1fZnJhbWVzICogc2l6ZW9mKGludDE2X3QpKTsKLSAgICBmaWxlX3Bv
c18gKz0gbnVtX2ZyYW1lczsKLSAgfQotCi0gIGludCBmaWxlX3NpemVfaW5fc2Vjb25kcygpIGNv
bnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihmaWxlX3NpemVfaW5fYnl0ZXNfIC8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa0J5dGVzUGVyU2FtcGxlICogc2FtcGxlX3Jh
dGVfKSk7Ci0gIH0KLSAgc2l6ZV90IGZpbGVfc2l6ZV9pbl9jYWxsYmFja3MoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIGZpbGVfc2l6ZV9pbl9zZWNvbmRzKCkgKiBrTnVtQ2FsbGJhY2tzUGVyU2Vjb25k
OwotICB9Ci0KLSBwcml2YXRlOgotICBzaXplX3QgZmlsZV9zaXplX2luX2J5dGVzXzsKLSAgaW50
IHNhbXBsZV9yYXRlXzsKLSAgc3RkOjp1bmlxdWVfcHRyPGludDE2X3RbXT4gZmlsZV87Ci0gIHNp
emVfdCBmaWxlX3Bvc187Ci19OwotCi0vLyBTaW1wbGUgZmlyc3QgaW4gZmlyc3Qgb3V0IChGSUZP
KSBjbGFzcyB0aGF0IHdyYXBzIGEgbGlzdCBvZiAxNi1iaXQgYXVkaW8KLS8vIGJ1ZmZlcnMgb2Yg
Zml4ZWQgc2l6ZSBhbmQgYWxsb3dzIFdyaXRlIGFuZCBSZWFkIG9wZXJhdGlvbnMuIFRoZSBpZGVh
IGlzIHRvCi0vLyBzdG9yZSByZWNvcmRlZCBhdWRpbyBidWZmZXJzICh1c2luZyBXcml0ZSkgYW5k
IHRoZW4gcmVhZCAodXNpbmcgUmVhZCkgdGhlc2UKLS8vIHN0b3JlZCBidWZmZXJzIHdpdGggYXMg
c2hvcnQgZGVsYXkgYXMgcG9zc2libGUgd2hlbiB0aGUgYXVkaW8gbGF5ZXIgbmVlZHMKLS8vIGRh
dGEgdG8gcGxheSBvdXQuIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgRklGTyB3aWxsIHN0
YWJpbGl6ZSB1bmRlcgotLy8gbm9ybWFsIGNvbmRpdGlvbnMgc2luY2UgdGhlcmUgd2lsbCBiZSBh
IGJhbGFuY2UgYmV0d2VlbiBXcml0ZSBhbmQgUmVhZCBjYWxscy4KLS8vIFRoZSBjb250YWluZXIg
aXMgYSBzdGQ6Omxpc3QgY29udGFpbmVyIGFuZCBhY2Nlc3MgaXMgcHJvdGVjdGVkIHdpdGggYSBs
b2NrCi0vLyBzaW5jZSBib3RoIHNpZGVzIChwbGF5b3V0IGFuZCByZWNvcmRpbmcpIGFyZSBkcml2
ZW4gYnkgaXRzIG93biB0aHJlYWQuCi1jbGFzcyBGaWZvQXVkaW9TdHJlYW0gOiBwdWJsaWMgQXVk
aW9TdHJlYW1JbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRmlmb0F1ZGlvU3RyZWFt
KHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcikKLSAgICAgIDogZnJhbWVzX3Blcl9idWZmZXJfKGZy
YW1lc19wZXJfYnVmZmVyKSwKLSAgICAgICAgYnl0ZXNfcGVyX2J1ZmZlcl8oZnJhbWVzX3Blcl9i
dWZmZXJfICogc2l6ZW9mKGludDE2X3QpKSwKLSAgICAgICAgZmlmb18obmV3IEF1ZGlvQnVmZmVy
TGlzdCksCi0gICAgICAgIGxhcmdlc3Rfc2l6ZV8oMCksCi0gICAgICAgIHRvdGFsX3dyaXR0ZW5f
ZWxlbWVudHNfKDApLAotICAgICAgICB3cml0ZV9jb3VudF8oMCkgewotICAgIEVYUEVDVF9ORShm
aWZvXy5nZXQoKSwgbnVsbHB0cik7Ci0gIH0KLQotICB+Rmlmb0F1ZGlvU3RyZWFtKCkgeyBGbHVz
aCgpOyB9Ci0KLSAgLy8gQWxsb2NhdGUgbmV3IG1lbW9yeSwgY29weSB8bnVtX2ZyYW1lc3wgc2Ft
cGxlcyBmcm9tIHxzb3VyY2V8IGludG8gbWVtb3J5Ci0gIC8vIGFuZCBhZGQgcG9pbnRlciB0byB0
aGUgbWVtb3J5IGxvY2F0aW9uIHRvIGVuZCBvZiB0aGUgbGlzdC4KLSAgLy8gSW5jcmVhc2VzIHRo
ZSBzaXplIG9mIHRoZSBGSUZPIGJ5IG9uZSBlbGVtZW50LgotICB2b2lkIFdyaXRlKGNvbnN0IHZv
aWQqIHNvdXJjZSwgc2l6ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHsKLSAgICBBU1NFUlRfRVEo
bnVtX2ZyYW1lcywgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgICBQUklOVEQoIisiKTsKLSAgICBp
ZiAod3JpdGVfY291bnRfKysgPCBrTnVtSWdub3JlRmlyc3RDYWxsYmFja3MpIHsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaW50MTZfdCogbWVtb3J5ID0gbmV3IGludDE2X3RbZnJhbWVzX3Bl
cl9idWZmZXJfXTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8aW50MTZfdCo+KCZtZW1vcnlbMF0p
LCBzb3VyY2UsIGJ5dGVzX3Blcl9idWZmZXJfKTsKLSAgICBNdXRleExvY2sgbG9jaygmbG9ja18p
OwotICAgIGZpZm9fLT5wdXNoX2JhY2sobWVtb3J5KTsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9
IGZpZm9fLT5zaXplKCk7Ci0gICAgaWYgKHNpemUgPiBsYXJnZXN0X3NpemVfKSB7Ci0gICAgICBs
YXJnZXN0X3NpemVfID0gc2l6ZTsKLSAgICAgIFBSSU5URCgiKCUiIFJUQ19QUkl1UyAiKSIsIGxh
cmdlc3Rfc2l6ZV8pOwotICAgIH0KLSAgICB0b3RhbF93cml0dGVuX2VsZW1lbnRzXyArPSBzaXpl
OwotICB9Ci0KLSAgLy8gUmVhZCBwb2ludGVyIHRvIGRhdGEgYnVmZmVyIGZyb20gZnJvbnQgb2Yg
bGlzdCwgY29weSB8bnVtX2ZyYW1lc3wgb2Ygc3RvcmVkCi0gIC8vIGRhdGEgaW50byB8ZGVzdGlu
YXRpb258IGFuZCBkZWxldGUgdGhlIHV0aWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uLgotICAvLyBE
ZWNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIEZJRk8gYnkgb25lIGVsZW1lbnQuCi0gIHZvaWQgUmVh
ZCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHsKLSAgICBB
U1NFUlRfRVEobnVtX2ZyYW1lcywgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgICBQUklOVEQoIi0i
KTsKLSAgICBNdXRleExvY2sgbG9jaygmbG9ja18pOwotICAgIGlmIChmaWZvXy0+ZW1wdHkoKSkg
ewotICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLCAwLCBieXRlc19wZXJfYnVmZmVyXyk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIGludDE2X3QqIG1lbW9yeSA9IGZpZm9fLT5mcm9udCgpOwotICAgICAg
Zmlmb18tPnBvcF9mcm9udCgpOwotICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzdGF0aWNfY2Fz
dDxpbnQxNl90Kj4oJm1lbW9yeVswXSksIGJ5dGVzX3Blcl9idWZmZXJfKTsKLSAgICAgIGRlbGV0
ZSBtZW1vcnk7Ci0gICAgfQotICB9Ci0KLSAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBm
aWZvXy0+c2l6ZSgpOyB9Ci0KLSAgc2l6ZV90IGxhcmdlc3Rfc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IGxhcmdlc3Rfc2l6ZV87IH0KLQotICBzaXplX3QgYXZlcmFnZV9zaXplKCkgY29uc3QgewotICAg
IHJldHVybiAodG90YWxfd3JpdHRlbl9lbGVtZW50c18gPT0gMCkKLSAgICAgICAgICAgICAgID8g
MC4wCi0gICAgICAgICAgICAgICA6IDAuNSArIHN0YXRpY19jYXN0PGZsb2F0Pih0b3RhbF93cml0
dGVuX2VsZW1lbnRzXykgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdyaXRlX2NvdW50
XyAtIGtOdW1JZ25vcmVGaXJzdENhbGxiYWNrcyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHZvaWQg
Rmx1c2goKSB7Ci0gICAgZm9yIChhdXRvIGl0ID0gZmlmb18tPmJlZ2luKCk7IGl0ICE9IGZpZm9f
LT5lbmQoKTsgKytpdCkgewotICAgICAgZGVsZXRlICppdDsKLSAgICB9Ci0gICAgZmlmb18tPmNs
ZWFyKCk7Ci0gIH0KLQotICB1c2luZyBBdWRpb0J1ZmZlckxpc3QgPSBzdGQ6Omxpc3Q8aW50MTZf
dCo+OwotICBNdXRleCBsb2NrXzsKLSAgY29uc3Qgc2l6ZV90IGZyYW1lc19wZXJfYnVmZmVyXzsK
LSAgY29uc3Qgc2l6ZV90IGJ5dGVzX3Blcl9idWZmZXJfOwotICBzdGQ6OnVuaXF1ZV9wdHI8QXVk
aW9CdWZmZXJMaXN0PiBmaWZvXzsKLSAgc2l6ZV90IGxhcmdlc3Rfc2l6ZV87Ci0gIHNpemVfdCB0
b3RhbF93cml0dGVuX2VsZW1lbnRzXzsKLSAgc2l6ZV90IHdyaXRlX2NvdW50XzsKLX07Ci0KLS8v
IEluc2VydHMgcGVyaW9kaWMgaW1wdWxzZXMgYW5kIG1lYXN1cmVzIHRoZSBsYXRlbmN5IGJldHdl
ZW4gdGhlIHRpbWUgb2YKLS8vIHRyYW5zbWlzc2lvbiBhbmQgdGltZSBvZiByZWNlaXZpbmcgdGhl
IHNhbWUgaW1wdWxzZS4KLS8vIFVzYWdlIHJlcXVpcmVzIGEgc3BlY2lhbCBoYXJkd2FyZSBjYWxs
ZWQgQXVkaW8gTG9vcGJhY2sgRG9uZ2xlLgotLy8gU2VlIGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5j
b20vZGV2aWNlcy9hdWRpby9sb29wYmFjay5odG1sIGZvciBkZXRhaWxzLgotY2xhc3MgTGF0ZW5j
eU1lYXN1cmluZ0F1ZGlvU3RyZWFtIDogcHVibGljIEF1ZGlvU3RyZWFtSW50ZXJmYWNlIHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IExhdGVuY3lNZWFzdXJpbmdBdWRpb1N0cmVhbShzaXplX3QgZnJh
bWVzX3Blcl9idWZmZXIpCi0gICAgICA6IGZyYW1lc19wZXJfYnVmZmVyXyhmcmFtZXNfcGVyX2J1
ZmZlciksCi0gICAgICAgIGJ5dGVzX3Blcl9idWZmZXJfKGZyYW1lc19wZXJfYnVmZmVyXyAqIHNp
emVvZihpbnQxNl90KSksCi0gICAgICAgIHBsYXlfY291bnRfKDApLAotICAgICAgICByZWNfY291
bnRfKDApLAotICAgICAgICBwdWxzZV90aW1lXygwKSB7fQotCi0gIC8vIEluc2VydCBwZXJpb2Rp
YyBpbXB1bHNlcyBpbiBmaXJzdCB0d28gc2FtcGxlcyBvZiB8ZGVzdGluYXRpb258LgotICB2b2lk
IFJlYWQodm9pZCogZGVzdGluYXRpb24sIHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7Ci0g
ICAgQVNTRVJUX0VRKG51bV9mcmFtZXMsIGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gICAgaWYgKHBs
YXlfY291bnRfID09IDApIHsKLSAgICAgIFBSSU5UKCJbIik7Ci0gICAgfQotICAgIHBsYXlfY291
bnRfKys7Ci0gICAgbWVtc2V0KGRlc3RpbmF0aW9uLCAwLCBieXRlc19wZXJfYnVmZmVyXyk7Ci0g
ICAgaWYgKHBsYXlfY291bnRfICUgKGtOdW1DYWxsYmFja3NQZXJTZWNvbmQgLyBrSW1wdWxzZUZy
ZXF1ZW5jeUluSHopID09IDApIHsKLSAgICAgIGlmIChwdWxzZV90aW1lXyA9PSAwKSB7Ci0gICAg
ICAgIHB1bHNlX3RpbWVfID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gICAgICB9Ci0gICAgICBQUklO
VCgiLiIpOwotICAgICAgY29uc3QgaW50MTZfdCBpbXB1bHNlID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQxNl90Pjo6bWF4KCk7Ci0gICAgICBpbnQxNl90KiBwdHIxNiA9IHN0YXRpY19jYXN0PGlu
dDE2X3QqPihkZXN0aW5hdGlvbik7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsr
aSkgewotICAgICAgICBwdHIxNltpXSA9IGltcHVsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgLy8gRGV0ZWN0IHJlY2VpdmVkIGltcHVsc2VzIGluIHxzb3VyY2V8LCBkZXJpdmUgdGltZSBi
ZXR3ZWVuIHRyYW5zbWlzc2lvbiBhbmQKLSAgLy8gZGV0ZWN0aW9uIGFuZCBhZGQgdGhlIGNhbGN1
bGF0ZWQgZGVsYXkgdG8gbGlzdCBvZiBsYXRlbmNpZXMuCi0gIHZvaWQgV3JpdGUoY29uc3Qgdm9p
ZCogc291cmNlLCBzaXplX3QgbnVtX2ZyYW1lcykgb3ZlcnJpZGUgewotICAgIEFTU0VSVF9FUShu
dW1fZnJhbWVzLCBmcmFtZXNfcGVyX2J1ZmZlcl8pOwotICAgIHJlY19jb3VudF8rKzsKLSAgICBp
ZiAocHVsc2VfdGltZV8gPT0gMCkgewotICAgICAgLy8gQXZvaWQgZGV0ZWN0aW9uIG9mIG5ldyBp
bXB1bHNlIHJlc3BvbnNlIHVudGlsIGEgbmV3IGltcHVsc2UgaGFzCi0gICAgICAvLyBiZWVuIHRy
YW5zbWl0dGVkIChzZXRzIHxwdWxzZV90aW1lX3wgdG8gdmFsdWUgbGFyZ2VyIHRoYW4gemVybyku
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGludDE2X3QqIHB0cjE2ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgaW50MTZfdCo+KHNvdXJjZSk7Ci0gICAgc3RkOjp2ZWN0b3I8aW50MTZfdD4g
dmVjKHB0cjE2LCBwdHIxNiArIG51bV9mcmFtZXMpOwotICAgIC8vIEZpbmQgbWF4IHZhbHVlIGlu
IHRoZSBhdWRpbyBidWZmZXIuCi0gICAgaW50IG1heCA9ICpzdGQ6Om1heF9lbGVtZW50KHZlYy5i
ZWdpbigpLCB2ZWMuZW5kKCkpOwotICAgIC8vIEZpbmQgaW5kZXggKGVsZW1lbnQgcG9zaXRpb24g
aW4gdmVjdG9yKSBvZiB0aGUgbWF4IGVsZW1lbnQuCi0gICAgaW50IGluZGV4X29mX21heCA9Ci0g
ICAgICAgIHN0ZDo6ZGlzdGFuY2UodmVjLmJlZ2luKCksIHN0ZDo6ZmluZCh2ZWMuYmVnaW4oKSwg
dmVjLmVuZCgpLCBtYXgpKTsKLSAgICBpZiAobWF4ID4ga0ltcHVsc2VUaHJlc2hvbGQpIHsKLSAg
ICAgIFBSSU5URCgiKCVkLCVkKSIsIG1heCwgaW5kZXhfb2ZfbWF4KTsKLSAgICAgIGludDY0X3Qg
bm93X3RpbWUgPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgICAgIGludCBleHRyYV9kZWxheSA9IElu
ZGV4VG9NaWxsaXNlY29uZHMoc3RhdGljX2Nhc3Q8ZG91YmxlPihpbmRleF9vZl9tYXgpKTsKLSAg
ICAgIFBSSU5URCgiWyVkXSIsIHN0YXRpY19jYXN0PGludD4obm93X3RpbWUgLSBwdWxzZV90aW1l
XykpOwotICAgICAgUFJJTlREKCJbJWRdIiwgZXh0cmFfZGVsYXkpOwotICAgICAgLy8gVG90YWwg
bGF0ZW5jeSBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRyYW5zbWl0IHRpbWUgYW5kIGRldGVj
dGlvbgotICAgICAgLy8gdG9tZSBwbHVzIHRoZSBleHRyYSBkZWxheSB3aXRoaW4gdGhlIGJ1ZmZl
ciBpbiB3aGljaCB3ZSBkZXRlY3RlZCB0aGUKLSAgICAgIC8vIHJlY2VpdmVkIGltcHVsc2UuIEl0
IGlzIHRyYW5zbWl0dGVkIGF0IHNhbXBsZSAwIGJ1dCBjYW4gYmUgcmVjZWl2ZWQKLSAgICAgIC8v
IGF0IHNhbXBsZSBOIHdoZXJlIE4gPiAwLiBUaGUgdGVybSB8ZXh0cmFfZGVsYXl8IGFjY291bnRz
IGZvciBOIGFuZCBpdAotICAgICAgLy8gaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwbXMuCi0g
ICAgICBsYXRlbmNpZXNfLnB1c2hfYmFjayhub3dfdGltZSAtIHB1bHNlX3RpbWVfICsgZXh0cmFf
ZGVsYXkpOwotICAgICAgcHVsc2VfdGltZV8gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBQUklO
VEQoIi0iKTsKLSAgICB9Ci0gIH0KLQotICBzaXplX3QgbnVtX2xhdGVuY3lfdmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbGF0ZW5jaWVzXy5zaXplKCk7IH0KLQotICBpbnQgbWluX2xhdGVuY3koKSBj
b25zdCB7Ci0gICAgaWYgKGxhdGVuY2llc18uZW1wdHkoKSkKLSAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiAqc3RkOjptaW5fZWxlbWVudChsYXRlbmNpZXNfLmJlZ2luKCksIGxhdGVuY2llc18u
ZW5kKCkpOwotICB9Ci0KLSAgaW50IG1heF9sYXRlbmN5KCkgY29uc3QgewotICAgIGlmIChsYXRl
bmNpZXNfLmVtcHR5KCkpCi0gICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKnN0ZDo6bWF4X2Vs
ZW1lbnQobGF0ZW5jaWVzXy5iZWdpbigpLCBsYXRlbmNpZXNfLmVuZCgpKTsKLSAgfQotCi0gIGlu
dCBhdmVyYWdlX2xhdGVuY3koKSBjb25zdCB7Ci0gICAgaWYgKGxhdGVuY2llc18uZW1wdHkoKSkK
LSAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAwLjUgKyBzdGF0aWNfY2FzdDxkb3VibGU+KAot
ICAgICAgICAgICAgICAgICAgICAgc3RkOjphY2N1bXVsYXRlKGxhdGVuY2llc18uYmVnaW4oKSwg
bGF0ZW5jaWVzXy5lbmQoKSwgMCkpIC8KLSAgICAgICAgICAgICAgICAgICAgIGxhdGVuY2llc18u
c2l6ZSgpOwotICB9Ci0KLSAgdm9pZCBQcmludFJlc3VsdHMoKSBjb25zdCB7Ci0gICAgUFJJTlQo
Il0gIik7Ci0gICAgZm9yIChhdXRvIGl0ID0gbGF0ZW5jaWVzXy5iZWdpbigpOyBpdCAhPSBsYXRl
bmNpZXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgICBQUklOVCgiJWQgIiwgKml0KTsKLSAgICB9Ci0g
ICAgUFJJTlQoIlxuIik7Ci0gICAgUFJJTlQoIiVzW21pbiwgbWF4LCBhdmddPVslZCwgJWQsICVk
XSBtc1xuIiwga1RhZywgbWluX2xhdGVuY3koKSwKLSAgICAgICAgICBtYXhfbGF0ZW5jeSgpLCBh
dmVyYWdlX2xhdGVuY3koKSk7Ci0gIH0KLQotICBpbnQgSW5kZXhUb01pbGxpc2Vjb25kcyhkb3Vi
bGUgaW5kZXgpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigxMC4wICogKGlu
ZGV4IC8gZnJhbWVzX3Blcl9idWZmZXJfKSArIDAuNSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNv
bnN0IHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcl87Ci0gIGNvbnN0IHNpemVfdCBieXRlc19wZXJf
YnVmZmVyXzsKLSAgc2l6ZV90IHBsYXlfY291bnRfOwotICBzaXplX3QgcmVjX2NvdW50XzsKLSAg
aW50NjRfdCBwdWxzZV90aW1lXzsKLSAgc3RkOjp2ZWN0b3I8aW50PiBsYXRlbmNpZXNfOwotfTsK
LQotLy8gTW9ja3MgdGhlIEF1ZGlvVHJhbnNwb3J0IG9iamVjdCBhbmQgcHJveGllcyBhY3Rpb25z
IGZvciB0aGUgdHdvIGNhbGxiYWNrcwotLy8gKFJlY29yZGVkRGF0YUlzQXZhaWxhYmxlIGFuZCBO
ZWVkTW9yZVBsYXlEYXRhKSB0byBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zCi0vLyBvZiBBdWRp
b1N0cmVhbUludGVyZmFjZS4KLWNsYXNzIE1vY2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQgOiBwdWJs
aWMgdGVzdDo6TW9ja0F1ZGlvVHJhbnNwb3J0IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IE1vY2tB
dWRpb1RyYW5zcG9ydEFuZHJvaWQoaW50IHR5cGUpCi0gICAgICA6IG51bV9jYWxsYmFja3NfKDAp
LAotICAgICAgICB0eXBlXyh0eXBlKSwKLSAgICAgICAgcGxheV9jb3VudF8oMCksCi0gICAgICAg
IHJlY19jb3VudF8oMCksCi0gICAgICAgIGF1ZGlvX3N0cmVhbV8obnVsbHB0cikge30KLQotICB2
aXJ0dWFsIH5Nb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkKCkge30KLQotICAvLyBTZXQgZGVmYXVs
dCBhY3Rpb25zIG9mIHRoZSBtb2NrIG9iamVjdC4gV2UgYXJlIGRlbGVnYXRpbmcgdG8gZmFrZQot
ICAvLyBpbXBsZW1lbnRhdGlvbnMgKG9mIEF1ZGlvU3RyZWFtSW50ZXJmYWNlKSBoZXJlLgotICB2
b2lkIEhhbmRsZUNhbGxiYWNrcyhydGM6OkV2ZW50KiB0ZXN0X2lzX2RvbmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgIEF1ZGlvU3RyZWFtSW50ZXJmYWNlKiBhdWRpb19zdHJlYW0sCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBudW1fY2FsbGJhY2tzKSB7Ci0gICAgdGVzdF9pc19kb25lXyA9
IHRlc3RfaXNfZG9uZTsKLSAgICBhdWRpb19zdHJlYW1fID0gYXVkaW9fc3RyZWFtOwotICAgIG51
bV9jYWxsYmFja3NfID0gbnVtX2NhbGxiYWNrczsKLSAgICBpZiAocGxheV9tb2RlKCkpIHsKLSAg
ICAgIE9OX0NBTEwoKnRoaXMsIE5lZWRNb3JlUGxheURhdGEoXywgXywgXywgXywgXywgXywgXywg
XykpCi0gICAgICAgICAgLldpbGxCeURlZmF1bHQoCi0gICAgICAgICAgICAgIEludm9rZSh0aGlz
LCAmTW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZDo6UmVhbE5lZWRNb3JlUGxheURhdGEpKTsKLSAg
ICB9Ci0gICAgaWYgKHJlY19tb2RlKCkpIHsKLSAgICAgIE9OX0NBTEwoKnRoaXMsIFJlY29yZGVk
RGF0YUlzQXZhaWxhYmxlKF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8pKQotICAgICAgICAg
IC5XaWxsQnlEZWZhdWx0KEludm9rZSgKLSAgICAgICAgICAgICAgdGhpcywgJk1vY2tBdWRpb1Ry
YW5zcG9ydEFuZHJvaWQ6OlJlYWxSZWNvcmRlZERhdGFJc0F2YWlsYWJsZSkpOwotICAgIH0KLSAg
fQotCi0gIGludDMyX3QgUmVhbFJlY29yZGVkRGF0YUlzQXZhaWxhYmxlKGNvbnN0IHZvaWQqIGF1
ZGlvU2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IG5TYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3QgbkJ5dGVzUGVyU2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgbkNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBzYW1wbGVzUGVyU2VjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCB0b3RhbERlbGF5TVMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2xv
Y2tEcmlmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu
dDMyX3QgY3VycmVudE1pY0xldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBib29sIGtleVByZXNzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90JiBuZXdNaWNMZXZlbCkgeyAgLy8gTk9MSU5UCi0gICAgRVhQRUNU
X1RSVUUocmVjX21vZGUoKSkgPDwgIk5vIHRlc3QgaXMgZXhwZWN0aW5nIHRoZXNlIGNhbGxiYWNr
cy4iOwotICAgIHJlY19jb3VudF8rKzsKLSAgICAvLyBQcm9jZXNzIHRoZSByZWNvcmRlZCBhdWRp
byBzdHJlYW0gaWYgYW4gQXVkaW9TdHJlYW1JbnRlcmZhY2UKLSAgICAvLyBpbXBsZW1lbnRhdGlv
biBleGlzdHMuCi0gICAgaWYgKGF1ZGlvX3N0cmVhbV8pIHsKLSAgICAgIGF1ZGlvX3N0cmVhbV8t
PldyaXRlKGF1ZGlvU2FtcGxlcywgblNhbXBsZXMpOwotICAgIH0KLSAgICBpZiAoUmVjZWl2ZWRF
bm91Z2hDYWxsYmFja3MoKSkgewotICAgICAgdGVzdF9pc19kb25lXy0+U2V0KCk7Ci0gICAgfQot
ICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBSZWFsTmVlZE1vcmVQbGF5RGF0YShjb25z
dCBzaXplX3QgblNhbXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IG5CeXRlc1BlclNhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3QgbkNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVpbnQzMl90IHNhbXBsZXNQZXJTZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCogYXVkaW9TYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCYgblNhbXBsZXNPdXQsICAvLyBOT0xJTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ2NF90KiBlbGFwc2VkX3RpbWVfbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50NjRfdCogbnRwX3RpbWVfbXMpIHsKLSAgICBFWFBFQ1RfVFJVRShwbGF5X21vZGUo
KSkgPDwgIk5vIHRlc3QgaXMgZXhwZWN0aW5nIHRoZXNlIGNhbGxiYWNrcy4iOwotICAgIHBsYXlf
Y291bnRfKys7Ci0gICAgblNhbXBsZXNPdXQgPSBuU2FtcGxlczsKLSAgICAvLyBSZWFkIChwb3Nz
aWJseSBwcm9jZXNzZWQpIGF1ZGlvIHN0cmVhbSBzYW1wbGVzIHRvIGJlIHBsYXllZCBvdXQgaWYg
YW4KLSAgICAvLyBBdWRpb1N0cmVhbUludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBleGlzdHMuCi0g
ICAgaWYgKGF1ZGlvX3N0cmVhbV8pIHsKLSAgICAgIGF1ZGlvX3N0cmVhbV8tPlJlYWQoYXVkaW9T
YW1wbGVzLCBuU2FtcGxlcyk7Ci0gICAgfQotICAgIGlmIChSZWNlaXZlZEVub3VnaENhbGxiYWNr
cygpKSB7Ci0gICAgICB0ZXN0X2lzX2RvbmVfLT5TZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci0gIH0KLQotICBib29sIFJlY2VpdmVkRW5vdWdoQ2FsbGJhY2tzKCkgewotICAgIGJvb2wgcmVj
b3JkaW5nX2RvbmUgPSBmYWxzZTsKLSAgICBpZiAocmVjX21vZGUoKSkKLSAgICAgIHJlY29yZGlu
Z19kb25lID0gcmVjX2NvdW50XyA+PSBudW1fY2FsbGJhY2tzXzsKLSAgICBlbHNlCi0gICAgICBy
ZWNvcmRpbmdfZG9uZSA9IHRydWU7Ci0KLSAgICBib29sIHBsYXlvdXRfZG9uZSA9IGZhbHNlOwot
ICAgIGlmIChwbGF5X21vZGUoKSkKLSAgICAgIHBsYXlvdXRfZG9uZSA9IHBsYXlfY291bnRfID49
IG51bV9jYWxsYmFja3NfOwotICAgIGVsc2UKLSAgICAgIHBsYXlvdXRfZG9uZSA9IHRydWU7Ci0K
LSAgICByZXR1cm4gcmVjb3JkaW5nX2RvbmUgJiYgcGxheW91dF9kb25lOwotICB9Ci0KLSAgYm9v
bCBwbGF5X21vZGUoKSBjb25zdCB7IHJldHVybiB0eXBlXyAmIGtQbGF5b3V0OyB9Ci0gIGJvb2wg
cmVjX21vZGUoKSBjb25zdCB7IHJldHVybiB0eXBlXyAmIGtSZWNvcmRpbmc7IH0KLQotIHByaXZh
dGU6Ci0gIHJ0Yzo6RXZlbnQqIHRlc3RfaXNfZG9uZV87Ci0gIHNpemVfdCBudW1fY2FsbGJhY2tz
XzsKLSAgaW50IHR5cGVfOwotICBzaXplX3QgcGxheV9jb3VudF87Ci0gIHNpemVfdCByZWNfY291
bnRfOwotICBBdWRpb1N0cmVhbUludGVyZmFjZSogYXVkaW9fc3RyZWFtXzsKLSAgc3RkOjp1bmlx
dWVfcHRyPExhdGVuY3lNZWFzdXJpbmdBdWRpb1N0cmVhbT4gbGF0ZW5jeV9hdWRpb19zdHJlYW1f
OwotfTsKLQotLy8gQXVkaW9EZXZpY2VUZXN0IHRlc3QgZml4dHVyZS4KLWNsYXNzIEF1ZGlvRGV2
aWNlVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgQXVkaW9E
ZXZpY2VUZXN0KCkgOiB0YXNrX3F1ZXVlX2ZhY3RvcnlfKENyZWF0ZURlZmF1bHRUYXNrUXVldWVG
YWN0b3J5KCkpIHsKLSAgICAvLyBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiBKVk0gYW5kIGFw
cGxpY2F0aW9uIGNvbnRleHQuIEVuc3VyZXMgdGhhdCB3ZQotICAgIC8vIGNhbiBkbyBjYWxscyBi
ZXR3ZWVuIEMrKyBhbmQgSmF2YS4gSW5pdGlhbGl6ZXMgYm90aCBKYXZhIGFuZCBPcGVuU0wgRVMK
LSAgICAvLyBpbXBsZW1lbnRhdGlvbnMuCi0gICAgd2VicnRjOjphdWRpb2RldmljZW1vZHVsZTo6
RW5zdXJlSW5pdGlhbGl6ZWQoKTsKLSAgICAvLyBDcmVhdGVzIGFuIGF1ZGlvIGRldmljZSB1c2lu
ZyBhIGRlZmF1bHQgYXVkaW8gbGF5ZXIuCi0gICAgYXVkaW9fZGV2aWNlXyA9IENyZWF0ZUF1ZGlv
RGV2aWNlKEF1ZGlvRGV2aWNlTW9kdWxlOjprUGxhdGZvcm1EZWZhdWx0QXVkaW8pOwotICAgIEVY
UEVDVF9ORShhdWRpb19kZXZpY2VfLmdldCgpLCBudWxscHRyKTsKLSAgICBFWFBFQ1RfRVEoMCwg
YXVkaW9fZGV2aWNlXy0+SW5pdCgpKTsKLSAgICBwbGF5b3V0X3BhcmFtZXRlcnNfID0gYXVkaW9f
bWFuYWdlcigpLT5HZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCk7Ci0gICAgcmVjb3JkX3BhcmFt
ZXRlcnNfID0gYXVkaW9fbWFuYWdlcigpLT5HZXRSZWNvcmRBdWRpb1BhcmFtZXRlcnMoKTsKLSAg
ICBidWlsZF9pbmZvXy5yZXNldChuZXcgQnVpbGRJbmZvKCkpOwotICB9Ci0gIHZpcnR1YWwgfkF1
ZGlvRGV2aWNlVGVzdCgpIHsgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZV8tPlRlcm1pbmF0ZSgp
KTsgfQotCi0gIGludCBwbGF5b3V0X3NhbXBsZV9yYXRlKCkgY29uc3QgeyByZXR1cm4gcGxheW91
dF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpOyB9Ci0gIGludCByZWNvcmRfc2FtcGxlX3JhdGUo
KSBjb25zdCB7IHJldHVybiByZWNvcmRfcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKTsgfQotICBz
aXplX3QgcGxheW91dF9jaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIHBsYXlvdXRfcGFyYW1ldGVy
c18uY2hhbm5lbHMoKTsgfQotICBzaXplX3QgcmVjb3JkX2NoYW5uZWxzKCkgY29uc3QgeyByZXR1
cm4gcmVjb3JkX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7IH0KLSAgc2l6ZV90IHBsYXlvdXRfZnJh
bWVzX3Blcl8xMG1zX2J1ZmZlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gcGxheW91dF9wYXJhbWV0
ZXJzXy5mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCk7Ci0gIH0KLSAgc2l6ZV90IHJlY29yZF9mcmFt
ZXNfcGVyXzEwbXNfYnVmZmVyKCkgY29uc3QgewotICAgIHJldHVybiByZWNvcmRfcGFyYW1ldGVy
c18uZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpOwotICB9Ci0KLSAgaW50IHRvdGFsX2RlbGF5X21z
KCkgY29uc3QgewotICAgIHJldHVybiBhdWRpb19tYW5hZ2VyKCktPkdldERlbGF5RXN0aW1hdGVJ
bk1pbGxpc2Vjb25kcygpOwotICB9Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNl
TW9kdWxlPiBhdWRpb19kZXZpY2UoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGF1ZGlvX2RldmljZV87
Ci0gIH0KLQotICBBdWRpb0RldmljZU1vZHVsZUltcGwqIGF1ZGlvX2RldmljZV9pbXBsKCkgY29u
c3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb0RldmljZU1vZHVsZUltcGwqPihhdWRp
b19kZXZpY2VfLmdldCgpKTsKLSAgfQotCi0gIEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcigp
IGNvbnN0IHsKLSAgICByZXR1cm4gYXVkaW9fZGV2aWNlX2ltcGwoKS0+R2V0QW5kcm9pZEF1ZGlv
TWFuYWdlckZvclRlc3QoKTsKLSAgfQotCi0gIEF1ZGlvTWFuYWdlciogR2V0QXVkaW9NYW5hZ2Vy
KEF1ZGlvRGV2aWNlTW9kdWxlKiBhZG0pIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QXVkaW9EZXZpY2VNb2R1bGVJbXBsKj4oYWRtKQotICAgICAgICAtPkdldEFuZHJvaWRBdWRpb01h
bmFnZXJGb3JUZXN0KCk7Ci0gIH0KLQotICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNl
X2J1ZmZlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gYXVkaW9fZGV2aWNlX2ltcGwoKS0+R2V0QXVk
aW9EZXZpY2VCdWZmZXIoKTsKLSAgfQotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0Rldmlj
ZU1vZHVsZT4gQ3JlYXRlQXVkaW9EZXZpY2UoCi0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6QXVk
aW9MYXllciBhdWRpb19sYXllcikgewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0Rldmlj
ZU1vZHVsZT4gbW9kdWxlKAotICAgICAgICBBdWRpb0RldmljZU1vZHVsZTo6Q3JlYXRlKGF1ZGlv
X2xheWVyLCB0YXNrX3F1ZXVlX2ZhY3RvcnlfLmdldCgpKSk7Ci0gICAgcmV0dXJuIG1vZHVsZTsK
LSAgfQotCi0gIC8vIFJldHVybnMgZmlsZSBuYW1lIHJlbGF0aXZlIHRvIHRoZSByZXNvdXJjZSBy
b290IGdpdmVuIGEgc2FtcGxlIHJhdGUuCi0gIHN0ZDo6c3RyaW5nIEdldEZpbGVOYW1lKGludCBz
YW1wbGVfcmF0ZSkgewotICAgIEVYUEVDVF9UUlVFKHNhbXBsZV9yYXRlID09IDQ4MDAwIHx8IHNh
bXBsZV9yYXRlID09IDQ0MTAwKTsKLSAgICBjaGFyIGZuYW1lWzY0XTsKLSAgICBzbnByaW50Zihm
bmFtZSwgc2l6ZW9mKGZuYW1lKSwgImF1ZGlvX2RldmljZS9hdWRpb19zaG9ydCVkIiwKLSAgICAg
ICAgICAgICBzYW1wbGVfcmF0ZSAvIDEwMDApOwotICAgIHN0ZDo6c3RyaW5nIGZpbGVfbmFtZSh3
ZWJydGM6OnRlc3Q6OlJlc291cmNlUGF0aChmbmFtZSwgInBjbSIpKTsKLSAgICBFWFBFQ1RfVFJV
RSh0ZXN0OjpGaWxlRXhpc3RzKGZpbGVfbmFtZSkpOwotI2lmZGVmIEVOQUJMRV9QUklOVEYKLSAg
ICBQUklOVCgiZmlsZSBuYW1lOiAlc1xuIiwgZmlsZV9uYW1lLmNfc3RyKCkpOwotICAgIGNvbnN0
IHNpemVfdCBieXRlcyA9IHRlc3Q6OkdldEZpbGVTaXplKGZpbGVfbmFtZSk7Ci0gICAgUFJJTlQo
ImZpbGUgc2l6ZTogJSIgUlRDX1BSSXVTICIgW2J5dGVzXVxuIiwgYnl0ZXMpOwotICAgIFBSSU5U
KCJmaWxlIHNpemU6ICUiIFJUQ19QUkl1UyAiIFtzYW1wbGVzXVxuIiwgYnl0ZXMgLyBrQnl0ZXNQ
ZXJTYW1wbGUpOwotICAgIGNvbnN0IGludCBzZWNvbmRzID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihieXRlcyAvIChzYW1wbGVfcmF0ZSAqIGtCeXRlc1BlclNhbXBsZSkpOwotICAgIFBSSU5U
KCJmaWxlIHNpemU6ICVkIFtzZWNzXVxuIiwgc2Vjb25kcyk7Ci0gICAgUFJJTlQoImZpbGUgc2l6
ZTogJSIgUlRDX1BSSXVTICIgW2NhbGxiYWNrc11cbiIsCi0gICAgICAgICAgc2Vjb25kcyAqIGtO
dW1DYWxsYmFja3NQZXJTZWNvbmQpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZpbGVfbmFtZTsKLSAg
fQotCi0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIEdldEFjdGl2ZUF1ZGlvTGF5ZXIo
KSBjb25zdCB7Ci0gICAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXI7
Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5BY3RpdmVBdWRpb0xheWVyKCZhdWRp
b19sYXllcikpOwotICAgIHJldHVybiBhdWRpb19sYXllcjsKLSAgfQotCi0gIGludCBUZXN0RGVs
YXlPbkF1ZGlvTGF5ZXIoCi0gICAgICBjb25zdCBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXll
ciYgbGF5ZXJfdG9fdGVzdCkgewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1v
ZHVsZT4gYXVkaW9fZGV2aWNlOwotICAgIGF1ZGlvX2RldmljZSA9IENyZWF0ZUF1ZGlvRGV2aWNl
KGxheWVyX3RvX3Rlc3QpOwotICAgIEVYUEVDVF9ORShhdWRpb19kZXZpY2UuZ2V0KCksIG51bGxw
dHIpOwotICAgIEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlciA9IEdldEF1ZGlvTWFuYWdlcihh
dWRpb19kZXZpY2UuZ2V0KCkpOwotICAgIEVYUEVDVF9ORShhdWRpb19tYW5hZ2VyLCBudWxscHRy
KTsKLSAgICByZXR1cm4gYXVkaW9fbWFuYWdlci0+R2V0RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNv
bmRzKCk7Ci0gIH0KLQotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBUZXN0QWN0aXZl
QXVkaW9MYXllcigKLSAgICAgIGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyJiBs
YXllcl90b190ZXN0KSB7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9kdWxl
PiBhdWRpb19kZXZpY2U7Ci0gICAgYXVkaW9fZGV2aWNlID0gQ3JlYXRlQXVkaW9EZXZpY2UobGF5
ZXJfdG9fdGVzdCk7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX2RldmljZS5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlOwotICAgIEVYUEVDVF9F
USgwLCBhdWRpb19kZXZpY2UtPkFjdGl2ZUF1ZGlvTGF5ZXIoJmFjdGl2ZSkpOwotICAgIHJldHVy
biBhY3RpdmU7Ci0gIH0KLQotICBib29sIERpc2FibGVUZXN0Rm9yVGhpc0RldmljZShjb25zdCBz
dGQ6OnN0cmluZyYgbW9kZWwpIHsKLSAgICByZXR1cm4gKGJ1aWxkX2luZm9fLT5HZXREZXZpY2VN
b2RlbCgpID09IG1vZGVsKTsKLSAgfQotCi0gIC8vIFZvbHVtZSBjb250cm9sIGlzIGN1cnJlbnRs
eSBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIEphdmEgb3V0cHV0IGF1ZGlvIGxheWVyLgotICAvLyBG
b3IgT3BlblNMIEVTLCB0aGUgaW50ZXJuYWwgc3RyZWFtIHZvbHVtZSBpcyBhbHdheXMgb24gbWF4
IGxldmVsIGFuZCB0aGVyZQotICAvLyBpcyBubyBuZWVkIGZvciB0aGlzIHRlc3QgdG8gc2V0IGl0
IHRvIG1heC4KLSAgYm9vbCBBdWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250cm9sKCkgY29uc3Qg
ewotICAgIHJldHVybiBHZXRBY3RpdmVBdWRpb0xheWVyKCkgPT0gQXVkaW9EZXZpY2VNb2R1bGU6
OmtBbmRyb2lkSmF2YUF1ZGlvOwotICB9Ci0KLSAgdm9pZCBTZXRNYXhQbGF5b3V0Vm9sdW1lKCkg
ewotICAgIGlmICghQXVkaW9MYXllclN1cHBvcnRzVm9sdW1lQ29udHJvbCgpKQotICAgICAgcmV0
dXJuOwotICAgIHVpbnQzMl90IG1heF92b2x1bWU7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rl
dmljZSgpLT5NYXhTcGVha2VyVm9sdW1lKCZtYXhfdm9sdW1lKSk7Ci0gICAgRVhQRUNUX0VRKDAs
IGF1ZGlvX2RldmljZSgpLT5TZXRTcGVha2VyVm9sdW1lKG1heF92b2x1bWUpKTsKLSAgfQotCi0g
IHZvaWQgRGlzYWJsZUJ1aWx0SW5BRUNJZkF2YWlsYWJsZSgpIHsKLSAgICBpZiAoYXVkaW9fZGV2
aWNlKCktPkJ1aWx0SW5BRUNJc0F2YWlsYWJsZSgpKSB7Ci0gICAgICBFWFBFQ1RfRVEoMCwgYXVk
aW9fZGV2aWNlKCktPkVuYWJsZUJ1aWx0SW5BRUMoZmFsc2UpKTsKLSAgICB9Ci0gIH0KLQotICB2
b2lkIFN0YXJ0UGxheW91dCgpIHsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPlBs
YXlvdXRJc0luaXRpYWxpemVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+
UGxheWluZygpKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPkluaXRQbGF5b3V0
KCkpOwotICAgIEVYUEVDVF9UUlVFKGF1ZGlvX2RldmljZSgpLT5QbGF5b3V0SXNJbml0aWFsaXpl
ZCgpKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0YXJ0UGxheW91dCgpKTsK
LSAgICBFWFBFQ1RfVFJVRShhdWRpb19kZXZpY2UoKS0+UGxheWluZygpKTsKLSAgfQotCi0gIHZv
aWQgU3RvcFBsYXlvdXQoKSB7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdG9w
UGxheW91dCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPlBsYXlpbmcoKSk7
Ci0gICAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5QbGF5b3V0SXNJbml0aWFsaXplZCgp
KTsKLSAgfQotCi0gIHZvaWQgU3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgRVhQRUNUX0ZBTFNFKGF1
ZGlvX2RldmljZSgpLT5SZWNvcmRpbmdJc0luaXRpYWxpemVkKCkpOwotICAgIEVYUEVDVF9GQUxT
RShhdWRpb19kZXZpY2UoKS0+UmVjb3JkaW5nKCkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19k
ZXZpY2UoKS0+SW5pdFJlY29yZGluZygpKTsKLSAgICBFWFBFQ1RfVFJVRShhdWRpb19kZXZpY2Uo
KS0+UmVjb3JkaW5nSXNJbml0aWFsaXplZCgpKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2
aWNlKCktPlN0YXJ0UmVjb3JkaW5nKCkpOwotICAgIEVYUEVDVF9UUlVFKGF1ZGlvX2RldmljZSgp
LT5SZWNvcmRpbmcoKSk7Ci0gIH0KLQotICB2b2lkIFN0b3BSZWNvcmRpbmcoKSB7Ci0gICAgRVhQ
RUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdG9wUmVjb3JkaW5nKCkpOwotICAgIEVYUEVDVF9G
QUxTRShhdWRpb19kZXZpY2UoKS0+UmVjb3JkaW5nKCkpOwotICB9Ci0KLSAgaW50IEdldE1heFNw
ZWFrZXJWb2x1bWUoKSBjb25zdCB7Ci0gICAgdWludDMyX3QgbWF4X3ZvbHVtZSgwKTsKLSAgICBF
WFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPk1heFNwZWFrZXJWb2x1bWUoJm1heF92b2x1bWUp
KTsKLSAgICByZXR1cm4gbWF4X3ZvbHVtZTsKLSAgfQotCi0gIGludCBHZXRNaW5TcGVha2VyVm9s
dW1lKCkgY29uc3QgewotICAgIHVpbnQzMl90IG1pbl92b2x1bWUoMCk7Ci0gICAgRVhQRUNUX0VR
KDAsIGF1ZGlvX2RldmljZSgpLT5NaW5TcGVha2VyVm9sdW1lKCZtaW5fdm9sdW1lKSk7Ci0gICAg
cmV0dXJuIG1pbl92b2x1bWU7Ci0gIH0KLQotICBpbnQgR2V0U3BlYWtlclZvbHVtZSgpIGNvbnN0
IHsKLSAgICB1aW50MzJfdCB2b2x1bWUoMCk7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rldmlj
ZSgpLT5TcGVha2VyVm9sdW1lKCZ2b2x1bWUpKTsKLSAgICByZXR1cm4gdm9sdW1lOwotICB9Ci0K
LSAgcnRjOjpFdmVudCB0ZXN0X2lzX2RvbmVfOwotICBzdGQ6OnVuaXF1ZV9wdHI8VGFza1F1ZXVl
RmFjdG9yeT4gdGFza19xdWV1ZV9mYWN0b3J5XzsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlv
RGV2aWNlTW9kdWxlPiBhdWRpb19kZXZpY2VfOwotICBBdWRpb1BhcmFtZXRlcnMgcGxheW91dF9w
YXJhbWV0ZXJzXzsKLSAgQXVkaW9QYXJhbWV0ZXJzIHJlY29yZF9wYXJhbWV0ZXJzXzsKLSAgc3Rk
Ojp1bmlxdWVfcHRyPEJ1aWxkSW5mbz4gYnVpbGRfaW5mb187Ci19OwotCi1URVNUX0YoQXVkaW9E
ZXZpY2VUZXN0LCBDb25zdHJ1Y3REZXN0cnVjdCkgewotICAvLyBVc2luZyB0aGUgdGVzdCBmaXh0
dXJlIHRvIGNyZWF0ZSBhbmQgZGVzdHJ1Y3QgdGhlIGF1ZGlvIGRldmljZSBtb2R1bGUuCi19Ci0K
LS8vIFdlIGFsd2F5cyBhc2sgZm9yIGEgZGVmYXVsdCBhdWRpbyBsYXllciB3aGVuIHRoZSBBRE0g
aXMgY29uc3RydWN0ZWQuIEJ1dCB0aGUKLS8vIEFETSB3aWxsIHRoZW4gaW50ZXJuYWxseSBzZXQg
dGhlIGJlc3Qgc3VpdGFibGUgY29tYmluYXRpb24gb2YgYXVkaW8gbGF5ZXJzLAotLy8gZm9yIGlu
cHV0IGFuZCBvdXRwdXQgYmFzZWQgb24gaWYgbG93LWxhdGVuY3kgb3V0cHV0IGFuZC9vciBpbnB1
dCBhdWRpbyBpbgotLy8gY29tYmluYXRpb24gd2l0aCBPcGVuU0wgRVMgaXMgc3VwcG9ydGVkIG9y
IG5vdC4gVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB0aGUKLS8vIGNvcnJlY3Qgc2VsZWN0aW9uIGlz
IGRvbmUuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBWZXJpZnlEZWZhdWx0QXVkaW9MYXllcikg
ewotICBjb25zdCBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllciA9IEdl
dEFjdGl2ZUF1ZGlvTGF5ZXIoKTsKLSAgYm9vbCBsb3dfbGF0ZW5jeV9vdXRwdXQgPSBhdWRpb19t
YW5hZ2VyKCktPklzTG93TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKTsKLSAgYm9vbCBsb3dfbGF0
ZW5jeV9pbnB1dCA9IGF1ZGlvX21hbmFnZXIoKS0+SXNMb3dMYXRlbmN5UmVjb3JkU3VwcG9ydGVk
KCk7Ci0gIGJvb2wgYWF1ZGlvID0gYXVkaW9fbWFuYWdlcigpLT5Jc0FBdWRpb1N1cHBvcnRlZCgp
OwotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBleHBlY3RlZF9hdWRpb19sYXllcjsK
LSAgaWYgKGFhdWRpbykgewotICAgIGV4cGVjdGVkX2F1ZGlvX2xheWVyID0gQXVkaW9EZXZpY2VN
b2R1bGU6OmtBbmRyb2lkQUF1ZGlvQXVkaW87Ci0gIH0gZWxzZSBpZiAobG93X2xhdGVuY3lfb3V0
cHV0ICYmIGxvd19sYXRlbmN5X2lucHV0KSB7Ci0gICAgZXhwZWN0ZWRfYXVkaW9fbGF5ZXIgPSBB
dWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRPcGVuU0xFU0F1ZGlvOwotICB9IGVsc2UgaWYgKGxv
d19sYXRlbmN5X291dHB1dCAmJiAhbG93X2xhdGVuY3lfaW5wdXQpIHsKLSAgICBleHBlY3RlZF9h
dWRpb19sYXllciA9Ci0gICAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFJbnB1
dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW87Ci0gIH0gZWxzZSB7Ci0gICAgZXhwZWN0ZWRfYXVkaW9f
bGF5ZXIgPSBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhQXVkaW87Ci0gIH0KLSAgRVhQ
RUNUX0VRKGV4cGVjdGVkX2F1ZGlvX2xheWVyLCBhdWRpb19sYXllcik7Ci19Ci0KLS8vIFZlcmlm
eSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGV4cGxpY2l0bHkgY3JlYXRlIHRoZSB0d28gdHlwZXMg
b2Ygc3VwcG9ydGVkCi0vLyBBRE1zLiBUaGVzZSB0d28gdGVzdHMgb3ZlcnJpZGVzIHRoZSBkZWZh
dWx0IHNlbGVjdGlvbiBvZiBuYXRpdmUgYXVkaW8gbGF5ZXIKLS8vIGJ5IGlnbm9yaW5nIGlmIHRo
ZSBkZXZpY2Ugc3VwcG9ydHMgbG93LWxhdGVuY3kgb3V0cHV0IG9yIG5vdC4KLVRFU1RfRihBdWRp
b0RldmljZVRlc3QsIENvcnJlY3RBdWRpb0xheWVySXNVc2VkRm9yQ29tYmluZWRKYXZhT3BlblNM
Q29tYm8pIHsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgZXhwZWN0ZWRfbGF5ZXIg
PQotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUlucHV0QW5kT3BlblNMRVNP
dXRwdXRBdWRpbzsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlX2xheWVy
ID0KLSAgICAgIFRlc3RBY3RpdmVBdWRpb0xheWVyKGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQRUNU
X0VRKGV4cGVjdGVkX2xheWVyLCBhY3RpdmVfbGF5ZXIpOwotfQotCi1URVNUX0YoQXVkaW9EZXZp
Y2VUZXN0LCBDb3JyZWN0QXVkaW9MYXllcklzVXNlZEZvckphdmFJbkJvdGhEaXJlY3Rpb25zKSB7
Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGV4cGVjdGVkX2xheWVyID0KLSAgICAg
IEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbzsKLSAgQXVkaW9EZXZpY2VNb2R1
bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlX2xheWVyID0KLSAgICAgIFRlc3RBY3RpdmVBdWRpb0xheWVy
KGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX2xheWVyLCBhY3RpdmVfbGF5
ZXIpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBDb3JyZWN0QXVkaW9MYXllcklzVXNl
ZEZvck9wZW5TTEluQm90aERpcmVjdGlvbnMpIHsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlv
TGF5ZXIgZXhwZWN0ZWRfbGF5ZXIgPQotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lk
T3BlblNMRVNBdWRpbzsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlX2xh
eWVyID0KLSAgICAgIFRlc3RBY3RpdmVBdWRpb0xheWVyKGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQ
RUNUX0VRKGV4cGVjdGVkX2xheWVyLCBhY3RpdmVfbGF5ZXIpOwotfQotCi0vLyBUT0RPKGJ1Z3Mu
d2VicnRjLm9yZy84OTE0KQotI2lmICFkZWZpbmVkKFdFQlJUQ19BVURJT19ERVZJQ0VfSU5DTFVE
RV9BTkRST0lEX0FBVURJTykKLSNkZWZpbmUgTUFZQkVfQ29ycmVjdEF1ZGlvTGF5ZXJJc1VzZWRG
b3JBQXVkaW9JbkJvdGhEaXJlY3Rpb25zIFwKLSAgRElTQUJMRURfQ29ycmVjdEF1ZGlvTGF5ZXJJ
c1VzZWRGb3JBQXVkaW9JbkJvdGhEaXJlY3Rpb25zCi0jZWxzZQotI2RlZmluZSBNQVlCRV9Db3Jy
ZWN0QXVkaW9MYXllcklzVXNlZEZvckFBdWRpb0luQm90aERpcmVjdGlvbnMgXAotICBDb3JyZWN0
QXVkaW9MYXllcklzVXNlZEZvckFBdWRpb0luQm90aERpcmVjdGlvbnMKLSNlbmRpZgotVEVTVF9G
KEF1ZGlvRGV2aWNlVGVzdCwKLSAgICAgICBNQVlCRV9Db3JyZWN0QXVkaW9MYXllcklzVXNlZEZv
ckFBdWRpb0luQm90aERpcmVjdGlvbnMpIHsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5
ZXIgZXhwZWN0ZWRfbGF5ZXIgPQotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkQUF1
ZGlvQXVkaW87Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGFjdGl2ZV9sYXllciA9
Ci0gICAgICBUZXN0QWN0aXZlQXVkaW9MYXllcihleHBlY3RlZF9sYXllcik7Ci0gIEVYUEVDVF9F
UShleHBlY3RlZF9sYXllciwgYWN0aXZlX2xheWVyKTsKLX0KLQotLy8gVE9ETyhidWdzLndlYnJ0
Yy5vcmcvODkxNCkKLSNpZiAhZGVmaW5lZChXRUJSVENfQVVESU9fREVWSUNFX0lOQ0xVREVfQU5E
Uk9JRF9BQVVESU8pCi0jZGVmaW5lIE1BWUJFX0NvcnJlY3RBdWRpb0xheWVySXNVc2VkRm9yQ29t
YmluZWRKYXZhQUF1ZGlvQ29tYm8gXAotICBESVNBQkxFRF9Db3JyZWN0QXVkaW9MYXllcklzVXNl
ZEZvckNvbWJpbmVkSmF2YUFBdWRpb0NvbWJvCi0jZWxzZQotI2RlZmluZSBNQVlCRV9Db3JyZWN0
QXVkaW9MYXllcklzVXNlZEZvckNvbWJpbmVkSmF2YUFBdWRpb0NvbWJvIFwKLSAgQ29ycmVjdEF1
ZGlvTGF5ZXJJc1VzZWRGb3JDb21iaW5lZEphdmFBQXVkaW9Db21ibwotI2VuZGlmCi1URVNUX0Yo
QXVkaW9EZXZpY2VUZXN0LAotICAgICAgIE1BWUJFX0NvcnJlY3RBdWRpb0xheWVySXNVc2VkRm9y
Q29tYmluZWRKYXZhQUF1ZGlvQ29tYm8pIHsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5
ZXIgZXhwZWN0ZWRfbGF5ZXIgPQotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2
YUlucHV0QW5kQUF1ZGlvT3V0cHV0QXVkaW87Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xh
eWVyIGFjdGl2ZV9sYXllciA9Ci0gICAgICBUZXN0QWN0aXZlQXVkaW9MYXllcihleHBlY3RlZF9s
YXllcik7Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9sYXllciwgYWN0aXZlX2xheWVyKTsKLX0KLQot
Ly8gVGhlIEFuZHJvaWQgQURNIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgZGVsYXkgcmVwb3J0aW5n
IG1vZGVzLiBPbmUgZm9yIHRoZQotLy8gbG93LWxhdGVuY3kgb3V0cHV0IHBhdGggKGluIGNvbWJp
bmF0aW9uIHdpdGggT3BlblNMIEVTKSwgYW5kIG9uZSBmb3IgdGhlCi0vLyBoaWdoLWxhdGVuY3kg
b3V0cHV0IHBhdGggKEphdmEgYmFja2VuZHMgaW4gYm90aCBkaXJlY3Rpb25zKS4gVGhlc2UgdHdv
IHRlc3RzCi0vLyB2ZXJpZmllcyB0aGF0IHRoZSBhdWRpbyBtYW5hZ2VyIHJlcG9ydHMgY29ycmVj
dCBkZWxheSBlc3RpbWF0ZSBnaXZlbiB0aGUKLS8vIHNlbGVjdGVkIGF1ZGlvIGxheWVyLiBOb3Rl
IHRoYXQsIHRoaXMgZGVsYXkgZXN0aW1hdGUgd2lsbCBvbmx5IGJlIHV0aWxpemVkCi0vLyBpZiB0
aGUgSFcgQUVDIGlzIGRpc2FibGVkLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgVXNlc0NvcnJl
Y3REZWxheUVzdGltYXRlRm9ySGlnaExhdGVuY3lPdXRwdXRQYXRoKSB7Ci0gIEVYUEVDVF9FUShr
SGlnaExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzLAotICAgICAgICAgICAg
VGVzdERlbGF5T25BdWRpb0xheWVyKEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRp
bykpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBVc2VzQ29ycmVjdERlbGF5RXN0aW1h
dGVGb3JMb3dMYXRlbmN5T3V0cHV0UGF0aCkgewotICBFWFBFQ1RfRVEoa0xvd0xhdGVuY3lNb2Rl
RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzLAotICAgICAgICAgICAgVGVzdERlbGF5T25BdWRp
b0xheWVyKAotICAgICAgICAgICAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFJ
bnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW8pKTsKLX0KLQotLy8gRW5zdXJlIHRoYXQgdGhlIEFE
TSBpbnRlcm5hbCBhdWRpbyBkZXZpY2UgYnVmZmVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZQot
Ly8gY29ycmVjdCBzZXQgb2YgcGFyYW1ldGVycy4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFZl
cmlmeUF1ZGlvRGV2aWNlQnVmZmVyUGFyYW1ldGVycykgewotICBFWFBFQ1RfRVEocGxheW91dF9w
YXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihh
dWRpb19kZXZpY2VfYnVmZmVyKCktPlBsYXlvdXRTYW1wbGVSYXRlKCkpKTsKLSAgRVhQRUNUX0VR
KHJlY29yZF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihhdWRpb19kZXZpY2VfYnVmZmVyKCktPlJlY29yZGluZ1NhbXBsZVJhdGUoKSkpOwot
ICBFWFBFQ1RfRVEocGxheW91dF9wYXJhbWV0ZXJzXy5jaGFubmVscygpLAotICAgICAgICAgICAg
YXVkaW9fZGV2aWNlX2J1ZmZlcigpLT5QbGF5b3V0Q2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUShy
ZWNvcmRfcGFyYW1ldGVyc18uY2hhbm5lbHMoKSwKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZV9i
dWZmZXIoKS0+UmVjb3JkaW5nQ2hhbm5lbHMoKSk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRl
c3QsIEluaXRUZXJtaW5hdGUpIHsKLSAgLy8gSW5pdGlhbGl6YXRpb24gaXMgcGFydCBvZiB0aGUg
dGVzdCBmaXh0dXJlLgotICBFWFBFQ1RfVFJVRShhdWRpb19kZXZpY2UoKS0+SW5pdGlhbGl6ZWQo
KSk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+VGVybWluYXRlKCkpOwotICBFWFBF
Q1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPkluaXRpYWxpemVkKCkpOwotfQotCi1URVNUX0YoQXVk
aW9EZXZpY2VUZXN0LCBEZXZpY2VzKSB7Ci0gIC8vIERldmljZSBlbnVtZXJhdGlvbiBpcyBub3Qg
c3VwcG9ydGVkLiBWZXJpZnkgZml4ZWQgdmFsdWVzIG9ubHkuCi0gIEVYUEVDVF9FUSgxLCBhdWRp
b19kZXZpY2UoKS0+UGxheW91dERldmljZXMoKSk7Ci0gIEVYUEVDVF9FUSgxLCBhdWRpb19kZXZp
Y2UoKS0+UmVjb3JkaW5nRGV2aWNlcygpKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwg
U3BlYWtlclZvbHVtZVNob3VsZEJlQXZhaWxhYmxlKSB7Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0
cHV0IGF1ZGlvIHBhdGggZG9lcyBub3Qgc3VwcG9ydCB2b2x1bWUgY29udHJvbC4KLSAgaWYgKCFB
dWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250cm9sKCkpCi0gICAgcmV0dXJuOwotICBib29sIGF2
YWlsYWJsZTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TcGVha2VyVm9sdW1lSXNB
dmFpbGFibGUoJmF2YWlsYWJsZSkpOwotICBFWFBFQ1RfVFJVRShhdmFpbGFibGUpOwotfQotCi1U
RVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBNYXhTcGVha2VyVm9sdW1lSXNQb3NpdGl2ZSkgewotICAv
LyBUaGUgT3BlblNMIEVTIG91dHB1dCBhdWRpbyBwYXRoIGRvZXMgbm90IHN1cHBvcnQgdm9sdW1l
IGNvbnRyb2wuCi0gIGlmICghQXVkaW9MYXllclN1cHBvcnRzVm9sdW1lQ29udHJvbCgpKQotICAg
IHJldHVybjsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIEVYUEVDVF9HVChHZXRNYXhTcGVha2VyVm9s
dW1lKCksIDApOwotICBTdG9wUGxheW91dCgpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0
LCBNaW5TcGVha2VyVm9sdW1lSXNaZXJvKSB7Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0cHV0IGF1
ZGlvIHBhdGggZG9lcyBub3Qgc3VwcG9ydCB2b2x1bWUgY29udHJvbC4KLSAgaWYgKCFBdWRpb0xh
eWVyU3VwcG9ydHNWb2x1bWVDb250cm9sKCkpCi0gICAgcmV0dXJuOwotICBFWFBFQ1RfRVEoR2V0
TWluU3BlYWtlclZvbHVtZSgpLCAwKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgRGVm
YXVsdFNwZWFrZXJWb2x1bWVJc1dpdGhpbk1pbk1heCkgewotICAvLyBUaGUgT3BlblNMIEVTIG91
dHB1dCBhdWRpbyBwYXRoIGRvZXMgbm90IHN1cHBvcnQgdm9sdW1lIGNvbnRyb2wuCi0gIGlmICgh
QXVkaW9MYXllclN1cHBvcnRzVm9sdW1lQ29udHJvbCgpKQotICAgIHJldHVybjsKLSAgY29uc3Qg
aW50IGRlZmF1bHRfdm9sdW1lID0gR2V0U3BlYWtlclZvbHVtZSgpOwotICBFWFBFQ1RfR0UoZGVm
YXVsdF92b2x1bWUsIEdldE1pblNwZWFrZXJWb2x1bWUoKSk7Ci0gIEVYUEVDVF9MRShkZWZhdWx0
X3ZvbHVtZSwgR2V0TWF4U3BlYWtlclZvbHVtZSgpKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNl
VGVzdCwgU2V0U3BlYWtlclZvbHVtZUFjdHVhbGx5U2V0c1ZvbHVtZSkgewotICAvLyBUaGUgT3Bl
blNMIEVTIG91dHB1dCBhdWRpbyBwYXRoIGRvZXMgbm90IHN1cHBvcnQgdm9sdW1lIGNvbnRyb2wu
Ci0gIGlmICghQXVkaW9MYXllclN1cHBvcnRzVm9sdW1lQ29udHJvbCgpKQotICAgIHJldHVybjsK
LSAgY29uc3QgaW50IGRlZmF1bHRfdm9sdW1lID0gR2V0U3BlYWtlclZvbHVtZSgpOwotICBjb25z
dCBpbnQgbWF4X3ZvbHVtZSA9IEdldE1heFNwZWFrZXJWb2x1bWUoKTsKLSAgRVhQRUNUX0VRKDAs
IGF1ZGlvX2RldmljZSgpLT5TZXRTcGVha2VyVm9sdW1lKG1heF92b2x1bWUpKTsKLSAgaW50IG5l
d192b2x1bWUgPSBHZXRTcGVha2VyVm9sdW1lKCk7Ci0gIEVYUEVDVF9FUShuZXdfdm9sdW1lLCBt
YXhfdm9sdW1lKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TZXRTcGVha2VyVm9s
dW1lKGRlZmF1bHRfdm9sdW1lKSk7Ci19Ci0KLS8vIFRlc3RzIHRoYXQgcGxheW91dCBjYW4gYmUg
aW5pdGlhdGVkLCBzdGFydGVkIGFuZCBzdG9wcGVkLiBObyBhdWRpbyBjYWxsYmFjawotLy8gaXMg
cmVnaXN0ZXJlZCBpbiB0aGlzIHRlc3QuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTdGFydFN0
b3BQbGF5b3V0KSB7Ci0gIFN0YXJ0UGxheW91dCgpOwotICBTdG9wUGxheW91dCgpOwotICBTdGFy
dFBsYXlvdXQoKTsKLSAgU3RvcFBsYXlvdXQoKTsKLX0KLQotLy8gVGVzdHMgdGhhdCByZWNvcmRp
bmcgY2FuIGJlIGluaXRpYXRlZCwgc3RhcnRlZCBhbmQgc3RvcHBlZC4gTm8gYXVkaW8gY2FsbGJh
Y2sKLS8vIGlzIHJlZ2lzdGVyZWQgaW4gdGhpcyB0ZXN0LgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVz
dCwgU3RhcnRTdG9wUmVjb3JkaW5nKSB7Ci0gIFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIFN0b3BSZWNv
cmRpbmcoKTsKLSAgU3RhcnRSZWNvcmRpbmcoKTsKLSAgU3RvcFJlY29yZGluZygpOwotfQotCi0v
LyBWZXJpZnkgdGhhdCBjYWxsaW5nIFN0b3BQbGF5b3V0KCkgd2lsbCBsZWF2ZSB1cyBpbiBhbiB1
bmluaXRpYWxpemVkIHN0YXRlCi0vLyB3aGljaCB3aWxsIHJlcXVpcmUgYSBuZXcgY2FsbCB0byBJ
bml0UGxheW91dCgpLiBUaGlzIHRlc3QgZG9lcyBub3QgY2FsbAotLy8gU3RhcnRQbGF5b3V0KCkg
d2hpbGUgYmVpbmcgdW5pbml0aWFsaXplZCBzaW5jZSBkb2luZyBzbyB3aWxsIGhpdCBhCi0vLyBS
VENfRENIRUNLIGFuZCBkZWF0aCB0ZXN0cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBBbmRyb2lkLgot
VEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgU3RvcFBsYXlvdXRSZXF1aXJlc0luaXRUb1Jlc3RhcnQp
IHsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5Jbml0UGxheW91dCgpKTsKLSAgRVhQ
RUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdGFydFBsYXlvdXQoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBhdWRpb19kZXZpY2UoKS0+U3RvcFBsYXlvdXQoKSk7Ci0gIEVYUEVDVF9GQUxTRShhdWRpb19k
ZXZpY2UoKS0+UGxheW91dElzSW5pdGlhbGl6ZWQoKSk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGNh
bGxpbmcgU3RvcFJlY29yZGluZygpIHdpbGwgbGVhdmUgdXMgaW4gYW4gdW5pbml0aWFsaXplZCBz
dGF0ZQotLy8gd2hpY2ggd2lsbCByZXF1aXJlIGEgbmV3IGNhbGwgdG8gSW5pdFJlY29yZGluZygp
LiBUaGlzIHRlc3QgZG9lcyBub3QgY2FsbAotLy8gU3RhcnRSZWNvcmRpbmcoKSB3aGlsZSBiZWlu
ZyB1bmluaXRpYWxpemVkIHNpbmNlIGRvaW5nIHNvIHdpbGwgaGl0IGEKLS8vIFJUQ19EQ0hFQ0sg
YW5kIGRlYXRoIHRlc3RzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEFuZHJvaWQuCi1URVNUX0YoQXVk
aW9EZXZpY2VUZXN0LCBTdG9wUmVjb3JkaW5nUmVxdWlyZXNJbml0VG9SZXN0YXJ0KSB7Ci0gIEVY
UEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+SW5pdFJlY29yZGluZygpKTsKLSAgRVhQRUNUX0VR
KDAsIGF1ZGlvX2RldmljZSgpLT5TdGFydFJlY29yZGluZygpKTsKLSAgRVhQRUNUX0VRKDAsIGF1
ZGlvX2RldmljZSgpLT5TdG9wUmVjb3JkaW5nKCkpOwotICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2
aWNlKCktPlJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSk7Ci19Ci0KLS8vIFN0YXJ0IHBsYXlvdXQg
YW5kIHZlcmlmeSB0aGF0IHRoZSBuYXRpdmUgYXVkaW8gbGF5ZXIgc3RhcnRzIGFza2luZyBmb3Ig
cmVhbAotLy8gYXVkaW8gc2FtcGxlcyB0byBwbGF5IG91dCB1c2luZyB0aGUgTmVlZE1vcmVQbGF5
RGF0YSBjYWxsYmFjay4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFN0YXJ0UGxheW91dFZlcmlm
eUNhbGxiYWNrcykgewotICBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIG1vY2soa1BsYXlvdXQp
OwotICBtb2NrLkhhbmRsZUNhbGxiYWNrcygmdGVzdF9pc19kb25lXywgbnVsbHB0ciwga051bUNh
bGxiYWNrcyk7Ci0gIEVYUEVDVF9DQUxMKG1vY2ssIE5lZWRNb3JlUGxheURhdGEocGxheW91dF9m
cmFtZXNfcGVyXzEwbXNfYnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0J5dGVzUGVyU2FtcGxlLCBwbGF5b3V0X2NoYW5uZWxzKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGxheW91dF9zYW1wbGVfcmF0ZSgpLCBOb3ROdWxsKCks
IF8sIF8sIF8pKQotICAgICAgLlRpbWVzKEF0TGVhc3Qoa051bUNhbGxiYWNrcykpOwotICBFWFBF
Q1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVkaW9DYWxsYmFjaygmbW9jaykpOwot
ICBTdGFydFBsYXlvdXQoKTsKLSAgdGVzdF9pc19kb25lXy5XYWl0KGtUZXN0VGltZU91dEluTWls
bGlzZWNvbmRzKTsKLSAgU3RvcFBsYXlvdXQoKTsKLX0KLQotLy8gU3RhcnQgcmVjb3JkaW5nIGFu
ZCB2ZXJpZnkgdGhhdCB0aGUgbmF0aXZlIGF1ZGlvIGxheWVyIHN0YXJ0cyBmZWVkaW5nIHJlYWwK
LS8vIGF1ZGlvIHNhbXBsZXMgdmlhIHRoZSBSZWNvcmRlZERhdGFJc0F2YWlsYWJsZSBjYWxsYmFj
ay4KLS8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHBl
cmZvcm0gYSBzYW5pdHkgY2hlY2sgb2YKLS8vIGRlbGF5IGVzdGltYXRlcyBhcyB3ZWxsIChhcmd1
bWVudCAjNikuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTdGFydFJlY29yZGluZ1ZlcmlmeUNh
bGxiYWNrcykgewotICBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIG1vY2soa1JlY29yZGluZyk7
Ci0gIG1vY2suSGFuZGxlQ2FsbGJhY2tzKCZ0ZXN0X2lzX2RvbmVfLCBudWxscHRyLCBrTnVtQ2Fs
bGJhY2tzKTsKLSAgRVhQRUNUX0NBTEwoCi0gICAgICBtb2NrLCBSZWNvcmRlZERhdGFJc0F2YWls
YWJsZShOb3ROdWxsKCksIHJlY29yZF9mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQnl0ZXNQZXJTYW1wbGUsIHJlY29yZF9jaGFu
bmVscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3NhbXBs
ZV9yYXRlKCksIF8sIDAsIDAsIGZhbHNlLCBfKSkKLSAgICAgIC5UaW1lcyhBdExlYXN0KGtOdW1D
YWxsYmFja3MpKTsKLQotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVk
aW9DYWxsYmFjaygmbW9jaykpOwotICBTdGFydFJlY29yZGluZygpOwotICB0ZXN0X2lzX2RvbmVf
LldhaXQoa1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29uZHMpOwotICBTdG9wUmVjb3JkaW5nKCk7Ci19
Ci0KLS8vIFN0YXJ0IHBsYXlvdXQgYW5kIHJlY29yZGluZyAoZnVsbC1kdXBsZXggYXVkaW8pIGFu
ZCB2ZXJpZnkgdGhhdCBhdWRpbyBpcwotLy8gYWN0aXZlIGluIGJvdGggZGlyZWN0aW9ucy4KLVRF
U1RfRihBdWRpb0RldmljZVRlc3QsIFN0YXJ0UGxheW91dEFuZFJlY29yZGluZ1ZlcmlmeUNhbGxi
YWNrcykgewotICBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIG1vY2soa1BsYXlvdXQgfCBrUmVj
b3JkaW5nKTsKLSAgbW9jay5IYW5kbGVDYWxsYmFja3MoJnRlc3RfaXNfZG9uZV8sIG51bGxwdHIs
IGtOdW1DYWxsYmFja3MpOwotICBFWFBFQ1RfQ0FMTChtb2NrLCBOZWVkTW9yZVBsYXlEYXRhKHBs
YXlvdXRfZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtCeXRlc1BlclNhbXBsZSwgcGxheW91dF9jaGFubmVscygpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlvdXRfc2FtcGxlX3JhdGUoKSwgTm90
TnVsbCgpLCBfLCBfLCBfKSkKLSAgICAgIC5UaW1lcyhBdExlYXN0KGtOdW1DYWxsYmFja3MpKTsK
LSAgRVhQRUNUX0NBTEwoCi0gICAgICBtb2NrLCBSZWNvcmRlZERhdGFJc0F2YWlsYWJsZShOb3RO
dWxsKCksIHJlY29yZF9mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrQnl0ZXNQZXJTYW1wbGUsIHJlY29yZF9jaGFubmVscygpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3NhbXBsZV9yYXRlKCks
IF8sIDAsIDAsIGZhbHNlLCBfKSkKLSAgICAgIC5UaW1lcyhBdExlYXN0KGtOdW1DYWxsYmFja3Mp
KTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2so
Jm1vY2spKTsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIHRlc3Rf
aXNfZG9uZV8uV2FpdChrVGVzdFRpbWVPdXRJbk1pbGxpc2Vjb25kcyk7Ci0gIFN0b3BSZWNvcmRp
bmcoKTsKLSAgU3RvcFBsYXlvdXQoKTsKLX0KLQotLy8gU3RhcnQgcGxheW91dCBhbmQgcmVhZCBh
dWRpbyBmcm9tIGFuIGV4dGVybmFsIFBDTSBmaWxlIHdoZW4gdGhlIGF1ZGlvIGxheWVyCi0vLyBh
c2tzIGZvciBkYXRhIHRvIHBsYXkgb3V0LiBSZWFsIGF1ZGlvIGlzIHBsYXllZCBvdXQgaW4gdGhp
cyB0ZXN0IGJ1dCBpdCBkb2VzCi0vLyBub3QgY29udGFpbiBhbnkgZXhwbGljaXQgdmVyaWZpY2F0
aW9uIHRoYXQgdGhlIGF1ZGlvIHF1YWxpdHkgaXMgcGVyZmVjdC4KLVRFU1RfRihBdWRpb0Rldmlj
ZVRlc3QsIFJ1blBsYXlvdXRXaXRoRmlsZUFzU291cmNlKSB7Ci0gIC8vIFRPRE8oaGVucmlrYSk6
IGV4dGVuZCB0ZXN0IHdoZW4gbW9ubyBvdXRwdXQgaXMgc3VwcG9ydGVkLgotICBFWFBFQ1RfRVEo
MXUsIHBsYXlvdXRfY2hhbm5lbHMoKSk7Ci0gIE5pY2VNb2NrPE1vY2tBdWRpb1RyYW5zcG9ydEFu
ZHJvaWQ+IG1vY2soa1BsYXlvdXQpOwotICBjb25zdCBpbnQgbnVtX2NhbGxiYWNrcyA9IGtGaWxl
UGxheVRpbWVJblNlYyAqIGtOdW1DYWxsYmFja3NQZXJTZWNvbmQ7Ci0gIHN0ZDo6c3RyaW5nIGZp
bGVfbmFtZSA9IEdldEZpbGVOYW1lKHBsYXlvdXRfc2FtcGxlX3JhdGUoKSk7Ci0gIHN0ZDo6dW5p
cXVlX3B0cjxGaWxlQXVkaW9TdHJlYW0+IGZpbGVfYXVkaW9fc3RyZWFtKAotICAgICAgbmV3IEZp
bGVBdWRpb1N0cmVhbShudW1fY2FsbGJhY2tzLCBmaWxlX25hbWUsIHBsYXlvdXRfc2FtcGxlX3Jh
dGUoKSkpOwotICBtb2NrLkhhbmRsZUNhbGxiYWNrcygmdGVzdF9pc19kb25lXywgZmlsZV9hdWRp
b19zdHJlYW0uZ2V0KCksIG51bV9jYWxsYmFja3MpOwotICAvLyBTZXRNYXhQbGF5b3V0Vm9sdW1l
KCk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+UmVnaXN0ZXJBdWRpb0NhbGxiYWNr
KCZtb2NrKSk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICB0ZXN0X2lzX2RvbmVfLldhaXQoa1Rlc3RU
aW1lT3V0SW5NaWxsaXNlY29uZHMpOwotICBTdG9wUGxheW91dCgpOwotfQotCi0vLyBTdGFydCBw
bGF5b3V0IGFuZCByZWNvcmRpbmcgYW5kIHN0b3JlIHJlY29yZGVkIGRhdGEgaW4gYW4gaW50ZXJt
ZWRpYXRlIEZJRk8KLS8vIGJ1ZmZlciBmcm9tIHdoaWNoIHRoZSBwbGF5b3V0IHNpZGUgdGhlbiBy
ZWFkcyBpdHMgc2FtcGxlcyBpbiB0aGUgc2FtZSBvcmRlcgotLy8gYXMgdGhleSB3ZXJlIHN0b3Jl
ZC4gVW5kZXIgaWRlYWwgY2lyY3Vtc3RhbmNlcywgYSBjYWxsYmFjayBzZXF1ZW5jZSB3b3VsZAot
Ly8gbG9vayBsaWtlOiAuLi4rLSstKy0rLSstKy0rLS4uLiwgd2hlcmUgJysnIG1lYW5zICdwYWNr
ZXQgcmVjb3JkZWQnIGFuZCAnLScKLS8vIG1lYW5zICdwYWNrZXQgcGxheWVkJy4gVW5kZXIgc3Vj
aCBjb25kaXRpb25zLCB0aGUgRklGTyB3b3VsZCBvbmx5IGNvbnRhaW4KLS8vIG9uZSBwYWNrZXQg
b24gYXZlcmFnZS4gSG93ZXZlciwgdW5kZXIgbW9yZSByZWFsaXN0aWMgY29uZGl0aW9ucywgdGhl
IHNpemUKLS8vIG9mIHRoZSBGSUZPIHdpbGwgdmFyeSBtb3JlIGR1ZSB0byBhbiB1bmJhbGFuY2Ug
YmV0d2VlbiB0aGUgdHdvIHNpZGVzLgotLy8gVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGF0
IHRoZSBkZXZpY2UgbWFpbnRhaW5zIGEgYmFsYW5jZWQgY2FsbGJhY2stCi0vLyBzZXF1ZW5jZSBi
eSBydW5uaW5nIGluIGxvb3BiYWNrIGZvciB0ZW4gc2Vjb25kcyB3aGlsZSBtZWFzdXJpbmcgdGhl
IHNpemUKLS8vIChtYXggYW5kIGF2ZXJhZ2UpIG9mIHRoZSBGSUZPLiBUaGUgc2l6ZSBvZiB0aGUg
RklGTyBpcyBpbmNyZWFzZWQgYnkgdGhlCi0vLyByZWNvcmRpbmcgc2lkZSBhbmQgZGVjcmVhc2Vk
IGJ5IHRoZSBwbGF5b3V0IHNpZGUuCi0vLyBUT0RPKGhlbnJpa2EpOiB0dW5lIHRoZSBmaW5hbCB0
ZXN0IHBhcmFtZXRlcnMgYWZ0ZXIgcnVubmluZyB0ZXN0cyBvbiBzZXZlcmFsCi0vLyBkaWZmZXJl
bnQgZGV2aWNlcy4KLS8vIERpc2FibGluZyB0aGlzIHRlc3Qgb24gYm90cyBzaW5jZSBpdCBpcyBk
aWZmaWN1bHQgdG8gY29tZSB1cCB3aXRoIGEgcm9idXN0Ci0vLyB0ZXN0IGNvbmRpdGlvbiB0aGF0
IGFsbCB3b3JrZWQgYXMgaW50ZW5kZWQuIFRoZSBtYWluIGlzc3VlIGlzIHRoYXQsIHdoZW4KLS8v
IHN3YXJtaW5nIGlzIHVzZWQsIGFuIGluaXRpYWwgbGF0ZW5jeSBjYW4gYmUgYnVpbHQgdXAgd2hl
biB0aGUgYm90aCBzaWRlcwotLy8gc3RhcnRzIGF0IGRpZmZlcmVudCB0aW1lcy4gSGVuY2UsIHRo
ZSB0ZXN0IGNhbiBmYWlsIGV2ZW4gaWYgYXVkaW8gd29ya3MKLS8vIGFzIGludGVuZGVkLiBLZWVw
aW5nIHRoZSB0ZXN0IHNvIGl0IGNhbiBiZSBlbmFibGVkIG1hbnVhbGx5LgotLy8gaHR0cDovL2J1
Z3Mud2VicnRjLm9yZy83NzQ0Ci1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBESVNBQkxFRF9SdW5Q
bGF5b3V0QW5kUmVjb3JkaW5nSW5GdWxsRHVwbGV4KSB7Ci0gIEVYUEVDVF9FUShyZWNvcmRfY2hh
bm5lbHMoKSwgcGxheW91dF9jaGFubmVscygpKTsKLSAgRVhQRUNUX0VRKHJlY29yZF9zYW1wbGVf
cmF0ZSgpLCBwbGF5b3V0X3NhbXBsZV9yYXRlKCkpOwotICBOaWNlTW9jazxNb2NrQXVkaW9UcmFu
c3BvcnRBbmRyb2lkPiBtb2NrKGtQbGF5b3V0IHwga1JlY29yZGluZyk7Ci0gIHN0ZDo6dW5pcXVl
X3B0cjxGaWZvQXVkaW9TdHJlYW0+IGZpZm9fYXVkaW9fc3RyZWFtKAotICAgICAgbmV3IEZpZm9B
dWRpb1N0cmVhbShwbGF5b3V0X2ZyYW1lc19wZXJfMTBtc19idWZmZXIoKSkpOwotICBtb2NrLkhh
bmRsZUNhbGxiYWNrcygmdGVzdF9pc19kb25lXywgZmlmb19hdWRpb19zdHJlYW0uZ2V0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgIGtGdWxsRHVwbGV4VGltZUluU2VjICoga051bUNhbGxiYWNr
c1BlclNlY29uZCk7Ci0gIFNldE1heFBsYXlvdXRWb2x1bWUoKTsKLSAgRVhQRUNUX0VRKDAsIGF1
ZGlvX2RldmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2soJm1vY2spKTsKLSAgU3RhcnRSZWNv
cmRpbmcoKTsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIHRlc3RfaXNfZG9uZV8uV2FpdCgKLSAgICAg
IHN0ZDo6bWF4KGtUZXN0VGltZU91dEluTWlsbGlzZWNvbmRzLCAxMDAwICoga0Z1bGxEdXBsZXhU
aW1lSW5TZWMpKTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgU3RvcFJlY29yZGluZygpOwotCi0gIC8v
IFRoZXNlIHRocmVzaG9sZHMgYXJlIHNldCByYXRoZXIgaGlnaCB0byBhY2NvbW9kYXRlIGRpZmZl
cmVuY2VzIGluIGhhcmR3YXJlCi0gIC8vIGluIHNldmVyYWwgZGV2aWNlcywgc28gdGhpcyB0ZXN0
IGNhbiBiZSB1c2VkIGluIHN3YXJtaW5nLgotICAvLyBTZWUgaHR0cDovL2J1Z3Mud2VicnRjLm9y
Zy82NDY0Ci0gIEVYUEVDVF9MRShmaWZvX2F1ZGlvX3N0cmVhbS0+YXZlcmFnZV9zaXplKCksIDYw
dSk7Ci0gIEVYUEVDVF9MRShmaWZvX2F1ZGlvX3N0cmVhbS0+bGFyZ2VzdF9zaXplKCksIDcwdSk7
Ci19Ci0KLS8vIE1lYXN1cmVzIGxvb3BiYWNrIGxhdGVuY3kgYW5kIHJlcG9ydHMgdGhlIG1pbiwg
bWF4IGFuZCBhdmVyYWdlIHZhbHVlcyBmb3IKLS8vIGEgZnVsbCBkdXBsZXggYXVkaW8gc2Vzc2lv
bi4KLS8vIFRoZSBsYXRlbmN5IGlzIG1lYXN1cmVkIGxpa2Ugc286Ci0vLyAtIEluc2VydCBpbXB1
bHNlcyBwZXJpb2RpY2FsbHkgb24gdGhlIG91dHB1dCBzaWRlLgotLy8gLSBEZXRlY3QgdGhlIGlt
cHVsc2VzIG9uIHRoZSBpbnB1dCBzaWRlLgotLy8gLSBNZWFzdXJlIHRoZSB0aW1lIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0aGUgdHJhbnNtaXQgdGltZSBhbmQgcmVjZWl2ZSB0aW1lLgotLy8gLSBTdG9y
ZSB0aW1lIGRpZmZlcmVuY2VzIGluIGEgdmVjdG9yIGFuZCBjYWxjdWxhdGUgbWluLCBtYXggYW5k
IGF2ZXJhZ2UuCi0vLyBUaGlzIHRlc3QgcmVxdWlyZXMgYSBzcGVjaWFsIGhhcmR3YXJlIGNhbGxl
ZCBBdWRpbyBMb29wYmFjayBEb25nbGUuCi0vLyBTZWUgaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNv
bS9kZXZpY2VzL2F1ZGlvL2xvb3BiYWNrLmh0bWwgZm9yIGRldGFpbHMuCi1URVNUX0YoQXVkaW9E
ZXZpY2VUZXN0LCBESVNBQkxFRF9NZWFzdXJlTG9vcGJhY2tMYXRlbmN5KSB7Ci0gIEVYUEVDVF9F
UShyZWNvcmRfY2hhbm5lbHMoKSwgcGxheW91dF9jaGFubmVscygpKTsKLSAgRVhQRUNUX0VRKHJl
Y29yZF9zYW1wbGVfcmF0ZSgpLCBwbGF5b3V0X3NhbXBsZV9yYXRlKCkpOwotICBOaWNlTW9jazxN
b2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkPiBtb2NrKGtQbGF5b3V0IHwga1JlY29yZGluZyk7Ci0g
IHN0ZDo6dW5pcXVlX3B0cjxMYXRlbmN5TWVhc3VyaW5nQXVkaW9TdHJlYW0+IGxhdGVuY3lfYXVk
aW9fc3RyZWFtKAotICAgICAgbmV3IExhdGVuY3lNZWFzdXJpbmdBdWRpb1N0cmVhbShwbGF5b3V0
X2ZyYW1lc19wZXJfMTBtc19idWZmZXIoKSkpOwotICBtb2NrLkhhbmRsZUNhbGxiYWNrcygmdGVz
dF9pc19kb25lXywgbGF0ZW5jeV9hdWRpb19zdHJlYW0uZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgIGtNZWFzdXJlTGF0ZW5jeVRpbWVJblNlYyAqIGtOdW1DYWxsYmFja3NQZXJTZWNvbmQp
OwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVkaW9DYWxsYmFjaygm
bW9jaykpOwotICBTZXRNYXhQbGF5b3V0Vm9sdW1lKCk7Ci0gIERpc2FibGVCdWlsdEluQUVDSWZB
dmFpbGFibGUoKTsKLSAgU3RhcnRSZWNvcmRpbmcoKTsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIHRl
c3RfaXNfZG9uZV8uV2FpdCgKLSAgICAgIHN0ZDo6bWF4KGtUZXN0VGltZU91dEluTWlsbGlzZWNv
bmRzLCAxMDAwICoga01lYXN1cmVMYXRlbmN5VGltZUluU2VjKSk7Ci0gIFN0b3BQbGF5b3V0KCk7
Ci0gIFN0b3BSZWNvcmRpbmcoKTsKLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgbnVtYmVy
IG9mIHRyYW5zbWl0dGVkIGltcHVsc2VzIGFyZSBkZXRlY3RlZC4KLSAgRVhQRUNUX0VRKGxhdGVu
Y3lfYXVkaW9fc3RyZWFtLT5udW1fbGF0ZW5jeV92YWx1ZXMoKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHNpemVfdD4oCi0gICAgICAgICAgICAgICAga0ltcHVsc2VGcmVxdWVuY3lJbkh6ICog
a01lYXN1cmVMYXRlbmN5VGltZUluU2VjIC0gMSkpOwotICBsYXRlbmN5X2F1ZGlvX3N0cmVhbS0+
UHJpbnRSZXN1bHRzKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFu
YWdlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4MTM3YjU5ZTI4NWUwNTM4
NzI4MzljNzQ1MThiNzU2ZDBjZGFmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuY2MKKysrIC9kZXYvbnVs
bApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJt
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLQotI2luY2x1ZGUg
PHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlv
X2NvbW1vbi5oIgotI2luY2x1ZGUgIm1vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5k
cm9pZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJy
dGNfYmFzZS9wbGF0Zm9ybV90aHJlYWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIEF1
ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFuYWdlciBpbXBsZW1lbnRhdGlvbgotQXVkaW9NYW5hZ2Vy
OjpKYXZhQXVkaW9NYW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyKAotICAgIE5hdGl2ZVJlZ2lzdHJh
dGlvbiogbmF0aXZlX3JlZywKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRpb19t
YW5hZ2VyKQotICAgIDogYXVkaW9fbWFuYWdlcl8oc3RkOjptb3ZlKGF1ZGlvX21hbmFnZXIpKSwK
LSAgICAgIGluaXRfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJpbml0IiwgIigpWiIpKSwKLSAg
ICAgIGRpc3Bvc2VfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJkaXNwb3NlIiwgIigpViIpKSwK
LSAgICAgIGlzX2NvbW11bmljYXRpb25fbW9kZV9lbmFibGVkXygKLSAgICAgICAgICBuYXRpdmVf
cmVnLT5HZXRNZXRob2RJZCgiaXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQiLCAiKClaIikpLAot
ICAgICAgaXNfZGV2aWNlX2JsYWNrbGlzdGVkX2Zvcl9vcGVuX3NsZXNfdXNhZ2VfKAotICAgICAg
ICAgIG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJpc0RldmljZUJsYWNrbGlzdGVkRm9yT3BlblNM
RVNVc2FnZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigpWiIpKSB7Ci0g
IFJUQ19MT0coSU5GTykgPDwgIkphdmFBdWRpb01hbmFnZXI6OmN0b3IiOwotfQotCi1BdWRpb01h
bmFnZXI6OkphdmFBdWRpb01hbmFnZXI6On5KYXZhQXVkaW9NYW5hZ2VyKCkgewotICBSVENfTE9H
KElORk8pIDw8ICJKYXZhQXVkaW9NYW5hZ2VyOjp+ZHRvciI7Ci19Ci0KLWJvb2wgQXVkaW9NYW5h
Z2VyOjpKYXZhQXVkaW9NYW5hZ2VyOjpJbml0KCkgewotICByZXR1cm4gYXVkaW9fbWFuYWdlcl8t
PkNhbGxCb29sZWFuTWV0aG9kKGluaXRfKTsKLX0KLQotdm9pZCBBdWRpb01hbmFnZXI6OkphdmFB
dWRpb01hbmFnZXI6OkNsb3NlKCkgewotICBhdWRpb19tYW5hZ2VyXy0+Q2FsbFZvaWRNZXRob2Qo
ZGlzcG9zZV8pOwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFuYWdlcjo6SXND
b21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKSB7Ci0gIHJldHVybiBhdWRpb19tYW5hZ2VyXy0+Q2Fs
bEJvb2xlYW5NZXRob2QoaXNfY29tbXVuaWNhdGlvbl9tb2RlX2VuYWJsZWRfKTsKLX0KLQotYm9v
bCBBdWRpb01hbmFnZXI6OkphdmFBdWRpb01hbmFnZXI6OklzRGV2aWNlQmxhY2tsaXN0ZWRGb3JP
cGVuU0xFU1VzYWdlKCkgewotICByZXR1cm4gYXVkaW9fbWFuYWdlcl8tPkNhbGxCb29sZWFuTWV0
aG9kKAotICAgICAgaXNfZGV2aWNlX2JsYWNrbGlzdGVkX2Zvcl9vcGVuX3NsZXNfdXNhZ2VfKTsK
LX0KLQotLy8gQXVkaW9NYW5hZ2VyIGltcGxlbWVudGF0aW9uCi1BdWRpb01hbmFnZXI6OkF1ZGlv
TWFuYWdlcigpCi0gICAgOiBqX2Vudmlyb25tZW50XyhKVk06OkdldEluc3RhbmNlKCktPmVudmly
b25tZW50KCkpLAotICAgICAgYXVkaW9fbGF5ZXJfKEF1ZGlvRGV2aWNlTW9kdWxlOjprUGxhdGZv
cm1EZWZhdWx0QXVkaW8pLAotICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSwKLSAgICAgIGhhcmR3
YXJlX2FlY18oZmFsc2UpLAotICAgICAgaGFyZHdhcmVfYWdjXyhmYWxzZSksCi0gICAgICBoYXJk
d2FyZV9uc18oZmFsc2UpLAotICAgICAgbG93X2xhdGVuY3lfcGxheW91dF8oZmFsc2UpLAotICAg
ICAgbG93X2xhdGVuY3lfcmVjb3JkXyhmYWxzZSksCi0gICAgICBkZWxheV9lc3RpbWF0ZV9pbl9t
aWxsaXNlY29uZHNfKDApIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiY3RvciI7Ci0gIFJUQ19DSEVD
SyhqX2Vudmlyb25tZW50Xyk7Ci0gIEpOSU5hdGl2ZU1ldGhvZCBuYXRpdmVfbWV0aG9kc1tdID0g
ewotICAgICAgeyJuYXRpdmVDYWNoZUF1ZGlvUGFyYW1ldGVycyIsICIoSUlJWlpaWlpaWklJSilW
IiwKLSAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPigmd2VicnRjOjpBdWRpb01hbmFnZXI6
OkNhY2hlQXVkaW9QYXJhbWV0ZXJzKX19OwotICBqX25hdGl2ZV9yZWdpc3RyYXRpb25fID0gal9l
bnZpcm9ubWVudF8tPlJlZ2lzdGVyTmF0aXZlcygKLSAgICAgICJvcmcvd2VicnRjL3ZvaWNlZW5n
aW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlciIsIG5hdGl2ZV9tZXRob2RzLAotICAgICAgYXJyYXlzaXpl
KG5hdGl2ZV9tZXRob2RzKSk7Ci0gIGpfYXVkaW9fbWFuYWdlcl8ucmVzZXQoCi0gICAgICBuZXcg
SmF2YUF1ZGlvTWFuYWdlcihqX25hdGl2ZV9yZWdpc3RyYXRpb25fLmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgal9uYXRpdmVfcmVnaXN0cmF0aW9uXy0+TmV3T2JqZWN0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aW5pdD4iLCAiKEopViIsIFBvaW50ZXJUb2ps
b25nKHRoaXMpKSkpOwotfQotCi1BdWRpb01hbmFnZXI6On5BdWRpb01hbmFnZXIoKSB7Ci0gIFJU
Q19MT0coSU5GTykgPDwgImR0b3IiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1
cnJlbnQoKSk7Ci0gIENsb3NlKCk7Ci19Ci0KLXZvaWQgQXVkaW9NYW5hZ2VyOjpTZXRBY3RpdmVB
dWRpb0xheWVyKAotICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGF1ZGlvX2xheWVy
KSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlNldEFjdGl2ZUF1ZGlvTGF5ZXI6ICIgPDwgYXVkaW9f
bGF5ZXI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRD
X0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgLy8gU3RvcmUgdGhlIGN1cnJlbnRseSB1dGlsaXpl
ZCBhdWRpbyBsYXllci4KLSAgYXVkaW9fbGF5ZXJfID0gYXVkaW9fbGF5ZXI7Ci0gIC8vIFRoZSBk
ZWxheSBlc3RpbWF0ZSBjYW4gdGFrZSBvbmUgb2YgdHdvIGZpeGVkIHZhbHVlcyBkZXBlbmRpbmcg
b24gaWYgdGhlCi0gIC8vIGRldmljZSBzdXBwb3J0cyBsb3ctbGF0ZW5jeSBvdXRwdXQgb3Igbm90
LiBIb3dldmVyLCBpdCBpcyBhbHNvIHBvc3NpYmxlCi0gIC8vIHRoYXQgdGhlIHVzZXIgZXhwbGlj
aXRseSBzZWxlY3RzIHRoZSBoaWdoLWxhdGVuY3kgYXVkaW8gcGF0aCwgaGVuY2Ugd2UgdXNlCi0g
IC8vIHRoZSBzZWxlY3RlZCB8YXVkaW9fbGF5ZXJ8IGhlcmUgdG8gc2V0IHRoZSBkZWxheSBlc3Rp
bWF0ZS4KLSAgZGVsYXlfZXN0aW1hdGVfaW5fbWlsbGlzZWNvbmRzXyA9Ci0gICAgICAoYXVkaW9f
bGF5ZXIgPT0gQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUF1ZGlvKQotICAgICAgICAg
ID8ga0hpZ2hMYXRlbmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcwotICAgICAgICAg
IDoga0xvd0xhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzOwotICBSVENfTE9H
KElORk8pIDw8ICJkZWxheV9lc3RpbWF0ZV9pbl9taWxsaXNlY29uZHM6ICIKLSAgICAgICAgICAg
ICAgICA8PCBkZWxheV9lc3RpbWF0ZV9pbl9taWxsaXNlY29uZHNfOwotfQotCi1TTE9iamVjdEl0
ZiBBdWRpb01hbmFnZXI6OkdldE9wZW5TTEVuZ2luZSgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAi
R2V0T3BlblNMRW5naW5lIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50
KCkpOwotICAvLyBPbmx5IGFsbG93IHVzYWdlIG9mIE9wZW5TTCBFUyBpZiBzdWNoIGFuIGF1ZGlv
IGxheWVyIGhhcyBiZWVuIHNwZWNpZmllZC4KLSAgaWYgKGF1ZGlvX2xheWVyXyAhPSBBdWRpb0Rl
dmljZU1vZHVsZTo6a0FuZHJvaWRPcGVuU0xFU0F1ZGlvICYmCi0gICAgICBhdWRpb19sYXllcl8g
IT0KLSAgICAgICAgICBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhSW5wdXRBbmRPcGVu
U0xFU091dHB1dEF1ZGlvKSB7Ci0gICAgUlRDX0xPRyhJTkZPKQotICAgICAgICA8PCAiVW5hYmxl
IHRvIGNyZWF0ZSBPcGVuU0wgZW5naW5lIGZvciB0aGUgY3VycmVudCBhdWRpbyBsYXllcjogIgot
ICAgICAgICA8PCBhdWRpb19sYXllcl87Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgLy8g
T3BlblNMIEVTIGZvciBBbmRyb2lkIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgZW5naW5lIHBlciBh
cHBsaWNhdGlvbi4KLSAgLy8gSWYgb25lIGFscmVhZHkgaGFzIGJlZW4gY3JlYXRlZCwgcmV0dXJu
IGV4aXN0aW5nIG9iamVjdCBpbnN0ZWFkIG9mCi0gIC8vIGNyZWF0aW5nIGEgbmV3LgotICBpZiAo
ZW5naW5lX29iamVjdF8uR2V0KCkgIT0gbnVsbHB0cikgewotICAgIFJUQ19MT0coV0FSTklORykg
PDwgIlRoZSBPcGVuU0wgRVMgZW5naW5lIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQi
OwotICAgIHJldHVybiBlbmdpbmVfb2JqZWN0Xy5HZXQoKTsKLSAgfQotICAvLyBDcmVhdGUgdGhl
IGVuZ2luZSBvYmplY3QgaW4gdGhyZWFkIHNhZmUgbW9kZS4KLSAgY29uc3QgU0xFbmdpbmVPcHRp
b24gb3B0aW9uW10gPSB7Ci0gICAgICB7U0xfRU5HSU5FT1BUSU9OX1RIUkVBRFNBRkUsIHN0YXRp
Y19jYXN0PFNMdWludDMyPihTTF9CT09MRUFOX1RSVUUpfX07Ci0gIFNMcmVzdWx0IHJlc3VsdCA9
Ci0gICAgICBzbENyZWF0ZUVuZ2luZShlbmdpbmVfb2JqZWN0Xy5SZWNlaXZlKCksIDEsIG9wdGlv
biwgMCwgTlVMTCwgTlVMTCk7Ci0gIGlmIChyZXN1bHQgIT0gU0xfUkVTVUxUX1NVQ0NFU1MpIHsK
LSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAic2xDcmVhdGVFbmdpbmUoKSBmYWlsZWQ6ICIKLSAg
ICAgICAgICAgICAgICAgICAgICA8PCBHZXRTTEVycm9yU3RyaW5nKHJlc3VsdCk7Ci0gICAgZW5n
aW5lX29iamVjdF8uUmVzZXQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICAvLyBSZWFs
aXplIHRoZSBTTCBFbmdpbmUgaW4gc3luY2hyb25vdXMgbW9kZS4KLSAgcmVzdWx0ID0gZW5naW5l
X29iamVjdF8tPlJlYWxpemUoZW5naW5lX29iamVjdF8uR2V0KCksIFNMX0JPT0xFQU5fRkFMU0Up
OwotICBpZiAocmVzdWx0ICE9IFNMX1JFU1VMVF9TVUNDRVNTKSB7Ci0gICAgUlRDX0xPRyhMU19F
UlJPUikgPDwgIlJlYWxpemUoKSBmYWlsZWQ6ICIgPDwgR2V0U0xFcnJvclN0cmluZyhyZXN1bHQp
OwotICAgIGVuZ2luZV9vYmplY3RfLlJlc2V0KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0K
LSAgLy8gRmluYWxseSByZXR1cm4gdGhlIFNMT2JqZWN0SXRmIGludGVyZmFjZSBvZiB0aGUgZW5n
aW5lIG9iamVjdC4KLSAgcmV0dXJuIGVuZ2luZV9vYmplY3RfLkdldCgpOwotfQotCi1ib29sIEF1
ZGlvTWFuYWdlcjo6SW5pdCgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiSW5pdCI7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlh
bGl6ZWRfKTsKLSAgUlRDX0RDSEVDS19ORShhdWRpb19sYXllcl8sIEF1ZGlvRGV2aWNlTW9kdWxl
OjprUGxhdGZvcm1EZWZhdWx0QXVkaW8pOwotICBpZiAoIWpfYXVkaW9fbWFuYWdlcl8tPkluaXQo
KSkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJJbml0KCkgZmFpbGVkIjsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpDbG9zZSgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiQ2xv
c2UiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmICgh
aW5pdGlhbGl6ZWRfKQotICAgIHJldHVybiB0cnVlOwotICBqX2F1ZGlvX21hbmFnZXJfLT5DbG9z
ZSgpOwotICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
QXVkaW9NYW5hZ2VyOjpJc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpIGNvbnN0IHsKLSAgUlRD
X0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICByZXR1cm4gal9hdWRpb19t
YW5hZ2VyXy0+SXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKTsKLX0KLQotYm9vbCBBdWRpb01h
bmFnZXI6OklzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgcmV0dXJuIGhhcmR3YXJlX2Fl
Y187Ci19Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpJc0F1dG9tYXRpY0dhaW5Db250cm9sU3VwcG9y
dGVkKCkgY29uc3QgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7
Ci0gIHJldHVybiBoYXJkd2FyZV9hZ2NfOwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SXNOb2lz
ZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLklzQ3VycmVudCgpKTsKLSAgcmV0dXJuIGhhcmR3YXJlX25zXzsKLX0KLQotYm9vbCBBdWRp
b01hbmFnZXI6OklzTG93TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgLy8gU29tZSBkZXZpY2VzIGFy
ZSBibGFja2xpc3RlZCBmb3IgdXNhZ2Ugb2YgT3BlblNMIEVTIGV2ZW4gaWYgdGhleSByZXBvcnQK
LSAgLy8gdGhhdCBsb3ctbGF0ZW5jeSBwbGF5b3V0IGlzIHN1cHBvcnRlZC4gU2VlIGIvMjE0ODU3
MDMgZm9yIGRldGFpbHMuCi0gIHJldHVybiBqX2F1ZGlvX21hbmFnZXJfLT5Jc0RldmljZUJsYWNr
bGlzdGVkRm9yT3BlblNMRVNVc2FnZSgpCi0gICAgICAgICAgICAgPyBmYWxzZQotICAgICAgICAg
ICAgIDogbG93X2xhdGVuY3lfcGxheW91dF87Ci19Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpJc0xv
d0xhdGVuY3lSZWNvcmRTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgcmV0dXJuIGxvd19sYXRlbmN5X3JlY29yZF87Ci19Ci0K
LWJvb2wgQXVkaW9NYW5hZ2VyOjpJc1Byb0F1ZGlvU3VwcG9ydGVkKCkgY29uc3QgewotICBSVENf
RENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIC8vIFRPRE8oaGVucmlrYSk6
IHJldHVybiB0aGUgc3RhdGUgaW5kZXBlbmRlbnRseSBvZiBpZiBPcGVuU0wgRVMgaXMKLSAgLy8g
YmxhY2tsaXN0ZWQgb3Igbm90IGZvciBub3cuIFdlIGNvdWxkIHVzZSB0aGUgc2FtZSBhcHByb2Fj
aCBhcyBpbgotICAvLyBJc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCkgYnV0IEkgY2FuJ3Qg
c2VlIHRoZSBuZWVkIGZvciBpdCB5ZXQuCi0gIHJldHVybiBwcm9fYXVkaW9fOwotfQotCi0vLyBU
T0RPKGhlbnJpa2EpOiBpbXByb3ZlIGNvbW1lbnRzLi4uCi1ib29sIEF1ZGlvTWFuYWdlcjo6SXNB
QXVkaW9TdXBwb3J0ZWQoKSBjb25zdCB7Ci0jaWYgZGVmaW5lZChXRUJSVENfQVVESU9fREVWSUNF
X0lOQ0xVREVfQU5EUk9JRF9BQVVESU8pCi0gIHJldHVybiBhX2F1ZGlvXzsKLSNlbHNlCi0gIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SXNTdGVyZW9QbGF5
b3V0U3VwcG9ydGVkKCkgY29uc3QgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1
cnJlbnQoKSk7Ci0gIHJldHVybiAocGxheW91dF9wYXJhbWV0ZXJzXy5jaGFubmVscygpID09IDIp
OwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SXNTdGVyZW9SZWNvcmRTdXBwb3J0ZWQoKSBjb25z
dCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgcmV0dXJu
IChyZWNvcmRfcGFyYW1ldGVyc18uY2hhbm5lbHMoKSA9PSAyKTsKLX0KLQotaW50IEF1ZGlvTWFu
YWdlcjo6R2V0RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzKCkgY29uc3QgewotICByZXR1cm4g
ZGVsYXlfZXN0aW1hdGVfaW5fbWlsbGlzZWNvbmRzXzsKLX0KLQotSk5JX0ZVTkNUSU9OX0FMSUdO
Ci12b2lkIEpOSUNBTEwgQXVkaW9NYW5hZ2VyOjpDYWNoZUF1ZGlvUGFyYW1ldGVycyhKTklFbnYq
IGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpv
YmplY3Qgb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamludCBzYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppbnQgb3V0cHV0X2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBpbnB1dF9jaGFubmVscywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJl
X2FlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpi
b29sZWFuIGhhcmR3YXJlX2FnYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX25zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gbG93X2xhdGVuY3lfb3V0cHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4g
bG93X2xhdGVuY3lfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqYm9vbGVhbiBwcm9fYXVkaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBhX2F1ZGlvLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBvdXRwdXRfYnVmZmVyX3NpemUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGlu
cHV0X2J1ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamxvbmcgbmF0aXZlX2F1ZGlvX21hbmFnZXIpIHsKLSAgd2VicnRjOjpBdWRpb01h
bmFnZXIqIHRoaXNfb2JqZWN0ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpBdWRp
b01hbmFnZXIqPihuYXRpdmVfYXVkaW9fbWFuYWdlcik7Ci0gIHRoaXNfb2JqZWN0LT5PbkNhY2hl
QXVkaW9QYXJhbWV0ZXJzKAotICAgICAgZW52LCBzYW1wbGVfcmF0ZSwgb3V0cHV0X2NoYW5uZWxz
LCBpbnB1dF9jaGFubmVscywgaGFyZHdhcmVfYWVjLAotICAgICAgaGFyZHdhcmVfYWdjLCBoYXJk
d2FyZV9ucywgbG93X2xhdGVuY3lfb3V0cHV0LCBsb3dfbGF0ZW5jeV9pbnB1dCwKLSAgICAgIHBy
b19hdWRpbywgYV9hdWRpbywgb3V0cHV0X2J1ZmZlcl9zaXplLCBpbnB1dF9idWZmZXJfc2l6ZSk7
Ci19Ci0KLXZvaWQgQXVkaW9NYW5hZ2VyOjpPbkNhY2hlQXVkaW9QYXJhbWV0ZXJzKEpOSUVudiog
ZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBzYW1w
bGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQg
b3V0cHV0X2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamludCBpbnB1dF9jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FlYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FnYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX25zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gbG93X2xhdGVuY3lf
b3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xl
YW4gbG93X2xhdGVuY3lfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqYm9vbGVhbiBwcm9fYXVkaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqYm9vbGVhbiBhX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamludCBvdXRwdXRfYnVmZmVyX3NpemUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGlucHV0X2J1ZmZlcl9zaXplKSB7Ci0g
IFJUQ19MT0coSU5GTykKLSAgICAgIDw8ICJPbkNhY2hlQXVkaW9QYXJhbWV0ZXJzOiAiCi0gICAg
ICAgICAiaGFyZHdhcmVfYWVjOiAiCi0gICAgICA8PCBzdGF0aWNfY2FzdDxib29sPihoYXJkd2Fy
ZV9hZWMpCi0gICAgICA8PCAiLCBoYXJkd2FyZV9hZ2M6ICIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4o
aGFyZHdhcmVfYWdjKQotICAgICAgPDwgIiwgaGFyZHdhcmVfbnM6ICIgPDwgc3RhdGljX2Nhc3Q8
Ym9vbD4oaGFyZHdhcmVfbnMpCi0gICAgICA8PCAiLCBsb3dfbGF0ZW5jeV9vdXRwdXQ6ICIgPDwg
c3RhdGljX2Nhc3Q8Ym9vbD4obG93X2xhdGVuY3lfb3V0cHV0KQotICAgICAgPDwgIiwgbG93X2xh
dGVuY3lfaW5wdXQ6ICIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4obG93X2xhdGVuY3lfaW5wdXQpCi0g
ICAgICA8PCAiLCBwcm9fYXVkaW86ICIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4ocHJvX2F1ZGlvKQot
ICAgICAgPDwgIiwgYV9hdWRpbzogIiA8PCBzdGF0aWNfY2FzdDxib29sPihhX2F1ZGlvKQotICAg
ICAgPDwgIiwgc2FtcGxlX3JhdGU6ICIgPDwgc3RhdGljX2Nhc3Q8aW50PihzYW1wbGVfcmF0ZSkK
LSAgICAgIDw8ICIsIG91dHB1dF9jaGFubmVsczogIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KG91dHB1
dF9jaGFubmVscykKLSAgICAgIDw8ICIsIGlucHV0X2NoYW5uZWxzOiAiIDw8IHN0YXRpY19jYXN0
PGludD4oaW5wdXRfY2hhbm5lbHMpCi0gICAgICA8PCAiLCBvdXRwdXRfYnVmZmVyX3NpemU6ICIg
PDwgc3RhdGljX2Nhc3Q8aW50PihvdXRwdXRfYnVmZmVyX3NpemUpCi0gICAgICA8PCAiLCBpbnB1
dF9idWZmZXJfc2l6ZTogIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KGlucHV0X2J1ZmZlcl9zaXplKTsK
LSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBoYXJkd2FyZV9h
ZWNfID0gaGFyZHdhcmVfYWVjOwotICBoYXJkd2FyZV9hZ2NfID0gaGFyZHdhcmVfYWdjOwotICBo
YXJkd2FyZV9uc18gPSBoYXJkd2FyZV9uczsKLSAgbG93X2xhdGVuY3lfcGxheW91dF8gPSBsb3df
bGF0ZW5jeV9vdXRwdXQ7Ci0gIGxvd19sYXRlbmN5X3JlY29yZF8gPSBsb3dfbGF0ZW5jeV9pbnB1
dDsKLSAgcHJvX2F1ZGlvXyA9IHByb19hdWRpbzsKLSAgYV9hdWRpb18gPSBhX2F1ZGlvOwotICBw
bGF5b3V0X3BhcmFtZXRlcnNfLnJlc2V0KHNhbXBsZV9yYXRlLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KG91dHB1dF9jaGFubmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PihvdXRwdXRfYnVmZmVyX3NpemUpKTsKLSAgcmVjb3JkX3BhcmFtZXRlcnNfLnJl
c2V0KHNhbXBsZV9yYXRlLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGlucHV0X2NoYW5uZWxzKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oaW5wdXRfYnVmZmVy
X3NpemUpKTsKLX0KLQotY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBBdWRpb01hbmFnZXI6OkdldFBs
YXlvdXRBdWRpb1BhcmFtZXRlcnMoKSB7Ci0gIFJUQ19DSEVDSyhwbGF5b3V0X3BhcmFtZXRlcnNf
LmlzX3ZhbGlkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7
Ci0gIHJldHVybiBwbGF5b3V0X3BhcmFtZXRlcnNfOwotfQotCi1jb25zdCBBdWRpb1BhcmFtZXRl
cnMmIEF1ZGlvTWFuYWdlcjo6R2V0UmVjb3JkQXVkaW9QYXJhbWV0ZXJzKCkgewotICBSVENfQ0hF
Q0socmVjb3JkX3BhcmFtZXRlcnNfLmlzX3ZhbGlkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9j
aGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIHJldHVybiByZWNvcmRfcGFyYW1ldGVyc187Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9f
bWFuYWdlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQxZGViZGI0MTVmNjg1NGE0YjMwMDJjNmI3ZWU0Y2ZjMjMyNTM1OTEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9hdWRpb19tYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9J
RF9BVURJT19NQU5BR0VSX0hfCi0jZGVmaW5lIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURf
QVVESU9fTUFOQUdFUl9IXwotCi0jaW5jbHVkZSA8U0xFUy9PcGVuU0xFUy5oPgotI2luY2x1ZGUg
PGpuaS5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9f
ZGV2aWNlL2F1ZGlvX2RldmljZV9jb25maWcuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2
aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlX2RlZmluZXMuaCIKLSNpbmNsdWRlICJtb2R1bGVzL3V0
aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJtb2R1bGVzL3V0aWxp
dHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVj
a2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBJbXBsZW1lbnRzIHN1cHBvcnQgZm9y
IGZ1bmN0aW9ucyBpbiB0aGUgV2ViUlRDIGF1ZGlvIHN0YWNrIGZvciBBbmRyb2lkIHRoYXQKLS8v
IHJlbGllcyBvbiB0aGUgQXVkaW9NYW5hZ2VyIGluIGFuZHJvaWQubWVkaWEuIEl0IGFsc28gcG9w
dWxhdGVzIGFuCi0vLyBBdWRpb1BhcmFtZXRlciBzdHJ1Y3R1cmUgd2l0aCBuYXRpdmUgYXVkaW8g
cGFyYW1ldGVycyBkZXRlY3RlZCBhdAotLy8gY29uc3RydWN0aW9uLiBUaGlzIGNsYXNzIGRvZXMg
bm90IG1ha2UgYW55IGF1ZGlvLXJlbGF0ZWQgbW9kaWZpY2F0aW9ucwotLy8gdW5sZXNzIEluaXQo
KSBpcyBjYWxsZWQuIENhY2hpbmcgYXVkaW8gcGFyYW1ldGVycyBtYWtlcyBubyBjaGFuZ2VzIGJ1
dCBvbmx5Ci0vLyByZWFkcyBkYXRhIGZyb20gdGhlIEphdmEgc2lkZS4KLWNsYXNzIEF1ZGlvTWFu
YWdlciB7Ci0gcHVibGljOgotICAvLyBXcmFwcyB0aGUgSmF2YSBzcGVjaWZpYyBwYXJ0cyBvZiB0
aGUgQXVkaW9NYW5hZ2VyIGludG8gb25lIGhlbHBlciBjbGFzcy4KLSAgLy8gU3RvcmVzIG1ldGhv
ZCBJRHMgZm9yIGFsbCBzdXBwb3J0ZWQgbWV0aG9kcyBhdCBjb25zdHJ1Y3Rpb24gYW5kIHRoZW4K
LSAgLy8gYWxsb3dzIGNhbGxzIGxpa2UgSmF2YUF1ZGlvTWFuYWdlcjo6Q2xvc2UoKSB3aGlsZSBo
aWRpbmcgdGhlIEphdmEvSk5JCi0gIC8vIHBhcnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIGNhbGwuCi0gIGNsYXNzIEphdmFBdWRpb01hbmFnZXIgewotICAgcHVibGljOgotICAgIEph
dmFBdWRpb01hbmFnZXIoTmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnaXN0cmF0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdsb2JhbFJlZj4gYXVkaW9fbWFu
YWdlcik7Ci0gICAgfkphdmFBdWRpb01hbmFnZXIoKTsKLQotICAgIGJvb2wgSW5pdCgpOwotICAg
IHZvaWQgQ2xvc2UoKTsKLSAgICBib29sIElzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCk7Ci0g
ICAgYm9vbCBJc0RldmljZUJsYWNrbGlzdGVkRm9yT3BlblNMRVNVc2FnZSgpOwotCi0gICBwcml2
YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX21hbmFnZXJfOwotICAg
IGptZXRob2RJRCBpbml0XzsKLSAgICBqbWV0aG9kSUQgZGlzcG9zZV87Ci0gICAgam1ldGhvZElE
IGlzX2NvbW11bmljYXRpb25fbW9kZV9lbmFibGVkXzsKLSAgICBqbWV0aG9kSUQgaXNfZGV2aWNl
X2JsYWNrbGlzdGVkX2Zvcl9vcGVuX3NsZXNfdXNhZ2VfOwotICB9OwotCi0gIEF1ZGlvTWFuYWdl
cigpOwotICB+QXVkaW9NYW5hZ2VyKCk7Ci0KLSAgLy8gU2V0cyB0aGUgY3VycmVudGx5IGFjdGl2
ZSBhdWRpbyBsYXllciBjb21iaW5hdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlCi0gIC8vIElu
aXQoKS4KLSAgdm9pZCBTZXRBY3RpdmVBdWRpb0xheWVyKEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRp
b0xheWVyIGF1ZGlvX2xheWVyKTsKLQotICAvLyBDcmVhdGVzIGFuZCByZWFsaXplcyB0aGUgbWFp
biAoZ2xvYmFsKSBPcGVuIFNMIGVuZ2luZSBvYmplY3QgYW5kIHJldHVybnMKLSAgLy8gYSByZWZl
cmVuY2UgdG8gaXQuIFRoZSBlbmdpbmUgb2JqZWN0IGlzIG9ubHkgY3JlYXRlZCBhdCB0aGUgZmly
c3QgY2FsbAotICAvLyBzaW5jZSBPcGVuU0wgRVMgZm9yIEFuZHJvaWQgb25seSBzdXBwb3J0cyBh
IHNpbmdsZSBlbmdpbmUgcGVyIGFwcGxpY2F0aW9uLgotICAvLyBTdWJzZXF1ZW50IGNhbGxzIHJl
dHVybnMgdGhlIGFscmVhZHkgY3JlYXRlZCBlbmdpbmUuIFRoZSBTTCBlbmdpbmUgb2JqZWN0Ci0g
IC8vIGlzIGRlc3Ryb3llZCB3aGVuIHRoZSBBdWRpb01hbmFnZXIgb2JqZWN0IGlzIGRlbGV0ZWQu
IEl0IG1lYW5zIHRoYXQgdGhlCi0gIC8vIGVuZ2luZSBvYmplY3Qgd2lsbCBiZSB0aGUgZmlyc3Qg
T3BlblNMIEVTIG9iamVjdCB0byBiZSBjcmVhdGVkIGFuZCBsYXN0Ci0gIC8vIG9iamVjdCB0byBi
ZSBkZXN0cm95ZWQuCi0gIC8vIE5vdGUgdGhhdCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQgdW5sZXNz
IHRoZSBhdWRpbyBsYXllciBpcyBzcGVjaWZpZWQgYXMKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGU6
OmtBbmRyb2lkT3BlblNMRVNBdWRpbyBvcgotICAvLyBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJv
aWRKYXZhSW5wdXRBbmRPcGVuU0xFU091dHB1dEF1ZGlvLgotICBTTE9iamVjdEl0ZiBHZXRPcGVu
U0xFbmdpbmUoKTsKLQotICAvLyBJbml0aWFsaXplcyB0aGUgYXVkaW8gbWFuYWdlciBhbmQgc3Rv
cmVzIHRoZSBjdXJyZW50IGF1ZGlvIG1vZGUuCi0gIGJvb2wgSW5pdCgpOwotICAvLyBSZXZlcnQg
YW55IHNldHRpbmcgZG9uZSBieSBJbml0KCkuCi0gIGJvb2wgQ2xvc2UoKTsKLQotICAvLyBSZXR1
cm5zIHRydWUgaWYgY3VycmVudCBhdWRpbyBtb2RlIGlzIEF1ZGlvTWFuYWdlci5NT0RFX0lOX0NP
TU1VTklDQVRJT04uCi0gIGJvb2wgSXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKSBjb25zdDsK
LQotICAvLyBOYXRpdmUgYXVkaW8gcGFyYW1ldGVycyBzdG9yZWQgZHVyaW5nIGNvbnN0cnVjdGlv
bi4KLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBHZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCk7
Ci0gIGNvbnN0IEF1ZGlvUGFyYW1ldGVycyYgR2V0UmVjb3JkQXVkaW9QYXJhbWV0ZXJzKCk7Ci0K
LSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYnVpbHQtaW4gYXVkaW8g
ZWZmZWN0cyBmb3IgQUVDLCBBR0MKLSAgLy8gYW5kIE5TLiBTb21lIGRldmljZXMgY2FuIGFsc28g
YmUgYmxhY2tsaXN0ZWQgZm9yIHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoCi0gIC8vIHBsYXRmb3Jt
IGVmZmVjdHMgYW5kIHRoZXNlIGRldmljZXMgd2lsbCByZXR1cm4gZmFsc2UuCi0gIC8vIENhbiBj
dXJyZW50bHkgb25seSBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBKYXZhIGJhc2VkIGF1
ZGlvIGJhY2tlbmQKLSAgLy8gZm9yIHRoZSByZWNvcmluZyBzaWRlIChpLmUuIHVzaW5nIHRoZSBh
bmRyb2lkLm1lZGlhLkF1ZGlvUmVjb3JkIEFQSSkuCi0gIGJvb2wgSXNBY291c3RpY0VjaG9DYW5j
ZWxlclN1cHBvcnRlZCgpIGNvbnN0OwotICBib29sIElzQXV0b21hdGljR2FpbkNvbnRyb2xTdXBw
b3J0ZWQoKSBjb25zdDsKLSAgYm9vbCBJc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIGNvbnN0
OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBsb3ctbGF0
ZW5jeSBhdWRpbyBwYXRocyBpbgotICAvLyBjb21iaW5hdGlvbiB3aXRoIE9wZW5TTCBFUy4KLSAg
Ym9vbCBJc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCkgY29uc3Q7Ci0gIGJvb2wgSXNMb3dM
YXRlbmN5UmVjb3JkU3VwcG9ydGVkKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBkZXZpY2Ugc3VwcG9ydHMgKGFuZCBoYXMgYmVlbiBjb25maWd1cmVkIGZvcikgc3RlcmVvLgot
ICAvLyBDYWxsIHRoZSBKYXZhIEFQSSBXZWJSdGNBdWRpb01hbmFnZXIuc2V0U3RlcmVvT3V0cHV0
L0lucHV0KCkgd2l0aCB0cnVlIGFzCi0gIC8vIHBhcmFtdGVyIHRvIGVuYWJsZSBzdGVyZW8uIERl
ZmF1bHQgaXMgbW9ubyBpbiBib3RoIGRpcmVjdGlvbnMgYW5kIHRoZQotICAvLyBzZXR0aW5nIGlz
IHNldCBvbmNlIGFuZCBmb3IgYWxsIHdoZW4gdGhlIGF1ZGlvIG1hbmFnZXIgb2JqZWN0IGlzIGNy
ZWF0ZWQuCi0gIC8vIFRPRE8oaGVucmlrYSk6IHN0ZXJlbyBpcyBub3Qgc3VwcG9ydGVkIGluIGNv
bWJpbmF0aW9uIHdpdGggT3BlblNMIEVTLgotICBib29sIElzU3RlcmVvUGxheW91dFN1cHBvcnRl
ZCgpIGNvbnN0OwotICBib29sIElzU3RlcmVvUmVjb3JkU3VwcG9ydGVkKCkgY29uc3Q7Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgcHJvLWF1ZGlvIGZlYXR1cmVz
IGluIGNvbWJpbmF0aW9uIHdpdGgKLSAgLy8gT3BlblNMIEVTLgotICBib29sIElzUHJvQXVkaW9T
dXBwb3J0ZWQoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBw
b3J0cyBBQXVkaW8uCi0gIGJvb2wgSXNBQXVkaW9TdXBwb3J0ZWQoKSBjb25zdDsKLQotICAvLyBS
ZXR1cm5zIHRoZSBlc3RpbWF0ZWQgdG90YWwgZGVsYXkgb2YgdGhpcyBkZXZpY2UuIFVuaXQgaXMg
aW4gbWlsbGlzZWNvbmRzLgotICAvLyBUaGUgdmF1bGUgaXMgc2V0IG9uY2UgYXQgY29uc3RydWN0
aW9uIGFuZCBuZXZlciBjaGFuZ2VzIGFmdGVyIHRoYXQuCi0gIC8vIFBvc3NpYmxlIHZhbHVlcyBh
cmUgd2VicnRjOjprTG93TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMgYW5k
Ci0gIC8vIHdlYnJ0Yzo6a0hpZ2hMYXRlbmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25k
cy4KLSAgaW50IEdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcygpIGNvbnN0OwotCi0gcHJp
dmF0ZToKLSAgLy8gQ2FsbGVkIGZyb20gSmF2YSBzaWRlIHNvIHdlIGNhbiBjYWNoZSB0aGUgbmF0
aXZlIGF1ZGlvIHBhcmFtZXRlcnMuCi0gIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJ5
IHRoZSBXZWJSdGNBdWRpb01hbmFnZXIgY29uc3RydWN0b3IsIGkuZS4KLSAgLy8gb24gdGhlIHNh
bWUgdGhyZWFkIHRoYXQgdGhpcyBvYmplY3QgaXMgY3JlYXRlZCBvbi4KLSAgc3RhdGljIHZvaWQg
Sk5JQ0FMTCBDYWNoZUF1ZGlvUGFyYW1ldGVycyhKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNhbXBsZV9yYXRlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgb3V0cHV0X2NoYW5uZWxzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgaW5wdXRfY2hh
bm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xl
YW4gaGFyZHdhcmVfYWVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpib29sZWFuIGhhcmR3YXJlX2FnYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJkd2FyZV9ucywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBsb3dfbGF0ZW5jeV9vdXRwdXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gbG93X2xhdGVu
Y3lfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJv
b2xlYW4gcHJvX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpib29sZWFuIGFfYXVkaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamludCBvdXRwdXRfYnVmZmVyX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamludCBpbnB1dF9idWZmZXJfc2l6ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVfYXVkaW9fbWFuYWdl
cik7Ci0gIHZvaWQgT25DYWNoZUF1ZGlvUGFyYW1ldGVycyhKTklFbnYqIGVudiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGppbnQgc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaW50IG91dHB1dF9jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppbnQgaW5wdXRfY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqYm9vbGVhbiBoYXJkd2FyZV9hZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqYm9vbGVhbiBoYXJkd2FyZV9hZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
Ym9vbGVhbiBoYXJkd2FyZV9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29s
ZWFuIGxvd19sYXRlbmN5X291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpi
b29sZWFuIGxvd19sYXRlbmN5X2lucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
amJvb2xlYW4gcHJvX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xl
YW4gYV9hdWRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgb3V0cHV0X2J1
ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBpbnB1dF9idWZm
ZXJfc2l6ZSk7Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiB0aGUgY29uc3RydWN0b3IuCi0g
IC8vIFdlIGNhbiB0aGVuIHVzZSBUaHJlYWRDaGVja2VyOjpJc0N1cnJlbnQoKSB0byBlbnN1cmUg
dGhhdAotICAvLyBvdGhlciBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQu
Ci0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87Ci0KLSAgLy8gQ2FsbHMgSmF2
YVZNOjpBdHRhY2hDdXJyZW50VGhyZWFkKCkgaWYgdGhpcyB0aHJlYWQgaXMgbm90IGF0dGFjaGVk
IGF0Ci0gIC8vIGNvbnN0cnVjdGlvbi4KLSAgLy8gQWxzbyBlbnN1cmVzIHRoYXQgRGV0YWNoQ3Vy
cmVudFRocmVhZCgpIGlzIGNhbGxlZCBhdCBkZXN0cnVjdGlvbi4KLSAgSnZtVGhyZWFkQ29ubmVj
dG9yIGF0dGFjaF90aHJlYWRfaWZfbmVlZGVkXzsKLQotICAvLyBXcmFwcyB0aGUgSk5JIGludGVy
ZmFjZSBwb2ludGVyIGFuZCBtZXRob2RzIGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAgc3RkOjp1bmlx
dWVfcHRyPEpOSUVudmlyb25tZW50PiBqX2Vudmlyb25tZW50XzsKLQotICAvLyBDb250YWlucyBm
YWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgdGhlIEphdmEgb2JqZWN0LgotICBzdGQ6OnVuaXF1
ZV9wdHI8TmF0aXZlUmVnaXN0cmF0aW9uPiBqX25hdGl2ZV9yZWdpc3RyYXRpb25fOwotCi0gIC8v
IFdyYXBzIHRoZSBKYXZhIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBBdWRpb01hbmFnZXIuCi0gIHN0
ZDo6dW5pcXVlX3B0cjxBdWRpb01hbmFnZXI6OkphdmFBdWRpb01hbmFnZXI+IGpfYXVkaW9fbWFu
YWdlcl87Ci0KLSAgLy8gQ29udGFpbnMgdGhlIHNlbGVjdGVkIGF1ZGlvIGxheWVyIHNwZWNpZmll
ZCBieSB0aGUgQXVkaW9MYXllciBlbnVtZXJhdG9yCi0gIC8vIGluIHRoZSBBdWRpb0RldmljZU1v
ZHVsZSBjbGFzcy4KLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXJf
OwotCi0gIC8vIFRoaXMgb2JqZWN0IGlzIHRoZSBnbG9iYWwgZW50cnkgcG9pbnQgb2YgdGhlIE9w
ZW5TTCBFUyBBUEkuCi0gIC8vIEFmdGVyIGNyZWF0aW5nIHRoZSBlbmdpbmUgb2JqZWN0LCB0aGUg
YXBwbGljYXRpb24gY2FuIG9idGFpbiB0aGlzIG9iamVjdOKAmHMKLSAgLy8gU0xFbmdpbmVJdGYg
aW50ZXJmYWNlLiBUaGlzIGludGVyZmFjZSBjb250YWlucyBjcmVhdGlvbiBtZXRob2RzIGZvciBh
bGwKLSAgLy8gdGhlIG90aGVyIG9iamVjdCB0eXBlcyBpbiB0aGUgQVBJLiBOb25lIG9mIHRoZXNl
IGludGVyZmFjZSBhcmUgcmVhbGl6ZWQKLSAgLy8gYnkgdGhpcyBjbGFzcy4gSXQgb25seSBwcm92
aWRlcyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBlbmdpbmUgb2JqZWN0LgotICB3ZWJydGM6OlNjb3Bl
ZFNMT2JqZWN0SXRmIGVuZ2luZV9vYmplY3RfOwotCi0gIC8vIFNldCB0byB0cnVlIGJ5IEluaXQo
KSBhbmQgZmFsc2UgYnkgQ2xvc2UoKS4KLSAgYm9vbCBpbml0aWFsaXplZF87Ci0KLSAgLy8gVHJ1
ZSBpZiBkZXZpY2Ugc3VwcG9ydHMgaGFyZHdhcmUgKG9yIGJ1aWx0LWluKSBBRUMuCi0gIGJvb2wg
aGFyZHdhcmVfYWVjXzsKLSAgLy8gVHJ1ZSBpZiBkZXZpY2Ugc3VwcG9ydHMgaGFyZHdhcmUgKG9y
IGJ1aWx0LWluKSBBR0MuCi0gIGJvb2wgaGFyZHdhcmVfYWdjXzsKLSAgLy8gVHJ1ZSBpZiBkZXZp
Y2Ugc3VwcG9ydHMgaGFyZHdhcmUgKG9yIGJ1aWx0LWluKSBOUy4KLSAgYm9vbCBoYXJkd2FyZV9u
c187Ci0KLSAgLy8gVHJ1ZSBpZiBkZXZpY2Ugc3VwcG9ydHMgdGhlIGxvdy1sYXRlbmN5IE9wZW5T
TCBFUyBhdWRpbyBwYXRoIGZvciBvdXRwdXQuCi0gIGJvb2wgbG93X2xhdGVuY3lfcGxheW91dF87
Ci0KLSAgLy8gVHJ1ZSBpZiBkZXZpY2Ugc3VwcG9ydHMgdGhlIGxvdy1sYXRlbmN5IE9wZW5TTCBF
UyBhdWRpbyBwYXRoIGZvciBpbnB1dC4KLSAgYm9vbCBsb3dfbGF0ZW5jeV9yZWNvcmRfOwotCi0g
IC8vIFRydWUgaWYgZGV2aWNlIHN1cHBvcnRzIHRoZSBsb3ctbGF0ZW5jeSBPcGVuU0wgRVMgcHJv
LWF1ZGlvIHBhdGguCi0gIGJvb2wgcHJvX2F1ZGlvXzsKLQotICAvLyBUcnVlIGlmIGRldmljZSBz
dXBwb3J0cyB0aGUgbG93LWxhdGVuY3kgQUF1ZGlvIGF1ZGlvIHBhdGguCi0gIGJvb2wgYV9hdWRp
b187Ci0KLSAgLy8gVGhlIGRlbGF5IGVzdGltYXRlIGNhbiB0YWtlIG9uZSBvZiB0d28gZml4ZWQg
dmFsdWVzIGRlcGVuZGluZyBvbiBpZiB0aGUKLSAgLy8gZGV2aWNlIHN1cHBvcnRzIGxvdy1sYXRl
bmN5IG91dHB1dCBvciBub3QuCi0gIGludCBkZWxheV9lc3RpbWF0ZV9pbl9taWxsaXNlY29uZHNf
OwotCi0gIC8vIENvbnRhaW5zIG5hdGl2ZSBwYXJhbWV0ZXJzIChlLmcuIHNhbXBsZSByYXRlLCBj
aGFubmVsIGNvbmZpZ3VyYXRpb24pLgotICAvLyBTZXQgYXQgY29uc3RydWN0aW9uIGluIE9uQ2Fj
aGVBdWRpb1BhcmFtZXRlcnMoKSB3aGljaCBpcyBjYWxsZWQgZnJvbQotICAvLyBKYXZhIG9uIHRo
ZSBzYW1lIHRocmVhZCBhcyB0aGlzIG9iamVjdCBpcyBjcmVhdGVkIG9uLgotICBBdWRpb1BhcmFt
ZXRlcnMgcGxheW91dF9wYXJhbWV0ZXJzXzsKLSAgQXVkaW9QYXJhbWV0ZXJzIHJlY29yZF9wYXJh
bWV0ZXJzXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBNT0RV
TEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FVRElPX01BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlcl91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVk
aW9fbWFuYWdlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4
MTkwNGMzNDQ2MDg0ODVhOTA4Nzk1YTI4NzdiZWFlN2ViZmY5OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXJf
dW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlv
X21hbmFnZXIuaCIKLQotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZC5oPgotCi0jaW5j
bHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9idWlsZF9pbmZvLmgiCi0jaW5jbHVk
ZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuaCIKLSNp
bmNsdWRlICJydGNfYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9mb3JtYXRf
bWFjcm9zLmgiCi0jaW5jbHVkZSAidGVzdC9ndGVzdC5oIgotCi0jZGVmaW5lIFBSSU5UKC4uLikg
ZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKTsKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyIGtUYWdbXSA9ICIgICI7Ci0KLWNsYXNzIEF1ZGlvTWFuYWdlclRlc3Qg
OiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIEF1ZGlvTWFuYWdlclRl
c3QoKSB7Ci0gICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgSlZNIGFuZCBhcHBsaWNh
dGlvbiBjb250ZXh0LiBFbnN1cmVzIHRoYXQgd2UKLSAgICAvLyBjYW4gZG8gY2FsbHMgYmV0d2Vl
biBDKysgYW5kIEphdmEuCi0gICAgd2VicnRjOjphdWRpb2RldmljZW1vZHVsZTo6RW5zdXJlSW5p
dGlhbGl6ZWQoKTsKLSAgICBhdWRpb19tYW5hZ2VyXy5yZXNldChuZXcgQXVkaW9NYW5hZ2VyKCkp
OwotICAgIFNldEFjdGl2ZUF1ZGlvTGF5ZXIoKTsKLSAgICBwbGF5b3V0X3BhcmFtZXRlcnNfID0g
YXVkaW9fbWFuYWdlcigpLT5HZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCk7Ci0gICAgcmVjb3Jk
X3BhcmFtZXRlcnNfID0gYXVkaW9fbWFuYWdlcigpLT5HZXRSZWNvcmRBdWRpb1BhcmFtZXRlcnMo
KTsKLSAgfQotCi0gIEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcigpIGNvbnN0IHsgcmV0dXJu
IGF1ZGlvX21hbmFnZXJfLmdldCgpOyB9Ci0KLSAgLy8gQSB2YWxpZCBhdWRpbyBsYXllciBtdXN0
IGFsd2F5cyBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgSW5pdCgpLCBoZW5jZSB3ZQotICAvLyBtaWdo
dCBhcyB3ZWxsIG1ha2UgaXQgYSBwYXJ0IG9mIHRoZSB0ZXN0IGZpeHR1cmUuCi0gIHZvaWQgU2V0
QWN0aXZlQXVkaW9MYXllcigpIHsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fbWFuYWdlcigpLT5H
ZXREZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMoKSk7Ci0gICAgYXVkaW9fbWFuYWdlcigpLT5T
ZXRBY3RpdmVBdWRpb0xheWVyKEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbyk7
Ci0gICAgRVhQRUNUX05FKDAsIGF1ZGlvX21hbmFnZXIoKS0+R2V0RGVsYXlFc3RpbWF0ZUluTWls
bGlzZWNvbmRzKCkpOwotICB9Ci0KLSAgLy8gT25lIHdheSB0byBlbnN1cmUgdGhhdCB0aGUgZW5n
aW5lIG9iamVjdCBpcyB2YWxpZCBpcyB0byBjcmVhdGUgYW4KLSAgLy8gU0wgRW5naW5lIGludGVy
ZmFjZSBzaW5jZSBpdCBleHBvc2VzIGNyZWF0aW9uIG1ldGhvZHMgb2YgYWxsIHRoZSBPcGVuU0wg
RVMKLSAgLy8gb2JqZWN0IHR5cGVzIGFuZCBpdCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB0aGUgZW5n
aW5lIG9iamVjdC4gVGhpcyBtZXRob2QKLSAgLy8gYWxzbyB2ZXJpZmllcyB0aGF0IHRoZSBlbmdp
bmUgaW50ZXJmYWNlIHN1cHBvcnRzIGF0IGxlYXN0IG9uZSBpbnRlcmZhY2UuCi0gIC8vIE5vdGUg
dGhhdCwgdGhlIHRlc3QgYmVsb3cgaXMgbm90IGEgZnVsbCB0ZXN0IG9mIHRoZSBTTEVuZ2luZUl0
ZiBvYmplY3QKLSAgLy8gYnV0IG9ubHkgYSBzaW1wbGUgc2FuaXR5IHRlc3QgdG8gY2hlY2sgdGhh
dCB0aGUgZ2xvYmFsIGVuZ2luZSBvYmplY3QgaXMgT0suCi0gIHZvaWQgVmFsaWRhdGVTTEVuZ2lu
ZShTTE9iamVjdEl0ZiBlbmdpbmVfb2JqZWN0KSB7Ci0gICAgRVhQRUNUX05FKG51bGxwdHIsIGVu
Z2luZV9vYmplY3QpOwotICAgIC8vIEdldCB0aGUgU0wgRW5naW5lIGludGVyZmFjZSB3aGljaCBp
cyBleHBvc2VkIGJ5IHRoZSBlbmdpbmUgb2JqZWN0LgotICAgIFNMRW5naW5lSXRmIGVuZ2luZTsK
LSAgICBTTHJlc3VsdCByZXN1bHQgPQotICAgICAgICAoKmVuZ2luZV9vYmplY3QpLT5HZXRJbnRl
cmZhY2UoZW5naW5lX29iamVjdCwgU0xfSUlEX0VOR0lORSwgJmVuZ2luZSk7Ci0gICAgRVhQRUNU
X0VRKHJlc3VsdCwgU0xfUkVTVUxUX1NVQ0NFU1MpIDw8ICJHZXRJbnRlcmZhY2UoKSBvbiBlbmdp
bmUgZmFpbGVkIjsKLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgU0wgRW5naW5lIGludGVyZmFjZSBl
eHBvc2VzIGF0IGxlYXN0IG9uZSBpbnRlcmZhY2UuCi0gICAgU0x1aW50MzIgb2JqZWN0X2lkID0g
U0xfT0JKRUNUSURfRU5HSU5FOwotICAgIFNMdWludDMyIG51bV9zdXBwb3J0ZWRfaW50ZXJmYWNl
cyA9IDA7Ci0gICAgcmVzdWx0ID0gKCplbmdpbmUpLT5RdWVyeU51bVN1cHBvcnRlZEludGVyZmFj
ZXMoZW5naW5lLCBvYmplY3RfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm51bV9zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0gICAgRVhQRUNU
X0VRKHJlc3VsdCwgU0xfUkVTVUxUX1NVQ0NFU1MpCi0gICAgICAgIDw8ICJRdWVyeU51bVN1cHBv
cnRlZEludGVyZmFjZXMoKSBmYWlsZWQiOwotICAgIEVYUEVDVF9HRShudW1fc3VwcG9ydGVkX2lu
dGVyZmFjZXMsIDF1KTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb01hbmFnZXI+IGF1
ZGlvX21hbmFnZXJfOwotICBBdWRpb1BhcmFtZXRlcnMgcGxheW91dF9wYXJhbWV0ZXJzXzsKLSAg
QXVkaW9QYXJhbWV0ZXJzIHJlY29yZF9wYXJhbWV0ZXJzXzsKLX07Ci0KLVRFU1RfRihBdWRpb01h
bmFnZXJUZXN0LCBDb25zdHJ1Y3REZXN0cnVjdCkge30KLQotLy8gSXQgc2hvdWxkIG5vdCBiZSBw
b3NzaWJsZSB0byBjcmVhdGUgYW4gT3BlblNMIGVuZ2luZSBvYmplY3QgaWYgSmF2YSBiYXNlZAot
Ly8gYXVkaW8gaXMgcmVxdWVzdGVkIGluIGJvdGggZGlyZWN0aW9ucy4KLVRFU1RfRihBdWRpb01h
bmFnZXJUZXN0LCBHZXRPcGVuU0xFbmdpbmVTaG91bGRGYWlsRm9ySmF2YUF1ZGlvTGF5ZXIpIHsK
LSAgYXVkaW9fbWFuYWdlcigpLT5TZXRBY3RpdmVBdWRpb0xheWVyKEF1ZGlvRGV2aWNlTW9kdWxl
OjprQW5kcm9pZEphdmFBdWRpbyk7Ci0gIFNMT2JqZWN0SXRmIGVuZ2luZV9vYmplY3QgPSBhdWRp
b19tYW5hZ2VyKCktPkdldE9wZW5TTEVuZ2luZSgpOwotICBFWFBFQ1RfRVEobnVsbHB0ciwgZW5n
aW5lX29iamVjdCk7Ci19Ci0KLS8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBjcmVhdGUgYW4g
T3BlblNMIGVuZ2luZSBvYmplY3QgaWYgT3BlblNMIEVTIGJhc2VkCi0vLyBhdWRpbyBpcyByZXF1
ZXN0ZWQgaW4gYW55IGRpcmVjdGlvbi4KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBHZXRPcGVu
U0xFbmdpbmVTaG91bGRTdWNjZWVkRm9yT3BlblNMRVNBdWRpb0xheWVyKSB7Ci0gIC8vIExpc3Qg
b2Ygc3VwcG9ydGVkIGF1ZGlvIGxheWVycyB0aGF0IHVzZXMgT3BlblNMIEVTIGF1ZGlvLgotICBj
b25zdCBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBvcGVuc2xlc19hdWRpb1tdID0gewot
ICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkT3BlblNMRVNBdWRpbywKLSAgICAgIEF1
ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFJbnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW99
OwotICAvLyBWZXJpZnkgdGhhdCB0aGUgZ2xvYmFsIChzaW5nbGV0b24pIE9wZW5TTCBFbmdpbmUg
Y2FuIGJlIGFjcXVpcmVkIGZvciBhbGwKLSAgLy8gYXVkaW8gbGF5ZXMgdGhhdCB1c2VzIE9wZW5T
TCBFUy4gTm90ZSB0aGF0IHRoZSBlbmdpbmUgaXMgb25seSBjcmVhdGVkIG9uY2UuCi0gIGZvciAo
Y29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXIgOiBvcGVuc2xl
c19hdWRpbykgewotICAgIGF1ZGlvX21hbmFnZXIoKS0+U2V0QWN0aXZlQXVkaW9MYXllcihhdWRp
b19sYXllcik7Ci0gICAgU0xPYmplY3RJdGYgZW5naW5lX29iamVjdCA9IGF1ZGlvX21hbmFnZXIo
KS0+R2V0T3BlblNMRW5naW5lKCk7Ci0gICAgRVhQRUNUX05FKG51bGxwdHIsIGVuZ2luZV9vYmpl
Y3QpOwotICAgIC8vIFBlcmZvcm0gYSBzaW1wbGUgc2FuaXR5IGNoZWNrIG9mIHRoZSBjcmVhdGVk
IGVuZ2luZSBvYmplY3QuCi0gICAgVmFsaWRhdGVTTEVuZ2luZShlbmdpbmVfb2JqZWN0KTsKLSAg
fQotfQotCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSW5pdENsb3NlKSB7Ci0gIEVYUEVDVF9U
UlVFKGF1ZGlvX21hbmFnZXIoKS0+SW5pdCgpKTsKLSAgRVhQRUNUX1RSVUUoYXVkaW9fbWFuYWdl
cigpLT5DbG9zZSgpKTsKLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIElzQWNvdXN0aWNF
Y2hvQ2FuY2VsZXJTdXBwb3J0ZWQpIHsKLSAgUFJJTlQoIiVzQWNvdXN0aWMgRWNobyBDYW5jZWxl
ciBzdXBwb3J0OiAlc1xuIiwga1RhZywKLSAgICAgICAgYXVkaW9fbWFuYWdlcigpLT5Jc0Fjb3Vz
dGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkgPyAiWWVzIiA6ICJObyIpOwotfQotCi1URVNUX0Yo
QXVkaW9NYW5hZ2VyVGVzdCwgSXNBdXRvbWF0aWNHYWluQ29udHJvbFN1cHBvcnRlZCkgewotICBF
WFBFQ1RfRkFMU0UoYXVkaW9fbWFuYWdlcigpLT5Jc0F1dG9tYXRpY0dhaW5Db250cm9sU3VwcG9y
dGVkKCkpOwotfQotCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSXNOb2lzZVN1cHByZXNzb3JT
dXBwb3J0ZWQpIHsKLSAgUFJJTlQoIiVzTm9pc2UgU3VwcHJlc3NvciBzdXBwb3J0OiAlc1xuIiwg
a1RhZywKLSAgICAgICAgYXVkaW9fbWFuYWdlcigpLT5Jc05vaXNlU3VwcHJlc3NvclN1cHBvcnRl
ZCgpID8gIlllcyIgOiAiTm8iKTsKLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIElzTG93
TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQpIHsKLSAgUFJJTlQoIiVzTG93IGxhdGVuY3kgb3V0cHV0
IHN1cHBvcnQ6ICVzXG4iLCBrVGFnLAotICAgICAgICBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0
ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKSA/ICJZZXMiIDogIk5vIik7Ci19Ci0KLVRFU1RfRihBdWRp
b01hbmFnZXJUZXN0LCBJc0xvd0xhdGVuY3lSZWNvcmRTdXBwb3J0ZWQpIHsKLSAgUFJJTlQoIiVz
TG93IGxhdGVuY3kgaW5wdXQgc3VwcG9ydDogJXNcbiIsIGtUYWcsCi0gICAgICAgIGF1ZGlvX21h
bmFnZXIoKS0+SXNMb3dMYXRlbmN5UmVjb3JkU3VwcG9ydGVkKCkgPyAiWWVzIiA6ICJObyIpOwot
fQotCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSXNQcm9BdWRpb1N1cHBvcnRlZCkgewotICBQ
UklOVCgiJXNQcm8gYXVkaW8gc3VwcG9ydDogJXNcbiIsIGtUYWcsCi0gICAgICAgIGF1ZGlvX21h
bmFnZXIoKS0+SXNQcm9BdWRpb1N1cHBvcnRlZCgpID8gIlllcyIgOiAiTm8iKTsKLX0KLQotLy8g
VmVyaWZ5IHRoYXQgcGxheW91dCBzaWRlIGlzIGNvbmZpZ3VyZWQgZm9yIG1vbm8gYnkgZGVmYXVs
dC4KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBJc1N0ZXJlb1BsYXlvdXRTdXBwb3J0ZWQpIHsK
LSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX21hbmFnZXIoKS0+SXNTdGVyZW9QbGF5b3V0U3VwcG9ydGVk
KCkpOwotfQotCi0vLyBWZXJpZnkgdGhhdCByZWNvcmRpbmcgc2lkZSBpcyBjb25maWd1cmVkIGZv
ciBtb25vIGJ5IGRlZmF1bHQuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSXNTdGVyZW9SZWNv
cmRTdXBwb3J0ZWQpIHsKLSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX21hbmFnZXIoKS0+SXNTdGVyZW9S
ZWNvcmRTdXBwb3J0ZWQoKSk7Ci19Ci0KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBTaG93QXVk
aW9QYXJhbWV0ZXJJbmZvKSB7Ci0gIGNvbnN0IGJvb2wgbG93X2xhdGVuY3lfb3V0ID0gYXVkaW9f
bWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCk7Ci0gIGNvbnN0IGJvb2wg
bG93X2xhdGVuY3lfaW4gPSBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0ZW5jeVJlY29yZFN1cHBv
cnRlZCgpOwotICBQUklOVCgiUExBWU9VVDpcbiIpOwotICBQUklOVCgiJXNhdWRpbyBsYXllcjog
JXNcbiIsIGtUYWcsCi0gICAgICAgIGxvd19sYXRlbmN5X291dCA/ICJMb3cgbGF0ZW5jeSBPcGVu
U0wiIDogIkphdmEvSk5JIGJhc2VkIEF1ZGlvVHJhY2siKTsKLSAgUFJJTlQoIiVzc2FtcGxlIHJh
dGU6ICVkIEh6XG4iLCBrVGFnLCBwbGF5b3V0X3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCkpOwot
ICBQUklOVCgiJXNjaGFubmVsczogJSIgUlRDX1BSSXVTICJcbiIsIGtUYWcsIHBsYXlvdXRfcGFy
YW1ldGVyc18uY2hhbm5lbHMoKSk7Ci0gIFBSSU5UKCIlc2ZyYW1lcyBwZXIgYnVmZmVyOiAlIiBS
VENfUFJJdVMgIiA8PT4gJS4yZiBtc1xuIiwga1RhZywKLSAgICAgICAgcGxheW91dF9wYXJhbWV0
ZXJzXy5mcmFtZXNfcGVyX2J1ZmZlcigpLAotICAgICAgICBwbGF5b3V0X3BhcmFtZXRlcnNfLkdl
dEJ1ZmZlclNpemVJbk1pbGxpc2Vjb25kcygpKTsKLSAgUFJJTlQoIlJFQ09SRDogXG4iKTsKLSAg
UFJJTlQoIiVzYXVkaW8gbGF5ZXI6ICVzXG4iLCBrVGFnLAotICAgICAgICBsb3dfbGF0ZW5jeV9p
biA/ICJMb3cgbGF0ZW5jeSBPcGVuU0wiIDogIkphdmEvSk5JIGJhc2VkIEF1ZGlvUmVjb3JkIik7
Ci0gIFBSSU5UKCIlc3NhbXBsZSByYXRlOiAlZCBIelxuIiwga1RhZywgcmVjb3JkX3BhcmFtZXRl
cnNfLnNhbXBsZV9yYXRlKCkpOwotICBQUklOVCgiJXNjaGFubmVsczogJSIgUlRDX1BSSXVTICJc
biIsIGtUYWcsIHJlY29yZF9wYXJhbWV0ZXJzXy5jaGFubmVscygpKTsKLSAgUFJJTlQoIiVzZnJh
bWVzIHBlciBidWZmZXI6ICUiIFJUQ19QUkl1UyAiIDw9PiAlLjJmIG1zXG4iLCBrVGFnLAotICAg
ICAgICByZWNvcmRfcGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSwKLSAgICAgICAgcmVj
b3JkX3BhcmFtZXRlcnNfLkdldEJ1ZmZlclNpemVJbk1pbGxpc2Vjb25kcygpKTsKLX0KLQotLy8g
VGhlIGF1ZGlvIGRldmljZSBtb2R1bGUgb25seSBzdXBwb3JzIHRoZSBzYW1lIHNhbXBsZSByYXRl
IGluIGJvdGggZGlyZWN0aW9ucy4KLS8vIEluIGFkZGl0aW9uLCBpbiBmdWxsLWR1cGxleCBsb3ct
bGF0ZW5jeSBtb2RlIChPcGVuU0wgRVMpLCBib3RoIGlucHV0IGFuZAotLy8gb3V0cHV0IG11c3Qg
dXNlIHRoZSBzYW1lIG5hdGl2ZSBidWZmZXIgc2l6ZSB0byBhbGxvdyBmb3IgdXNhZ2Ugb2YgdGhl
IGZhc3QKLS8vIGF1ZGlvIHRyYWNrIGluIEFuZHJvaWQuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVz
dCwgVmVyaWZ5QXVkaW9QYXJhbWV0ZXJzKSB7Ci0gIGNvbnN0IGJvb2wgbG93X2xhdGVuY3lfb3V0
ID0gYXVkaW9fbWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCk7Ci0gIGNv
bnN0IGJvb2wgbG93X2xhdGVuY3lfaW4gPSBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0ZW5jeVJl
Y29yZFN1cHBvcnRlZCgpOwotICBFWFBFQ1RfRVEocGxheW91dF9wYXJhbWV0ZXJzXy5zYW1wbGVf
cmF0ZSgpLAotICAgICAgICAgICAgcmVjb3JkX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCkpOwot
ICBpZiAobG93X2xhdGVuY3lfb3V0ICYmIGxvd19sYXRlbmN5X2luKSB7Ci0gICAgRVhQRUNUX0VR
KHBsYXlvdXRfcGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSwKLSAgICAgICAgICAgICAg
cmVjb3JkX3BhcmFtZXRlcnNfLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICB9Ci19Ci0KLS8vIEFk
ZCBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIHRlc3QgZm9yIGxvZ2dpbmcgcHVy
cG9zZXMuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgU2hvd0RldmljZUluZm8pIHsKLSAgQnVp
bGRJbmZvIGJ1aWxkX2luZm87Ci0gIFBSSU5UKCIlc21vZGVsOiAlc1xuIiwga1RhZywgYnVpbGRf
aW5mby5HZXREZXZpY2VNb2RlbCgpLmNfc3RyKCkpOwotICBQUklOVCgiJXNicmFuZDogJXNcbiIs
IGtUYWcsIGJ1aWxkX2luZm8uR2V0QnJhbmQoKS5jX3N0cigpKTsKLSAgUFJJTlQoIiVzbWFudWZh
Y3R1cmVyOiAlc1xuIiwga1RhZywKLSAgICAgICAgYnVpbGRfaW5mby5HZXREZXZpY2VNYW51ZmFj
dHVyZXIoKS5jX3N0cigpKTsKLX0KLQotLy8gQWRkIEFuZHJvaWQgYnVpbGQgaW5mb3JtYXRpb24g
dG8gdGhlIHRlc3QgZm9yIGxvZ2dpbmcgcHVycG9zZXMuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVz
dCwgU2hvd0J1aWxkSW5mbykgewotICBCdWlsZEluZm8gYnVpbGRfaW5mbzsKLSAgUFJJTlQoIiVz
YnVpbGQgcmVsZWFzZTogJXNcbiIsIGtUYWcsIGJ1aWxkX2luZm8uR2V0QnVpbGRSZWxlYXNlKCku
Y19zdHIoKSk7Ci0gIFBSSU5UKCIlc2J1aWxkIGlkOiAlc1xuIiwga1RhZywgYnVpbGRfaW5mby5H
ZXRBbmRyb2lkQnVpbGRJZCgpLmNfc3RyKCkpOwotICBQUklOVCgiJXNidWlsZCB0eXBlOiAlc1xu
Iiwga1RhZywgYnVpbGRfaW5mby5HZXRCdWlsZFR5cGUoKS5jX3N0cigpKTsKLSAgUFJJTlQoIiVz
U0RLIHZlcnNpb246ICVkXG4iLCBrVGFnLCBidWlsZF9pbmZvLkdldFNka1ZlcnNpb24oKSk7Ci19
Ci0KLS8vIEJhc2ljIHRlc3Qgb2YgdGhlIEF1ZGlvUGFyYW1ldGVycyBjbGFzcyB1c2luZyBkZWZh
dWx0IGNvbnN0cnVjdGlvbiB3aGVyZQotLy8gYWxsIG1lbWJlcnMgYXJlIHNldCB0byB6ZXJvLgot
VEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIEF1ZGlvUGFyYW1ldGVyc1dpdGhEZWZhdWx0Q29uc3Ry
dWN0aW9uKSB7Ci0gIEF1ZGlvUGFyYW1ldGVycyBwYXJhbXM7Ci0gIEVYUEVDVF9GQUxTRShwYXJh
bXMuaXNfdmFsaWQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBwYXJhbXMuc2FtcGxlX3JhdGUoKSk7Ci0g
IEVYUEVDVF9FUSgwVSwgcGFyYW1zLmNoYW5uZWxzKCkpOwotICBFWFBFQ1RfRVEoMFUsIHBhcmFt
cy5mcmFtZXNfcGVyX2J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMuZnJhbWVzX3Bl
cl8xMG1zX2J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMuR2V0Qnl0ZXNQZXJGcmFt
ZSgpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMuR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIEVY
UEVDVF9FUSgwVSwgcGFyYW1zLkdldEJ5dGVzUGVyMTBtc0J1ZmZlcigpKTsKLSAgRVhQRUNUX0VR
KDAuMGYsIHBhcmFtcy5HZXRCdWZmZXJTaXplSW5NaWxsaXNlY29uZHMoKSk7Ci19Ci0KLS8vIEJh
c2ljIHRlc3Qgb2YgdGhlIEF1ZGlvUGFyYW1ldGVycyBjbGFzcyB1c2luZyBub24gZGVmYXVsdCBj
b25zdHJ1Y3Rpb24uCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgQXVkaW9QYXJhbWV0ZXJzV2l0
aE5vbkRlZmF1bHRDb25zdHJ1Y3Rpb24pIHsKLSAgY29uc3QgaW50IGtTYW1wbGVSYXRlID0gNDgw
MDA7Ci0gIGNvbnN0IHNpemVfdCBrQ2hhbm5lbHMgPSAxOwotICBjb25zdCBzaXplX3Qga0ZyYW1l
c1BlckJ1ZmZlciA9IDQ4MDsKLSAgY29uc3Qgc2l6ZV90IGtGcmFtZXNQZXIxMG1zQnVmZmVyID0g
NDgwOwotICBjb25zdCBzaXplX3Qga0J5dGVzUGVyRnJhbWUgPSAyOwotICBjb25zdCBmbG9hdCBr
QnVmZmVyU2l6ZUluTXMgPSAxMC4wZjsKLSAgQXVkaW9QYXJhbWV0ZXJzIHBhcmFtcyhrU2FtcGxl
UmF0ZSwga0NoYW5uZWxzLCBrRnJhbWVzUGVyQnVmZmVyKTsKLSAgRVhQRUNUX1RSVUUocGFyYW1z
LmlzX3ZhbGlkKCkpOwotICBFWFBFQ1RfRVEoa1NhbXBsZVJhdGUsIHBhcmFtcy5zYW1wbGVfcmF0
ZSgpKTsKLSAgRVhQRUNUX0VRKGtDaGFubmVscywgcGFyYW1zLmNoYW5uZWxzKCkpOwotICBFWFBF
Q1RfRVEoa0ZyYW1lc1BlckJ1ZmZlciwgcGFyYW1zLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihrU2FtcGxlUmF0ZSAvIDEwMCksCi0gICAgICAg
ICAgICBwYXJhbXMuZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKGtCeXRl
c1BlckZyYW1lLCBwYXJhbXMuR2V0Qnl0ZXNQZXJGcmFtZSgpKTsKLSAgRVhQRUNUX0VRKGtCeXRl
c1BlckZyYW1lICoga0ZyYW1lc1BlckJ1ZmZlciwgcGFyYW1zLkdldEJ5dGVzUGVyQnVmZmVyKCkp
OwotICBFWFBFQ1RfRVEoa0J5dGVzUGVyRnJhbWUgKiBrRnJhbWVzUGVyMTBtc0J1ZmZlciwKLSAg
ICAgICAgICAgIHBhcmFtcy5HZXRCeXRlc1BlcjEwbXNCdWZmZXIoKSk7Ci0gIEVYUEVDVF9FUShr
QnVmZmVyU2l6ZUluTXMsIHBhcmFtcy5HZXRCdWZmZXJTaXplSW5NaWxsaXNlY29uZHMoKSk7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVk
aW9fcmVjb3JkX2puaS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fcmVjb3JkX2puaS5jYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhYzQ1ODc2Y2ViNmNhZmQ1N2ExNzQxODgzN2M4
M2FlNzA2MDkwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2F1ZGlvX3JlY29yZF9qbmkuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwy
ODIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJtb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX3JlY29yZF9qbmkuaCIKLQotI2luY2x1ZGUgPHN0cmlu
Zz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNpbmNsdWRlICJydGNfYmFzZS9hcnJheXNpemUuaCIK
LSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9mb3JtYXRf
bWFjcm9zLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL3BsYXRmb3JtX3RocmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RpbWVfdXRpbHMuaCIK
LSNpbmNsdWRlICJzeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9tZXRyaWNzLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotCi1uYW1lc3BhY2UgewotLy8gU2NvcGVkIGNsYXNzIHdoaWNoIGxvZ3MgaXRz
IHRpbWUgb2YgbGlmZSBhcyBhIFVNQSBzdGF0aXN0aWMuIEl0IGdlbmVyYXRlcwotLy8gYSBoaXN0
b2dyYW0gd2hpY2ggbWVhc3VyZXMgdGhlIHRpbWUgaXQgdGFrZXMgZm9yIGEgbWV0aG9kL3Njb3Bl
IHRvIGV4ZWN1dGUuCi1jbGFzcyBTY29wZWRIaXN0b2dyYW1UaW1lciB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBTY29wZWRIaXN0b2dyYW1UaW1lcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKLSAg
ICAgIDogaGlzdG9ncmFtX25hbWVfKG5hbWUpLCBzdGFydF90aW1lX21zXyhydGM6OlRpbWVNaWxs
aXMoKSkge30KLSAgflNjb3BlZEhpc3RvZ3JhbVRpbWVyKCkgewotICAgIGNvbnN0IGludDY0X3Qg
bGlmZV90aW1lX21zID0gcnRjOjpUaW1lU2luY2Uoc3RhcnRfdGltZV9tc18pOwotICAgIFJUQ19I
SVNUT0dSQU1fQ09VTlRTXzEwMDAoaGlzdG9ncmFtX25hbWVfLCBsaWZlX3RpbWVfbXMpOwotICAg
IFJUQ19MT0coSU5GTykgPDwgaGlzdG9ncmFtX25hbWVfIDw8ICI6ICIgPDwgbGlmZV90aW1lX21z
OwotICB9Ci0KLSBwcml2YXRlOgotICBjb25zdCBzdGQ6OnN0cmluZyBoaXN0b2dyYW1fbmFtZV87
Ci0gIGludDY0X3Qgc3RhcnRfdGltZV9tc187Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLS8vIEF1
ZGlvUmVjb3JkSm5pOjpKYXZhQXVkaW9SZWNvcmQgaW1wbGVtZW50YXRpb24uCi1BdWRpb1JlY29y
ZEpuaTo6SmF2YUF1ZGlvUmVjb3JkOjpKYXZhQXVkaW9SZWNvcmQoCi0gICAgTmF0aXZlUmVnaXN0
cmF0aW9uKiBuYXRpdmVfcmVnLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlv
X3JlY29yZCkKLSAgICA6IGF1ZGlvX3JlY29yZF8oc3RkOjptb3ZlKGF1ZGlvX3JlY29yZCkpLAot
ICAgICAgaW5pdF9yZWNvcmRpbmdfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJpbml0UmVjb3Jk
aW5nIiwgIihJSSlJIikpLAotICAgICAgc3RhcnRfcmVjb3JkaW5nXyhuYXRpdmVfcmVnLT5HZXRN
ZXRob2RJZCgic3RhcnRSZWNvcmRpbmciLCAiKClaIikpLAotICAgICAgc3RvcF9yZWNvcmRpbmdf
KG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJzdG9wUmVjb3JkaW5nIiwgIigpWiIpKSwKLSAgICAg
IGVuYWJsZV9idWlsdF9pbl9hZWNfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJlbmFibGVCdWls
dEluQUVDIiwgIihaKVoiKSksCi0gICAgICBlbmFibGVfYnVpbHRfaW5fbnNfKG5hdGl2ZV9yZWct
PkdldE1ldGhvZElkKCJlbmFibGVCdWlsdEluTlMiLCAiKFopWiIpKSB7fQotCi1BdWRpb1JlY29y
ZEpuaTo6SmF2YUF1ZGlvUmVjb3JkOjp+SmF2YUF1ZGlvUmVjb3JkKCkge30KLQotaW50IEF1ZGlv
UmVjb3JkSm5pOjpKYXZhQXVkaW9SZWNvcmQ6OkluaXRSZWNvcmRpbmcoaW50IHNhbXBsZV9yYXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGNoYW5uZWxzKSB7Ci0gIHJldHVybiBhdWRpb19yZWNvcmRfLT5DYWxsSW50TWV0aG9kKGlu
aXRfcmVjb3JkaW5nXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8amludD4oc2FtcGxlX3JhdGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxqaW50PihjaGFubmVscykpOwotfQotCi1ib29sIEF1ZGlv
UmVjb3JkSm5pOjpKYXZhQXVkaW9SZWNvcmQ6OlN0YXJ0UmVjb3JkaW5nKCkgewotICByZXR1cm4g
YXVkaW9fcmVjb3JkXy0+Q2FsbEJvb2xlYW5NZXRob2Qoc3RhcnRfcmVjb3JkaW5nXyk7Ci19Ci0K
LWJvb2wgQXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZDo6U3RvcFJlY29yZGluZygpIHsK
LSAgcmV0dXJuIGF1ZGlvX3JlY29yZF8tPkNhbGxCb29sZWFuTWV0aG9kKHN0b3BfcmVjb3JkaW5n
Xyk7Ci19Ci0KLWJvb2wgQXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZDo6RW5hYmxlQnVp
bHRJbkFFQyhib29sIGVuYWJsZSkgewotICByZXR1cm4gYXVkaW9fcmVjb3JkXy0+Q2FsbEJvb2xl
YW5NZXRob2QoZW5hYmxlX2J1aWx0X2luX2FlY18sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxqYm9vbGVhbj4oZW5hYmxlKSk7Ci19Ci0KLWJv
b2wgQXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZDo6RW5hYmxlQnVpbHRJbk5TKGJvb2wg
ZW5hYmxlKSB7Ci0gIHJldHVybiBhdWRpb19yZWNvcmRfLT5DYWxsQm9vbGVhbk1ldGhvZChlbmFi
bGVfYnVpbHRfaW5fbnNfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8amJvb2xlYW4+KGVuYWJsZSkpOwotfQotCi0vLyBBdWRpb1JlY29yZEpu
aSBpbXBsZW1lbnRhdGlvbi4KLUF1ZGlvUmVjb3JkSm5pOjpBdWRpb1JlY29yZEpuaShBdWRpb01h
bmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBqX2Vudmlyb25tZW50XyhKVk06OkdldEluc3Rh
bmNlKCktPmVudmlyb25tZW50KCkpLAotICAgICAgYXVkaW9fbWFuYWdlcl8oYXVkaW9fbWFuYWdl
ciksCi0gICAgICBhdWRpb19wYXJhbWV0ZXJzXyhhdWRpb19tYW5hZ2VyLT5HZXRSZWNvcmRBdWRp
b1BhcmFtZXRlcnMoKSksCi0gICAgICB0b3RhbF9kZWxheV9pbl9taWxsaXNlY29uZHNfKDApLAot
ICAgICAgZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyhudWxscHRyKSwKLSAgICAgIGRpcmVjdF9idWZm
ZXJfY2FwYWNpdHlfaW5fYnl0ZXNfKDApLAotICAgICAgZnJhbWVzX3Blcl9idWZmZXJfKDApLAot
ICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSwKLSAgICAgIHJlY29yZGluZ18oZmFsc2UpLAotICAg
ICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8obnVsbHB0cikgewotICBSVENfTE9HKElORk8pIDw8ICJj
dG9yIjsKLSAgUlRDX0RDSEVDSyhhdWRpb19wYXJhbWV0ZXJzXy5pc192YWxpZCgpKTsKLSAgUlRD
X0NIRUNLKGpfZW52aXJvbm1lbnRfKTsKLSAgSk5JTmF0aXZlTWV0aG9kIG5hdGl2ZV9tZXRob2Rz
W10gPSB7Ci0gICAgICB7Im5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyIsICIoTGphdmEv
bmlvL0J5dGVCdWZmZXI7SilWIiwKLSAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPigKLSAg
ICAgICAgICAgJndlYnJ0Yzo6QXVkaW9SZWNvcmRKbmk6OkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVz
cyl9LAotICAgICAgeyJuYXRpdmVEYXRhSXNSZWNvcmRlZCIsICIoSUopViIsCi0gICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oJndlYnJ0Yzo6QXVkaW9SZWNvcmRKbmk6OkRhdGFJc1JlY29y
ZGVkKX19OwotICBqX25hdGl2ZV9yZWdpc3RyYXRpb25fID0gal9lbnZpcm9ubWVudF8tPlJlZ2lz
dGVyTmF0aXZlcygKLSAgICAgICJvcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVj
b3JkIiwgbmF0aXZlX21ldGhvZHMsCi0gICAgICBhcnJheXNpemUobmF0aXZlX21ldGhvZHMpKTsK
LSAgal9hdWRpb19yZWNvcmRfLnJlc2V0KAotICAgICAgbmV3IEphdmFBdWRpb1JlY29yZChqX25h
dGl2ZV9yZWdpc3RyYXRpb25fLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBqX25h
dGl2ZV9yZWdpc3RyYXRpb25fLT5OZXdPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiPGluaXQ+IiwgIihKKVYiLCBQb2ludGVyVG9qbG9uZyh0aGlzKSkpKTsKLSAgLy8gRGV0
YWNoIGZyb20gdGhpcyB0aHJlYWQgc2luY2Ugd2Ugd2FudCB0byB1c2UgdGhlIGNoZWNrZXIgdG8g
dmVyaWZ5IGNhbGxzCi0gIC8vIGZyb20gdGhlIEphdmEgYmFzZWQgYXVkaW8gdGhyZWFkLgotICB0
aHJlYWRfY2hlY2tlcl9qYXZhXy5EZXRhY2goKTsKLX0KLQotQXVkaW9SZWNvcmRKbmk6On5BdWRp
b1JlY29yZEpuaSgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiZHRvciI7Ci0gIFJUQ19EQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgVGVybWluYXRlKCk7Ci19Ci0KLWludDMy
X3QgQXVkaW9SZWNvcmRKbmk6OkluaXQoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkluaXQiOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIHJldHVybiAwOwot
fQotCi1pbnQzMl90IEF1ZGlvUmVjb3JkSm5pOjpUZXJtaW5hdGUoKSB7Ci0gIFJUQ19MT0coSU5G
TykgPDwgIlRlcm1pbmF0ZSI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVu
dCgpKTsKLSAgU3RvcFJlY29yZGluZygpOwotICByZXR1cm4gMDsKLX0KLQotaW50MzJfdCBBdWRp
b1JlY29yZEpuaTo6SW5pdFJlY29yZGluZygpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiSW5pdFJl
Y29yZGluZyI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAg
UlRDX0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkaW5nXyk7Ci0g
IFNjb3BlZEhpc3RvZ3JhbVRpbWVyIHRpbWVyKCJXZWJSVEMuQXVkaW8uSW5pdFJlY29yZGluZ0R1
cmF0aW9uTXMiKTsKLSAgaW50IGZyYW1lc19wZXJfYnVmZmVyID0gal9hdWRpb19yZWNvcmRfLT5J
bml0UmVjb3JkaW5nKAotICAgICAgYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSwgYXVk
aW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKSk7Ci0gIGlmIChmcmFtZXNfcGVyX2J1ZmZlciA8IDAp
IHsKLSAgICBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfID0gbnVsbHB0cjsKLSAgICBSVENfTE9HKExT
X0VSUk9SKSA8PCAiSW5pdFJlY29yZGluZyBmYWlsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQot
ICBmcmFtZXNfcGVyX2J1ZmZlcl8gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGZyYW1lc19wZXJfYnVm
ZmVyKTsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiZnJhbWVzX3Blcl9idWZmZXI6ICIgPDwgZnJhbWVz
X3Blcl9idWZmZXJfOwotICBjb25zdCBzaXplX3QgYnl0ZXNfcGVyX2ZyYW1lID0gYXVkaW9fcGFy
YW1ldGVyc18uY2hhbm5lbHMoKSAqIHNpemVvZihpbnQxNl90KTsKLSAgUlRDX0NIRUNLX0VRKGRp
cmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfLAotICAgICAgICAgICAgICAgZnJhbWVzX3Bl
cl9idWZmZXJfICogYnl0ZXNfcGVyX2ZyYW1lKTsKLSAgUlRDX0NIRUNLX0VRKGZyYW1lc19wZXJf
YnVmZmVyXywgYXVkaW9fcGFyYW1ldGVyc18uZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpKTsKLSAg
aW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgQXVkaW9SZWNv
cmRKbmk6OlN0YXJ0UmVjb3JkaW5nKCkgewotICBSVENfTE9HKElORk8pIDw8ICJTdGFydFJlY29y
ZGluZyI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRD
X0RDSEVDSyghcmVjb3JkaW5nXyk7Ci0gIGlmICghaW5pdGlhbGl6ZWRfKSB7Ci0gICAgUlRDX0RM
T0coTFNfV0FSTklORykKLSAgICAgICAgPDwgIlJlY29yZGluZyBjYW4gbm90IHN0YXJ0IHNpbmNl
IEluaXRSZWNvcmRpbmcgbXVzdCBzdWNjZWVkIGZpcnN0IjsKLSAgICByZXR1cm4gMDsKLSAgfQot
ICBTY29wZWRIaXN0b2dyYW1UaW1lciB0aW1lcigiV2ViUlRDLkF1ZGlvLlN0YXJ0UmVjb3JkaW5n
RHVyYXRpb25NcyIpOwotICBpZiAoIWpfYXVkaW9fcmVjb3JkXy0+U3RhcnRSZWNvcmRpbmcoKSkg
ewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJTdGFydFJlY29yZGluZyBmYWlsZWQiOwotICAg
IHJldHVybiAtMTsKLSAgfQotICByZWNvcmRpbmdfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0K
LWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OlN0b3BSZWNvcmRpbmcoKSB7Ci0gIFJUQ19MT0coSU5G
TykgPDwgIlN0b3BSZWNvcmRpbmciOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1
cnJlbnQoKSk7Ci0gIGlmICghaW5pdGlhbGl6ZWRfIHx8ICFyZWNvcmRpbmdfKSB7Ci0gICAgcmV0
dXJuIDA7Ci0gIH0KLSAgaWYgKCFqX2F1ZGlvX3JlY29yZF8tPlN0b3BSZWNvcmRpbmcoKSkgewot
ICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJTdG9wUmVjb3JkaW5nIGZhaWxlZCI7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0gIC8vIElmIHdlIGRvbid0IGRldGFjaCBoZXJlLCB3ZSB3aWxsIGhpdCBh
IFJUQ19EQ0hFQ0sgaW4gT25EYXRhSXNSZWNvcmRlZCgpCi0gIC8vIG5leHQgdGltZSBTdGFydFJl
Y29yZGluZygpIGlzIGNhbGxlZCBzaW5jZSBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBKYXZhCi0gIC8v
IHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJfamF2YV8uRGV0YWNoKCk7Ci0gIGluaXRpYWxpemVk
XyA9IGZhbHNlOwotICByZWNvcmRpbmdfID0gZmFsc2U7Ci0gIGRpcmVjdF9idWZmZXJfYWRkcmVz
c18gPSBudWxscHRyOwotICByZXR1cm4gMDsKLX0KLQotdm9pZCBBdWRpb1JlY29yZEpuaTo6QXR0
YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVmZmVyKSB7Ci0gIFJUQ19M
T0coSU5GTykgPDwgIkF0dGFjaEF1ZGlvQnVmZmVyIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXyA9IGF1ZGlvQnVmZmVy
OwotICBjb25zdCBpbnQgc2FtcGxlX3JhdGVfaHogPSBhdWRpb19wYXJhbWV0ZXJzXy5zYW1wbGVf
cmF0ZSgpOwotICBSVENfTE9HKElORk8pIDw8ICJTZXRSZWNvcmRpbmdTYW1wbGVSYXRlKCIgPDwg
c2FtcGxlX3JhdGVfaHogPDwgIikiOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0UmVjb3Jk
aW5nU2FtcGxlUmF0ZShzYW1wbGVfcmF0ZV9oeik7Ci0gIGNvbnN0IHNpemVfdCBjaGFubmVscyA9
IGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlNldFJl
Y29yZGluZ0NoYW5uZWxzKCIgPDwgY2hhbm5lbHMgPDwgIikiOwotICBhdWRpb19kZXZpY2VfYnVm
ZmVyXy0+U2V0UmVjb3JkaW5nQ2hhbm5lbHMoY2hhbm5lbHMpOwotICB0b3RhbF9kZWxheV9pbl9t
aWxsaXNlY29uZHNfID0KLSAgICAgIGF1ZGlvX21hbmFnZXJfLT5HZXREZWxheUVzdGltYXRlSW5N
aWxsaXNlY29uZHMoKTsKLSAgUlRDX0RDSEVDS19HVCh0b3RhbF9kZWxheV9pbl9taWxsaXNlY29u
ZHNfLCAwKTsKLSAgUlRDX0xPRyhJTkZPKSA8PCAidG90YWxfZGVsYXlfaW5fbWlsbGlzZWNvbmRz
OiAiCi0gICAgICAgICAgICAgICAgPDwgdG90YWxfZGVsYXlfaW5fbWlsbGlzZWNvbmRzXzsKLX0K
LQotaW50MzJfdCBBdWRpb1JlY29yZEpuaTo6RW5hYmxlQnVpbHRJbkFFQyhib29sIGVuYWJsZSkg
ewotICBSVENfTE9HKElORk8pIDw8ICJFbmFibGVCdWlsdEluQUVDKCIgPDwgZW5hYmxlIDw8ICIp
IjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICByZXR1cm4g
al9hdWRpb19yZWNvcmRfLT5FbmFibGVCdWlsdEluQUVDKGVuYWJsZSkgPyAwIDogLTE7Ci19Ci0K
LWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OkVuYWJsZUJ1aWx0SW5BR0MoYm9vbCBlbmFibGUpIHsK
LSAgLy8gVE9ETyhoZW5yaWthKTogcG9zc2libHkgcmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQg
YnkgYW55IGNsaWVudC4KLSAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0g
IHJldHVybiAtMTsKLX0KLQotaW50MzJfdCBBdWRpb1JlY29yZEpuaTo6RW5hYmxlQnVpbHRJbk5T
KGJvb2wgZW5hYmxlKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkVuYWJsZUJ1aWx0SW5OUygiIDw8
IGVuYWJsZSA8PCAiKSI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgcmV0dXJuIGpfYXVkaW9fcmVjb3JkXy0+RW5hYmxlQnVpbHRJbk5TKGVuYWJsZSkgPyAw
IDogLTE7Ci19Ci0KLUpOSV9GVU5DVElPTl9BTElHTgotdm9pZCBKTklDQUxMIEF1ZGlvUmVjb3Jk
Sm5pOjpDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmpl
Y3QgYnl0ZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVBdWRpb1JlY29yZCkgewotICB3ZWJydGM6OkF1ZGlv
UmVjb3JkSm5pKiB0aGlzX29iamVjdCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6
QXVkaW9SZWNvcmRKbmkqPihuYXRpdmVBdWRpb1JlY29yZCk7Ci0gIHRoaXNfb2JqZWN0LT5PbkNh
Y2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhlbnYsIGJ5dGVfYnVmZmVyKTsKLX0KLQotdm9pZCBBdWRp
b1JlY29yZEpuaTo6T25DYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoSk5JRW52KiBlbnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGJ5dGVf
YnVmZmVyKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIk9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNz
IjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENfRENI
RUNLKCFkaXJlY3RfYnVmZmVyX2FkZHJlc3NfKTsKLSAgZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyA9
IGVudi0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhieXRlX2J1ZmZlcik7Ci0gIGpsb25nIGNhcGFj
aXR5ID0gZW52LT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShieXRlX2J1ZmZlcik7Ci0gIFJUQ19M
T0coSU5GTykgPDwgImRpcmVjdCBidWZmZXIgY2FwYWNpdHk6ICIgPDwgY2FwYWNpdHk7Ci0gIGRp
cmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjYXBh
Y2l0eSk7Ci19Ci0KLUpOSV9GVU5DVElPTl9BTElHTgotdm9pZCBKTklDQUxMIEF1ZGlvUmVjb3Jk
Sm5pOjpEYXRhSXNSZWNvcmRlZChKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGppbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVBdWRpb1JlY29yZCkgewotICB3ZWJy
dGM6OkF1ZGlvUmVjb3JkSm5pKiB0aGlzX29iamVjdCA9Ci0gICAgICByZWludGVycHJldF9jYXN0
PHdlYnJ0Yzo6QXVkaW9SZWNvcmRKbmkqPihuYXRpdmVBdWRpb1JlY29yZCk7Ci0gIHRoaXNfb2Jq
ZWN0LT5PbkRhdGFJc1JlY29yZGVkKGxlbmd0aCk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBvbiBhIGhpZ2gtcHJpb3JpdHkgdGhyZWFkIGZyb20gSmF2YS4gVGhlIG5hbWUgb2YKLS8v
IHRoZSB0aHJlYWQgaXMgJ0F1ZGlvUmVjb3JkVGhyZWFkJy4KLXZvaWQgQXVkaW9SZWNvcmRKbmk6
Ok9uRGF0YUlzUmVjb3JkZWQoaW50IGxlbmd0aCkgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyX2phdmFfLklzQ3VycmVudCgpKTsKLSAgaWYgKCFhdWRpb19kZXZpY2VfYnVmZmVyXykgewot
ICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJBdHRhY2hBdWRpb0J1ZmZlciBoYXMgbm90IGJlZW4g
Y2FsbGVkIjsKLSAgICByZXR1cm47Ci0gIH0KLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJl
Y29yZGVkQnVmZmVyKGRpcmVjdF9idWZmZXJfYWRkcmVzc18sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNfcGVyX2J1ZmZlcl8pOwotICAvLyBXZSBwcm92
aWRlIG9uZSAoY29tYmluZWQpIGZpeGVkIGRlbGF5IGVzdGltYXRlIGZvciB0aGUgQVBNIGFuZCB1
c2UgdGhlCi0gIC8vIHxwbGF5RGVsYXlNc3wgcGFyYW1ldGVyIG9ubHkuIENvbXBvbmVudHMgbGlr
ZSB0aGUgQUVDIG9ubHkgc2VlcyB0aGUgc3VtCi0gIC8vIG9mIHxwbGF5RGVsYXlNc3wgYW5kIHxy
ZWNEZWxheU1zfCwgaGVuY2UgdGhlIGRpc3RyaWJ1dGlvbnMgZG9lcyBub3QgbWF0dGVyLgotICBh
dWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0VlFFRGF0YSh0b3RhbF9kZWxheV9pbl9taWxsaXNlY29u
ZHNfLCAwKTsKLSAgaWYgKGF1ZGlvX2RldmljZV9idWZmZXJfLT5EZWxpdmVyUmVjb3JkZWREYXRh
KCkgPT0gLTEpIHsKLSAgICBSVENfTE9HKElORk8pIDw8ICJBdWRpb0RldmljZUJ1ZmZlcjo6RGVs
aXZlclJlY29yZGVkRGF0YSBmYWlsZWQiOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fcmVjb3JkX2puaS5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hdWRpb19yZWNvcmRfam5pLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDEwMmYyOWFiMWE3MTExYzE2NDBlODViYmJiZmMyZTU3YTUyYjk0MDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNv
cmRfam5pLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLSNpZm5kZWYgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19SRUNP
UkRfSk5JX0hfCi0jZGVmaW5lIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQVVESU9fUkVD
T1JEX0pOSV9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNp
bmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNp
bmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2lu
Y2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlX2RlZmluZXMu
aCIKLSNpbmNsdWRlICJtb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIK
LSNpbmNsdWRlICJtb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oIgotI2luY2x1
ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0v
LyBJbXBsZW1lbnRzIDE2LWJpdCBtb25vIFBDTSBhdWRpbyBpbnB1dCBzdXBwb3J0IGZvciBBbmRy
b2lkIHVzaW5nIHRoZSBKYXZhCi0vLyBBdWRpb1JlY29yZCBpbnRlcmZhY2UuIE1vc3Qgb2YgdGhl
IHdvcmsgaXMgZG9uZSBieSBpdHMgSmF2YSBjb3VudGVycGFydCBpbgotLy8gV2ViUnRjQXVkaW9S
ZWNvcmQuamF2YS4gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGFuZCBsaXZlcyBvbiBhIHRocmVhZCBp
bgotLy8gQysrLWxhbmQsIGJ1dCByZWNvcmRlZCBhdWRpbyBidWZmZXJzIGFyZSBkZWxpdmVyZWQg
b24gYSBoaWdoLXByaW9yaXR5Ci0vLyB0aHJlYWQgbWFuYWdlZCBieSB0aGUgSmF2YSBjbGFzcy4K
LS8vCi0vLyBUaGUgSmF2YSBjbGFzcyBtYWtlcyB1c2Ugb2YgQXVkaW9FZmZlY3QgZmVhdHVyZXMg
KG1haW5seSBBRUMpIHdoaWNoIGFyZQotLy8gZmlyc3QgYXZhaWxhYmxlIGluIEplbGx5IEJlYW4u
IElmIGl0IGlzIGluc3RhbnRpYXRlZCBydW5uaW5nIGFnYWluc3QgZWFybGllcgotLy8gU0RLcywg
dGhlIEFFQyBwcm92aWRlZCBieSB0aGUgQVBNIGluIFdlYlJUQyBtdXN0IGJlIHVzZWQgYW5kIGVu
YWJsZWQKLS8vIHNlcGFyYXRlbHkgaW5zdGVhZC4KLS8vCi0vLyBBbiBpbnN0YW5jZSBtdXN0IGJl
IGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBvbmUgYW5kIHRoZSBzYW1lIHRocmVhZC4KLS8vIEFs
bCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUgY2FsbGVkIG9uIHRoZSBzYW1lIHRocmVhZC4g
QSB0aHJlYWQgY2hlY2tlcgotLy8gd2lsbCBSVENfRENIRUNLIGlmIGFueSBtZXRob2QgaXMgY2Fs
bGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLgotLy8KLS8vIFRoaXMgY2xhc3MgdXNlcyBKdm1UaHJl
YWRDb25uZWN0b3IgdG8gYXR0YWNoIHRvIGEgSmF2YSBWTSBpZiBuZWVkZWQKLS8vIGFuZCBkZXRh
Y2ggd2hlbiB0aGUgb2JqZWN0IGdvZXMgb3V0IG9mIHNjb3BlLiBBZGRpdGlvbmFsIHRocmVhZCBj
aGVja2luZwotLy8gZ3VhcmFudGVlcyB0aGF0IG5vIG90aGVyIChwb3NzaWJseSBub24gYXR0YWNo
ZWQpIHRocmVhZCBpcyB1c2VkLgotY2xhc3MgQXVkaW9SZWNvcmRKbmkgewotIHB1YmxpYzoKLSAg
Ly8gV3JhcHMgdGhlIEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvUmVjb3JkSm5pIGlu
dG8gb25lIGhlbHBlciBjbGFzcy4KLSAgY2xhc3MgSmF2YUF1ZGlvUmVjb3JkIHsKLSAgIHB1Ymxp
YzoKLSAgICBKYXZhQXVkaW9SZWNvcmQoTmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnaXN0
cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBh
dWRpb190cmFjayk7Ci0gICAgfkphdmFBdWRpb1JlY29yZCgpOwotCi0gICAgaW50IEluaXRSZWNv
cmRpbmcoaW50IHNhbXBsZV9yYXRlLCBzaXplX3QgY2hhbm5lbHMpOwotICAgIGJvb2wgU3RhcnRS
ZWNvcmRpbmcoKTsKLSAgICBib29sIFN0b3BSZWNvcmRpbmcoKTsKLSAgICBib29sIEVuYWJsZUJ1
aWx0SW5BRUMoYm9vbCBlbmFibGUpOwotICAgIGJvb2wgRW5hYmxlQnVpbHRJbk5TKGJvb2wgZW5h
YmxlKTsKLQotICAgcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRp
b19yZWNvcmRfOwotICAgIGptZXRob2RJRCBpbml0X3JlY29yZGluZ187Ci0gICAgam1ldGhvZElE
IHN0YXJ0X3JlY29yZGluZ187Ci0gICAgam1ldGhvZElEIHN0b3BfcmVjb3JkaW5nXzsKLSAgICBq
bWV0aG9kSUQgZW5hYmxlX2J1aWx0X2luX2FlY187Ci0gICAgam1ldGhvZElEIGVuYWJsZV9idWls
dF9pbl9uc187Ci0gIH07Ci0KLSAgZXhwbGljaXQgQXVkaW9SZWNvcmRKbmkoQXVkaW9NYW5hZ2Vy
KiBhdWRpb19tYW5hZ2VyKTsKLSAgfkF1ZGlvUmVjb3JkSm5pKCk7Ci0KLSAgaW50MzJfdCBJbml0
KCk7Ci0gIGludDMyX3QgVGVybWluYXRlKCk7Ci0KLSAgaW50MzJfdCBJbml0UmVjb3JkaW5nKCk7
Ci0gIGJvb2wgUmVjb3JkaW5nSXNJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGluaXRpYWxp
emVkXzsgfQotCi0gIGludDMyX3QgU3RhcnRSZWNvcmRpbmcoKTsKLSAgaW50MzJfdCBTdG9wUmVj
b3JkaW5nKCk7Ci0gIGJvb2wgUmVjb3JkaW5nKCkgY29uc3QgeyByZXR1cm4gcmVjb3JkaW5nXzsg
fQotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVm
ZmVyKTsKLQotICBpbnQzMl90IEVuYWJsZUJ1aWx0SW5BRUMoYm9vbCBlbmFibGUpOwotICBpbnQz
Ml90IEVuYWJsZUJ1aWx0SW5BR0MoYm9vbCBlbmFibGUpOwotICBpbnQzMl90IEVuYWJsZUJ1aWx0
SW5OUyhib29sIGVuYWJsZSk7Ci0KLSBwcml2YXRlOgotICAvLyBDYWxsZWQgZnJvbSBKYXZhIHNp
ZGUgc28gd2UgY2FuIGNhY2hlIHRoZSBhZGRyZXNzIG9mIHRoZSBKYXZhLW1hbmdlZAotICAvLyB8
Ynl0ZV9idWZmZXJ8IGluIHxkaXJlY3RfYnVmZmVyX2FkZHJlc3NffC4gVGhlIHNpemUgb2YgdGhl
IGJ1ZmZlcgotICAvLyBpcyBhbHNvIHN0b3JlZCBpbiB8ZGlyZWN0X2J1ZmZlcl9jYXBhY2l0eV9p
bl9ieXRlc198LgotICAvLyBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBieSB0aGUgV2ViUnRj
QXVkaW9SZWNvcmQgY29uc3RydWN0b3IsIGkuZS4sCi0gIC8vIG9uIHRoZSBzYW1lIHRocmVhZCB0
aGF0IHRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgb24uCi0gIHN0YXRpYyB2b2lkIEpOSUNBTEwgQ2Fj
aGVEaXJlY3RCdWZmZXJBZGRyZXNzKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBieXRlX2J1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgbmF0aXZlQXVk
aW9SZWNvcmQpOwotICB2b2lkIE9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEpOSUVudiogZW52
LCBqb2JqZWN0IGJ5dGVfYnVmZmVyKTsKLQotICAvLyBDYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRo
ZSBKYXZhIGJhc2VkIFdlYlJ0Y0F1ZGlvUmVjb3JkIG9iamVjdCB3aGVuCi0gIC8vIHJlY29yZGlu
ZyBoYXMgc3RhcnRlZC4gRWFjaCBjYWxsIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSB8bGVuZ3Ro
fCBuZXcKLSAgLy8gYnl0ZXMgcmVjb3JkZWQgaW4gdGhlIG1lbW9yeSBhcmVhIHxkaXJlY3RfYnVm
ZmVyX2FkZHJlc3NffCBhbmQgaXQgaXMKLSAgLy8gbm93IHRpbWUgdG8gc2VuZCB0aGVzZSB0byB0
aGUgY29uc3VtZXIuCi0gIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBhIGhpZ2gtcHJpb3Jp
dHkgdGhyZWFkIGZyb20gSmF2YS4gVGhlIG5hbWUgb2YKLSAgLy8gdGhlIHRocmVhZCBpcyAnQXVk
aW9SZWNvcmRUaHJlYWQnLgotICBzdGF0aWMgdm9pZCBKTklDQUxMIERhdGFJc1JlY29yZGVkKEpO
SUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3Qg
b2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgbGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIG5hdGl2ZUF1ZGlvUmVj
b3JkKTsKLSAgdm9pZCBPbkRhdGFJc1JlY29yZGVkKGludCBsZW5ndGgpOwotCi0gIC8vIFN0b3Jl
cyB0aHJlYWQgSUQgaW4gY29uc3RydWN0b3IuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRf
Y2hlY2tlcl87Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiBmaXJzdCBjYWxsIHRvIE9uRGF0
YUlzUmVjb3JkZWQoKSBmcm9tIGhpZ2gtcHJpb3JpdHkKLSAgLy8gdGhyZWFkIGluIEphdmEuIERl
dGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBvYmplY3QuCi0gIHJ0Yzo6VGhyZWFk
Q2hlY2tlciB0aHJlYWRfY2hlY2tlcl9qYXZhXzsKLQotICAvLyBDYWxscyBKYXZhVk06OkF0dGFj
aEN1cnJlbnRUaHJlYWQoKSBpZiB0aGlzIHRocmVhZCBpcyBub3QgYXR0YWNoZWQgYXQKLSAgLy8g
Y29uc3RydWN0aW9uLgotICAvLyBBbHNvIGVuc3VyZXMgdGhhdCBEZXRhY2hDdXJyZW50VGhyZWFk
KCkgaXMgY2FsbGVkIGF0IGRlc3RydWN0aW9uLgotICBKdm1UaHJlYWRDb25uZWN0b3IgYXR0YWNo
X3RocmVhZF9pZl9uZWVkZWRfOwotCi0gIC8vIFdyYXBzIHRoZSBKTkkgaW50ZXJmYWNlIHBvaW50
ZXIgYW5kIG1ldGhvZHMgYXNzb2NpYXRlZCB3aXRoIGl0LgotICBzdGQ6OnVuaXF1ZV9wdHI8Sk5J
RW52aXJvbm1lbnQ+IGpfZW52aXJvbm1lbnRfOwotCi0gIC8vIENvbnRhaW5zIGZhY3RvcnkgbWV0
aG9kIGZvciBjcmVhdGluZyB0aGUgSmF2YSBvYmplY3QuCi0gIHN0ZDo6dW5pcXVlX3B0cjxOYXRp
dmVSZWdpc3RyYXRpb24+IGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl87Ci0KLSAgLy8gV3JhcHMgdGhl
IEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvUmVjb3JkSm5pIGNsYXNzLgotICBzdGQ6
OnVuaXF1ZV9wdHI8QXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZD4gal9hdWRpb19yZWNv
cmRfOwotCi0gIC8vIFJhdyBwb2ludGVyIHRvIHRoZSBhdWRpbyBtYW5nZXIuCi0gIGNvbnN0IEF1
ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcl87Ci0KLSAgLy8gQ29udGFpbnMgYXVkaW8gcGFyYW1l
dGVycyBwcm92aWRlZCB0byB0aGlzIGNsYXNzIGF0IGNvbnN0cnVjdGlvbiBieSB0aGUKLSAgLy8g
QXVkaW9NYW5hZ2VyLgotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMgYXVkaW9fcGFyYW1ldGVyc187
Ci0KLSAgLy8gRGVsYXkgZXN0aW1hdGUgb2YgdGhlIHRvdGFsIHJvdW5kLXRyaXAgZGVsYXkgKGlu
cHV0ICsgb3V0cHV0KS4KLSAgLy8gRml4ZWQgdmFsdWUgc2V0IG9uY2UgaW4gQXR0YWNoQXVkaW9C
dWZmZXIoKSBhbmQgaXQgY2FuIHRha2Ugb25lIG91dCBvZiB0d28KLSAgLy8gcG9zc2libGUgdmFs
dWVzLiBTZWUgYXVkaW9fY29tbW9uLmggZm9yIGRldGFpbHMuCi0gIGludCB0b3RhbF9kZWxheV9p
bl9taWxsaXNlY29uZHNfOwotCi0gIC8vIENhY2hlZCBjb3B5IG9mIGFkZHJlc3MgdG8gZGlyZWN0
IGF1ZGlvIGJ1ZmZlciBvd25lZCBieSB8al9hdWRpb19yZWNvcmRffC4KLSAgdm9pZCogZGlyZWN0
X2J1ZmZlcl9hZGRyZXNzXzsKLQotICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpcmVjdCBh
dWRpbyBidWZmZXIgb3duZWQgYnkgfGpfYXVkaW9fcmVjb3JkX3wuCi0gIHNpemVfdCBkaXJlY3Rf
YnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXzsKLQotICAvLyBOdW1iZXIgYXVkaW8gZnJhbWVzIHBl
ciBhdWRpbyBidWZmZXIuIEVhY2ggYXVkaW8gZnJhbWUgY29ycmVzcG9uZHMgdG8KLSAgLy8gb25l
IHNhbXBsZSBvZiBQQ00gbW9ubyBkYXRhIGF0IDE2IGJpdHMgcGVyIHNhbXBsZS4gSGVuY2UsIGVh
Y2ggYXVkaW8KLSAgLy8gZnJhbWUgY29udGFpbnMgMiBieXRlcyAoZ2l2ZW4gdGhhdCB0aGUgSmF2
YSBsYXllciBvbmx5IHN1cHBvcnRzIG1vbm8pLgotICAvLyBFeGFtcGxlOiA0ODAgZm9yIDQ4MDAw
IEh6IG9yIDQ0MSBmb3IgNDQxMDAgSHouCi0gIHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcl87Ci0K
LSAgYm9vbCBpbml0aWFsaXplZF87Ci0KLSAgYm9vbCByZWNvcmRpbmdfOwotCi0gIC8vIFJhdyBw
b2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hBdWRpb0J1ZmZlcigpLiBPd25l
ZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNsYXNzIGFuZCBjYWxsZWQgYnkg
QXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgotICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9f
ZGV2aWNlX2J1ZmZlcl87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAg
Ly8gTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19SRUNPUkRfSk5JX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX3RyYWNrX2puaS5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YXVkaW9fdHJhY2tfam5pLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWFlZWNh
MWVhZjVlMTkyODhiOWE3NjllNDEyNDlkMTFiNThkZDE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tfam5pLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb190cmFja19qbmku
aCIKLQotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9hcnJheXNpemUu
aCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9mb3Jt
YXRfbWFjcm9zLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInJ0
Y19iYXNlL3BsYXRmb3JtX3RocmVhZC5oIgotI2luY2x1ZGUgInN5c3RlbV93cmFwcGVycy9pbmNs
dWRlL2ZpZWxkX3RyaWFsLmgiCi0jaW5jbHVkZSAic3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvbWV0
cmljcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gQXVkaW9UcmFja0puaTo6SmF2YUF1
ZGlvVHJhY2sgaW1wbGVtZW50YXRpb24uCi1BdWRpb1RyYWNrSm5pOjpKYXZhQXVkaW9UcmFjazo6
SmF2YUF1ZGlvVHJhY2soCi0gICAgTmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnLAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX3RyYWNrKQotICAgIDogYXVkaW9fdHJh
Y2tfKHN0ZDo6bW92ZShhdWRpb190cmFjaykpLAotICAgICAgaW5pdF9wbGF5b3V0XyhuYXRpdmVf
cmVnLT5HZXRNZXRob2RJZCgiaW5pdFBsYXlvdXQiLCAiKElJRClJIikpLAotICAgICAgc3RhcnRf
cGxheW91dF8obmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoInN0YXJ0UGxheW91dCIsICIoKVoiKSks
Ci0gICAgICBzdG9wX3BsYXlvdXRfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJzdG9wUGxheW91
dCIsICIoKVoiKSksCi0gICAgICBzZXRfc3RyZWFtX3ZvbHVtZV8obmF0aXZlX3JlZy0+R2V0TWV0
aG9kSWQoInNldFN0cmVhbVZvbHVtZSIsICIoSSlaIikpLAotICAgICAgZ2V0X3N0cmVhbV9tYXhf
dm9sdW1lXygKLSAgICAgICAgICBuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgiZ2V0U3RyZWFtTWF4
Vm9sdW1lIiwgIigpSSIpKSwKLSAgICAgIGdldF9zdHJlYW1fdm9sdW1lXyhuYXRpdmVfcmVnLT5H
ZXRNZXRob2RJZCgiZ2V0U3RyZWFtVm9sdW1lIiwgIigpSSIpKSwKLSAgICAgIGdldF9idWZmZXJf
c2l6ZV9pbl9mcmFtZXNfKAotICAgICAgICAgIG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJnZXRC
dWZmZXJTaXplSW5GcmFtZXMiLCAiKClJIikpIHt9Ci0KLUF1ZGlvVHJhY2tKbmk6OkphdmFBdWRp
b1RyYWNrOjp+SmF2YUF1ZGlvVHJhY2soKSB7fQotCi1ib29sIEF1ZGlvVHJhY2tKbmk6OkphdmFB
dWRpb1RyYWNrOjpJbml0UGxheW91dChpbnQgc2FtcGxlX3JhdGUsIGludCBjaGFubmVscykgewot
ICBkb3VibGUgYnVmZmVyX3NpemVfZmFjdG9yID0KLSAgICAgIHN0cnRvZCh3ZWJydGM6OmZpZWxk
X3RyaWFsOjpGaW5kRnVsbE5hbWUoCi0gICAgICAgICAgICAgICAgICJXZWJSVEMtQXVkaW9EZXZp
Y2VQbGF5b3V0QnVmZmVyU2l6ZUZhY3RvciIpCi0gICAgICAgICAgICAgICAgIC5jX3N0cigpLAot
ICAgICAgICAgICAgIG51bGxwdHIpOwotICBpZiAoYnVmZmVyX3NpemVfZmFjdG9yID09IDApCi0g
ICAgYnVmZmVyX3NpemVfZmFjdG9yID0gMS4wOwotICBpbnQgcmVxdWVzdGVkX2J1ZmZlcl9zaXpl
X2J5dGVzID0gYXVkaW9fdHJhY2tfLT5DYWxsSW50TWV0aG9kKAotICAgICAgaW5pdF9wbGF5b3V0
Xywgc2FtcGxlX3JhdGUsIGNoYW5uZWxzLCBidWZmZXJfc2l6ZV9mYWN0b3IpOwotICAvLyBVcGRh
dGUgVU1BIGhpc3RvZ3JhbXMgZm9yIGJvdGggdGhlIHJlcXVlc3RlZCBhbmQgYWN0dWFsIGJ1ZmZl
ciBzaXplLgotICBpZiAocmVxdWVzdGVkX2J1ZmZlcl9zaXplX2J5dGVzID49IDApIHsKLSAgICAv
LyBUbyBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCB3ZSBhc3N1bWUgdGhlIHNhbXBsZSByYXRlIGlz
IDQ4ayBpZiBhbiBpbnZhbGlkCi0gICAgLy8gdmFsdWUgaXMgZm91bmQuCi0gICAgc2FtcGxlX3Jh
dGUgPSBzYW1wbGVfcmF0ZSA8PSAwID8gNDgwMDAgOiBzYW1wbGVfcmF0ZTsKLSAgICAvLyBUaGlz
IGNhbGN1bGF0aW9uIGFzc3VtZXMgdGhhdCBhdWRpbyBpcyBtb25vLgotICAgIGNvbnN0IGludCBy
ZXF1ZXN0ZWRfYnVmZmVyX3NpemVfbXMgPQotICAgICAgICAocmVxdWVzdGVkX2J1ZmZlcl9zaXpl
X2J5dGVzICogMTAwMCkgLyAoMiAqIHNhbXBsZV9yYXRlKTsKLSAgICBSVENfSElTVE9HUkFNX0NP
VU5UUygiV2ViUlRDLkF1ZGlvLkFuZHJvaWROYXRpdmVSZXF1ZXN0ZWRBdWRpb0J1ZmZlclNpemVN
cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkX2J1ZmZlcl9zaXplX21zLCAw
LCAxMDAwLCAxMDApOwotICAgIGludCBhY3R1YWxfYnVmZmVyX3NpemVfZnJhbWVzID0KLSAgICAg
ICAgYXVkaW9fdHJhY2tfLT5DYWxsSW50TWV0aG9kKGdldF9idWZmZXJfc2l6ZV9pbl9mcmFtZXNf
KTsKLSAgICBpZiAoYWN0dWFsX2J1ZmZlcl9zaXplX2ZyYW1lcyA+PSAwKSB7Ci0gICAgICBjb25z
dCBpbnQgYWN0dWFsX2J1ZmZlcl9zaXplX21zID0KLSAgICAgICAgICBhY3R1YWxfYnVmZmVyX3Np
emVfZnJhbWVzICogMTAwMCAvIHNhbXBsZV9yYXRlOwotICAgICAgUlRDX0hJU1RPR1JBTV9DT1VO
VFMoIldlYlJUQy5BdWRpby5BbmRyb2lkTmF0aXZlQXVkaW9CdWZmZXJTaXplTXMiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2J1ZmZlcl9zaXplX21zLCAwLCAxMDAwLCAxMDAp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJhY2s6OlN0YXJ0UGxheW91dCgpIHsKLSAgcmV0
dXJuIGF1ZGlvX3RyYWNrXy0+Q2FsbEJvb2xlYW5NZXRob2Qoc3RhcnRfcGxheW91dF8pOwotfQot
Ci1ib29sIEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNrOjpTdG9wUGxheW91dCgpIHsKLSAg
cmV0dXJuIGF1ZGlvX3RyYWNrXy0+Q2FsbEJvb2xlYW5NZXRob2Qoc3RvcF9wbGF5b3V0Xyk7Ci19
Ci0KLWJvb2wgQXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJhY2s6OlNldFN0cmVhbVZvbHVtZShp
bnQgdm9sdW1lKSB7Ci0gIHJldHVybiBhdWRpb190cmFja18tPkNhbGxCb29sZWFuTWV0aG9kKHNl
dF9zdHJlYW1fdm9sdW1lXywgdm9sdW1lKTsKLX0KLQotaW50IEF1ZGlvVHJhY2tKbmk6OkphdmFB
dWRpb1RyYWNrOjpHZXRTdHJlYW1NYXhWb2x1bWUoKSB7Ci0gIHJldHVybiBhdWRpb190cmFja18t
PkNhbGxJbnRNZXRob2QoZ2V0X3N0cmVhbV9tYXhfdm9sdW1lXyk7Ci19Ci0KLWludCBBdWRpb1Ry
YWNrSm5pOjpKYXZhQXVkaW9UcmFjazo6R2V0U3RyZWFtVm9sdW1lKCkgewotICByZXR1cm4gYXVk
aW9fdHJhY2tfLT5DYWxsSW50TWV0aG9kKGdldF9zdHJlYW1fdm9sdW1lXyk7Ci19Ci0KLS8vIFRP
RE8oaGVucmlrYSk6IHBvc3NpYmxlIGV4dGVuZCB1c2FnZSBvZiBBdWRpb01hbmFnZXIgYW5kIGFk
ZCBpdCBhcyBtZW1iZXIuCi1BdWRpb1RyYWNrSm5pOjpBdWRpb1RyYWNrSm5pKEF1ZGlvTWFuYWdl
ciogYXVkaW9fbWFuYWdlcikKLSAgICA6IGpfZW52aXJvbm1lbnRfKEpWTTo6R2V0SW5zdGFuY2Uo
KS0+ZW52aXJvbm1lbnQoKSksCi0gICAgICBhdWRpb19wYXJhbWV0ZXJzXyhhdWRpb19tYW5hZ2Vy
LT5HZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCkpLAotICAgICAgZGlyZWN0X2J1ZmZlcl9hZGRy
ZXNzXyhudWxscHRyKSwKLSAgICAgIGRpcmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfKDAp
LAotICAgICAgZnJhbWVzX3Blcl9idWZmZXJfKDApLAotICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNl
KSwKLSAgICAgIHBsYXlpbmdfKGZhbHNlKSwKLSAgICAgIGF1ZGlvX2RldmljZV9idWZmZXJfKG51
bGxwdHIpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiY3RvciI7Ci0gIFJUQ19EQ0hFQ0soYXVkaW9f
cGFyYW1ldGVyc18uaXNfdmFsaWQoKSk7Ci0gIFJUQ19DSEVDSyhqX2Vudmlyb25tZW50Xyk7Ci0g
IEpOSU5hdGl2ZU1ldGhvZCBuYXRpdmVfbWV0aG9kc1tdID0gewotICAgICAgeyJuYXRpdmVDYWNo
ZURpcmVjdEJ1ZmZlckFkZHJlc3MiLCAiKExqYXZhL25pby9CeXRlQnVmZmVyO0opViIsCi0gICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oCi0gICAgICAgICAgICZ3ZWJydGM6OkF1ZGlvVHJh
Y2tKbmk6OkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyl9LAotICAgICAgeyJuYXRpdmVHZXRQbGF5
b3V0RGF0YSIsICIoSUopViIsCi0gICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJndlYnJ0
Yzo6QXVkaW9UcmFja0puaTo6R2V0UGxheW91dERhdGEpfX07Ci0gIGpfbmF0aXZlX3JlZ2lzdHJh
dGlvbl8gPSBqX2Vudmlyb25tZW50Xy0+UmVnaXN0ZXJOYXRpdmVzKAotICAgICAgIm9yZy93ZWJy
dGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFjayIsIG5hdGl2ZV9tZXRob2RzLAotICAgICAg
YXJyYXlzaXplKG5hdGl2ZV9tZXRob2RzKSk7Ci0gIGpfYXVkaW9fdHJhY2tfLnJlc2V0KAotICAg
ICAgbmV3IEphdmFBdWRpb1RyYWNrKGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8uZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgal9uYXRpdmVfcmVnaXN0cmF0aW9uXy0+TmV3T2JqZWN0KAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGluaXQ+IiwgIihKKVYiLCBQb2ludGVyVG9q
bG9uZyh0aGlzKSkpKTsKLSAgLy8gRGV0YWNoIGZyb20gdGhpcyB0aHJlYWQgc2luY2Ugd2Ugd2Fu
dCB0byB1c2UgdGhlIGNoZWNrZXIgdG8gdmVyaWZ5IGNhbGxzCi0gIC8vIGZyb20gdGhlIEphdmEg
YmFzZWQgYXVkaW8gdGhyZWFkLgotICB0aHJlYWRfY2hlY2tlcl9qYXZhXy5EZXRhY2goKTsKLX0K
LQotQXVkaW9UcmFja0puaTo6fkF1ZGlvVHJhY2tKbmkoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwg
ImR0b3IiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFRl
cm1pbmF0ZSgpOwotfQotCi1pbnQzMl90IEF1ZGlvVHJhY2tKbmk6OkluaXQoKSB7Ci0gIFJUQ19M
T0coSU5GTykgPDwgIkluaXQiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJl
bnQoKSk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQzMl90IEF1ZGlvVHJhY2tKbmk6OlRlcm1pbmF0
ZSgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiVGVybWluYXRlIjsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBTdG9wUGxheW91dCgpOwotICByZXR1cm4gMDsK
LX0KLQotaW50MzJfdCBBdWRpb1RyYWNrSm5pOjpJbml0UGxheW91dCgpIHsKLSAgUlRDX0xPRyhJ
TkZPKSA8PCAiSW5pdFBsYXlvdXQiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1
cnJlbnQoKSk7Ci0gIFJUQ19EQ0hFQ0soIWluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXBs
YXlpbmdfKTsKLSAgaWYgKCFqX2F1ZGlvX3RyYWNrXy0+SW5pdFBsYXlvdXQoYXVkaW9fcGFyYW1l
dGVyc18uc2FtcGxlX3JhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKSkpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8
PCAiSW5pdFBsYXlvdXQgZmFpbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaW5pdGlhbGl6
ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgQXVkaW9UcmFja0puaTo6U3Rh
cnRQbGF5b3V0KCkgewotICBSVENfTE9HKElORk8pIDw8ICJTdGFydFBsYXlvdXQiOwotICBSVENf
RENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJUQ19EQ0hFQ0soIXBsYXlp
bmdfKTsKLSAgaWYgKCFpbml0aWFsaXplZF8pIHsKLSAgICBSVENfRExPRyhMU19XQVJOSU5HKQot
ICAgICAgICA8PCAiUGxheW91dCBjYW4gbm90IHN0YXJ0IHNpbmNlIEluaXRQbGF5b3V0IG11c3Qg
c3VjY2VlZCBmaXJzdCI7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFqX2F1ZGlvX3RyYWNr
Xy0+U3RhcnRQbGF5b3V0KCkpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiU3RhcnRQbGF5
b3V0IGZhaWxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIHBsYXlpbmdfID0gdHJ1ZTsKLSAg
cmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgQXVkaW9UcmFja0puaTo6U3RvcFBsYXlvdXQoKSB7Ci0g
IFJUQ19MT0coSU5GTykgPDwgIlN0b3BQbGF5b3V0IjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoIWluaXRpYWxpemVkXyB8fCAhcGxheWluZ18pIHsK
LSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWpfYXVkaW9fdHJhY2tfLT5TdG9wUGxheW91dCgp
KSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIlN0b3BQbGF5b3V0IGZhaWxlZCI7Ci0gICAg
cmV0dXJuIC0xOwotICB9Ci0gIC8vIElmIHdlIGRvbid0IGRldGFjaCBoZXJlLCB3ZSB3aWxsIGhp
dCBhIFJUQ19EQ0hFQ0sgaW4gT25EYXRhSXNSZWNvcmRlZCgpCi0gIC8vIG5leHQgdGltZSBTdGFy
dFJlY29yZGluZygpIGlzIGNhbGxlZCBzaW5jZSBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBKYXZhCi0g
IC8vIHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJfamF2YV8uRGV0YWNoKCk7Ci0gIGluaXRpYWxp
emVkXyA9IGZhbHNlOwotICBwbGF5aW5nXyA9IGZhbHNlOwotICBkaXJlY3RfYnVmZmVyX2FkZHJl
c3NfID0gbnVsbHB0cjsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5pOjpTcGVh
a2VyVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSB7Ci0gIGF2YWlsYWJsZSA9IHRy
dWU7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgQXVkaW9UcmFja0puaTo6U2V0U3BlYWtlclZvbHVt
ZSh1aW50MzJfdCB2b2x1bWUpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiU2V0U3BlYWtlclZvbHVt
ZSgiIDw8IHZvbHVtZSA8PCAiKSI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3Vy
cmVudCgpKTsKLSAgcmV0dXJuIGpfYXVkaW9fdHJhY2tfLT5TZXRTdHJlYW1Wb2x1bWUodm9sdW1l
KSA/IDAgOiAtMTsKLX0KLQotaW50IEF1ZGlvVHJhY2tKbmk6Ok1heFNwZWFrZXJWb2x1bWUodWlu
dDMyX3QmIG1heF92b2x1bWUpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8u
SXNDdXJyZW50KCkpOwotICBtYXhfdm9sdW1lID0gal9hdWRpb190cmFja18tPkdldFN0cmVhbU1h
eFZvbHVtZSgpOwotICByZXR1cm4gMDsKLX0KLQotaW50IEF1ZGlvVHJhY2tKbmk6Ok1pblNwZWFr
ZXJWb2x1bWUodWludDMyX3QmIG1pbl92b2x1bWUpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBtaW5fdm9sdW1lID0gMDsKLSAgcmV0dXJuIDA7
Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5pOjpTcGVha2VyVm9sdW1lKHVpbnQzMl90JiB2b2x1bWUp
IGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICB2
b2x1bWUgPSBqX2F1ZGlvX3RyYWNrXy0+R2V0U3RyZWFtVm9sdW1lKCk7Ci0gIFJUQ19MT0coSU5G
TykgPDwgIlNwZWFrZXJWb2x1bWU6ICIgPDwgdm9sdW1lOwotICByZXR1cm4gMDsKLX0KLQotLy8g
VE9ETyhoZW5yaWthKTogcG9zc2libHkgYWRkIHN0ZXJlbyBzdXBwb3J0Lgotdm9pZCBBdWRpb1Ry
YWNrSm5pOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIp
IHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiQXR0YWNoQXVkaW9CdWZmZXIiOwotICBSVENfRENIRUNL
KHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfID0g
YXVkaW9CdWZmZXI7Ci0gIGNvbnN0IGludCBzYW1wbGVfcmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRl
cnNfLnNhbXBsZV9yYXRlKCk7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlNldFBsYXlvdXRTYW1wbGVS
YXRlKCIgPDwgc2FtcGxlX3JhdGVfaHogPDwgIikiOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+
U2V0UGxheW91dFNhbXBsZVJhdGUoc2FtcGxlX3JhdGVfaHopOwotICBjb25zdCBzaXplX3QgY2hh
bm5lbHMgPSBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpOwotICBSVENfTE9HKElORk8pIDw8
ICJTZXRQbGF5b3V0Q2hhbm5lbHMoIiA8PCBjaGFubmVscyA8PCAiKSI7Ci0gIGF1ZGlvX2Rldmlj
ZV9idWZmZXJfLT5TZXRQbGF5b3V0Q2hhbm5lbHMoY2hhbm5lbHMpOwotfQotCi1KTklfRlVOQ1RJ
T05fQUxJR04KLXZvaWQgSk5JQ0FMTCBBdWRpb1RyYWNrSm5pOjpDYWNoZURpcmVjdEJ1ZmZlckFk
ZHJlc3MoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpvYmplY3Qgb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGJ5dGVfYnVmZmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVB
dWRpb1RyYWNrKSB7Ci0gIHdlYnJ0Yzo6QXVkaW9UcmFja0puaSogdGhpc19vYmplY3QgPQotICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx3ZWJydGM6OkF1ZGlvVHJhY2tKbmkqPihuYXRpdmVBdWRpb1Ry
YWNrKTsKLSAgdGhpc19vYmplY3QtPk9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKGVudiwgYnl0
ZV9idWZmZXIpOwotfQotCi12b2lkIEF1ZGlvVHJhY2tKbmk6Ok9uQ2FjaGVEaXJlY3RCdWZmZXJB
ZGRyZXNzKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqb2JqZWN0IGJ5dGVfYnVmZmVyKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIk9u
Q2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8u
SXNDdXJyZW50KCkpOwotICBSVENfRENIRUNLKCFkaXJlY3RfYnVmZmVyX2FkZHJlc3NfKTsKLSAg
ZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyA9IGVudi0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhieXRl
X2J1ZmZlcik7Ci0gIGpsb25nIGNhcGFjaXR5ID0gZW52LT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0
eShieXRlX2J1ZmZlcik7Ci0gIFJUQ19MT0coSU5GTykgPDwgImRpcmVjdCBidWZmZXIgY2FwYWNp
dHk6ICIgPDwgY2FwYWNpdHk7Ci0gIGRpcmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihjYXBhY2l0eSk7Ci0gIGNvbnN0IHNpemVfdCBieXRlc19wZXJf
ZnJhbWUgPSBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpICogc2l6ZW9mKGludDE2X3QpOwot
ICBmcmFtZXNfcGVyX2J1ZmZlcl8gPSBkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXyAv
IGJ5dGVzX3Blcl9mcmFtZTsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiZnJhbWVzX3Blcl9idWZmZXI6
ICIgPDwgZnJhbWVzX3Blcl9idWZmZXJfOwotfQotCi1KTklfRlVOQ1RJT05fQUxJR04KLXZvaWQg
Sk5JQ0FMTCBBdWRpb1RyYWNrSm5pOjpHZXRQbGF5b3V0RGF0YShKTklFbnYqIGVudiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGxlbmd0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVBdWRpb1Ry
YWNrKSB7Ci0gIHdlYnJ0Yzo6QXVkaW9UcmFja0puaSogdGhpc19vYmplY3QgPQotICAgICAgcmVp
bnRlcnByZXRfY2FzdDx3ZWJydGM6OkF1ZGlvVHJhY2tKbmkqPihuYXRpdmVBdWRpb1RyYWNrKTsK
LSAgdGhpc19vYmplY3QtPk9uR2V0UGxheW91dERhdGEoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5n
dGgpKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGEgaGlnaC1wcmlvcml0eSB0
aHJlYWQgZnJvbSBKYXZhLiBUaGUgbmFtZSBvZgotLy8gdGhlIHRocmVhZCBpcyAnQXVkaW9SZWNv
cmRUcmFjaycuCi12b2lkIEF1ZGlvVHJhY2tKbmk6Ok9uR2V0UGxheW91dERhdGEoc2l6ZV90IGxl
bmd0aCkgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyX2phdmFfLklzQ3VycmVudCgpKTsK
LSAgY29uc3Qgc2l6ZV90IGJ5dGVzX3Blcl9mcmFtZSA9IGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5u
ZWxzKCkgKiBzaXplb2YoaW50MTZfdCk7Ci0gIFJUQ19EQ0hFQ0tfRVEoZnJhbWVzX3Blcl9idWZm
ZXJfLCBsZW5ndGggLyBieXRlc19wZXJfZnJhbWUpOwotICBpZiAoIWF1ZGlvX2RldmljZV9idWZm
ZXJfKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkF0dGFjaEF1ZGlvQnVmZmVyIGhhcyBu
b3QgYmVlbiBjYWxsZWQiOwotICAgIHJldHVybjsKLSAgfQotICAvLyBQdWxsIGRlY29kZWQgZGF0
YSAoaW4gMTYtYml0IFBDTSBmb3JtYXQpIGZyb20gaml0dGVyIGJ1ZmZlci4KLSAgaW50IHNhbXBs
ZXMgPSBhdWRpb19kZXZpY2VfYnVmZmVyXy0+UmVxdWVzdFBsYXlvdXREYXRhKGZyYW1lc19wZXJf
YnVmZmVyXyk7Ci0gIGlmIChzYW1wbGVzIDw9IDApIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8
PCAiQXVkaW9EZXZpY2VCdWZmZXI6OlJlcXVlc3RQbGF5b3V0RGF0YSBmYWlsZWQiOwotICAgIHJl
dHVybjsKLSAgfQotICBSVENfRENIRUNLX0VRKHNhbXBsZXMsIGZyYW1lc19wZXJfYnVmZmVyXyk7
Ci0gIC8vIENvcHkgZGVjb2RlZCBkYXRhIGludG8gY29tbW9uIGJ5dGUgYnVmZmVyIHRvIGVuc3Vy
ZSB0aGF0IGl0IGNhbiBiZQotICAvLyB3cml0dGVuIHRvIHRoZSBKYXZhIGJhc2VkIGF1ZGlvIHRy
YWNrLgotICBzYW1wbGVzID0gYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPkdldFBsYXlvdXREYXRhKGRp
cmVjdF9idWZmZXJfYWRkcmVzc18pOwotICBSVENfRENIRUNLX0VRKGxlbmd0aCwgYnl0ZXNfcGVy
X2ZyYW1lICogc2FtcGxlcyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tfam5pLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlv
X3RyYWNrX2puaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjlhOTAxM2U4MDMz
MWZjZjMxMTBkZjE4OGQxODg1ZjljNmFmYzA2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tfam5pLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5k
ZWYgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19UUkFDS19KTklfSF8KLSNkZWZp
bmUgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19UUkFDS19KTklfSF8KLQotI2lu
Y2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAibW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1
ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVk
aW9fZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlX2RlZmluZXMuaCIKLSNpbmNsdWRlICJtb2R1
bGVzL3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJtb2R1bGVz
L3V0aWxpdHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVh
ZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBJbXBsZW1lbnRzIDE2LWJp
dCBtb25vIFBDTSBhdWRpbyBvdXRwdXQgc3VwcG9ydCBmb3IgQW5kcm9pZCB1c2luZyB0aGUgSmF2
YQotLy8gQXVkaW9UcmFjayBpbnRlcmZhY2UuIE1vc3Qgb2YgdGhlIHdvcmsgaXMgZG9uZSBieSBp
dHMgSmF2YSBjb3VudGVycGFydCBpbgotLy8gV2ViUnRjQXVkaW9UcmFjay5qYXZhLiBUaGlzIGNs
YXNzIGlzIGNyZWF0ZWQgYW5kIGxpdmVzIG9uIGEgdGhyZWFkIGluCi0vLyBDKystbGFuZCwgYnV0
IGRlY29kZWQgYXVkaW8gYnVmZmVycyBhcmUgcmVxdWVzdGVkIG9uIGEgaGlnaC1wcmlvcml0eQot
Ly8gdGhyZWFkIG1hbmFnZWQgYnkgdGhlIEphdmEgY2xhc3MuCi0vLwotLy8gQW4gaW5zdGFuY2Ug
bXVzdCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgb24gb25lIGFuZCB0aGUgc2FtZSB0aHJlYWQu
Ci0vLyBBbGwgcHVibGljIG1ldGhvZHMgbXVzdCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0
aHJlYWQuIEEgdGhyZWFkIGNoZWNrZXIKLS8vIHdpbGwgUlRDX0RDSEVDSyBpZiBhbnkgbWV0aG9k
IGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRocmVhZC4KLS8vCi0vLyBUaGlzIGNsYXNzIHVzZXMg
SnZtVGhyZWFkQ29ubmVjdG9yIHRvIGF0dGFjaCB0byBhIEphdmEgVk0gaWYgbmVlZGVkCi0vLyBh
bmQgZGV0YWNoIHdoZW4gdGhlIG9iamVjdCBnb2VzIG91dCBvZiBzY29wZS4gQWRkaXRpb25hbCB0
aHJlYWQgY2hlY2tpbmcKLS8vIGd1YXJhbnRlZXMgdGhhdCBubyBvdGhlciAocG9zc2libHkgbm9u
IGF0dGFjaGVkKSB0aHJlYWQgaXMgdXNlZC4KLWNsYXNzIEF1ZGlvVHJhY2tKbmkgewotIHB1Ymxp
YzoKLSAgLy8gV3JhcHMgdGhlIEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvVHJhY2tK
bmkgaW50byBvbmUgaGVscGVyIGNsYXNzLgotICBjbGFzcyBKYXZhQXVkaW9UcmFjayB7Ci0gICBw
dWJsaWM6Ci0gICAgSmF2YUF1ZGlvVHJhY2soTmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVn
aXN0cmF0aW9uLAotICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+
IGF1ZGlvX3RyYWNrKTsKLSAgICB+SmF2YUF1ZGlvVHJhY2soKTsKLQotICAgIGJvb2wgSW5pdFBs
YXlvdXQoaW50IHNhbXBsZV9yYXRlLCBpbnQgY2hhbm5lbHMpOwotICAgIGJvb2wgU3RhcnRQbGF5
b3V0KCk7Ci0gICAgYm9vbCBTdG9wUGxheW91dCgpOwotICAgIGJvb2wgU2V0U3RyZWFtVm9sdW1l
KGludCB2b2x1bWUpOwotICAgIGludCBHZXRTdHJlYW1NYXhWb2x1bWUoKTsKLSAgICBpbnQgR2V0
U3RyZWFtVm9sdW1lKCk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdsb2Jh
bFJlZj4gYXVkaW9fdHJhY2tfOwotICAgIGptZXRob2RJRCBpbml0X3BsYXlvdXRfOwotICAgIGpt
ZXRob2RJRCBzdGFydF9wbGF5b3V0XzsKLSAgICBqbWV0aG9kSUQgc3RvcF9wbGF5b3V0XzsKLSAg
ICBqbWV0aG9kSUQgc2V0X3N0cmVhbV92b2x1bWVfOwotICAgIGptZXRob2RJRCBnZXRfc3RyZWFt
X21heF92b2x1bWVfOwotICAgIGptZXRob2RJRCBnZXRfc3RyZWFtX3ZvbHVtZV87Ci0gICAgam1l
dGhvZElEIGdldF9idWZmZXJfc2l6ZV9pbl9mcmFtZXNfOwotICB9OwotCi0gIGV4cGxpY2l0IEF1
ZGlvVHJhY2tKbmkoQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5hZ2VyKTsKLSAgfkF1ZGlvVHJhY2tK
bmkoKTsKLQotICBpbnQzMl90IEluaXQoKTsKLSAgaW50MzJfdCBUZXJtaW5hdGUoKTsKLQotICBp
bnQzMl90IEluaXRQbGF5b3V0KCk7Ci0gIGJvb2wgUGxheW91dElzSW5pdGlhbGl6ZWQoKSBjb25z
dCB7IHJldHVybiBpbml0aWFsaXplZF87IH0KLQotICBpbnQzMl90IFN0YXJ0UGxheW91dCgpOwot
ICBpbnQzMl90IFN0b3BQbGF5b3V0KCk7Ci0gIGJvb2wgUGxheWluZygpIGNvbnN0IHsgcmV0dXJu
IHBsYXlpbmdfOyB9Ci0KLSAgaW50IFNwZWFrZXJWb2x1bWVJc0F2YWlsYWJsZShib29sJiBhdmFp
bGFibGUpOwotICBpbnQgU2V0U3BlYWtlclZvbHVtZSh1aW50MzJfdCB2b2x1bWUpOwotICBpbnQg
U3BlYWtlclZvbHVtZSh1aW50MzJfdCYgdm9sdW1lKSBjb25zdDsKLSAgaW50IE1heFNwZWFrZXJW
b2x1bWUodWludDMyX3QmIG1heF92b2x1bWUpIGNvbnN0OwotICBpbnQgTWluU3BlYWtlclZvbHVt
ZSh1aW50MzJfdCYgbWluX3ZvbHVtZSkgY29uc3Q7Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZl
cihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIpOwotCi0gcHJpdmF0ZToKLSAgLy8gQ2Fs
bGVkIGZyb20gSmF2YSBzaWRlIHNvIHdlIGNhbiBjYWNoZSB0aGUgYWRkcmVzcyBvZiB0aGUgSmF2
YS1tYW5nZWQKLSAgLy8gfGJ5dGVfYnVmZmVyfCBpbiB8ZGlyZWN0X2J1ZmZlcl9hZGRyZXNzX3wu
IFRoZSBzaXplIG9mIHRoZSBidWZmZXIKLSAgLy8gaXMgYWxzbyBzdG9yZWQgaW4gfGRpcmVjdF9i
dWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNffC4KLSAgLy8gQ2FsbGVkIG9uIHRoZSBzYW1lIHRocmVh
ZCBhcyB0aGUgY3JlYXRpbmcgdGhyZWFkLgotICBzdGF0aWMgdm9pZCBKTklDQUxMIENhY2hlRGly
ZWN0QnVmZmVyQWRkcmVzcyhKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgYnl0ZV9idWZmZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIG5hdGl2ZUF1ZGlvVHJh
Y2spOwotICB2b2lkIE9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEpOSUVudiogZW52LCBqb2Jq
ZWN0IGJ5dGVfYnVmZmVyKTsKLQotICAvLyBDYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRoZSBKYXZh
IGJhc2VkIFdlYlJ0Y0F1ZGlvVHJhY2sgb2JqZWN0IHdoZW4KLSAgLy8gcGxheW91dCBoYXMgc3Rh
cnRlZC4gRWFjaCBjYWxsIGluZGljYXRlcyB0aGF0IHxsZW5ndGh8IG5ldyBieXRlcyBzaG91bGQK
LSAgLy8gYmUgd3JpdHRlbiB0byB0aGUgbWVtb3J5IGFyZWEgfGRpcmVjdF9idWZmZXJfYWRkcmVz
c198IGZvciBwbGF5b3V0LgotICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gYSBoaWdoLXBy
aW9yaXR5IHRocmVhZCBmcm9tIEphdmEuIFRoZSBuYW1lIG9mCi0gIC8vIHRoZSB0aHJlYWQgaXMg
J0F1ZGlvVHJhY2tUaHJlYWQnLgotICBzdGF0aWMgdm9pZCBKTklDQUxMIEdldFBsYXlvdXREYXRh
KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmpl
Y3Qgb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgbGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIG5hdGl2ZUF1ZGlv
VHJhY2spOwotICB2b2lkIE9uR2V0UGxheW91dERhdGEoc2l6ZV90IGxlbmd0aCk7Ci0KLSAgLy8g
U3RvcmVzIHRocmVhZCBJRCBpbiBjb25zdHJ1Y3Rvci4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRo
cmVhZF9jaGVja2VyXzsKLQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8g
T25HZXRQbGF5b3V0RGF0YSgpIGZyb20gaGlnaC1wcmlvcml0eQotICAvLyB0aHJlYWQgaW4gSmF2
YS4gRGV0YWNoZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgcnRjOjpU
aHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyX2phdmFfOwotCi0gIC8vIENhbGxzIEphdmFWTTo6
QXR0YWNoQ3VycmVudFRocmVhZCgpIGlmIHRoaXMgdGhyZWFkIGlzIG5vdCBhdHRhY2hlZCBhdAot
ICAvLyBjb25zdHJ1Y3Rpb24uCi0gIC8vIEFsc28gZW5zdXJlcyB0aGF0IERldGFjaEN1cnJlbnRU
aHJlYWQoKSBpcyBjYWxsZWQgYXQgZGVzdHJ1Y3Rpb24uCi0gIEp2bVRocmVhZENvbm5lY3RvciBh
dHRhY2hfdGhyZWFkX2lmX25lZWRlZF87Ci0KLSAgLy8gV3JhcHMgdGhlIEpOSSBpbnRlcmZhY2Ug
cG9pbnRlciBhbmQgbWV0aG9kcyBhc3NvY2lhdGVkIHdpdGggaXQuCi0gIHN0ZDo6dW5pcXVlX3B0
cjxKTklFbnZpcm9ubWVudD4gal9lbnZpcm9ubWVudF87Ci0KLSAgLy8gQ29udGFpbnMgZmFjdG9y
eSBtZXRob2QgZm9yIGNyZWF0aW5nIHRoZSBKYXZhIG9iamVjdC4KLSAgc3RkOjp1bmlxdWVfcHRy
PE5hdGl2ZVJlZ2lzdHJhdGlvbj4gal9uYXRpdmVfcmVnaXN0cmF0aW9uXzsKLQotICAvLyBXcmFw
cyB0aGUgSmF2YSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQXVkaW9UcmFja0puaSBjbGFzcy4KLSAg
c3RkOjp1bmlxdWVfcHRyPEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNrPiBqX2F1ZGlvX3Ry
YWNrXzsKLQotICAvLyBDb250YWlucyBhdWRpbyBwYXJhbWV0ZXJzIHByb3ZpZGVkIHRvIHRoaXMg
Y2xhc3MgYXQgY29uc3RydWN0aW9uIGJ5IHRoZQotICAvLyBBdWRpb01hbmFnZXIuCi0gIGNvbnN0
IEF1ZGlvUGFyYW1ldGVycyBhdWRpb19wYXJhbWV0ZXJzXzsKLQotICAvLyBDYWNoZWQgY29weSBv
ZiBhZGRyZXNzIHRvIGRpcmVjdCBhdWRpbyBidWZmZXIgb3duZWQgYnkgfGpfYXVkaW9fdHJhY2tf
fC4KLSAgdm9pZCogZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXzsKLQotICAvLyBOdW1iZXIgb2YgYnl0
ZXMgaW4gdGhlIGRpcmVjdCBhdWRpbyBidWZmZXIgb3duZWQgYnkgfGpfYXVkaW9fdHJhY2tffC4K
LSAgc2l6ZV90IGRpcmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfOwotCi0gIC8vIE51bWJl
ciBvZiBhdWRpbyBmcmFtZXMgcGVyIGF1ZGlvIGJ1ZmZlci4gRWFjaCBhdWRpbyBmcmFtZSBjb3Jy
ZXNwb25kcyB0bwotICAvLyBvbmUgc2FtcGxlIG9mIFBDTSBtb25vIGRhdGEgYXQgMTYgYml0cyBw
ZXIgc2FtcGxlLiBIZW5jZSwgZWFjaCBhdWRpbwotICAvLyBmcmFtZSBjb250YWlucyAyIGJ5dGVz
IChnaXZlbiB0aGF0IHRoZSBKYXZhIGxheWVyIG9ubHkgc3VwcG9ydHMgbW9ubykuCi0gIC8vIEV4
YW1wbGU6IDQ4MCBmb3IgNDgwMDAgSHogb3IgNDQxIGZvciA0NDEwMCBIei4KLSAgc2l6ZV90IGZy
YW1lc19wZXJfYnVmZmVyXzsKLQotICBib29sIGluaXRpYWxpemVkXzsKLQotICBib29sIHBsYXlp
bmdfOwotCi0gIC8vIFJhdyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hB
dWRpb0J1ZmZlcigpLiBPd25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNs
YXNzIGFuZCBjYWxsZWQgYnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgotICAvLyBUaGUg
QXVkaW9EZXZpY2VCdWZmZXIgaXMgYSBtZW1iZXIgb2YgdGhlIEF1ZGlvRGV2aWNlTW9kdWxlSW1w
bCBpbnN0YW5jZQotICAvLyBhbmQgdGhlcmVmb3JlIG91dGxpdmVzIHRoaXMgb2JqZWN0LgotICBB
dWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1ZmZlcl87Ci19OwotCi19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9B
VURJT19UUkFDS19KTklfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYnVpbGRfaW5mby5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvYnVpbGRfaW5mby5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTE2YmU4MjQ0ZWJjZDY2NzhlMzE2NTEyNjk4NjE4OGRkMjYzMDM0ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxk
X2luZm8uY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYnVpbGRfaW5m
by5oIgotCi0jaW5jbHVkZSAibW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvaGVscGVyc19hbmRyb2lk
LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1CdWlsZEluZm86OkJ1aWxkSW5mbygpCi0gICAg
OiBqX2Vudmlyb25tZW50XyhKVk06OkdldEluc3RhbmNlKCktPmVudmlyb25tZW50KCkpLAotICAg
ICAgal9idWlsZF9pbmZvXygKLSAgICAgICAgICBKVk06OkdldEluc3RhbmNlKCktPkdldENsYXNz
KCJvcmcvd2VicnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mbyIpKSB7fQotCi1zdGQ6OnN0cmluZyBC
dWlsZEluZm86OkdldFN0cmluZ0Zyb21KYXZhKGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgam1ldGhv
ZElEIGlkID0gal9idWlsZF9pbmZvXy5HZXRTdGF0aWNNZXRob2RJZChuYW1lLCAiKClMamF2YS9s
YW5nL1N0cmluZzsiKTsKLSAganN0cmluZyBqX3N0cmluZyA9Ci0gICAgICBzdGF0aWNfY2FzdDxq
c3RyaW5nPihqX2J1aWxkX2luZm9fLkNhbGxTdGF0aWNPYmplY3RNZXRob2QoaWQpKTsKLSAgcmV0
dXJuIGpfZW52aXJvbm1lbnRfLT5KYXZhVG9TdGRTdHJpbmcoal9zdHJpbmcpOwotfQotCi1zdGQ6
OnN0cmluZyBCdWlsZEluZm86OkdldERldmljZU1vZGVsKCkgewotICByZXR1cm4gR2V0U3RyaW5n
RnJvbUphdmEoImdldERldmljZU1vZGVsIik7Ci19Ci0KLXN0ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6
R2V0QnJhbmQoKSB7Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tSmF2YSgiZ2V0QnJhbmQiKTsKLX0K
LQotc3RkOjpzdHJpbmcgQnVpbGRJbmZvOjpHZXREZXZpY2VNYW51ZmFjdHVyZXIoKSB7Ci0gIHJl
dHVybiBHZXRTdHJpbmdGcm9tSmF2YSgiZ2V0RGV2aWNlTWFudWZhY3R1cmVyIik7Ci19Ci0KLXN0
ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6R2V0QW5kcm9pZEJ1aWxkSWQoKSB7Ci0gIHJldHVybiBHZXRT
dHJpbmdGcm9tSmF2YSgiZ2V0QW5kcm9pZEJ1aWxkSWQiKTsKLX0KLQotc3RkOjpzdHJpbmcgQnVp
bGRJbmZvOjpHZXRCdWlsZFR5cGUoKSB7Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tSmF2YSgiZ2V0
QnVpbGRUeXBlIik7Ci19Ci0KLXN0ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6R2V0QnVpbGRSZWxlYXNl
KCkgewotICByZXR1cm4gR2V0U3RyaW5nRnJvbUphdmEoImdldEJ1aWxkUmVsZWFzZSIpOwotfQot
Ci1TZGtDb2RlIEJ1aWxkSW5mbzo6R2V0U2RrVmVyc2lvbigpIHsKLSAgam1ldGhvZElEIGlkID0g
al9idWlsZF9pbmZvXy5HZXRTdGF0aWNNZXRob2RJZCgiZ2V0U2RrVmVyc2lvbiIsICIoKUkiKTsK
LSAgamludCBqX3ZlcnNpb24gPSBqX2J1aWxkX2luZm9fLkNhbGxTdGF0aWNJbnRNZXRob2QoaWQp
OwotICByZXR1cm4gc3RhdGljX2Nhc3Q8U2RrQ29kZT4oal92ZXJzaW9uKTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9idWlsZF9pbmZvLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmYyNzA5MzNlMTMxYjUxMGMyNGM2ZTEwYWVjMTEwM2VjZDJhYjliYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxkX2lu
Zm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaWZuZGVmIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQlVJTERfSU5GT19IXwot
I2RlZmluZSBNT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0JVSUxEX0lORk9fSF8KLQotI2lu
Y2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLQot
I2luY2x1ZGUgIm1vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2p2bV9hbmRyb2lkLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotCi0vLyBUaGlzIGVudW1lcmF0aW9uIG1hcHMgdG8gdGhlIHZhbHVlcyBy
ZXR1cm5lZCBieSBCdWlsZEluZm86OkdldFNka1ZlcnNpb24oKSwKLS8vIGluZGljYXRpbmcgdGhl
IEFuZHJvaWQgcmVsZWFzZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBTREsgdmVyc2lvbi4KLS8v
IFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9ndWlkZS90b3BpY3MvbWFuaWZlc3Qv
dXNlcy1zZGstZWxlbWVudC5odG1sCi0vLyBmb3IgZGV0YWlscy4KLWVudW0gU2RrQ29kZSB7Ci0g
IFNES19DT0RFX0pFTExZX0JFQU4gPSAxNiwgICAgICAvLyBBbmRyb2lkIDQuMQotICBTREtfQ09E
RV9KRUxMWV9CRUFOX01SMSA9IDE3LCAgLy8gQW5kcm9pZCA0LjIKLSAgU0RLX0NPREVfSkVMTFlf
QkVBTl9NUjIgPSAxOCwgIC8vIEFuZHJvaWQgNC4zCi0gIFNES19DT0RFX0tJVEtBVCA9IDE5LCAg
ICAgICAgICAvLyBBbmRyb2lkIDQuNAotICBTREtfQ09ERV9XQVRDSCA9IDIwLCAgICAgICAgICAg
Ly8gQW5kcm9pZCA0LjRXCi0gIFNES19DT0RFX0xPTExJUE9QID0gMjEsICAgICAgICAvLyBBbmRy
b2lkIDUuMAotICBTREtfQ09ERV9MT0xMSVBPUF9NUjEgPSAyMiwgICAgLy8gQW5kcm9pZCA1LjEK
LSAgU0RLX0NPREVfTUFSU0hNQUxMT1cgPSAyMywgICAgIC8vIEFuZHJvaWQgNi4wCi0gIFNES19D
T0RFX04gPSAyNCwKLX07Ci0KLS8vIFV0aWxpdHkgY2xhc3MgdXNlZCB0byBxdWVyeSB0aGUgSmF2
YSBjbGFzcyAob3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8pCi0vLyBmb3IgZGV2aWNl
IGFuZCBBbmRyb2lkIGJ1aWxkIGluZm9ybWF0aW9uLgotLy8gVGhlIGNhbGxpbmcgdGhyZWFkIGlz
IGF0dGFjaGVkIHRvIHRoZSBKVk0gYXQgY29uc3RydWN0aW9uIGlmIG5lZWRlZCBhbmQgYQotLy8g
dmFsaWQgSmF2YSBlbnZpcm9ubWVudCBvYmplY3QgaXMgYWxzbyBjcmVhdGVkLgotLy8gQWxsIEdl
dCBtZXRob2RzIG11c3QgYmUgY2FsbGVkIG9uIHRoZSBjcmVhdGluZyB0aHJlYWQuIElmIG5vdCwg
dGhlIGNvZGUgd2lsbAotLy8gaGl0IFJUQ19EQ0hFQ0tzIHdoZW4gY2FsbGluZyBKTklFbnZpcm9u
bWVudDo6SmF2YVRvU3RkU3RyaW5nKCkuCi1jbGFzcyBCdWlsZEluZm8gewotIHB1YmxpYzoKLSAg
QnVpbGRJbmZvKCk7Ci0gIH5CdWlsZEluZm8oKSB7fQotCi0gIC8vIEVuZC11c2VyLXZpc2libGUg
bmFtZSBmb3IgdGhlIGVuZCBwcm9kdWN0IChlLmcuICJOZXh1cyA2IikuCi0gIHN0ZDo6c3RyaW5n
IEdldERldmljZU1vZGVsKCk7Ci0gIC8vIENvbnN1bWVyLXZpc2libGUgYnJhbmQgKGUuZy4gImdv
b2dsZSIpLgotICBzdGQ6OnN0cmluZyBHZXRCcmFuZCgpOwotICAvLyBNYW51ZmFjdHVyZXIgb2Yg
dGhlIHByb2R1Y3QvaGFyZHdhcmUgKGUuZy4gIm1vdG9yb2xhIikuCi0gIHN0ZDo6c3RyaW5nIEdl
dERldmljZU1hbnVmYWN0dXJlcigpOwotICAvLyBBbmRyb2lkIGJ1aWxkIElEIChlLmcuIExNWTQ3
RCkuCi0gIHN0ZDo6c3RyaW5nIEdldEFuZHJvaWRCdWlsZElkKCk7Ci0gIC8vIFRoZSB0eXBlIG9m
IGJ1aWxkIChlLmcuICJ1c2VyIiBvciAiZW5nIikuCi0gIHN0ZDo6c3RyaW5nIEdldEJ1aWxkVHlw
ZSgpOwotICAvLyBUaGUgdXNlci12aXNpYmxlIHZlcnNpb24gc3RyaW5nIChlLmcuICI1LjEiKS4K
LSAgc3RkOjpzdHJpbmcgR2V0QnVpbGRSZWxlYXNlKCk7Ci0gIC8vIFRoZSB1c2VyLXZpc2libGUg
U0RLIHZlcnNpb24gb2YgdGhlIGZyYW1ld29yayAoZS5nLiAyMSkuIFNlZSBTZGtDb2RlIGVudW0K
LSAgLy8gZm9yIHRyYW5zbGF0aW9uLgotICBTZGtDb2RlIEdldFNka1ZlcnNpb24oKTsKLQotIHBy
aXZhdGU6Ci0gIC8vIEhlbHBlciBtZXRob2Qgd2hpY2ggY2FsbHMgYSBzdGF0aWMgZ2V0dGVyIG1l
dGhvZCB3aXRoIHxuYW1lfCBhbmQgcmV0dXJucwotICAvLyBhIHN0cmluZyBmcm9tIEphdmEuCi0g
IHN0ZDo6c3RyaW5nIEdldFN0cmluZ0Zyb21KYXZhKGNvbnN0IGNoYXIqIG5hbWUpOwotCi0gIC8v
IEVuc3VyZXMgdGhhdCB0aGlzIGNsYXNzIGNhbiBhY2Nlc3MgYSB2YWxpZCBKTkkgaW50ZXJmYWNl
IHBvaW50ZXIgZXZlbgotICAvLyBpZiB0aGUgY3JlYXRpbmcgdGhyZWFkIHdhcyBub3QgYXR0YWNo
ZWQgdG8gdGhlIEpWTS4KLSAgSnZtVGhyZWFkQ29ubmVjdG9yIGF0dGFjaF90aHJlYWRfaWZfbmVl
ZGVkXzsKLQotICAvLyBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEpOSUVudiBpbnRlcmZhY2UgcG9p
bnRlciBhbmQgdGhlIEphdmFUb1N0ZFN0cmluZygpCi0gIC8vIG1ldGhvZCB3aGljaCBpcyB1c2Vk
IHRvIHRyYW5zbGF0ZSBKYXZhIHN0cmluZ3MgdG8gc3RkIHN0cmluZ3MuCi0gIHN0ZDo6dW5pcXVl
X3B0cjxKTklFbnZpcm9ubWVudD4gal9lbnZpcm9ubWVudF87Ci0KLSAgLy8gSG9sZHMgdGhlIGpj
bGFzcyBvYmplY3QgYW5kIHByb3ZpZGVzIGFjY2VzcyB0byBDYWxsU3RhdGljT2JqZWN0TWV0aG9k
KCkuCi0gIC8vIFVzZWQgYnkgR2V0U3RyaW5nRnJvbUphdmEoKSBkdXJpbmcgY29uc3RydWN0aW9u
IG9ubHkuCi0gIEphdmFDbGFzcyBqX2J1aWxkX2luZm9fOwotfTsKLQotfSAgLy8gbmFtZXNwYWNl
IHdlYnJ0YwotCi0jZW5kaWYgIC8vIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQlVJTERf
SU5GT19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2Vuc3VyZV9pbml0aWFsaXplZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzcwODZjYzllYjMzZDBkY2Q1Zjg1YjU4MWFkMTQ5Y2VmNGNkZGYxNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2Vuc3VyZV9pbml0aWFsaXplZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuaCIKLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotI2lu
Y2x1ZGUgInJ0Y19iYXNlL2lnbm9yZV93dW5kZWYuaCIKLQotLy8gTm90ZTogdGhpcyBkZXBlbmRl
bmN5IGlzIGRhbmdlcm91cyBzaW5jZSBpdCByZWFjaGVzIGludG8gQ2hyb21pdW0ncyBiYXNlLgot
Ly8gVGhlcmUncyBhIHJpc2sgb2YgZS5nLiBtYWNybyBjbGFzaGVzLiBUaGlzIGZpbGUgbWF5IG9u
bHkgYmUgdXNlZCBpbiB0ZXN0cy4KLVJUQ19QVVNIX0lHTk9SSU5HX1dVTkRFRigpCi0jaW5jbHVk
ZSAiYmFzZS9hbmRyb2lkL2puaV9hbmRyb2lkLmgiCi1SVENfUE9QX0lHTk9SSU5HX1dVTkRFRigp
Ci0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5p
LmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb190cmFja19q
bmkuaCIKLSNpbmNsdWRlICJtb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oIgot
I2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBhdWRpb2RldmljZW1vZHVsZSB7Ci0KLXN0YXRpYyBwdGhyZWFkX29uY2VfdCBnX2luaXRp
YWxpemVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotCi12b2lkIEVuc3VyZUluaXRpYWxpemVk
T25jZSgpIHsKLSAgUlRDX0NIRUNLKDo6YmFzZTo6YW5kcm9pZDo6SXNWTUluaXRpYWxpemVkKCkp
OwotICBKTklFbnYqIGpuaSA9IDo6YmFzZTo6YW5kcm9pZDo6QXR0YWNoQ3VycmVudFRocmVhZCgp
OwotICBKYXZhVk0qIGp2bSA9IE5VTEw7Ci0gIFJUQ19DSEVDS19FUSgwLCBqbmktPkdldEphdmFW
TSgmanZtKSk7Ci0KLSAgLy8gSW5pdGlhbGl6ZSB0aGUgSmF2YSBlbnZpcm9ubWVudCAoY3VycmVu
dGx5IG9ubHkgdXNlZCBieSB0aGUgYXVkaW8gbWFuYWdlcikuCi0gIHdlYnJ0Yzo6SlZNOjpJbml0
aWFsaXplKGp2bSk7Ci19Ci0KLXZvaWQgRW5zdXJlSW5pdGlhbGl6ZWQoKSB7Ci0gIFJUQ19DSEVD
S19FUSgwLCBwdGhyZWFkX29uY2UoJmdfaW5pdGlhbGl6ZV9vbmNlLCAmRW5zdXJlSW5pdGlhbGl6
ZWRPbmNlKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBhdWRpb2RldmljZW1vZHVsZQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlh
bGl6ZWQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVkLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGMxOTk3YjRhY2RmMTQ4NGE0MWJmZmVmMTZmNjY4MDllNDlmYTZl
OTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFj
ZSBhdWRpb2RldmljZW1vZHVsZSB7Ci0KLXZvaWQgRW5zdXJlSW5pdGlhbGl6ZWQoKTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGF1ZGlvZGV2aWNlbW9kdWxlCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUv
QnVpbGRJbmZvLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vl
bmdpbmUvQnVpbGRJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZDhh
MDY0NTRiOWU4NmJmNTUwZmJjYzE5ODU4MjYyNDRlOWZiMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVu
Z2luZTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBC
dWlsZEluZm8gewotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXZpY2UoKSB7Ci0gICAgcmV0
dXJuIEJ1aWxkLkRFVklDRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERldmlj
ZU1vZGVsKCkgewotICAgIHJldHVybiBCdWlsZC5NT0RFTDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgU3RyaW5nIGdldFByb2R1Y3QoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlBST0RVQ1Q7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCcmFuZCgpIHsKLSAgICByZXR1cm4gQnVpbGQu
QlJBTkQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXZpY2VNYW51ZmFjdHVy
ZXIoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLk1BTlVGQUNUVVJFUjsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgU3RyaW5nIGdldEFuZHJvaWRCdWlsZElkKCkgewotICAgIHJldHVybiBCdWlsZC5JRDsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJ1aWxkVHlwZSgpIHsKLSAgICByZXR1
cm4gQnVpbGQuVFlQRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJ1aWxkUmVs
ZWFzZSgpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5SRUxFQVNFOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBpbnQgZ2V0U2RrVmVyc2lvbigpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lP
Ti5TREtfSU5UOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmph
dmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZmM4MTM2NDc0NjE1ZGZiYjc4OTM2
ZjdjOGMxYzQzODk2ZGE1Y2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dl
YlJ0Y0F1ZGlvRWZmZWN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0K
LWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQWNvdXN0aWNFY2hvQ2FuY2VsZXI7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1ZGlvRWZmZWN0OwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuYXVkaW9meC5BdWRpb0VmZmVjdC5EZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEu
YXVkaW9meC5Ob2lzZVN1cHByZXNzb3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9y
dCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwu
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7
Ci0KLS8vIFRoaXMgY2xhc3Mgd3JhcHMgY29udHJvbCBvZiB0aHJlZSBkaWZmZXJlbnQgcGxhdGZv
cm0gZWZmZWN0cy4gU3VwcG9ydGVkCi0vLyBlZmZlY3RzIGFyZTogQWNvdXN0aWNFY2hvQ2FuY2Vs
ZXIgKEFFQykgYW5kIE5vaXNlU3VwcHJlc3NvciAoTlMpLgotLy8gQ2FsbGluZyBlbmFibGUoKSB3
aWxsIGFjdGl2ZSBhbGwgZWZmZWN0cyB0aGF0IGFyZQotLy8gc3VwcG9ydGVkIGJ5IHRoZSBkZXZp
Y2UgaWYgdGhlIGNvcnJlc3BvbmRpbmcgfHNob3VsZEVuYWJsZVhYWHwgbWVtYmVyIGlzIHNldC4K
LXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRpb0VmZmVjdHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJXZWJSdGNBdWRpb0VmZmVjdHMiOwotCi0gIC8vIFVVSURzIGZvciBTb2Z0d2FyZSBB
dWRpbyBFZmZlY3RzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB1c2luZy4KLSAgLy8gVGhlIGltcGxl
bWVudG9yIGZpZWxkIHdpbGwgYmUgc2V0IHRvICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q
ZWN0Ii4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVVJRCBBT1NQX0FDT1VTVElDX0VDSE9fQ0FO
Q0VMRVIgPQotICAgICAgVVVJRC5mcm9tU3RyaW5nKCJiYjM5MmVjMC04ZDRkLTExZTAtYTg5Ni0w
MDAyYTVkNWM1MWIiKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVVJRCBBT1NQX05PSVNFX1NV
UFBSRVNTT1IgPQotICAgICAgVVVJRC5mcm9tU3RyaW5nKCJjMDZjODQwMC04ZTA2LTExZTAtOWNi
Ni0wMDAyYTVkNWM1MWIiKTsKLQotICAvLyBDb250YWlucyB0aGUgYXZhaWxhYmxlIGVmZmVjdCBk
ZXNjcmlwdG9ycyByZXR1cm5lZCBmcm9tIHRoZQotICAvLyBBdWRpb0VmZmVjdC5nZXRFZmZlY3Rz
KCkgY2FsbC4gVGhpcyByZXN1bHQgaXMgY2FjaGVkIHRvIGF2b2lkIGRvaW5nIHRoZQotICAvLyBz
bG93IE9TIGNhbGwgbXVsdGlwbGUgdGltZXMuCi0gIHByaXZhdGUgc3RhdGljIEBOdWxsYWJsZSBE
ZXNjcmlwdG9yW10gY2FjaGVkRWZmZWN0czsKLQotICAvLyBDb250YWlucyB0aGUgYXVkaW8gZWZm
ZWN0IG9iamVjdHMuIENyZWF0ZWQgaW4gZW5hYmxlKCkgYW5kIGRlc3Ryb3llZAotICAvLyBpbiBy
ZWxlYXNlKCkuCi0gIHByaXZhdGUgQE51bGxhYmxlIEFjb3VzdGljRWNob0NhbmNlbGVyIGFlYzsK
LSAgcHJpdmF0ZSBATnVsbGFibGUgTm9pc2VTdXBwcmVzc29yIG5zOwotCi0gIC8vIEFmZmVjdHMg
dGhlIGZpbmFsIHN0YXRlIGdpdmVuIHRvIHRoZSBzZXRFbmFibGVkKCkgbWV0aG9kIG9uIGVhY2gg
ZWZmZWN0LgotICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBpcyBzZXQgdG8gImRpc2FibGVkIiBidXQg
ZWFjaCBlZmZlY3QgY2FuIGFsc28gYmUgZW5hYmxlZAotICAvLyBieSBjYWxsaW5nIHNldEFFQygp
IGFuZCBzZXROUygpLgotICAvLyBUbyBlbmFibGUgYW4gZWZmZWN0LCBib3RoIHRoZSBzaG91bGRF
bmFibGVYWFggbWVtYmVyIGFuZCB0aGUgc3RhdGljCi0gIC8vIGNhblVzZVhYWCgpIG11c3QgYmUg
dHJ1ZS4KLSAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEVuYWJsZUFlYzsKLSAgcHJpdmF0ZSBib29s
ZWFuIHNob3VsZEVuYWJsZU5zOwotCi0gIC8vIENoZWNrcyBpZiB0aGUgZGV2aWNlIGltcGxlbWVu
dHMgQWNvdXN0aWMgRWNobyBDYW5jZWxsYXRpb24gKEFFQykuCi0gIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZGV2aWNlIGltcGxlbWVudHMgQUVDLCBmYWxzZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkgewotICAgIC8v
IE5vdGU6IHdlJ3JlIHVzaW5nIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJFZmZlY3RBdmFpbGFibGUo
KSBpbnN0ZWFkIG9mCi0gICAgLy8gQWNvdXN0aWNFY2hvQ2FuY2VsZXIuaXNBdmFpbGFibGUoKSB0
byBhdm9pZCB0aGUgZXhwZW5zaXZlIGdldEVmZmVjdHMoKQotICAgIC8vIE9TIEFQSSBjYWxsLgot
ICAgIHJldHVybiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCk7Ci0gIH0K
LQotICAvLyBDaGVja3MgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIE5vaXNlIFN1cHByZXNzaW9u
IChOUykuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGltcGxlbWVudHMgTlMsIGZh
bHNlIG90aGVyd2lzZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29y
U3VwcG9ydGVkKCkgewotICAgIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGlzTm9pc2VTdXBwcmVzc29y
RWZmZWN0QXZhaWxhYmxlKCkgaW5zdGVhZCBvZgotICAgIC8vIE5vaXNlU3VwcHJlc3Nvci5pc0F2
YWlsYWJsZSgpIHRvIGF2b2lkIHRoZSBleHBlbnNpdmUgZ2V0RWZmZWN0cygpCi0gICAgLy8gT1Mg
QVBJIGNhbGwuCi0gICAgcmV0dXJuIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0QXZhaWxhYmxlKCk7
Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpcyBibGFja2xpc3RlZCBm
b3IgSFcgQUVDIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9D
YW5jZWxlckJsYWNrbGlzdGVkKCkgewotICAgIExpc3Q8U3RyaW5nPiBibGFja0xpc3RlZE1vZGVs
cyA9IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JBZWNVc2FnZSgpOwot
ICAgIGJvb2xlYW4gaXNCbGFja2xpc3RlZCA9IGJsYWNrTGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1
aWxkLk1PREVMKTsKLSAgICBpZiAoaXNCbGFja2xpc3RlZCkgewotICAgICAgTG9nZ2luZy53KFRB
RywgQnVpbGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlzdGVkIGZvciBIVyBBRUMgdXNhZ2UhIik7Ci0g
ICAgfQotICAgIHJldHVybiBpc0JsYWNrbGlzdGVkOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIE5TIHVzYWdlLgotICBwdWJsaWMg
c3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JCbGFja2xpc3RlZCgpIHsKLSAgICBMaXN0
PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBXZWJSdGNBdWRpb1V0aWxzLmdldEJsYWNrTGlz
dGVkTW9kZWxzRm9yTnNVc2FnZSgpOwotICAgIGJvb2xlYW4gaXNCbGFja2xpc3RlZCA9IGJsYWNr
TGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgICBpZiAoaXNCbGFja2xpc3Rl
ZCkgewotICAgICAgTG9nZ2luZy53KFRBRywgQnVpbGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlzdGVk
IGZvciBIVyBOUyB1c2FnZSEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQmxhY2tsaXN0ZWQ7Ci0g
IH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIEFFQyBzaG91bGQgYmUgZXhj
bHVkZWQgYmFzZWQgb24gaXRzIFVVSUQuCi0gIC8vIEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygp
IGNhbiB0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uCi0gIHByaXZhdGUgc3RhdGljIGJvb2xl
YW4gaXNBY291c3RpY0VjaG9DYW5jZWxlckV4Y2x1ZGVkQnlVVUlEKCkgewotICAgIGlmIChCdWls
ZC5WRVJTSU9OLlNES19JTlQgPCAxOCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKERl
c2NyaXB0b3IgZCA6IGdldEF2YWlsYWJsZUVmZmVjdHMoKSkgewotICAgICAgaWYgKGQudHlwZS5l
cXVhbHMoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKQotICAgICAgICAgICYmIGQudXVpZC5l
cXVhbHMoQU9TUF9BQ09VU1RJQ19FQ0hPX0NBTkNFTEVSKSkgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBOUyBzaG91bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24gaXRz
IFVVSUQuCi0gIC8vIEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygpIGNhbiB0aHJvdyBJbGxlZ2Fs
U3RhdGVFeGNlcHRpb24uCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNz
b3JFeGNsdWRlZEJ5VVVJRCgpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgMTgp
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBnZXRBdmFpbGFi
bGVFZmZlY3RzKCkpIHsKLSAgICAgIGlmIChkLnR5cGUuZXF1YWxzKEF1ZGlvRWZmZWN0LkVGRkVD
VF9UWVBFX05TKSAmJiBkLnV1aWQuZXF1YWxzKEFPU1BfTk9JU0VfU1VQUFJFU1NPUikpIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIEFjb3VzdGljIEVj
aG8gQ2FuY2VsbGF0aW9uIChBRUMpLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNvdXN0
aWNFY2hvQ2FuY2VsZXJFZmZlY3RBdmFpbGFibGUoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04u
U0RLX0lOVCA8IDE4KQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0VmZmVjdFR5
cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKTsKLSAgfQotCi0gIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIE5vaXNlIFN1cHByZXNzaW9uIChOUyku
Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFi
bGUoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IDE4KQotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBpc0VmZmVjdFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZG
RUNUX1RZUEVfTlMpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25z
IGZvciBzdXBwb3J0aW5nIHRoZSBIVyBBRUMgYXJlIGZ1bGZpbGxlZC4KLSAgLy8gSXQgd2lsbCBu
b3QgYmUgcG9zc2libGUgdG8gZW5hYmxlIHRoZSBIVyBBRUMgaWYgdGhpcyBtZXRob2QgcmV0dXJu
cyBmYWxzZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGNhblVzZUFjb3VzdGljRWNob0NhbmNl
bGVyKCkgewotICAgIGJvb2xlYW4gY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIgPSBpc0Fjb3Vz
dGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkKLSAgICAgICAgJiYgIVdlYlJ0Y0F1ZGlvVXRpbHMu
dXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcigpCi0gICAgICAgICYmICFpc0Fjb3Vz
dGljRWNob0NhbmNlbGVyQmxhY2tsaXN0ZWQoKSAmJiAhaXNBY291c3RpY0VjaG9DYW5jZWxlckV4
Y2x1ZGVkQnlVVUlEKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImNhblVzZUFjb3VzdGljRWNob0Nh
bmNlbGVyOiAiICsgY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIpOwotICAgIHJldHVybiBjYW5V
c2VBY291c3RpY0VjaG9DYW5jZWxlcjsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwg
Y29uZGl0aW9ucyBmb3Igc3VwcG9ydGluZyB0aGUgSFcgTlMgYXJlIGZ1bGZpbGxlZC4KLSAgLy8g
SXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gZW5hYmxlIHRoZSBIVyBOUyBpZiB0aGlzIG1ldGhv
ZCByZXR1cm5zIGZhbHNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuVXNlTm9pc2VTdXBw
cmVzc29yKCkgewotICAgIGJvb2xlYW4gY2FuVXNlTm9pc2VTdXBwcmVzc29yID0gaXNOb2lzZVN1
cHByZXNzb3JTdXBwb3J0ZWQoKQotICAgICAgICAmJiAhV2ViUnRjQXVkaW9VdGlscy51c2VXZWJS
dGNCYXNlZE5vaXNlU3VwcHJlc3NvcigpICYmICFpc05vaXNlU3VwcHJlc3NvckJsYWNrbGlzdGVk
KCkKLSAgICAgICAgJiYgIWlzTm9pc2VTdXBwcmVzc29yRXhjbHVkZWRCeVVVSUQoKTsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiY2FuVXNlTm9pc2VTdXBwcmVzc29yOiAiICsgY2FuVXNlTm9pc2VTdXBw
cmVzc29yKTsKLSAgICByZXR1cm4gY2FuVXNlTm9pc2VTdXBwcmVzc29yOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBXZWJSdGNBdWRpb0VmZmVjdHMgY3JlYXRlKCkgewotICAgIHJldHVybiBuZXcg
V2ViUnRjQXVkaW9FZmZlY3RzKCk7Ci0gIH0KLQotICBwcml2YXRlIFdlYlJ0Y0F1ZGlvRWZmZWN0
cygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRo
cmVhZEluZm8oKSk7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGVuYWJsZSBvciBk
aXNhYmxlIHRoZSBwbGF0Zm9ybSBBRUMuIEl0IG1vZGlmaWVzCi0gIC8vIHxzaG91bGRFbmFibGVB
ZWN8IHdoaWNoIGlzIHVzZWQgaW4gZW5hYmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBzdGF0ZQotICAv
LyBvZiB0aGUgQUVDIGVmZmVjdCBpcyBtb2RpZmllZC4gUmV0dXJucyB0cnVlIGlmIEhXIEFFQyBp
cyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVibGljIGJvb2xlYW4g
c2V0QUVDKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInNldEFFQygiICsg
ZW5hYmxlICsgIikiKTsKLSAgICBpZiAoIWNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCkpIHsK
LSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9ybSBBRUMgaXMgbm90IHN1cHBvcnRlZCIpOwot
ICAgICAgc2hvdWxkRW5hYmxlQWVjID0gZmFsc2U7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGlmIChhZWMgIT0gbnVsbCAmJiAoZW5hYmxlICE9IHNob3VsZEVuYWJsZUFlYykpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJQbGF0Zm9ybSBBRUMgc3RhdGUgY2FuJ3QgYmUgbW9kaWZp
ZWQgd2hpbGUgcmVjb3JkaW5nIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHNo
b3VsZEVuYWJsZUFlYyA9IGVuYWJsZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIENh
bGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHBsYXRmb3JtIE5TLiBJdCBt
b2RpZmllcwotICAvLyB8c2hvdWxkRW5hYmxlTnN8IHdoaWNoIGlzIHVzZWQgaW4gZW5hYmxlKCkg
d2hlcmUgdGhlIGFjdHVhbCBzdGF0ZQotICAvLyBvZiB0aGUgTlMgZWZmZWN0IGlzIG1vZGlmaWVk
LiBSZXR1cm5zIHRydWUgaWYgSFcgTlMgaXMgc3VwcG9ydGVkIGFuZAotICAvLyBmYWxzZSBvdGhl
cndpc2UuCi0gIHB1YmxpYyBib29sZWFuIHNldE5TKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgInNldE5TKCIgKyBlbmFibGUgKyAiKSIpOwotICAgIGlmICghY2FuVXNlTm9p
c2VTdXBwcmVzc29yKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9ybSBOUyBpcyBu
b3Qgc3VwcG9ydGVkIik7Ci0gICAgICBzaG91bGRFbmFibGVOcyA9IGZhbHNlOwotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobnMgIT0gbnVsbCAmJiAoZW5hYmxlICE9IHNob3Vs
ZEVuYWJsZU5zKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlBsYXRmb3JtIE5TIHN0YXRlIGNh
bid0IGJlIG1vZGlmaWVkIHdoaWxlIHJlY29yZGluZyIpOwotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBzaG91bGRFbmFibGVOcyA9IGVuYWJsZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIGVuYWJsZShpbnQgYXVkaW9TZXNzaW9uKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgImVuYWJsZShhdWRpb1Nlc3Npb249IiArIGF1ZGlvU2Vzc2lvbiArICIpIik7Ci0g
ICAgYXNzZXJ0VHJ1ZShhZWMgPT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShucyA9PSBudWxsKTsK
LQotICAgIGlmIChERUJVRykgewotICAgICAgLy8gQWRkIGxvZ2dpbmcgb2Ygc3VwcG9ydGVkIGVm
ZmVjdHMgYnV0IGZpbHRlciBvdXQgIlZvSVAgZWZmZWN0cyIsIGkuZS4sCi0gICAgICAvLyBBRUMs
IEFFQyBhbmQgTlMuIEF2b2lkIGNhbGxpbmcgQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCkgdW5s
ZXNzIHRoZQotICAgICAgLy8gREVCVUcgZmxhZyBpcyBzZXQgc2luY2Ugd2UgaGF2ZSBzZWVuIGNy
YXNoZXMgaW4gdGhpcyBBUEkuCi0gICAgICBmb3IgKERlc2NyaXB0b3IgZCA6IEF1ZGlvRWZmZWN0
LnF1ZXJ5RWZmZWN0cygpKSB7Ci0gICAgICAgIGlmIChlZmZlY3RUeXBlSXNWb0lQKGQudHlwZSkp
IHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAibmFtZTogIiArIGQubmFtZSArICIsICIKLSAg
ICAgICAgICAgICAgICAgICsgIm1vZGU6ICIgKyBkLmNvbm5lY3RNb2RlICsgIiwgIgotICAgICAg
ICAgICAgICAgICAgKyAiaW1wbGVtZW50b3I6ICIgKyBkLmltcGxlbWVudG9yICsgIiwgIgotICAg
ICAgICAgICAgICAgICAgKyAiVVVJRDogIiArIGQudXVpZCk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpKSB7Ci0g
ICAgICAvLyBDcmVhdGUgYW4gQWNvdXN0aWNFY2hvQ2FuY2VsZXIgYW5kIGF0dGFjaCBpdCB0byB0
aGUgQXVkaW9SZWNvcmQgb24KLSAgICAgIC8vIHRoZSBzcGVjaWZpZWQgYXVkaW8gc2Vzc2lvbi4K
LSAgICAgIGFlYyA9IEFjb3VzdGljRWNob0NhbmNlbGVyLmNyZWF0ZShhdWRpb1Nlc3Npb24pOwot
ICAgICAgaWYgKGFlYyAhPSBudWxsKSB7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlZCA9IGFlYy5n
ZXRFbmFibGVkKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlID0gc2hvdWxkRW5hYmxlQWVjICYm
IGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gICAgICAgIGlmIChhZWMuc2V0RW5hYmxl
ZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0LlNVQ0NFU1MpIHsKLSAgICAgICAgICBMb2dnaW5nLmUo
VEFHLCAiRmFpbGVkIHRvIHNldCB0aGUgQWNvdXN0aWNFY2hvQ2FuY2VsZXIgc3RhdGUiKTsKLSAg
ICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQWNvdXN0aWNFY2hvQ2FuY2VsZXI6IHdh
cyAiICsgKGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKQotICAgICAgICAgICAgICAg
ICsgIiwgZW5hYmxlOiAiICsgZW5hYmxlICsgIiwgaXMgbm93OiAiCi0gICAgICAgICAgICAgICAg
KyAoYWVjLmdldEVuYWJsZWQoKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBBY291
c3RpY0VjaG9DYW5jZWxlciBpbnN0YW5jZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChp
c05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gTm9pc2VT
dXBwcmVzc29yIGFuZCBhdHRhY2ggaXQgdG8gdGhlIEF1ZGlvUmVjb3JkIG9uIHRoZQotICAgICAg
Ly8gc3BlY2lmaWVkIGF1ZGlvIHNlc3Npb24uCi0gICAgICBucyA9IE5vaXNlU3VwcHJlc3Nvci5j
cmVhdGUoYXVkaW9TZXNzaW9uKTsKLSAgICAgIGlmIChucyAhPSBudWxsKSB7Ci0gICAgICAgIGJv
b2xlYW4gZW5hYmxlZCA9IG5zLmdldEVuYWJsZWQoKTsKLSAgICAgICAgYm9vbGVhbiBlbmFibGUg
PSBzaG91bGRFbmFibGVOcyAmJiBjYW5Vc2VOb2lzZVN1cHByZXNzb3IoKTsKLSAgICAgICAgaWYg
KG5zLnNldEVuYWJsZWQoZW5hYmxlKSAhPSBBdWRpb0VmZmVjdC5TVUNDRVNTKSB7Ci0gICAgICAg
ICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBzZXQgdGhlIE5vaXNlU3VwcHJlc3NvciBzdGF0
ZSIpOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJOb2lzZVN1cHByZXNzb3I6
IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSArICIsIGVuYWJsZTog
IgotICAgICAgICAgICAgICAgICsgZW5hYmxlICsgIiwgaXMgbm93OiAiICsgKG5zLmdldEVuYWJs
ZWQoKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBOb2lzZVN1cHByZXNzb3IgaW5z
dGFuY2UiKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBSZWxlYXNlcyBhbGwgbmF0aXZl
IGF1ZGlvIGVmZmVjdCByZXNvdXJjZXMuIEl0IGlzIGEgZ29vZCBwcmFjdGljZSB0bwotICAvLyBy
ZWxlYXNlIHRoZSBlZmZlY3QgZW5naW5lIHdoZW4gbm90IGluIHVzZSBhcyBjb250cm9sIGNhbiBi
ZSByZXR1cm5lZAotICAvLyB0byBvdGhlciBhcHBsaWNhdGlvbnMgb3IgdGhlIG5hdGl2ZSByZXNv
dXJjZXMgcmVsZWFzZWQuCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInJlbGVhc2UiKTsKLSAgICBpZiAoYWVjICE9IG51bGwpIHsKLSAgICAgIGFlYy5yZWxl
YXNlKCk7Ci0gICAgICBhZWMgPSBudWxsOwotICAgIH0KLSAgICBpZiAobnMgIT0gbnVsbCkgewot
ICAgICAgbnMucmVsZWFzZSgpOwotICAgICAgbnMgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIC8v
IFJldHVybnMgdHJ1ZSBmb3IgZWZmZWN0IHR5cGVzIGluIHx0eXBlfCB0aGF0IGFyZSBvZiAiVm9J
UCIgdHlwZXM6Ci0gIC8vIEFjb3VzdGljIEVjaG8gQ2FuY2VsZXIgKEFFQykgb3IgQXV0b21hdGlj
IEdhaW4gQ29udHJvbCAoQUdDKSBvcgotICAvLyBOb2lzZSBTdXBwcmVzc29yIChOUykuIE5vdGUg
dGhhdCwgYW4gZXh0cmEgY2hlY2sgZm9yIHN1cHBvcnQgaXMgbmVlZGVkCi0gIC8vIGluIGVhY2gg
Y29tcGFyaXNvbiBzaW5jZSBzb21lIGRldmljZXMgaW5jbHVkZXMgZWZmZWN0cyBpbiB0aGUKLSAg
Ly8gQXVkaW9FZmZlY3QuRGVzY3JpcHRvciBhcnJheSB0aGF0IGFyZSBhY3R1YWxseSBub3QgYXZh
aWxhYmxlIG9uIHRoZSBkZXZpY2UuCi0gIC8vIEFzIGFuIGV4YW1wbGU6IFNhbXN1bmcgR2FsYXh5
IFM2IGluY2x1ZGVzIGFuIEFHQyBpbiB0aGUgZGVzY3JpcHRvciBidXQKLSAgLy8gQXV0b21hdGlj
R2FpbkNvbnRyb2wuaXNBdmFpbGFibGUoKSByZXR1cm5zIGZhbHNlLgotICBwcml2YXRlIGJvb2xl
YW4gZWZmZWN0VHlwZUlzVm9JUChVVUlEIHR5cGUpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5T
REtfSU5UIDwgMTgpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gKEF1ZGlvRWZm
ZWN0LkVGRkVDVF9UWVBFX0FFQy5lcXVhbHModHlwZSkgJiYgaXNBY291c3RpY0VjaG9DYW5jZWxl
clN1cHBvcnRlZCgpKQotICAgICAgICB8fCAoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfTlMuZXF1
YWxzKHR5cGUpICYmIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpOwotICB9Ci0KLSAgLy8g
SGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gYW4gYXNzZXJ0aW9u
IGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNv
bmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0
aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0K
LSAgLy8gUmV0dXJucyB0aGUgY2FjaGVkIGNvcHkgb2YgdGhlIGF1ZGlvIGVmZmVjdHMgYXJyYXks
IGlmIGF2YWlsYWJsZSwgb3IKLSAgLy8gcXVlcmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmb3Ig
dGhlIGxpc3Qgb2YgZWZmZWN0cy4KLSAgcHJpdmF0ZSBzdGF0aWMgQE51bGxhYmxlIERlc2NyaXB0
b3JbXSBnZXRBdmFpbGFibGVFZmZlY3RzKCkgewotICAgIGlmIChjYWNoZWRFZmZlY3RzICE9IG51
bGwpIHsKLSAgICAgIHJldHVybiBjYWNoZWRFZmZlY3RzOwotICAgIH0KLSAgICAvLyBUaGUgY2Fj
aGluZyBpcyBiZXN0IGVmZm9ydCBvbmx5IC0gaWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20g
c2V2ZXJhbAotICAgIC8vIHRocmVhZHMgaW4gcGFyYWxsZWwsIHRoZXkgbWF5IGVuZCB1cCBkb2lu
ZyB0aGUgdW5kZXJseWluZyBPUyBjYWxsCi0gICAgLy8gbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm9y
bWFsbHkgb25seSBjYWxsZWQgb24gb25lIHRocmVhZCBzbyB0aGVyZSdzIG5vCi0gICAgLy8gcmVh
bCBuZWVkIHRvIG9wdGltaXplIGZvciB0aGUgbXVsdGlwbGUgdGhyZWFkcyBjYXNlLgotICAgIGNh
Y2hlZEVmZmVjdHMgPSBBdWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKTsKLSAgICByZXR1cm4gY2Fj
aGVkRWZmZWN0czsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlZmZlY3Qgb2YgdGhl
IHNwZWNpZmllZCB0eXBlIGlzIGF2YWlsYWJsZS4gRnVuY3Rpb25hbGx5Ci0gIC8vIGVxdWl2YWxl
bnQgdG8gKE5vaXNlU3VwcHJlc3NvcnxBdXRvbWF0aWNHYWluQ29udHJvbHwuLi4pLmlzQXZhaWxh
YmxlKCksIGJ1dAotICAvLyBmYXN0ZXIgYXMgaXQgYXZvaWRzIHRoZSBleHBlbnNpdmUgT1MgY2Fs
bCB0byBlbnVtZXJhdGUgZWZmZWN0cy4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0VmZmVj
dFR5cGVBdmFpbGFibGUoVVVJRCBlZmZlY3RUeXBlKSB7Ci0gICAgRGVzY3JpcHRvcltdIGVmZmVj
dHMgPSBnZXRBdmFpbGFibGVFZmZlY3RzKCk7Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKERlc2NyaXB0b3IgZCA6IGVmZmVj
dHMpIHsKLSAgICAgIGlmIChkLnR5cGUuZXF1YWxzKGVmZmVjdFR5cGUpKSB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9X
ZWJSdGNBdWRpb01hbmFnZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjc4M2EwZDA0NDNlNTgzMTM5YmFjODEzZmUyZThkOWY4NGQ2ZGI0MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9NYW5hZ2VyLmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVu
dC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWlt
cG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVk
aW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBvcnQgYW5k
cm9pZC5tZWRpYS5BdWRpb1RyYWNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQg
YW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlRp
bWVyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lclRhc2s7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Db250
ZXh0VXRpbHM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi0vLyBXZWJSdGNBdWRpb01h
bmFnZXIgaGFuZGxlcyB0YXNrcyB0aGF0IHVzZXMgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIu
Ci0vLyBBdCBjb25zdHJ1Y3Rpb24sIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgaXMgY2FsbGVkIGFu
ZCBpdCByZXRyaWV2ZXMKLS8vIGZ1bmRhbWVudGFsIGF1ZGlvIHBhcmFtZXRlcnMgbGlrZSBuYXRp
dmUgc2FtcGxlIHJhdGUgYW5kIG51bWJlciBvZiBjaGFubmVscy4KLS8vIFRoZSByZXN1bHQgaXMg
dGhlbiBwcm92aWRlZCB0byB0aGUgY2FsbGVyIGJ5IG5hdGl2ZUNhY2hlQXVkaW9QYXJhbWV0ZXJz
KCkuCi0vLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgaW5pdCgpIHRvIHNldCB1cCB0aGUg
YXVkaW8gZW52aXJvbm1lbnQgZm9yIGJlc3QKLS8vIHBvc3NpYmxlICJWb0lQIHBlcmZvcm1hbmNl
Ii4gQWxsIHNldHRpbmdzIGRvbmUgaW4gaW5pdCgpIGFyZSByZXZlcnRlZCBieQotLy8gZGlzcG9z
ZSgpLiBUaGlzIGNsYXNzIGNhbiBhbHNvIGJlIHVzZWQgd2l0aG91dCBjYWxsaW5nIGluaXQoKSBp
ZiB0aGUgdXNlcgotLy8gcHJlZmVycyB0byBzZXQgdXAgdGhlIGF1ZGlvIGVudmlyb25tZW50IHNl
cGFyYXRlbHkuIEhvd2V2ZXIsIGl0IGlzCi0vLyByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlIEF1
ZGlvTWFuYWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT04uCi1wdWJsaWMgY2xhc3MgV2ViUnRjQXVk
aW9NYW5hZ2VyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNl
OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9NYW5h
Z2VyIjsKLQotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84OTE0KTogZGlzYWJsZWQgYnkgZGVm
YXVsdCB1bnRpbCBBQXVkaW8gc3VwcG9ydCBoYXMKLSAgLy8gYmVlbiBjb21wbGV0ZWQuIEdvYWwg
aXMgdG8gYWx3YXlzIHJldHVybiBmYWxzZSBvbiBBbmRyb2lkIE8gTVIxIGFuZCBoaWdoZXIuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gYmxhY2tsaXN0RGV2aWNlRm9yQUF1ZGlvVXNh
Z2UgPSB0cnVlOwotCi0gIC8vIFVzZSBtb25vIGFzIGRlZmF1bHQgZm9yIGJvdGggYXVkaW8gZGly
ZWN0aW9ucy4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VTdGVyZW9PdXRwdXQ7Ci0gIHBy
aXZhdGUgc3RhdGljIGJvb2xlYW4gdXNlU3RlcmVvSW5wdXQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
Ym9vbGVhbiBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlOwotICBwcml2YXRlIHN0YXRp
YyBib29sZWFuIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRkZW47Ci0K
LSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsaXN0IG9mIGJs
YWNrbGlzdGVkIGRldmljZXMKLSAgLy8gc3BlY2lmaWVkIGluIFdlYlJ0Y0F1ZGlvVXRpbHMuQkxB
Q0tMSVNURURfT1BFTl9TTF9FU19NT0RFTFMuCi0gIC8vIEFsbG93cyBhbiBhcHAgdG8gdGFrZSBj
b250cm9sIG92ZXIgd2hpY2ggZGV2aWNlcyB0byBleGNsdWRlIGZyb20gdXNpbmcKLSAgLy8gdGhl
IE9wZW5TTCBFUyBhdWRpbyBvdXRwdXQgcGF0aAotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84
NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gIEBT
dXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRCbGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdl
KGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZUlz
T3ZlcnJpZGRlbiA9IHRydWU7Ci0gICAgYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZSA9
IGVuYWJsZTsKLSAgfQotCi0gIC8vIENhbGwgdGhlc2UgbWV0aG9kcyB0byBvdmVycmlkZSB0aGUg
ZGVmYXVsdCBtb25vIGF1ZGlvIG1vZGVzIGZvciB0aGUgc3BlY2lmaWVkIGRpcmVjdGlvbihzKQot
ICAvLyAoaW5wdXQgYW5kL29yIG91dHB1dCkuCi0gIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0
OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgQFN1
cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCB2b2lkIHNldFN0ZXJlb091dHB1dChib29sZWFuIGVuYWJsZSkgewot
ICAgIExvZ2dpbmcudyhUQUcsICJPdmVycmlkaW5nIGRlZmF1bHQgb3V0cHV0IGJlaGF2aW9yOiBz
ZXRTdGVyZW9PdXRwdXQoIiArIGVuYWJsZSArICcpJyk7Ci0gICAgdXNlU3RlcmVvT3V0cHV0ID0g
ZW5hYmxlOwotICB9Ci0KLSAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBO
b1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICBAU3VwcHJlc3NXYXJuaW5n
cygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25p
emVkIHZvaWQgc2V0U3RlcmVvSW5wdXQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLnco
VEFHLCAiT3ZlcnJpZGluZyBkZWZhdWx0IGlucHV0IGJlaGF2aW9yOiBzZXRTdGVyZW9JbnB1dCgi
ICsgZW5hYmxlICsgJyknKTsKLSAgICB1c2VTdGVyZW9JbnB1dCA9IGVuYWJsZTsKLSAgfQotCi0g
IC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRo
b2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVk
TWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBib29sZWFuIGdldFN0
ZXJlb091dHB1dCgpIHsKLSAgICByZXR1cm4gdXNlU3RlcmVvT3V0cHV0OwotICB9Ci0KLSAgLy8g
VE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENo
ZWNrIHN1cHByZXNzaW9uLgotICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRo
b2RDaGVjayIpCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gZ2V0U3RlcmVv
SW5wdXQoKSB7Ci0gICAgcmV0dXJuIHVzZVN0ZXJlb0lucHV0OwotICB9Ci0KLSAgLy8gRGVmYXVs
dCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0IHBlciBzYW1wbGUuCi0gIC8vIEd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzLgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUiA9IDI1NjsKLQotICAvLyBQcml2YXRlIHV0aWxp
dHkgY2xhc3MgdGhhdCBwZXJpb2RpY2FsbHkgY2hlY2tzIGFuZCBsb2dzIHRoZSB2b2x1bWUgbGV2
ZWwKLSAgLy8gb2YgdGhlIGF1ZGlvIHN0cmVhbSB0aGF0IGlzIGN1cnJlbnRseSBjb250cm9sbGVk
IGJ5IHRoZSB2b2x1bWUgY29udHJvbC4KLSAgLy8gQSB0aW1lciB0cmlnZ2VycyBsb2dzIG9uY2Ug
ZXZlcnkgMzAgc2Vjb25kcyBhbmQgdGhlIHRpbWVyJ3MgYXNzb2NpYXRlZAotICAvLyB0aHJlYWQg
aXMgbmFtZWQgIldlYlJ0Y1ZvbHVtZUxldmVsTG9nZ2VyVGhyZWFkIi4KLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgVm9sdW1lTG9nZ2VyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEhSRUFEX05BTUUgPSAiV2ViUnRjVm9sdW1lTGV2ZWxMb2dnZXJUaHJlYWQiOwotICAgIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyA9IDMwOwotCi0gICAg
cHJpdmF0ZSBmaW5hbCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICAgIHByaXZhdGUgQE51
bGxhYmxlIFRpbWVyIHRpbWVyOwotCi0gICAgcHVibGljIFZvbHVtZUxvZ2dlcihBdWRpb01hbmFn
ZXIgYXVkaW9NYW5hZ2VyKSB7Ci0gICAgICB0aGlzLmF1ZGlvTWFuYWdlciA9IGF1ZGlvTWFuYWdl
cjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKLSAgICAgIHRpbWVyID0gbmV3
IFRpbWVyKFRIUkVBRF9OQU1FKTsKLSAgICAgIHRpbWVyLnNjaGVkdWxlKG5ldyBMb2dWb2x1bWVU
YXNrKGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhWb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9S
SU5HKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtTWF4
Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCkpLAotICAgICAgICAgIDAsIFRJ
TUVSX1BFUklPRF9JTl9TRUNPTkRTICogMTAwMCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFz
cyBMb2dWb2x1bWVUYXNrIGV4dGVuZHMgVGltZXJUYXNrIHsKLSAgICAgIHByaXZhdGUgZmluYWwg
aW50IG1heFJpbmdWb2x1bWU7Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCBtYXhWb2ljZUNhbGxW
b2x1bWU7Ci0KLSAgICAgIExvZ1ZvbHVtZVRhc2soaW50IG1heFJpbmdWb2x1bWUsIGludCBtYXhW
b2ljZUNhbGxWb2x1bWUpIHsKLSAgICAgICAgdGhpcy5tYXhSaW5nVm9sdW1lID0gbWF4UmluZ1Zv
bHVtZTsKLSAgICAgICAgdGhpcy5tYXhWb2ljZUNhbGxWb2x1bWUgPSBtYXhWb2ljZUNhbGxWb2x1
bWU7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBmaW5hbCBpbnQgbW9kZSA9IGF1ZGlvTWFuYWdlci5nZXRNb2RlKCk7Ci0gICAg
ICAgIGlmIChtb2RlID09IEF1ZGlvTWFuYWdlci5NT0RFX1JJTkdUT05FKSB7Ci0gICAgICAgICAg
TG9nZ2luZy5kKFRBRywgIlNUUkVBTV9SSU5HIHN0cmVhbSB2b2x1bWU6ICIKLSAgICAgICAgICAg
ICAgICAgICsgYXVkaW9NYW5hZ2VyLmdldFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFN
X1JJTkcpICsgIiAobWF4PSIKLSAgICAgICAgICAgICAgICAgICsgbWF4UmluZ1ZvbHVtZSArICIp
Iik7Ci0gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01N
VU5JQ0FUSU9OKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlZPSUNFX0NBTEwgc3RyZWFt
IHZvbHVtZTogIgotICAgICAgICAgICAgICAgICAgKyBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9s
dW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCkgKyAiIChtYXg9IgotICAgICAgICAg
ICAgICAgICAgKyBtYXhWb2ljZUNhbGxWb2x1bWUgKyAiKSIpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN0b3AoKSB7Ci0gICAgICBpZiAodGltZXIgIT0g
bnVsbCkgewotICAgICAgICB0aW1lci5jYW5jZWwoKTsKLSAgICAgICAgdGltZXIgPSBudWxsOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb01h
bmFnZXI7Ci0gIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcjsKLQotICBw
cml2YXRlIGJvb2xlYW4gaW5pdGlhbGl6ZWQ7Ci0gIHByaXZhdGUgaW50IG5hdGl2ZVNhbXBsZVJh
dGU7Ci0gIHByaXZhdGUgaW50IG5hdGl2ZUNoYW5uZWxzOwotCi0gIHByaXZhdGUgYm9vbGVhbiBo
YXJkd2FyZUFFQzsKLSAgcHJpdmF0ZSBib29sZWFuIGhhcmR3YXJlQUdDOwotICBwcml2YXRlIGJv
b2xlYW4gaGFyZHdhcmVOUzsKLSAgcHJpdmF0ZSBib29sZWFuIGxvd0xhdGVuY3lPdXRwdXQ7Ci0g
IHByaXZhdGUgYm9vbGVhbiBsb3dMYXRlbmN5SW5wdXQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9B
dWRpbzsKLSAgcHJpdmF0ZSBib29sZWFuIGFBdWRpbzsKLSAgcHJpdmF0ZSBpbnQgc2FtcGxlUmF0
ZTsKLSAgcHJpdmF0ZSBpbnQgb3V0cHV0Q2hhbm5lbHM7Ci0gIHByaXZhdGUgaW50IGlucHV0Q2hh
bm5lbHM7Ci0gIHByaXZhdGUgaW50IG91dHB1dEJ1ZmZlclNpemU7Ci0gIHByaXZhdGUgaW50IGlu
cHV0QnVmZmVyU2l6ZTsKLQotICBwcml2YXRlIGZpbmFsIFZvbHVtZUxvZ2dlciB2b2x1bWVMb2dn
ZXI7Ci0KLSAgV2ViUnRjQXVkaW9NYW5hZ2VyKGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2VyKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZv
KCkpOwotICAgIHRoaXMubmF0aXZlQXVkaW9NYW5hZ2VyID0gbmF0aXZlQXVkaW9NYW5hZ2VyOwot
ICAgIGF1ZGlvTWFuYWdlciA9Ci0gICAgICAgIChBdWRpb01hbmFnZXIpIENvbnRleHRVdGlscy5n
ZXRBcHBsaWNhdGlvbkNvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9fU0VS
VklDRSk7Ci0gICAgaWYgKERFQlVHKSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0Rldmlj
ZUluZm8oVEFHKTsKLSAgICB9Ci0gICAgdm9sdW1lTG9nZ2VyID0gbmV3IFZvbHVtZUxvZ2dlcihh
dWRpb01hbmFnZXIpOwotICAgIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCk7Ci0gICAgbmF0aXZlQ2Fj
aGVBdWRpb1BhcmFtZXRlcnMoc2FtcGxlUmF0ZSwgb3V0cHV0Q2hhbm5lbHMsIGlucHV0Q2hhbm5l
bHMsIGhhcmR3YXJlQUVDLCBoYXJkd2FyZUFHQywKLSAgICAgICAgaGFyZHdhcmVOUywgbG93TGF0
ZW5jeU91dHB1dCwgbG93TGF0ZW5jeUlucHV0LCBwcm9BdWRpbywgYUF1ZGlvLCBvdXRwdXRCdWZm
ZXJTaXplLAotICAgICAgICBpbnB1dEJ1ZmZlclNpemUsIG5hdGl2ZUF1ZGlvTWFuYWdlcik7Ci0g
ICAgV2ViUnRjQXVkaW9VdGlscy5sb2dBdWRpb1N0YXRlKFRBRyk7Ci0gIH0KLQotICBwcml2YXRl
IGJvb2xlYW4gaW5pdCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdCIgKyBXZWJSdGNBdWRp
b1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKGluaXRpYWxpemVkKSB7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgImF1ZGlvIG1vZGUgaXM6ICIK
LSAgICAgICAgKyBXZWJSdGNBdWRpb1V0aWxzLm1vZGVUb1N0cmluZyhhdWRpb01hbmFnZXIuZ2V0
TW9kZSgpKSk7Ci0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIHZvbHVtZUxvZ2dlci5zdGFy
dCgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRpc3Bvc2UoKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgImRpc3Bvc2UiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJl
YWRJbmZvKCkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgdm9sdW1lTG9nZ2VyLnN0b3AoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0Nv
bW11bmljYXRpb25Nb2RlRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gKGF1ZGlvTWFuYWdlci5nZXRN
b2RlKCkgPT0gQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNBVElPTik7Ci0gIH0KLQotICBw
cml2YXRlIGJvb2xlYW4gaXNEZXZpY2VCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2UoKSB7Ci0g
ICAgYm9vbGVhbiBibGFja2xpc3RlZCA9IGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJ
c092ZXJyaWRkZW4KLSAgICAgICAgPyBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlCi0g
ICAgICAgIDogV2ViUnRjQXVkaW9VdGlscy5kZXZpY2VJc0JsYWNrbGlzdGVkRm9yT3BlblNMRVNV
c2FnZSgpOwotICAgIGlmIChibGFja2xpc3RlZCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgQnVp
bGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlzdGVkIGZvciBPcGVuU0wgRVMgdXNhZ2UhIik7Ci0gICAg
fQotICAgIHJldHVybiBibGFja2xpc3RlZDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9yZUF1
ZGlvUGFyYW1ldGVycygpIHsKLSAgICBvdXRwdXRDaGFubmVscyA9IGdldFN0ZXJlb091dHB1dCgp
ID8gMiA6IDE7Ci0gICAgaW5wdXRDaGFubmVscyA9IGdldFN0ZXJlb0lucHV0KCkgPyAyIDogMTsK
LSAgICBzYW1wbGVSYXRlID0gZ2V0TmF0aXZlT3V0cHV0U2FtcGxlUmF0ZSgpOwotICAgIGhhcmR3
YXJlQUVDID0gaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpOwotICAgIC8vIFRPRE8o
aGVucmlrYSk6IHVzZSBvZiBoYXJkd2FyZSBBR0MgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gQ3Vy
cmVudGx5Ci0gICAgLy8gaGFyZGNvZGVkIHRvIGZhbHNlLiBUbyBiZSByZW1vdmVkLgotICAgIGhh
cmR3YXJlQUdDID0gZmFsc2U7Ci0gICAgaGFyZHdhcmVOUyA9IGlzTm9pc2VTdXBwcmVzc29yU3Vw
cG9ydGVkKCk7Ci0gICAgbG93TGF0ZW5jeU91dHB1dCA9IGlzTG93TGF0ZW5jeU91dHB1dFN1cHBv
cnRlZCgpOwotICAgIGxvd0xhdGVuY3lJbnB1dCA9IGlzTG93TGF0ZW5jeUlucHV0U3VwcG9ydGVk
KCk7Ci0gICAgcHJvQXVkaW8gPSBpc1Byb0F1ZGlvU3VwcG9ydGVkKCk7Ci0gICAgYUF1ZGlvID0g
aXNBQXVkaW9TdXBwb3J0ZWQoKTsKLSAgICBvdXRwdXRCdWZmZXJTaXplID0gbG93TGF0ZW5jeU91
dHB1dCA/IGdldExvd0xhdGVuY3lPdXRwdXRGcmFtZXNQZXJCdWZmZXIoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0TWluT3V0cHV0RnJhbWVTaXplKHNhbXBs
ZVJhdGUsIG91dHB1dENoYW5uZWxzKTsKLSAgICBpbnB1dEJ1ZmZlclNpemUgPSBsb3dMYXRlbmN5
SW5wdXQgPyBnZXRMb3dMYXRlbmN5SW5wdXRGcmFtZXNQZXJCdWZmZXIoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldE1pbklucHV0RnJhbWVTaXplKHNhbXBsZVJh
dGUsIGlucHV0Q2hhbm5lbHMpOwotICB9Ci0KLSAgLy8gR2V0cyB0aGUgY3VycmVudCBlYXJwaWVj
ZSBzdGF0ZS4KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0VhcnBpZWNlKCkgewotICAgIHJldHVybiBD
b250ZXh0VXRpbHMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0UGFja2FnZU1hbmFnZXIoKS5o
YXNTeXN0ZW1GZWF0dXJlKAotICAgICAgICBQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1RFTEVQSE9O
WSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgbG93LWxhdGVuY3kgYXVkaW8gb3V0cHV0
IGlzIHN1cHBvcnRlZC4KLSAgcHJpdmF0ZSBib29sZWFuIGlzTG93TGF0ZW5jeU91dHB1dFN1cHBv
cnRlZCgpIHsKLSAgICByZXR1cm4gQ29udGV4dFV0aWxzLmdldEFwcGxpY2F0aW9uQ29udGV4dCgp
LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZSgKLSAgICAgICAgUGFja2FnZU1h
bmFnZXIuRkVBVFVSRV9BVURJT19MT1dfTEFURU5DWSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRy
dWUgaWYgbG93LWxhdGVuY3kgYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkLgotICAvLyBUT0RPKGhl
bnJpa2EpOiByZW1vdmUgdGhlIGhhcmRjb2RlZCBmYWxzZSByZXR1cm4gdmFsdWUgd2hlbiBPcGVu
U0wgRVMKLSAgLy8gaW5wdXQgcGVyZm9ybWFuY2UgaGFzIGJlZW4gZXZhbHVhdGVkIGFuZCB0ZXN0
ZWQgbW9yZS4KLSAgcHVibGljIGJvb2xlYW4gaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQoKSB7
Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogaW52ZXN0aWdhdGUgaWYgc29tZSBzb3J0IG9mIGRldmlj
ZSBsaXN0IGlzIG5lZWRlZCBoZXJlCi0gICAgLy8gYXMgd2VsbC4gVGhlIE5ESyBkb2Mgc3RhdGVz
IHRoYXQ6ICJBcyBvZiBBUEkgbGV2ZWwgMjEsIGxvd2VyIGxhdGVuY3kKLSAgICAvLyBhdWRpbyBp
bnB1dCBpcyBzdXBwb3J0ZWQgb24gc2VsZWN0IGRldmljZXMuIFRvIHRha2UgYWR2YW50YWdlIG9m
IHRoaXMKLSAgICAvLyBmZWF0dXJlLCBmaXJzdCBjb25maXJtIHRoYXQgbG93ZXIgbGF0ZW5jeSBv
dXRwdXQgaXMgYXZhaWxhYmxlIi4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49
IDIxICYmIGlzTG93TGF0ZW5jeU91dHB1dFN1cHBvcnRlZCgpOwotICB9Ci0KLSAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBkZXZpY2UgaGFzIHByb2Zlc3Npb25hbCBhdWRpbyBsZXZlbCBvZiBmdW5j
dGlvbmFsaXR5Ci0gIC8vIGFuZCB0aGVyZWZvcmUgc3VwcG9ydHMgdGhlIGxvd2VzdCBwb3NzaWJs
ZSByb3VuZC10cmlwIGxhdGVuY3kuCi0gIHByaXZhdGUgYm9vbGVhbiBpc1Byb0F1ZGlvU3VwcG9y
dGVkKCkgewotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gMjMKLSAgICAgICAg
JiYgQ29udGV4dFV0aWxzLmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2Vy
KCkuaGFzU3lzdGVtRmVhdHVyZSgKLSAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkZFQVRV
UkVfQVVESU9fUFJPKTsKLSAgfQotCi0gIC8vIEFBdWRpbyBpcyBzdXBwb3J0ZWQgb24gQW5kcm9p
byBPcmVvIE1SMSAoQVBJIDI3KSBhbmQgaGlnaGVyLgotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9y
Zy84OTE0KTogY3VycmVudGx5IGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gIHByaXZhdGUgYm9vbGVh
biBpc0FBdWRpb1N1cHBvcnRlZCgpIHsKLSAgICBpZiAoYmxhY2tsaXN0RGV2aWNlRm9yQUF1ZGlv
VXNhZ2UpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJBQXVkaW8gc3VwcG9ydCBpcyBjdXJyZW50
bHkgZGlzYWJsZWQgb24gYWxsIGRldmljZXMhIik7Ci0gICAgfQotICAgIHJldHVybiAhYmxhY2ts
aXN0RGV2aWNlRm9yQUF1ZGlvVXNhZ2UgJiYgQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IDI3Owot
ICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmF0aXZlIG91dHB1dCBzYW1wbGUgcmF0ZSBmb3IgdGhp
cyBkZXZpY2UncyBvdXRwdXQgc3RyZWFtLgotICBwcml2YXRlIGludCBnZXROYXRpdmVPdXRwdXRT
YW1wbGVSYXRlKCkgewotICAgIC8vIE92ZXJyaWRlIHRoaXMgaWYgd2UncmUgcnVubmluZyBvbiBh
biBvbGQgZW11bGF0b3IgaW1hZ2Ugd2hpY2ggb25seQotICAgIC8vIHN1cHBvcnRzIDgga0h6IGFu
ZCBkb2Vzbid0IHN1cHBvcnQgUFJPUEVSVFlfT1VUUFVUX1NBTVBMRV9SQVRFLgotICAgIGlmIChX
ZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkVtdWxhdG9yKCkpIHsKLSAgICAgIExvZ2dpbmcuZChU
QUcsICJSdW5uaW5nIGVtdWxhdG9yLCBvdmVycmlkaW5nIHNhbXBsZSByYXRlIHRvIDgga0h6LiIp
OwotICAgICAgcmV0dXJuIDgwMDA7Ci0gICAgfQotICAgIC8vIERlZmF1bHQgY2FuIGJlIG92ZXJy
aWRlbiBieSBXZWJSdGNBdWRpb1V0aWxzLnNldERlZmF1bHRTYW1wbGVSYXRlSHooKS4KLSAgICAv
LyBJZiBzbywgdXNlIHRoYXQgdmFsdWUgYW5kIHJldHVybiBoZXJlLgotICAgIGlmIChXZWJSdGNB
dWRpb1V0aWxzLmlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuKCkpIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJEZWZhdWx0IHNhbXBsZSByYXRlIGlzIG92ZXJyaWRlbiB0byAiCi0gICAgICAg
ICAgICAgICsgV2ViUnRjQXVkaW9VdGlscy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgKyAiIEh6
Iik7Ci0gICAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6
KCk7Ci0gICAgfQotICAgIC8vIE5vIG92ZXJyaWRlcyBhdmFpbGFibGUuIERlbGl2ZXIgYmVzdCBw
b3NzaWJsZSBlc3RpbWF0ZSBiYXNlZCBvbiBkZWZhdWx0Ci0gICAgLy8gQW5kcm9pZCBBdWRpb01h
bmFnZXIgQVBJcy4KLSAgICBmaW5hbCBpbnQgc2FtcGxlUmF0ZUh6ID0gZ2V0U2FtcGxlUmF0ZUZv
ckFwaUxldmVsKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlNhbXBsZSByYXRlIGlzIHNldCB0byAi
ICsgc2FtcGxlUmF0ZUh6ICsgIiBIeiIpOwotICAgIHJldHVybiBzYW1wbGVSYXRlSHo7Ci0gIH0K
LQotICBwcml2YXRlIGludCBnZXRTYW1wbGVSYXRlRm9yQXBpTGV2ZWwoKSB7Ci0gICAgaWYgKEJ1
aWxkLlZFUlNJT04uU0RLX0lOVCA8IDE3KSB7Ci0gICAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGls
cy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCk7Ci0gICAgfQotICAgIFN0cmluZyBzYW1wbGVSYXRl
U3RyaW5nID0gYXVkaW9NYW5hZ2VyLmdldFByb3BlcnR5KEF1ZGlvTWFuYWdlci5QUk9QRVJUWV9P
VVRQVVRfU0FNUExFX1JBVEUpOwotICAgIHJldHVybiAoc2FtcGxlUmF0ZVN0cmluZyA9PSBudWxs
KSA/IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW50ZWdlci5wYXJzZUludChzYW1wbGVSYXRl
U3RyaW5nKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG5hdGl2ZSBvdXRwdXQgYnVmZmVyIHNp
emUgZm9yIGxvdy1sYXRlbmN5IG91dHB1dCBzdHJlYW1zLgotICBwcml2YXRlIGludCBnZXRMb3dM
YXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCkgewotICAgIGFzc2VydFRydWUoaXNMb3dMYXRl
bmN5T3V0cHV0U3VwcG9ydGVkKCkpOwotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAx
NykgewotICAgICAgcmV0dXJuIERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUjsKLSAgICB9Ci0gICAg
U3RyaW5nIGZyYW1lc1BlckJ1ZmZlciA9Ci0gICAgICAgIGF1ZGlvTWFuYWdlci5nZXRQcm9wZXJ0
eShBdWRpb01hbmFnZXIuUFJPUEVSVFlfT1VUUFVUX0ZSQU1FU19QRVJfQlVGRkVSKTsKLSAgICBy
ZXR1cm4gZnJhbWVzUGVyQnVmZmVyID09IG51bGwgPyBERUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVIg
OiBJbnRlZ2VyLnBhcnNlSW50KGZyYW1lc1BlckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBhbiBhdWRpbyBlZmZlY3QgKEFFQyBvciBOUyku
Ci0gIC8vIEZvdXIgY29uZGl0aW9ucyBtdXN0IGJlIGZ1bGZpbGxlZCBpZiBmdW5jdGlvbnMgYXJl
IHRvIHJldHVybiB0cnVlOgotICAvLyAxKSB0aGUgcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZSBi
dWlsdC1pbiAoSFcpIGVmZmVjdCwKLSAgLy8gMikgZXhwbGljaXQgdXNlIChvdmVycmlkZSkgb2Yg
YSBXZWJSVEMgYmFzZWQgdmVyc2lvbiBtdXN0IG5vdCBiZSBzZXQsCi0gIC8vIDMpIHRoZSBkZXZp
Y2UgbXVzdCBub3QgYmUgYmxhY2tsaXN0ZWQgZm9yIHVzZSBvZiB0aGUgZWZmZWN0LCBhbmQKLSAg
Ly8gNCkgdGhlIFVVSUQgb2YgdGhlIGVmZmVjdCBtdXN0IGJlIGFwcHJvdmVkIChzb21lIFVVSURz
IGNhbiBiZSBleGNsdWRlZCkuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0Vj
aG9DYW5jZWxlclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNh
blVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gIH0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVh
biBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9F
ZmZlY3RzLmNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUg
bWluaW11bSBvdXRwdXQgYnVmZmVyIHNpemUgZm9yIEphdmEgYmFzZWQgYXVkaW8gKEF1ZGlvVHJh
Y2spLgotICAvLyBUaGlzIHNpemUgY2FuIGFsc28gYmUgdXNlZCBmb3IgT3BlblNMIEVTIGltcGxl
bWVudGF0aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mgc3VwcG9ydCBvZiBsb3ctbGF0
ZW5jeSBvdXRwdXQuCi0gIHByaXZhdGUgc3RhdGljIGludCBnZXRNaW5PdXRwdXRGcmFtZVNpemUo
aW50IHNhbXBsZVJhdGVJbkh6LCBpbnQgbnVtQ2hhbm5lbHMpIHsKLSAgICBmaW5hbCBpbnQgYnl0
ZXNQZXJGcmFtZSA9IG51bUNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGZp
bmFsIGludCBjaGFubmVsQ29uZmlnID0KLSAgICAgICAgKG51bUNoYW5uZWxzID09IDEgPyBBdWRp
b0Zvcm1hdC5DSEFOTkVMX09VVF9NT05PIDogQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVP
KTsKLSAgICByZXR1cm4gQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplKAotICAgICAgICAgICAg
ICAgc2FtcGxlUmF0ZUluSHosIGNoYW5uZWxDb25maWcsIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BD
TV8xNkJJVCkKLSAgICAgICAgLyBieXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
aGUgbmF0aXZlIGlucHV0IGJ1ZmZlciBzaXplIGZvciBpbnB1dCBzdHJlYW1zLgotICBwcml2YXRl
IGludCBnZXRMb3dMYXRlbmN5SW5wdXRGcmFtZXNQZXJCdWZmZXIoKSB7Ci0gICAgYXNzZXJ0VHJ1
ZShpc0xvd0xhdGVuY3lJbnB1dFN1cHBvcnRlZCgpKTsKLSAgICByZXR1cm4gZ2V0TG93TGF0ZW5j
eU91dHB1dEZyYW1lc1BlckJ1ZmZlcigpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWluaW11
bSBpbnB1dCBidWZmZXIgc2l6ZSBmb3IgSmF2YSBiYXNlZCBhdWRpbyAoQXVkaW9SZWNvcmQpLgot
ICAvLyBUaGlzIHNpemUgY2FuIGNhbHNvIGJlIHVzZWQgZm9yIE9wZW5TTCBFUyBpbXBsZW1lbnRh
dGlvbnMgb24gZGV2aWNlcyB0aGF0Ci0gIC8vIGxhY2tzIHN1cHBvcnQgb2YgbG93LWxhdGVuY3kg
aW5wdXQuCi0gIHByaXZhdGUgc3RhdGljIGludCBnZXRNaW5JbnB1dEZyYW1lU2l6ZShpbnQgc2Ft
cGxlUmF0ZUluSHosIGludCBudW1DaGFubmVscykgewotICAgIGZpbmFsIGludCBieXRlc1BlckZy
YW1lID0gbnVtQ2hhbm5lbHMgKiAoQklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgZmluYWwgaW50
IGNoYW5uZWxDb25maWcgPQotICAgICAgICAobnVtQ2hhbm5lbHMgPT0gMSA/IEF1ZGlvRm9ybWF0
LkNIQU5ORUxfSU5fTU9OTyA6IEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fU1RFUkVPKTsKLSAgICBy
ZXR1cm4gQXVkaW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAgICAgIHNhbXBs
ZVJhdGVJbkh6LCBjaGFubmVsQ29uZmlnLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQp
Ci0gICAgICAgIC8gYnl0ZXNQZXJGcmFtZTsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2Qgd2hp
Y2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAg
cHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAg
aWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0
ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIG5hdGl2
ZSB2b2lkIG5hdGl2ZUNhY2hlQXVkaW9QYXJhbWV0ZXJzKGludCBzYW1wbGVSYXRlLCBpbnQgb3V0
cHV0Q2hhbm5lbHMsCi0gICAgICBpbnQgaW5wdXRDaGFubmVscywgYm9vbGVhbiBoYXJkd2FyZUFF
QywgYm9vbGVhbiBoYXJkd2FyZUFHQywgYm9vbGVhbiBoYXJkd2FyZU5TLAotICAgICAgYm9vbGVh
biBsb3dMYXRlbmN5T3V0cHV0LCBib29sZWFuIGxvd0xhdGVuY3lJbnB1dCwgYm9vbGVhbiBwcm9B
dWRpbywgYm9vbGVhbiBhQXVkaW8sCi0gICAgICBpbnQgb3V0cHV0QnVmZmVyU2l6ZSwgaW50IGlu
cHV0QnVmZmVyU2l6ZSwgbG9uZyBuYXRpdmVBdWRpb01hbmFnZXIpOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlv
UmVjb3JkLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vlbmdp
bmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzcxMmEzMmM5MGVlZjE1ZTRhNjlmYmY5ZTRiZTVhOTQ5MGIxYzk3My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDQwOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsK
LWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvUmVjb3JkOwotaW1wb3J0IGFuZHJvaWQubWVkaWEu
TWVkaWFSZWNvcmRlci5BdWRpb1NvdXJjZTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1w
b3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlv
bi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLmxhbmcuU3lzdGVtOwotaW1wb3J0IGphdmEubmlvLkJ5
dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuY29u
Y3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5UaHJlYWRVdGlsczsKLQotcHVibGljIGNsYXNzIFdlYlJ0Y0F1ZGlvUmVjb3JkIHsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9SZWNvcmQiOwotCi0gIC8v
IERlZmF1bHQgYXVkaW8gZGF0YSBmb3JtYXQgaXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAv
LyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRlZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IEJJVFNfUEVSX1NBTVBMRSA9IDE2OwotCi0gIC8vIFJlcXVlc3RlZCBz
aXplIG9mIGVhY2ggcmVjb3JkZWQgYnVmZmVyIHByb3ZpZGVkIHRvIHRoZSBjbGllbnQuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBDQUxMQkFDS19CVUZGRVJfU0laRV9NUyA9IDEwOwotCi0g
IC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNhbGxiYWNrcyBwZXIgc2Vjb25kLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19QRVJfU0VDT05EID0gMTAwMCAvIENBTExCQUNLX0JVRkZF
Ul9TSVpFX01TOwotCi0gIC8vIFdlIGFzayBmb3IgYSBuYXRpdmUgYnVmZmVyIHNpemUgb2YgQlVG
RkVSX1NJWkVfRkFDVE9SICogKG1pbmltdW0gcmVxdWlyZWQKLSAgLy8gYnVmZmVyIHNpemUpLiBU
aGUgZXh0cmEgc3BhY2UgaXMgYWxsb2NhdGVkIHRvIGd1YXJkIGFnYWluc3QgZ2xpdGNoZXMgdW5k
ZXIKLSAgLy8gaGlnaCBsb2FkLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSX1NJ
WkVfRkFDVE9SID0gMjsKLQotICAvLyBUaGUgQXVkaW9SZWNvcmRKYXZhVGhyZWFkIGlzIGFsbG93
ZWQgdG8gd2FpdCBmb3Igc3VjY2Vzc2Z1bCBjYWxsIHRvIGpvaW4oKQotICAvLyBidXQgdGhlIHdh
aXQgdGltZXMgb3V0IGFmdGhlciB0aGlzIGFtb3VudCBvZiB0aW1lLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBsb25nIEFVRElPX1JFQ09SRF9USFJFQURfSk9JTl9USU1FT1VUX01TID0gMjAwMDsK
LQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9BVURJT19TT1VSQ0UgPSBnZXRE
ZWZhdWx0QXVkaW9Tb3VyY2UoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGF1ZGlvU291cmNlID0g
REVGQVVMVF9BVURJT19TT1VSQ0U7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZUF1ZGlv
UmVjb3JkOwotCi0gIHByaXZhdGUgQE51bGxhYmxlIFdlYlJ0Y0F1ZGlvRWZmZWN0cyBlZmZlY3Rz
OwotCi0gIHByaXZhdGUgQnl0ZUJ1ZmZlciBieXRlQnVmZmVyOwotCi0gIHByaXZhdGUgQE51bGxh
YmxlIEF1ZGlvUmVjb3JkIGF1ZGlvUmVjb3JkOwotICBwcml2YXRlIEBOdWxsYWJsZSBBdWRpb1Jl
Y29yZFRocmVhZCBhdWRpb1RocmVhZDsKLQotICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29s
ZWFuIG1pY3JvcGhvbmVNdXRlOwotICBwcml2YXRlIGJ5dGVbXSBlbXB0eUJ5dGVzOwotCi0gIC8v
IEF1ZGlvIHJlY29yZGluZyBlcnJvciBoYW5kbGVyIGZ1bmN0aW9ucy4KLSAgcHVibGljIGVudW0g
QXVkaW9SZWNvcmRTdGFydEVycm9yQ29kZSB7Ci0gICAgQVVESU9fUkVDT1JEX1NUQVJUX0VYQ0VQ
VElPTiwKLSAgICBBVURJT19SRUNPUkRfU1RBUlRfU1RBVEVfTUlTTUFUQ0gsCi0gIH0KLQotICBw
dWJsaWMgc3RhdGljIGludGVyZmFjZSBXZWJSdGNBdWRpb1JlY29yZEVycm9yQ2FsbGJhY2sgewot
ICAgIHZvaWQgb25XZWJSdGNBdWRpb1JlY29yZEluaXRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdl
KTsKLSAgICB2b2lkIG9uV2ViUnRjQXVkaW9SZWNvcmRTdGFydEVycm9yKEF1ZGlvUmVjb3JkU3Rh
cnRFcnJvckNvZGUgZXJyb3JDb2RlLCBTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIG9u
V2ViUnRjQXVkaW9SZWNvcmRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgfQotCi0gIHBy
aXZhdGUgc3RhdGljIEBOdWxsYWJsZSBXZWJSdGNBdWRpb1JlY29yZEVycm9yQ2FsbGJhY2sgZXJy
b3JDYWxsYmFjazsKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RXJyb3JDYWxsYmFjayhXZWJS
dGNBdWRpb1JlY29yZEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykgewotICAgIExvZ2dpbmcu
ZChUQUcsICJTZXQgZXJyb3IgY2FsbGJhY2siKTsKLSAgICBXZWJSdGNBdWRpb1JlY29yZC5lcnJv
ckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjazsKLSAgfQotCi0gIC8qKgotICAgKiBDb250YWlucyBh
dWRpbyBzYW1wbGUgaW5mb3JtYXRpb24uIE9iamVjdCBpcyBwYXNzZWQgdXNpbmcge0BsaW5rCi0g
ICAqIFdlYlJ0Y0F1ZGlvUmVjb3JkLldlYlJ0Y0F1ZGlvUmVjb3JkU2FtcGxlc1JlYWR5Q2FsbGJh
Y2t9Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEF1ZGlvU2FtcGxlcyB7Ci0gICAgLyoq
IFNlZSB7QGxpbmsgQXVkaW9SZWNvcmQjZ2V0QXVkaW9Gb3JtYXQoKX0gKi8KLSAgICBwcml2YXRl
IGZpbmFsIGludCBhdWRpb0Zvcm1hdDsKLSAgICAvKiogU2VlIHtAbGluayBBdWRpb1JlY29yZCNn
ZXRDaGFubmVsQ291bnQoKX0gKi8KLSAgICBwcml2YXRlIGZpbmFsIGludCBjaGFubmVsQ291bnQ7
Ci0gICAgLyoqIFNlZSB7QGxpbmsgQXVkaW9SZWNvcmQjZ2V0U2FtcGxlUmF0ZSgpfSAqLwotICAg
IHByaXZhdGUgZmluYWwgaW50IHNhbXBsZVJhdGU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGJ5dGVb
XSBkYXRhOwotCi0gICAgcHJpdmF0ZSBBdWRpb1NhbXBsZXMoQXVkaW9SZWNvcmQgYXVkaW9SZWNv
cmQsIGJ5dGVbXSBkYXRhKSB7Ci0gICAgICB0aGlzLmF1ZGlvRm9ybWF0ID0gYXVkaW9SZWNvcmQu
Z2V0QXVkaW9Gb3JtYXQoKTsKLSAgICAgIHRoaXMuY2hhbm5lbENvdW50ID0gYXVkaW9SZWNvcmQu
Z2V0Q2hhbm5lbENvdW50KCk7Ci0gICAgICB0aGlzLnNhbXBsZVJhdGUgPSBhdWRpb1JlY29yZC5n
ZXRTYW1wbGVSYXRlKCk7Ci0gICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgIH0KLQotICAgIHB1
YmxpYyBpbnQgZ2V0QXVkaW9Gb3JtYXQoKSB7Ci0gICAgICByZXR1cm4gYXVkaW9Gb3JtYXQ7Ci0g
ICAgfQotCi0gICAgcHVibGljIGludCBnZXRDaGFubmVsQ291bnQoKSB7Ci0gICAgICByZXR1cm4g
Y2hhbm5lbENvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0U2FtcGxlUmF0ZSgpIHsK
LSAgICAgIHJldHVybiBzYW1wbGVSYXRlOwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlW10gZ2V0
RGF0YSgpIHsKLSAgICAgIHJldHVybiBkYXRhOwotICAgIH0KLSAgfQotCi0gIC8qKiBDYWxsZWQg
d2hlbiBuZXcgYXVkaW8gc2FtcGxlcyBhcmUgcmVhZHkuIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0
IGZvciBkZWJ1ZyBwdXJwb3NlcyAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBXZWJSdGNB
dWRpb1JlY29yZFNhbXBsZXNSZWFkeUNhbGxiYWNrIHsKLSAgICB2b2lkIG9uV2ViUnRjQXVkaW9S
ZWNvcmRTYW1wbGVzUmVhZHkoQXVkaW9TYW1wbGVzIHNhbXBsZXMpOwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgQE51bGxhYmxlIFdlYlJ0Y0F1ZGlvUmVjb3JkU2FtcGxlc1JlYWR5Q2FsbGJhY2sg
YXVkaW9TYW1wbGVzUmVhZHlDYWxsYmFjazsKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0T25B
dWRpb1NhbXBsZXNSZWFkeShXZWJSdGNBdWRpb1JlY29yZFNhbXBsZXNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrKSB7Ci0gICAgYXVkaW9TYW1wbGVzUmVhZHlDYWxsYmFjayA9IGNhbGxiYWNrOwotICB9
Ci0KLSAgLyoqCi0gICAqIEF1ZGlvIHRocmVhZCB3aGljaCBrZWVwcyBjYWxsaW5nIEJ5dGVCdWZm
ZXIucmVhZCgpIHdhaXRpbmcgZm9yIGF1ZGlvCi0gICAqIHRvIGJlIHJlY29yZGVkLiBGZWVkcyBy
ZWNvcmRlZCBkYXRhIHRvIHRoZSBuYXRpdmUgY291bnRlcnBhcnQgYXMgYQotICAgKiBwZXJpb2Rp
YyBzZXF1ZW5jZSBvZiBjYWxsYmFja3MgdXNpbmcgRGF0YUlzUmVjb3JkZWQoKS4KLSAgICogVGhp
cyB0aHJlYWQgdXNlcyBhIFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyBwcmlv
cml0eS4KLSAgICovCi0gIHByaXZhdGUgY2xhc3MgQXVkaW9SZWNvcmRUaHJlYWQgZXh0ZW5kcyBU
aHJlYWQgewotICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBrZWVwQWxpdmUgPSB0cnVlOwot
Ci0gICAgcHVibGljIEF1ZGlvUmVjb3JkVGhyZWFkKFN0cmluZyBuYW1lKSB7Ci0gICAgICBzdXBl
cihuYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBUT0RPKHRpdG92YXJ0ZW0pIG1ha2UgY29ycmVjdCBm
aXggZHVyaW5nIHdlYnJ0Yzo5MTc1Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoIkJ5dGVCdWZmZXJC
YWNraW5nQXJyYXkiKQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgIFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJH
RU5UX0FVRElPKTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1JlY29yZFRocmVhZCIgKyBX
ZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgICBhc3NlcnRUcnVlKGF1ZGlv
UmVjb3JkLmdldFJlY29yZGluZ1N0YXRlKCkgPT0gQXVkaW9SZWNvcmQuUkVDT1JEU1RBVEVfUkVD
T1JESU5HKTsKLQotICAgICAgbG9uZyBsYXN0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAg
ICAgd2hpbGUgKGtlZXBBbGl2ZSkgewotICAgICAgICBpbnQgYnl0ZXNSZWFkID0gYXVkaW9SZWNv
cmQucmVhZChieXRlQnVmZmVyLCBieXRlQnVmZmVyLmNhcGFjaXR5KCkpOwotICAgICAgICBpZiAo
Ynl0ZXNSZWFkID09IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgewotICAgICAgICAgIGlmIChtaWNy
b3Bob25lTXV0ZSkgewotICAgICAgICAgICAgYnl0ZUJ1ZmZlci5jbGVhcigpOwotICAgICAgICAg
ICAgYnl0ZUJ1ZmZlci5wdXQoZW1wdHlCeXRlcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8v
IEl0J3MgcG9zc2libGUgd2UndmUgYmVlbiBzaHV0IGRvd24gZHVyaW5nIHRoZSByZWFkLCBhbmQg
c3RvcFJlY29yZGluZygpIHRyaWVkIGFuZAotICAgICAgICAgIC8vIGZhaWxlZCB0byBqb2luIHRo
aXMgdGhyZWFkLiBUbyBiZSBhIGJpdCBzYWZlciwgdHJ5IHRvIGF2b2lkIGNhbGxpbmcgYW55IG5h
dGl2ZSBtZXRob2RzCi0gICAgICAgICAgLy8gaW4gY2FzZSB0aGV5J3ZlIGJlZW4gdW5yZWdpc3Rl
cmVkIGFmdGVyIHN0b3BSZWNvcmRpbmcoKSByZXR1cm5lZC4KLSAgICAgICAgICBpZiAoa2VlcEFs
aXZlKSB7Ci0gICAgICAgICAgICBuYXRpdmVEYXRhSXNSZWNvcmRlZChieXRlc1JlYWQsIG5hdGl2
ZUF1ZGlvUmVjb3JkKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGF1ZGlvU2FtcGxlc1Jl
YWR5Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gQ29weSB0aGUgZW50aXJlIGJ5
dGUgYnVmZmVyIGFycmF5LiAgQXNzdW1lIHRoYXQgdGhlIHN0YXJ0IG9mIHRoZSBieXRlQnVmZmVy
IGlzCi0gICAgICAgICAgICAvLyBhdCBpbmRleCAwLgotICAgICAgICAgICAgYnl0ZVtdIGRhdGEg
PSBBcnJheXMuY29weU9mKGJ5dGVCdWZmZXIuYXJyYXkoKSwgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgp
KTsKLSAgICAgICAgICAgIGF1ZGlvU2FtcGxlc1JlYWR5Q2FsbGJhY2sub25XZWJSdGNBdWRpb1Jl
Y29yZFNhbXBsZXNSZWFkeSgKLSAgICAgICAgICAgICAgICBuZXcgQXVkaW9TYW1wbGVzKGF1ZGlv
UmVjb3JkLCBkYXRhKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiQXVkaW9SZWNvcmQucmVhZCBmYWlsZWQ6ICIgKyBieXRl
c1JlYWQ7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAg
ICBpZiAoYnl0ZXNSZWFkID09IEF1ZGlvUmVjb3JkLkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7
Ci0gICAgICAgICAgICBrZWVwQWxpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgIHJlcG9ydFdlYlJ0
Y0F1ZGlvUmVjb3JkRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgbG9uZyBub3dUaW1lID0gU3lzdGVtLm5h
bm9UaW1lKCk7Ci0gICAgICAgICAgbG9uZyBkdXJhdGlvbkluTXMgPSBUaW1lVW5pdC5OQU5PU0VD
T05EUy50b01pbGxpcygobm93VGltZSAtIGxhc3RUaW1lKSk7Ci0gICAgICAgICAgbGFzdFRpbWUg
PSBub3dUaW1lOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJieXRlc1JlYWRbIiArIGR1cmF0
aW9uSW5NcyArICJdICIgKyBieXRlc1JlYWQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAg
IHRyeSB7Ci0gICAgICAgIGlmIChhdWRpb1JlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgYXVk
aW9SZWNvcmQuc3RvcCgpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVF
eGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RvcCBm
YWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3Rv
cHMgdGhlIGlubmVyIHRocmVhZCBsb29wIGFuZCBhbHNvIGNhbGxzIEF1ZGlvUmVjb3JkLnN0b3Ao
KS4KLSAgICAvLyBEb2VzIG5vdCBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQuCi0gICAgcHVibGlj
IHZvaWQgc3RvcFRocmVhZCgpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJzdG9wVGhyZWFkIik7
Ci0gICAgICBrZWVwQWxpdmUgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBXZWJSdGNBdWRpb1Jl
Y29yZChsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImN0b3Ii
ICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIHRoaXMubmF0aXZlQXVk
aW9SZWNvcmQgPSBuYXRpdmVBdWRpb1JlY29yZDsKLSAgICBpZiAoREVCVUcpIHsKLSAgICAgIFdl
YlJ0Y0F1ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICAgIH0KLSAgICBlZmZlY3RzID0g
V2ViUnRjQXVkaW9FZmZlY3RzLmNyZWF0ZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGVu
YWJsZUJ1aWx0SW5BRUMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZW5h
YmxlQnVpbHRJbkFFQygiICsgZW5hYmxlICsgJyknKTsKLSAgICBpZiAoZWZmZWN0cyA9PSBudWxs
KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQnVpbHQtaW4gQUVDIGlzIG5vdCBzdXBwb3J0ZWQg
b24gdGhpcyBwbGF0Zm9ybSIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gZWZmZWN0cy5zZXRBRUMoZW5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBlbmFi
bGVCdWlsdEluTlMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZW5hYmxl
QnVpbHRJbk5TKCIgKyBlbmFibGUgKyAnKScpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJCdWlsdC1pbiBOUyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRo
aXMgcGxhdGZvcm0iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVm
ZmVjdHMuc2V0TlMoZW5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGluaXRSZWNvcmRpbmco
aW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIExvZ2dpbmcuZChUQUcsICJpbml0
UmVjb3JkaW5nKHNhbXBsZVJhdGU9IiArIHNhbXBsZVJhdGUgKyAiLCBjaGFubmVscz0iICsgY2hh
bm5lbHMgKyAiKSIpOwotICAgIGlmIChhdWRpb1JlY29yZCAhPSBudWxsKSB7Ci0gICAgICByZXBv
cnRXZWJSdGNBdWRpb1JlY29yZEluaXRFcnJvcigiSW5pdFJlY29yZGluZyBjYWxsZWQgdHdpY2Ug
d2l0aG91dCBTdG9wUmVjb3JkaW5nLiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBm
aW5hbCBpbnQgYnl0ZXNQZXJGcmFtZSA9IGNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgp
OwotICAgIGZpbmFsIGludCBmcmFtZXNQZXJCdWZmZXIgPSBzYW1wbGVSYXRlIC8gQlVGRkVSU19Q
RVJfU0VDT05EOwotICAgIGJ5dGVCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGJ5
dGVzUGVyRnJhbWUgKiBmcmFtZXNQZXJCdWZmZXIpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRl
QnVmZmVyLmNhcGFjaXR5OiAiICsgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5
dGVzID0gbmV3IGJ5dGVbYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhh
biBwYXNzaW5nIHRoZSBCeXRlQnVmZmVyIHdpdGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwot
ICAgIC8vIHRoZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykg
d2Ugc2ltcGx5IGhhdmUgdGhlCi0gICAgLy8gdGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRk
cmVzcyB0byB0aGUgbWVtb3J5IG9uY2UuCi0gICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRy
ZXNzKGJ5dGVCdWZmZXIsIG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLQotICAgIC8vIEdldCB0aGUgbWlu
aW11bSBidWZmZXIgc2l6ZSByZXF1aXJlZCBmb3IgdGhlIHN1Y2Nlc3NmdWwgY3JlYXRpb24gb2YK
LSAgICAvLyBhbiBBdWRpb1JlY29yZCBvYmplY3QsIGluIGJ5dGUgdW5pdHMuCi0gICAgLy8gTm90
ZSB0aGF0IHRoaXMgc2l6ZSBkb2Vzbid0IGd1YXJhbnRlZSBhIHNtb290aCByZWNvcmRpbmcgdW5k
ZXIgbG9hZC4KLSAgICBmaW5hbCBpbnQgY2hhbm5lbENvbmZpZyA9IGNoYW5uZWxDb3VudFRvQ29u
ZmlndXJhdGlvbihjaGFubmVscyk7Ci0gICAgaW50IG1pbkJ1ZmZlclNpemUgPQotICAgICAgICBB
dWRpb1JlY29yZC5nZXRNaW5CdWZmZXJTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxDb25maWcsIEF1
ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCk7Ci0gICAgaWYgKG1pbkJ1ZmZlclNpemUgPT0g
QXVkaW9SZWNvcmQuRVJST1IgfHwgbWluQnVmZmVyU2l6ZSA9PSBBdWRpb1JlY29yZC5FUlJPUl9C
QURfVkFMVUUpIHsKLSAgICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvUmVjb3JkSW5pdEVycm9yKCJBdWRp
b1JlY29yZC5nZXRNaW5CdWZmZXJTaXplIGZhaWxlZDogIiArIG1pbkJ1ZmZlclNpemUpOwotICAg
ICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQuZ2V0
TWluQnVmZmVyU2l6ZTogIiArIG1pbkJ1ZmZlclNpemUpOwotCi0gICAgLy8gVXNlIGEgbGFyZ2Vy
IGJ1ZmZlciBzaXplIHRoYW4gdGhlIG1pbmltdW0gcmVxdWlyZWQgd2hlbiBjcmVhdGluZyB0aGUK
LSAgICAvLyBBdWRpb1JlY29yZCBpbnN0YW5jZSB0byBlbnN1cmUgc21vb3RoIHJlY29yZGluZyB1
bmRlciBsb2FkLiBJdCBoYXMgYmVlbgotICAgIC8vIHZlcmlmaWVkIHRoYXQgaXQgZG9lcyBub3Qg
aW5jcmVhc2UgdGhlIGFjdHVhbCByZWNvcmRpbmcgbGF0ZW5jeS4KLSAgICBpbnQgYnVmZmVyU2l6
ZUluQnl0ZXMgPSBNYXRoLm1heChCVUZGRVJfU0laRV9GQUNUT1IgKiBtaW5CdWZmZXJTaXplLCBi
eXRlQnVmZmVyLmNhcGFjaXR5KCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJidWZmZXJTaXplSW5C
eXRlczogIiArIGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICB0cnkgewotICAgICAgYXVkaW9SZWNv
cmQgPSBuZXcgQXVkaW9SZWNvcmQoYXVkaW9Tb3VyY2UsIHNhbXBsZVJhdGUsIGNoYW5uZWxDb25m
aWcsCi0gICAgICAgICAgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBidWZmZXJTaXpl
SW5CeXRlcyk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAg
ICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvUmVjb3JkSW5pdEVycm9yKCJBdWRpb1JlY29yZCBjdG9yIGVy
cm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmVsZWFzZUF1ZGlvUmVzb3VyY2VzKCk7
Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZCA9PSBudWxsIHx8
IGF1ZGlvUmVjb3JkLmdldFN0YXRlKCkgIT0gQXVkaW9SZWNvcmQuU1RBVEVfSU5JVElBTElaRUQp
IHsKLSAgICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvUmVjb3JkSW5pdEVycm9yKCJGYWlsZWQgdG8gY3Jl
YXRlIGEgbmV3IEF1ZGlvUmVjb3JkIGluc3RhbmNlIik7Ci0gICAgICByZWxlYXNlQXVkaW9SZXNv
dXJjZXMoKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKGVmZmVjdHMgIT0gbnVs
bCkgewotICAgICAgZWZmZWN0cy5lbmFibGUoYXVkaW9SZWNvcmQuZ2V0QXVkaW9TZXNzaW9uSWQo
KSk7Ci0gICAgfQotICAgIGxvZ01haW5QYXJhbWV0ZXJzKCk7Ci0gICAgbG9nTWFpblBhcmFtZXRl
cnNFeHRlbmRlZCgpOwotICAgIHJldHVybiBmcmFtZXNQZXJCdWZmZXI7Ci0gIH0KLQotICBwcml2
YXRlIGJvb2xlYW4gc3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0
UmVjb3JkaW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZCAhPSBudWxsKTsKLSAgICBh
c3NlcnRUcnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIHRyeSB7Ci0gICAgICBhdWRpb1Jl
Y29yZC5zdGFydFJlY29yZGluZygpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlv
biBlKSB7Ci0gICAgICByZXBvcnRXZWJSdGNBdWRpb1JlY29yZFN0YXJ0RXJyb3IoQXVkaW9SZWNv
cmRTdGFydEVycm9yQ29kZS5BVURJT19SRUNPUkRfU1RBUlRfRVhDRVBUSU9OLAotICAgICAgICAg
ICJBdWRpb1JlY29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZC5nZXRSZWNv
cmRpbmdTdGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlJFQ09SRFNUQVRFX1JFQ09SRElORykgewotICAg
ICAgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRTdGFydEVycm9yKAotICAgICAgICAgIEF1ZGlvUmVj
b3JkU3RhcnRFcnJvckNvZGUuQVVESU9fUkVDT1JEX1NUQVJUX1NUQVRFX01JU01BVENILAotICAg
ICAgICAgICJBdWRpb1JlY29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQgLSBpbmNvcnJlY3Qgc3Rh
dGUgOiIKLSAgICAgICAgICArIGF1ZGlvUmVjb3JkLmdldFJlY29yZGluZ1N0YXRlKCkpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb1RocmVhZCA9IG5ldyBBdWRpb1JlY29y
ZFRocmVhZCgiQXVkaW9SZWNvcmRKYXZhVGhyZWFkIik7Ci0gICAgYXVkaW9UaHJlYWQuc3RhcnQo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzdG9wUmVjb3Jk
aW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wUmVjb3JkaW5nIik7Ci0gICAgYXNzZXJ0
VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsKLSAgICBhdWRpb1RocmVhZC5zdG9wVGhyZWFkKCk7
Ci0gICAgaWYgKCFUaHJlYWRVdGlscy5qb2luVW5pbnRlcnJ1cHRpYmx5KGF1ZGlvVGhyZWFkLCBB
VURJT19SRUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUykpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJKb2luIG9mIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCB0aW1lZCBvdXQiKTsKLSAgICAgIFdl
YlJ0Y0F1ZGlvVXRpbHMubG9nQXVkaW9TdGF0ZShUQUcpOwotICAgIH0KLSAgICBhdWRpb1RocmVh
ZCA9IG51bGw7Ci0gICAgaWYgKGVmZmVjdHMgIT0gbnVsbCkgewotICAgICAgZWZmZWN0cy5yZWxl
YXNlKCk7Ci0gICAgfQotICAgIHJlbGVhc2VBdWRpb1Jlc291cmNlcygpOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzKCkgewotICAgIExv
Z2dpbmcuZChUQUcsICJBdWRpb1JlY29yZDogIgotICAgICAgICAgICAgKyAic2Vzc2lvbiBJRDog
IiArIGF1ZGlvUmVjb3JkLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0gICAgICAgICAgICAr
ICJjaGFubmVsczogIiArIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb3VudCgpICsgIiwgIgotICAg
ICAgICAgICAgKyAic2FtcGxlIHJhdGU6ICIgKyBhdWRpb1JlY29yZC5nZXRTYW1wbGVSYXRlKCkp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKSB7Ci0g
ICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyMykgewotICAgICAgTG9nZ2luZy5kKFRB
RywgIkF1ZGlvUmVjb3JkOiAiCi0gICAgICAgICAgICAgIC8vIFRoZSBmcmFtZSBjb3VudCBvZiB0
aGUgbmF0aXZlIEF1ZGlvUmVjb3JkIGJ1ZmZlci4KLSAgICAgICAgICAgICAgKyAiYnVmZmVyIHNp
emUgaW4gZnJhbWVzOiAiICsgYXVkaW9SZWNvcmQuZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKCkpOwot
ICAgIH0KLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlv
biAgd2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBh
c3NlcnRUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAg
ICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRy
dWUiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGludCBjaGFubmVsQ291bnRUb0NvbmZpZ3Vy
YXRpb24oaW50IGNoYW5uZWxzKSB7Ci0gICAgcmV0dXJuIChjaGFubmVscyA9PSAxID8gQXVkaW9G
b3JtYXQuQ0hBTk5FTF9JTl9NT05PIDogQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9TVEVSRU8pOwot
ICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYWNoZURpcmVjdEJ1ZmZlckFkZHJl
c3MoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLQotICBw
cml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZURhdGFJc1JlY29yZGVkKGludCBieXRlcywgbG9uZyBu
YXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVk
TWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldEF1ZGlv
U291cmNlKGludCBzb3VyY2UpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAiQXVkaW8gc291cmNlIGlz
IGNoYW5nZWQgZnJvbTogIiArIGF1ZGlvU291cmNlCi0gICAgICAgICAgICArICIgdG8gIiArIHNv
dXJjZSk7Ci0gICAgYXVkaW9Tb3VyY2UgPSBzb3VyY2U7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBpbnQgZ2V0RGVmYXVsdEF1ZGlvU291cmNlKCkgewotICAgIHJldHVybiBBdWRpb1NvdXJjZS5W
T0lDRV9DT01NVU5JQ0FUSU9OOwotICB9Ci0KLSAgLy8gU2V0cyBhbGwgcmVjb3JkZWQgc2FtcGxl
cyB0byB6ZXJvIGlmIHxtdXRlfCBpcyB0cnVlLCBpLmUuLCBlbnN1cmVzIHRoYXQKLSAgLy8gdGhl
IG1pY3JvcGhvbmUgaXMgbXV0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRNaWNyb3Bob25l
TXV0ZShib29sZWFuIG11dGUpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAic2V0TWljcm9waG9uZU11
dGUoIiArIG11dGUgKyAiKSIpOwotICAgIG1pY3JvcGhvbmVNdXRlID0gbXV0ZTsKLSAgfQotCi0g
IC8vIFJlbGVhc2VzIHRoZSBuYXRpdmUgQXVkaW9SZWNvcmQgcmVzb3VyY2VzLgotICBwcml2YXRl
IHZvaWQgcmVsZWFzZUF1ZGlvUmVzb3VyY2VzKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJyZWxl
YXNlQXVkaW9SZXNvdXJjZXMiKTsKLSAgICBpZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkgewotICAg
ICAgYXVkaW9SZWNvcmQucmVsZWFzZSgpOwotICAgICAgYXVkaW9SZWNvcmQgPSBudWxsOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRXZWJSdGNBdWRpb1JlY29yZEluaXRFcnJv
cihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nZ2luZy5lKFRBRywgIkluaXQgcmVjb3Jk
aW5nIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0F1
ZGlvU3RhdGUoVEFHKTsKLSAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBl
cnJvckNhbGxiYWNrLm9uV2ViUnRjQXVkaW9SZWNvcmRJbml0RXJyb3IoZXJyb3JNZXNzYWdlKTsK
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRTdGFy
dEVycm9yKAotICAgICAgQXVkaW9SZWNvcmRTdGFydEVycm9yQ29kZSBlcnJvckNvZGUsIFN0cmlu
ZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2dnaW5nLmUoVEFHLCAiU3RhcnQgcmVjb3JkaW5nIGVy
cm9yOiAiICsgZXJyb3JDb2RlICsgIi4gIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgV2ViUnRjQXVk
aW9VdGlscy5sb2dBdWRpb1N0YXRlKFRBRyk7Ci0gICAgaWYgKGVycm9yQ2FsbGJhY2sgIT0gbnVs
bCkgewotICAgICAgZXJyb3JDYWxsYmFjay5vbldlYlJ0Y0F1ZGlvUmVjb3JkU3RhcnRFcnJvcihl
cnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJl
cG9ydFdlYlJ0Y0F1ZGlvUmVjb3JkRXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExv
Z2dpbmcuZShUQUcsICJSdW4tdGltZSByZWNvcmRpbmcgZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2Up
OwotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMubG9nQXVkaW9TdGF0ZShUQUcpOwotICAgIGlmIChlcnJv
ckNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGVycm9yQ2FsbGJhY2sub25XZWJSdGNBdWRpb1Jl
Y29yZEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFj
ay5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dl
YlJ0Y0F1ZGlvVHJhY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U2YWQ1
YWNmNGY2NWYzYjhjNmY3MjlmOWZiMTExMmViMzM2ZmZkNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFjay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
NTMzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMu
dm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1w
b3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9B
dHRyaWJ1dGVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3JtYXQ7Ci1pbXBvcnQgYW5k
cm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1RyYWNr
OwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwot
aW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEu
bGFuZy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBvcmcud2Vi
cnRjLkNvbnRleHRVdGlsczsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5UaHJlYWRVdGlsczsKLQotcHVibGljIGNsYXNzIFdlYlJ0Y0F1ZGlvVHJhY2sgewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb1RyYWNrIjsKLQotICAvLyBE
ZWZhdWx0IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8g
R3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1ZXN0ZWQgc2l6
ZSBvZiBlYWNoIHJlY29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50LgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAxMDsKLQotICAv
LyBBdmVyYWdlIG51bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFDS19CVUZGRVJf
U0laRV9NUzsKLQotICAvLyBUaGUgQXVkaW9UcmFja1RocmVhZCBpcyBhbGxvd2VkIHRvIHdhaXQg
Zm9yIHN1Y2Nlc3NmdWwgY2FsbCB0byBqb2luKCkKLSAgLy8gYnV0IHRoZSB3YWl0IHRpbWVzIG91
dCBhZnRoZXIgdGhpcyBhbW91bnQgb2YgdGltZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9u
ZyBBVURJT19UUkFDS19USFJFQURfSk9JTl9USU1FT1VUX01TID0gMjAwMDsKLQotICAvLyBCeSBk
ZWZhdWx0LCBXZWJSVEMgY3JlYXRlcyBhdWRpbyB0cmFja3Mgd2l0aCBhIHVzYWdlIGF0dHJpYnV0
ZQotICAvLyBjb3JyZXNwb25kaW5nIHRvIHZvaWNlIGNvbW11bmljYXRpb25zLCBzdWNoIGFzIHRl
bGVwaG9ueSBvciBWb0lQLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9VU0FH
RSA9IGdldERlZmF1bHRVc2FnZUF0dHJpYnV0ZSgpOwotICBwcml2YXRlIHN0YXRpYyBpbnQgdXNh
Z2VBdHRyaWJ1dGUgPSBERUZBVUxUX1VTQUdFOwotCi0gIC8vIFRoaXMgbWV0aG9kIG92ZXJyaWRl
cyB0aGUgZGVmYXVsdCB1c2FnZSBhdHRyaWJ1dGUgYW5kIGFsbG93cyB0aGUgdXNlcgotICAvLyB0
byBzZXQgaXQgdG8gc29tZXRoaW5nIGVsc2UgdGhhbiBBdWRpb0F0dHJpYnV0ZXMuVVNBR0VfVk9J
Q0VfQ09NTVVOSUNBVElPTi4KLSAgLy8gTk9URTogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIG1v
c3QgbGlrZWx5IGJyZWFrIGV4aXN0aW5nIFZvSVAgdHVuaW5nLgotICAvLyBUT0RPKGJ1Z3Mud2Vi
cnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Np
b24uCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAg
cHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRBdWRpb1RyYWNrVXNhZ2VBdHRyaWJ1
dGUoaW50IHVzYWdlKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIkRlZmF1bHQgdXNhZ2UgYXR0cmli
dXRlIGlzIGNoYW5nZWQgZnJvbTogIgotICAgICAgICArIERFRkFVTFRfVVNBR0UgKyAiIHRvICIg
KyB1c2FnZSk7Ci0gICAgdXNhZ2VBdHRyaWJ1dGUgPSB1c2FnZTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIGludCBnZXREZWZhdWx0VXNhZ2VBdHRyaWJ1dGUoKSB7Ci0gICAgaWYgKEJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA+PSAyMSkgewotICAgICAgcmV0dXJuIEF1ZGlvQXR0cmlidXRlcy5VU0FH
RV9WT0lDRV9DT01NVU5JQ0FUSU9OOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBOb3QgdXNlZCBv
biBTREtzIGxvd2VyIHRoYW4gMjEuCi0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlQXVkaW9UcmFjazsKLSAgcHJpdmF0ZSBmaW5hbCBBdWRp
b01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICBwcml2YXRlIGZpbmFsIFRocmVhZFV0aWxzLlRocmVh
ZENoZWNrZXIgdGhyZWFkQ2hlY2tlciA9IG5ldyBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyKCk7
Ci0KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGJ5dGVCdWZmZXI7Ci0KLSAgcHJpdmF0ZSBATnVsbGFi
bGUgQXVkaW9UcmFjayBhdWRpb1RyYWNrOwotICBwcml2YXRlIEBOdWxsYWJsZSBBdWRpb1RyYWNr
VGhyZWFkIGF1ZGlvVGhyZWFkOwotCi0gIC8vIFNhbXBsZXMgdG8gYmUgcGxheWVkIGFyZSByZXBs
YWNlZCBieSB6ZXJvcyBpZiB8c3BlYWtlck11dGV8IGlzIHNldCB0byB0cnVlLgotICAvLyBDYW4g
YmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3BlYWtlciBpcyBmdWxseSBtdXRlZC4KLSAgcHJp
dmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBzcGVha2VyTXV0ZTsKLSAgcHJpdmF0ZSBieXRl
W10gZW1wdHlCeXRlczsKLQotICAvLyBBdWRpbyBwbGF5b3V0L3RyYWNrIGVycm9yIGhhbmRsZXIg
ZnVuY3Rpb25zLgotICBwdWJsaWMgZW51bSBBdWRpb1RyYWNrU3RhcnRFcnJvckNvZGUgewotICAg
IEFVRElPX1RSQUNLX1NUQVJUX0VYQ0VQVElPTiwKLSAgICBBVURJT19UUkFDS19TVEFSVF9TVEFU
RV9NSVNNQVRDSCwKLSAgfQotCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJm
YWNlIFdlYlJ0Y0F1ZGlvVHJhY2tFcnJvckNhbGxiYWNrIHsKLSAgICB2b2lkIG9uV2ViUnRjQXVk
aW9UcmFja0luaXRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIG9uV2ViUnRj
QXVkaW9UcmFja1N0YXJ0RXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSk7Ci0gICAgdm9pZCBvbldl
YlJ0Y0F1ZGlvVHJhY2tFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgfQotCi0gIC8vIFRP
RE8oaGVucmlrYSk6IHVwZ3JhZGUgYWxsIGNsaWVudHMgdG8gdXNlIHRoaXMgbmV3IGludGVyZmFj
ZSBpbnN0ZWFkLgotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBFcnJvckNhbGxiYWNrIHsKLSAg
ICB2b2lkIG9uV2ViUnRjQXVkaW9UcmFja0luaXRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsK
LSAgICB2b2lkIG9uV2ViUnRjQXVkaW9UcmFja1N0YXJ0RXJyb3IoQXVkaW9UcmFja1N0YXJ0RXJy
b3JDb2RlIGVycm9yQ29kZSwgU3RyaW5nIGVycm9yTWVzc2FnZSk7Ci0gICAgdm9pZCBvbldlYlJ0
Y0F1ZGlvVHJhY2tFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIEBOdWxsYWJsZSBXZWJSdGNBdWRpb1RyYWNrRXJyb3JDYWxsYmFjayBlcnJvckNhbGxi
YWNrT2xkOwotICBwcml2YXRlIHN0YXRpYyBATnVsbGFibGUgRXJyb3JDYWxsYmFjayBlcnJvckNh
bGxiYWNrOwotCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFcnJvckNh
bGxiYWNrKFdlYlJ0Y0F1ZGlvVHJhY2tFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiU2V0IGVycm9yIGNhbGxiYWNrIChkZXByZWNhdGVkIik7Ci0gICAg
V2ViUnRjQXVkaW9UcmFjay5lcnJvckNhbGxiYWNrT2xkID0gZXJyb3JDYWxsYmFjazsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFcnJvckNhbGxiYWNrKEVycm9yQ2FsbGJhY2sgZXJy
b3JDYWxsYmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJTZXQgZXh0ZW5kZWQgZXJyb3IgY2Fs
bGJhY2siKTsKLSAgICBXZWJSdGNBdWRpb1RyYWNrLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxi
YWNrOwotICB9Ci0KLSAgLyoqCi0gICAqIEF1ZGlvIHRocmVhZCB3aGljaCBrZWVwcyBjYWxsaW5n
IEF1ZGlvVHJhY2sud3JpdGUoKSB0byBzdHJlYW0gYXVkaW8uCi0gICAqIERhdGEgaXMgcGVyaW9k
aWNhbGx5IGFjcXVpcmVkIGZyb20gdGhlIG5hdGl2ZSBXZWJSVEMgbGF5ZXIgdXNpbmcgdGhlCi0g
ICAqIG5hdGl2ZUdldFBsYXlvdXREYXRhIGNhbGxiYWNrIGZ1bmN0aW9uLgotICAgKiBUaGlzIHRo
cmVhZCB1c2VzIGEgUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJHRU5UX0FVRElPIHByaW9yaXR5
LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBBdWRpb1RyYWNrVGhyZWFkIGV4dGVuZHMgVGhyZWFk
IHsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4ga2VlcEFsaXZlID0gdHJ1ZTsKLQotICAg
IHB1YmxpYyBBdWRpb1RyYWNrVGhyZWFkKFN0cmluZyBuYW1lKSB7Ci0gICAgICBzdXBlcihuYW1l
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICBQcm9jZXNzLnNldFRocmVhZFByaW9yaXR5KFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX1VSR0VO
VF9BVURJTyk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFja1RocmVhZCIgKyBXZWJS
dGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgICBhc3NlcnRUcnVlKGF1ZGlvVHJh
Y2suZ2V0UGxheVN0YXRlKCkgPT0gQXVkaW9UcmFjay5QTEFZU1RBVEVfUExBWUlORyk7Ci0KLSAg
ICAgIC8vIEZpeGVkIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCAxMG1zIGJsb2NrIG9mIGF1ZGlvIGRh
dGEgdGhhdCB3ZSBhc2sgZm9yCi0gICAgICAvLyB1c2luZyBjYWxsYmFja3MgdG8gdGhlIG5hdGl2
ZSBXZWJSVEMgY2xpZW50LgotICAgICAgZmluYWwgaW50IHNpemVJbkJ5dGVzID0gYnl0ZUJ1ZmZl
ci5jYXBhY2l0eSgpOwotCi0gICAgICB3aGlsZSAoa2VlcEFsaXZlKSB7Ci0gICAgICAgIC8vIEdl
dCAxMG1zIG9mIFBDTSBkYXRhIGZyb20gdGhlIG5hdGl2ZSBXZWJSVEMgY2xpZW50LiBBdWRpbyBk
YXRhIGlzCi0gICAgICAgIC8vIHdyaXR0ZW4gaW50byB0aGUgY29tbW9uIEJ5dGVCdWZmZXIgdXNp
bmcgdGhlIGFkZHJlc3MgdGhhdCB3YXMKLSAgICAgICAgLy8gY2FjaGVkIGF0IGNvbnN0cnVjdGlv
bi4KLSAgICAgICAgbmF0aXZlR2V0UGxheW91dERhdGEoc2l6ZUluQnl0ZXMsIG5hdGl2ZUF1ZGlv
VHJhY2spOwotICAgICAgICAvLyBXcml0ZSBkYXRhIHVudGlsIGFsbCBkYXRhIGhhcyBiZWVuIHdy
aXR0ZW4gdG8gdGhlIGF1ZGlvIHNpbmsuCi0gICAgICAgIC8vIFVwb24gcmV0dXJuLCB0aGUgYnVm
ZmVyIHBvc2l0aW9uIHdpbGwgaGF2ZSBiZWVuIGFkdmFuY2VkIHRvIHJlZmxlY3QKLSAgICAgICAg
Ly8gdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRo
ZSBBdWRpb1RyYWNrLgotICAgICAgICBhc3NlcnRUcnVlKHNpemVJbkJ5dGVzIDw9IGJ5dGVCdWZm
ZXIucmVtYWluaW5nKCkpOwotICAgICAgICBpZiAoc3BlYWtlck11dGUpIHsKLSAgICAgICAgICBi
eXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5wdXQoZW1wdHlCeXRlcyk7
Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5wb3NpdGlvbigwKTsKLSAgICAgICAgfQotICAgICAgICBp
bnQgYnl0ZXNXcml0dGVuID0gd3JpdGVCeXRlcyhhdWRpb1RyYWNrLCBieXRlQnVmZmVyLCBzaXpl
SW5CeXRlcyk7Ci0gICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT0gc2l6ZUluQnl0ZXMpIHsKLSAg
ICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay53cml0ZSBwbGF5ZWQgaW52YWxpZCBu
dW1iZXIgb2YgYnl0ZXM6ICIgKyBieXRlc1dyaXR0ZW4pOwotICAgICAgICAgIC8vIElmIGEgd3Jp
dGUoKSByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUsIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KLSAg
ICAgICAgICAvLyBTdG9wIHBsYXlpbmcgYW5kIHJlcG9ydCBhbiBlcnJvciBpbiB0aGlzIGNhc2Uu
Ci0gICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IDApIHsKLSAgICAgICAgICAgIGtlZXBBbGl2
ZSA9IGZhbHNlOwotICAgICAgICAgICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFja0Vycm9yKCJBdWRp
b1RyYWNrLndyaXRlIGZhaWxlZDogIiArIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIC8vIFRoZSBieXRlIGJ1ZmZlciBtdXN0IGJlIHJld2luZGVkIHNpbmNl
IGJ5dGVCdWZmZXIucG9zaXRpb24oKSBpcwotICAgICAgICAvLyBpbmNyZWFzZWQgYXQgZWFjaCBj
YWxsIHRvIEF1ZGlvVHJhY2sud3JpdGUoKS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywKLSAgICAgICAg
Ly8gbmV4dCBjYWxsIHRvIEF1ZGlvVHJhY2sud3JpdGUoKSB3aWxsIGZhaWwuCi0gICAgICAgIGJ5
dGVCdWZmZXIucmV3aW5kKCk7Ci0KLSAgICAgICAgLy8gVE9ETyhoZW5yaWthKTogaXQgaXMgcG9z
c2libGUgdG8gY3JlYXRlIGEgZGVsYXkgZXN0aW1hdGUgaGVyZSBieQotICAgICAgICAvLyBjb3Vu
dGluZyBudW1iZXIgb2Ygd3JpdHRlbiBmcmFtZXMgYW5kIHN1YnRyYWN0aW5nIHRoZSByZXN1bHQg
ZnJvbQotICAgICAgICAvLyBhdWRpb1RyYWNrLmdldFBsYXliYWNrSGVhZFBvc2l0aW9uKCkuCi0g
ICAgICB9Ci0KLSAgICAgIC8vIFN0b3BzIHBsYXlpbmcgdGhlIGF1ZGlvIGRhdGEuIFNpbmNlIHRo
ZSBpbnN0YW5jZSB3YXMgY3JlYXRlZCBpbgotICAgICAgLy8gTU9ERV9TVFJFQU0gbW9kZSwgYXVk
aW8gd2lsbCBzdG9wIHBsYXlpbmcgYWZ0ZXIgdGhlIGxhc3QgYnVmZmVyIHRoYXQKLSAgICAgIC8v
IHdhcyB3cml0dGVuIGhhcyBiZWVuIHBsYXllZC4KLSAgICAgIGlmIChhdWRpb1RyYWNrICE9IG51
bGwpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbGxpbmcgQXVkaW9UcmFjay5zdG9wLi4u
Iik7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgYXVkaW9UcmFjay5zdG9wKCk7Ci0gICAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2suc3RvcCBpcyBkb25lLiIpOwotICAgICAgICB9
IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dpbmcuZShU
QUcsICJBdWRpb1RyYWNrLnN0b3AgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgd3JpdGVCeXRlcyhBdWRpb1Ry
YWNrIGF1ZGlvVHJhY2ssIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwgaW50IHNpemVJbkJ5dGVzKSB7
Ci0gICAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IDIxKSB7Ci0gICAgICAgIHJldHVy
biBhdWRpb1RyYWNrLndyaXRlKGJ5dGVCdWZmZXIsIHNpemVJbkJ5dGVzLCBBdWRpb1RyYWNrLldS
SVRFX0JMT0NLSU5HKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBhdWRpb1RyYWNr
LndyaXRlKGJ5dGVCdWZmZXIuYXJyYXkoKSwgYnl0ZUJ1ZmZlci5hcnJheU9mZnNldCgpLCBzaXpl
SW5CeXRlcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3RvcHMgdGhlIGlubmVyIHRocmVh
ZCBsb29wIHdoaWNoIHJlc3VsdHMgaW4gY2FsbGluZyBBdWRpb1RyYWNrLnN0b3AoKS4KLSAgICAv
LyBEb2VzIG5vdCBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQuCi0gICAgcHVibGljIHZvaWQgc3Rv
cFRocmVhZCgpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJzdG9wVGhyZWFkIik7Ci0gICAgICBr
ZWVwQWxpdmUgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBXZWJSdGNBdWRpb1RyYWNrKGxvbmcg
bmF0aXZlQXVkaW9UcmFjaykgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJl
YWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRo
cmVhZEluZm8oKSk7Ci0gICAgdGhpcy5uYXRpdmVBdWRpb1RyYWNrID0gbmF0aXZlQXVkaW9UcmFj
azsKLSAgICBhdWRpb01hbmFnZXIgPQotICAgICAgICAoQXVkaW9NYW5hZ2VyKSBDb250ZXh0VXRp
bHMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElP
X1NFUlZJQ0UpOwotICAgIGlmIChERUJVRykgewotICAgICAgV2ViUnRjQXVkaW9VdGlscy5sb2dE
ZXZpY2VJbmZvKFRBRyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgaW5pdFBsYXlvdXQo
aW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscywgZG91YmxlIGJ1ZmZlclNpemVGYWN0b3IpIHsK
LSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5k
KFRBRywKLSAgICAgICAgImluaXRQbGF5b3V0KHNhbXBsZVJhdGU9IiArIHNhbXBsZVJhdGUgKyAi
LCBjaGFubmVscz0iICsgY2hhbm5lbHMKLSAgICAgICAgICAgICsgIiwgYnVmZmVyU2l6ZUZhY3Rv
cj0iICsgYnVmZmVyU2l6ZUZhY3RvciArICIpIik7Ci0gICAgZmluYWwgaW50IGJ5dGVzUGVyRnJh
bWUgPSBjaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsKLSAgICBieXRlQnVmZmVyID0g
Qnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRlc1BlckZyYW1lICogKHNhbXBsZVJhdGUgLyBC
VUZGRVJTX1BFUl9TRUNPTkQpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnl0ZUJ1ZmZlci5jYXBh
Y2l0eTogIiArIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgZW1wdHlCeXRlcyA9IG5ldyBi
eXRlW2J5dGVCdWZmZXIuY2FwYWNpdHkoKV07Ci0gICAgLy8gUmF0aGVyIHRoYW4gcGFzc2luZyB0
aGUgQnl0ZUJ1ZmZlciB3aXRoIGV2ZXJ5IGNhbGxiYWNrIChyZXF1aXJpbmcKLSAgICAvLyB0aGUg
cG90ZW50aWFsbHkgZXhwZW5zaXZlIEdldERpcmVjdEJ1ZmZlckFkZHJlc3MpIHdlIHNpbXBseSBo
YXZlIHRoZQotICAgIC8vIHRoZSBuYXRpdmUgY2xhc3MgY2FjaGUgdGhlIGFkZHJlc3MgdG8gdGhl
IG1lbW9yeSBvbmNlLgotICAgIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhieXRlQnVm
ZmVyLCBuYXRpdmVBdWRpb1RyYWNrKTsKLQotICAgIC8vIEdldCB0aGUgbWluaW11bSBidWZmZXIg
c2l6ZSByZXF1aXJlZCBmb3IgdGhlIHN1Y2Nlc3NmdWwgY3JlYXRpb24gb2YgYW4KLSAgICAvLyBB
dWRpb1RyYWNrIG9iamVjdCB0byBiZSBjcmVhdGVkIGluIHRoZSBNT0RFX1NUUkVBTSBtb2RlLgot
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIHNpemUgZG9lc24ndCBndWFyYW50ZWUgYSBzbW9vdGggcGxh
eWJhY2sgdW5kZXIgbG9hZC4KLSAgICBmaW5hbCBpbnQgY2hhbm5lbENvbmZpZyA9IGNoYW5uZWxD
b3VudFRvQ29uZmlndXJhdGlvbihjaGFubmVscyk7Ci0gICAgZmluYWwgaW50IG1pbkJ1ZmZlclNp
emVJbkJ5dGVzID0gKGludCkgKEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZShzYW1wbGVSYXRl
LCBjaGFubmVsQ29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUKQotICAgICAgICAqIGJ1ZmZl
clNpemVGYWN0b3IpOwotICAgIExvZ2dpbmcuZChUQUcsICJtaW5CdWZmZXJTaXplSW5CeXRlczog
IiArIG1pbkJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICAvLyBGb3IgdGhlIHN0cmVhbWluZyBtb2Rl
LCBkYXRhIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgYXVkaW8gc2luayBpbgotICAgIC8vIGNodW5r
cyBvZiBzaXplIChnaXZlbiBieSBieXRlQnVmZmVyLmNhcGFjaXR5KCkpIGxlc3MgdGhhbiBvciBl
cXVhbAotICAgIC8vIHRvIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSB8bWluQnVmZmVyU2l6ZUluQnl0
ZXN8LiBCdXQsIHdlIGhhdmUgc2VlbgotICAgIC8vIHJlcG9ydHMgb2YgImdldE1pbkJ1ZmZlclNp
emUoKTogZXJyb3IgcXVlcnlpbmcgaGFyZHdhcmUiLiBIZW5jZSwgaXQKLSAgICAvLyBjYW4gaGFw
cGVuIHRoYXQgfG1pbkJ1ZmZlclNpemVJbkJ5dGVzfCBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVl
LgotICAgIGlmIChtaW5CdWZmZXJTaXplSW5CeXRlcyA8IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkg
ewotICAgICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFja0luaXRFcnJvcigiQXVkaW9UcmFjay5nZXRN
aW5CdWZmZXJTaXplIHJldHVybnMgYW4gaW52YWxpZCB2YWx1ZS4iKTsKLSAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBwcmV2aXNpb24gYXVkaW8gc2Vzc2lvbiB3
YXMgc3RvcHBlZCBjb3JyZWN0bHkgYmVmb3JlIHRyeWluZwotICAgIC8vIHRvIGNyZWF0ZSBhIG5l
dyBBdWRpb1RyYWNrLgotICAgIGlmIChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIHJlcG9y
dFdlYlJ0Y0F1ZGlvVHJhY2tJbml0RXJyb3IoIkNvbmZsaWN0IHdpdGggZXhpc3RpbmcgQXVkaW9U
cmFjay4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIC8vIENy
ZWF0ZSBhbiBBdWRpb1RyYWNrIG9iamVjdCBhbmQgaW5pdGlhbGl6ZSBpdHMgYXNzb2NpYXRlZCBh
dWRpbyBidWZmZXIuCi0gICAgICAvLyBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciBkZXRlcm1pbmVz
IGhvdyBsb25nIGFuIEF1ZGlvVHJhY2sgY2FuIHBsYXkKLSAgICAgIC8vIGJlZm9yZSBydW5uaW5n
IG91dCBvZiBkYXRhLgotICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyMSkgewot
ICAgICAgICAvLyBJZiB3ZSBhcmUgb24gQVBJIGxldmVsIDIxIG9yIGhpZ2hlciwgaXQgaXMgcG9z
c2libGUgdG8gdXNlIGEgc3BlY2lhbCBBdWRpb1RyYWNrCi0gICAgICAgIC8vIGNvbnN0cnVjdG9y
IHRoYXQgdXNlcyBBdWRpb0F0dHJpYnV0ZXMgYW5kIEF1ZGlvRm9ybWF0IGFzIGlucHV0LiBJdCBh
bGxvd3MgdXMgdG8KLSAgICAgICAgLy8gc3VwZXJzZWRlIHRoZSBub3Rpb24gb2Ygc3RyZWFtIHR5
cGVzIGZvciBkZWZpbmluZyB0aGUgYmVoYXZpb3Igb2YgYXVkaW8gcGxheWJhY2ssCi0gICAgICAg
IC8vIGFuZCB0byBhbGxvdyBjZXJ0YWluIHBsYXRmb3JtcyBvciByb3V0aW5nIHBvbGljaWVzIHRv
IHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciBtb3JlCi0gICAgICAgIC8vIHJlZmluZWQgdm9sdW1l
IG9yIHJvdXRpbmcgZGVjaXNpb25zLgotICAgICAgICBhdWRpb1RyYWNrID0gY3JlYXRlQXVkaW9U
cmFja09uTG9sbGlwb3BPckhpZ2hlcigKLSAgICAgICAgICAgIHNhbXBsZVJhdGUsIGNoYW5uZWxD
b25maWcsIG1pbkJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IFVzZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGZvciBBUEkgbGV2ZWxzIGJlbG93IDIxLgotICAgICAg
ICBhdWRpb1RyYWNrID0KLSAgICAgICAgICAgIGNyZWF0ZUF1ZGlvVHJhY2tPbkxvd2VyVGhhbkxv
bGxpcG9wKHNhbXBsZVJhdGUsIGNoYW5uZWxDb25maWcsIG1pbkJ1ZmZlclNpemVJbkJ5dGVzKTsK
LSAgICAgIH0KLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAg
ICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFja0luaXRFcnJvcihlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICByZWxlYXNlQXVkaW9SZXNvdXJjZXMoKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAg
ICAvLyBJdCBjYW4gaGFwcGVuIHRoYXQgYW4gQXVkaW9UcmFjayBpcyBjcmVhdGVkIGJ1dCBpdCB3
YXMgbm90IHN1Y2Nlc3NmdWxseQotICAgIC8vIGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFNl
ZW1zIHRvIGJlIHRoZSBjYXNlIGUuZy4gd2hlbiB0aGUgbWF4aW11bQotICAgIC8vIG51bWJlciBv
ZiBnbG9iYWxseSBhdmFpbGFibGUgYXVkaW8gdHJhY2tzIGlzIGV4Y2VlZGVkLgotICAgIGlmIChh
dWRpb1RyYWNrID09IG51bGwgfHwgYXVkaW9UcmFjay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2su
U1RBVEVfSU5JVElBTElaRUQpIHsKLSAgICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvVHJhY2tJbml0RXJy
b3IoIkluaXRpYWxpemF0aW9uIG9mIGF1ZGlvIHRyYWNrIGZhaWxlZC4iKTsKLSAgICAgIHJlbGVh
c2VBdWRpb1Jlc291cmNlcygpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBsb2dNYWlu
UGFyYW1ldGVycygpOwotICAgIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKTsKLSAgICByZXR1
cm4gbWluQnVmZmVyU2l6ZUluQnl0ZXM7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRQ
bGF5b3V0KCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAic3RhcnRQbGF5b3V0Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1Ry
YWNrICE9IG51bGwpOwotICAgIGFzc2VydFRydWUoYXVkaW9UaHJlYWQgPT0gbnVsbCk7Ci0KLSAg
ICAvLyBTdGFydHMgcGxheWluZyBhbiBhdWRpbyB0cmFjay4KLSAgICB0cnkgewotICAgICAgYXVk
aW9UcmFjay5wbGF5KCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsK
LSAgICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvVHJhY2tTdGFydEVycm9yKEF1ZGlvVHJhY2tTdGFydEVy
cm9yQ29kZS5BVURJT19UUkFDS19TVEFSVF9FWENFUFRJT04sCi0gICAgICAgICAgIkF1ZGlvVHJh
Y2sucGxheSBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZWxlYXNlQXVkaW9S
ZXNvdXJjZXMoKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvVHJh
Y2suZ2V0UGxheVN0YXRlKCkgIT0gQXVkaW9UcmFjay5QTEFZU1RBVEVfUExBWUlORykgewotICAg
ICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFja1N0YXJ0RXJyb3IoCi0gICAgICAgICAgQXVkaW9UcmFj
a1N0YXJ0RXJyb3JDb2RlLkFVRElPX1RSQUNLX1NUQVJUX1NUQVRFX01JU01BVENILAotICAgICAg
ICAgICJBdWRpb1RyYWNrLnBsYXkgZmFpbGVkIC0gaW5jb3JyZWN0IHN0YXRlIDoiCi0gICAgICAg
ICAgKyBhdWRpb1RyYWNrLmdldFBsYXlTdGF0ZSgpKTsKLSAgICAgIHJlbGVhc2VBdWRpb1Jlc291
cmNlcygpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhbmQg
c3RhcnQgbmV3IGhpZ2gtcHJpb3JpdHkgdGhyZWFkIHdoaWNoIGNhbGxzIEF1ZGlvVHJhY2sud3Jp
dGUoKQotICAgIC8vIGFuZCB3aGVyZSB3ZSBhbHNvIGNhbGwgdGhlIG5hdGl2ZSBuYXRpdmVHZXRQ
bGF5b3V0RGF0YSgpIGNhbGxiYWNrIHRvCi0gICAgLy8gcmVxdWVzdCBkZWNvZGVkIGF1ZGlvIGZy
b20gV2ViUlRDLgotICAgIGF1ZGlvVGhyZWFkID0gbmV3IEF1ZGlvVHJhY2tUaHJlYWQoIkF1ZGlv
VHJhY2tKYXZhVGhyZWFkIik7Ci0gICAgYXVkaW9UaHJlYWQuc3RhcnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzdG9wUGxheW91dCgpIHsKLSAgICB0aHJl
YWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0
b3BQbGF5b3V0Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsKLSAgICBs
b2dVbmRlcnJ1bkNvdW50KCk7Ci0gICAgYXVkaW9UaHJlYWQuc3RvcFRocmVhZCgpOwotCi0gICAg
TG9nZ2luZy5kKFRBRywgIlN0b3BwaW5nIHRoZSBBdWRpb1RyYWNrVGhyZWFkLi4uIik7Ci0gICAg
YXVkaW9UaHJlYWQuaW50ZXJydXB0KCk7Ci0gICAgaWYgKCFUaHJlYWRVdGlscy5qb2luVW5pbnRl
cnJ1cHRpYmx5KGF1ZGlvVGhyZWFkLCBBVURJT19UUkFDS19USFJFQURfSk9JTl9USU1FT1VUX01T
KSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkpvaW4gb2YgQXVkaW9UcmFja1RocmVhZCB0aW1l
ZCBvdXQuIik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0F1ZGlvU3RhdGUoVEFHKTsKLSAg
ICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2tUaHJlYWQgaGFzIG5vdyBiZWVuIHN0
b3BwZWQuIik7Ci0gICAgYXVkaW9UaHJlYWQgPSBudWxsOwotICAgIHJlbGVhc2VBdWRpb1Jlc291
cmNlcygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gR2V0IG1heCBwb3NzaWJsZSB2
b2x1bWUgaW5kZXggZm9yIGEgcGhvbmUgY2FsbCBhdWRpbyBzdHJlYW0uCi0gIHByaXZhdGUgaW50
IGdldFN0cmVhbU1heFZvbHVtZSgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlk
VGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldFN0cmVhbU1heFZvbHVtZSIpOwotICAg
IGFzc2VydFRydWUoYXVkaW9NYW5hZ2VyICE9IG51bGwpOwotICAgIHJldHVybiBhdWRpb01hbmFn
ZXIuZ2V0U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCk7Ci0g
IH0KLQotICAvLyBTZXQgY3VycmVudCB2b2x1bWUgbGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRp
byBzdHJlYW0uCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRTdHJlYW1Wb2x1bWUoaW50IHZvbHVtZSkg
ewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2dnaW5n
LmQoVEFHLCAic2V0U3RyZWFtVm9sdW1lKCIgKyB2b2x1bWUgKyAiKSIpOwotICAgIGFzc2VydFRy
dWUoYXVkaW9NYW5hZ2VyICE9IG51bGwpOwotICAgIGlmIChpc1ZvbHVtZUZpeGVkKCkpIHsKLSAg
ICAgIExvZ2dpbmcuZShUQUcsICJUaGUgZGV2aWNlIGltcGxlbWVudHMgYSBmaXhlZCB2b2x1bWUg
cG9saWN5LiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb01hbmFnZXIu
c2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgdm9sdW1lLCAw
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1ZvbHVtZUZp
eGVkKCkgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAyMSkKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmlzVm9sdW1lRml4ZWQoKTsKLSAgfQot
Ci0gIC8qKiBHZXQgY3VycmVudCB2b2x1bWUgbGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRpbyBz
dHJlYW0uICovCi0gIHByaXZhdGUgaW50IGdldFN0cmVhbVZvbHVtZSgpIHsKLSAgICB0aHJlYWRD
aGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldFN0
cmVhbVZvbHVtZSIpOwotICAgIGFzc2VydFRydWUoYXVkaW9NYW5hZ2VyICE9IG51bGwpOwotICAg
IHJldHVybiBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1f
Vk9JQ0VfQ0FMTCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnMoKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAgICsgInNlc3Np
b24gSUQ6ICIgKyBhdWRpb1RyYWNrLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0gICAgICAg
ICAgICArICJjaGFubmVsczogIiArIGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvdW50KCkgKyAiLCAi
Ci0gICAgICAgICAgICArICJzYW1wbGUgcmF0ZTogIiArIGF1ZGlvVHJhY2suZ2V0U2FtcGxlUmF0
ZSgpICsgIiwgIgotICAgICAgICAgICAgLy8gR2FpbiAoPj0xLjApIGV4cHJlc3NlZCBhcyBsaW5l
YXIgbXVsdGlwbGllciBvbiBzYW1wbGUgdmFsdWVzLgotICAgICAgICAgICAgKyAibWF4IGdhaW46
ICIgKyBBdWRpb1RyYWNrLmdldE1heFZvbHVtZSgpKTsKLSAgfQotCi0gIC8vIENyZWF0ZXMgYW5k
IEF1ZGlvVHJhY2sgaW5zdGFuY2UgdXNpbmcgQXVkaW9BdHRyaWJ1dGVzIGFuZCBBdWRpb0Zvcm1h
dCBhcyBpbnB1dC4KLSAgLy8gSXQgYWxsb3dzIGNlcnRhaW4gcGxhdGZvcm1zIG9yIHJvdXRpbmcg
cG9saWNpZXMgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIG1vcmUKLSAgLy8gcmVmaW5lZCB2
b2x1bWUgb3Igcm91dGluZyBkZWNpc2lvbnMuCi0gIEBUYXJnZXRBcGkoMjEpCi0gIHByaXZhdGUg
c3RhdGljIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFja09uTG9sbGlwb3BPckhpZ2hlcigKLSAg
ICAgIGludCBzYW1wbGVSYXRlSW5IeiwgaW50IGNoYW5uZWxDb25maWcsIGludCBidWZmZXJTaXpl
SW5CeXRlcykgewotICAgIExvZ2dpbmcuZChUQUcsICJjcmVhdGVBdWRpb1RyYWNrT25Mb2xsaXBv
cE9ySGlnaGVyIik7Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogdXNlIHNldFBlcmZvcm1hbmNlTW9k
ZShpbnQpIHdpdGggUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFURU5DWSB0byBjb250cm9sCi0gICAg
Ly8gcGVyZm9ybWFuY2Ugd2hlbiBBbmRyb2lkIE8gaXMgc3VwcG9ydGVkLiBBZGQgc29tZSBsb2dn
aW5nIGluIHRoZSBtZWFuIHRpbWUuCi0gICAgZmluYWwgaW50IG5hdGl2ZU91dHB1dFNhbXBsZVJh
dGUgPQotICAgICAgICBBdWRpb1RyYWNrLmdldE5hdGl2ZU91dHB1dFNhbXBsZVJhdGUoQXVkaW9N
YW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAibmF0aXZlT3V0
cHV0U2FtcGxlUmF0ZTogIiArIG5hdGl2ZU91dHB1dFNhbXBsZVJhdGUpOwotICAgIGlmIChzYW1w
bGVSYXRlSW5IeiAhPSBuYXRpdmVPdXRwdXRTYW1wbGVSYXRlKSB7Ci0gICAgICBMb2dnaW5nLnco
VEFHLCAiVW5hYmxlIHRvIHVzZSBmYXN0IG1vZGUgc2luY2UgcmVxdWVzdGVkIHNhbXBsZSByYXRl
IGlzIG5vdCBuYXRpdmUiKTsKLSAgICB9Ci0gICAgaWYgKHVzYWdlQXR0cmlidXRlICE9IERFRkFV
TFRfVVNBR0UpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJBIG5vbiBkZWZhdWx0IHVzYWdlIGF0
dHJpYnV0ZSBpcyB1c2VkOiAiICsgdXNhZ2VBdHRyaWJ1dGUpOwotICAgIH0KLSAgICAvLyBDcmVh
dGUgYW4gYXVkaW8gdHJhY2sgd2hlcmUgdGhlIGF1ZGlvIHVzYWdlIGlzIGZvciBWb0lQIGFuZCB0
aGUgY29udGVudCB0eXBlIGlzIHNwZWVjaC4KLSAgICByZXR1cm4gbmV3IEF1ZGlvVHJhY2soCi0g
ICAgICAgIG5ldyBBdWRpb0F0dHJpYnV0ZXMuQnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0VXNh
Z2UodXNhZ2VBdHRyaWJ1dGUpCi0gICAgICAgICAgICAuc2V0Q29udGVudFR5cGUoQXVkaW9BdHRy
aWJ1dGVzLkNPTlRFTlRfVFlQRV9TUEVFQ0gpCi0gICAgICAgIC5idWlsZCgpLAotICAgICAgICBu
ZXcgQXVkaW9Gb3JtYXQuQnVpbGRlcigpCi0gICAgICAgICAgLnNldEVuY29kaW5nKEF1ZGlvRm9y
bWF0LkVOQ09ESU5HX1BDTV8xNkJJVCkKLSAgICAgICAgICAuc2V0U2FtcGxlUmF0ZShzYW1wbGVS
YXRlSW5IeikKLSAgICAgICAgICAuc2V0Q2hhbm5lbE1hc2soY2hhbm5lbENvbmZpZykKLSAgICAg
ICAgICAuYnVpbGQoKSwKLSAgICAgICAgYnVmZmVyU2l6ZUluQnl0ZXMsCi0gICAgICAgIEF1ZGlv
VHJhY2suTU9ERV9TVFJFQU0sCi0gICAgICAgIEF1ZGlvTWFuYWdlci5BVURJT19TRVNTSU9OX0lE
X0dFTkVSQVRFKTsKLSAgfQotCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpIC8v
IERlcHJlY2F0ZWQgaW4gQVBJIGxldmVsIDI1LgotICBwcml2YXRlIHN0YXRpYyBBdWRpb1RyYWNr
IGNyZWF0ZUF1ZGlvVHJhY2tPbkxvd2VyVGhhbkxvbGxpcG9wKAotICAgICAgaW50IHNhbXBsZVJh
dGVJbkh6LCBpbnQgY2hhbm5lbENvbmZpZywgaW50IGJ1ZmZlclNpemVJbkJ5dGVzKSB7Ci0gICAg
cmV0dXJuIG5ldyBBdWRpb1RyYWNrKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgc2Ft
cGxlUmF0ZUluSHosIGNoYW5uZWxDb25maWcsCi0gICAgICAgIEF1ZGlvRm9ybWF0LkVOQ09ESU5H
X1BDTV8xNkJJVCwgYnVmZmVyU2l6ZUluQnl0ZXMsIEF1ZGlvVHJhY2suTU9ERV9TVFJFQU0pOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0J1ZmZlclNpemVJbkZyYW1lcygpIHsKLSAgICBpZiAo
QnVpbGQuVkVSU0lPTi5TREtfSU5UID49IDIzKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVk
aW9UcmFjazogIgotICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0aXZlIHNpemUgb2YgdGhlIEF1
ZGlvVHJhY2sgYnVmZmVyIHRoYXQgdGhlIGFwcCB3cml0ZXMgdG8uCi0gICAgICAgICAgICAgICsg
ImJ1ZmZlciBzaXplIGluIGZyYW1lczogIiArIGF1ZGlvVHJhY2suZ2V0QnVmZmVyU2l6ZUluRnJh
bWVzKCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgaW50IGdldEJ1ZmZlclNpemVJbkZyYW1l
cygpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IDIzKSB7Ci0gICAgICByZXR1
cm4gYXVkaW9UcmFjay5nZXRCdWZmZXJTaXplSW5GcmFtZXMoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IC0xOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0J1ZmZlckNhcGFjaXR5SW5GcmFtZXMoKSB7
Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyNCkgewotICAgICAgTG9nZ2luZy5k
KFRBRywKLSAgICAgICAgICAiQXVkaW9UcmFjazogIgotICAgICAgICAgICAgICAvLyBNYXhpbXVt
IHNpemUgb2YgdGhlIEF1ZGlvVHJhY2sgYnVmZmVyIGluIGZyYW1lcy4KLSAgICAgICAgICAgICAg
KyAiYnVmZmVyIGNhcGFjaXR5IGluIGZyYW1lczogIiArIGF1ZGlvVHJhY2suZ2V0QnVmZmVyQ2Fw
YWNpdHlJbkZyYW1lcygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBh
cmFtZXRlcnNFeHRlbmRlZCgpIHsKLSAgICBsb2dCdWZmZXJTaXplSW5GcmFtZXMoKTsKLSAgICBs
b2dCdWZmZXJDYXBhY2l0eUluRnJhbWVzKCk7Ci0gIH0KLQotICAvLyBQcmludHMgdGhlIG51bWJl
ciBvZiB1bmRlcnJ1biBvY2N1cnJlbmNlcyBpbiB0aGUgYXBwbGljYXRpb24tbGV2ZWwgd3JpdGUK
LSAgLy8gYnVmZmVyIHNpbmNlIHRoZSBBdWRpb1RyYWNrIHdhcyBjcmVhdGVkLiBBbiB1bmRlcnJ1
biBvY2N1cnMgaWYgdGhlIGFwcCBkb2VzCi0gIC8vIG5vdCB3cml0ZSBhdWRpbyBkYXRhIHF1aWNr
bHkgZW5vdWdoLCBjYXVzaW5nIHRoZSBidWZmZXIgdG8gdW5kZXJmbG93IGFuZCBhCi0gIC8vIHBv
dGVudGlhbCBhdWRpbyBnbGl0Y2guCi0gIC8vIFRPRE8oaGVucmlrYSk6IGtlZXAgdHJhY2sgb2Yg
dGhpcyB2YWx1ZSBpbiB0aGUgZmllbGQgYW5kIHBvc3NpYmx5IGFkZCBuZXcKLSAgLy8gVU1BIHN0
YXQgaWYgbmVlZGVkLgotICBwcml2YXRlIHZvaWQgbG9nVW5kZXJydW5Db3VudCgpIHsKLSAgICBp
ZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IDI0KSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAi
dW5kZXJydW4gY291bnQ6ICIgKyBhdWRpb1RyYWNrLmdldFVuZGVycnVuQ291bnQoKSk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uICB3
aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2Vy
dFRydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAg
dGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIp
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgaW50IGNoYW5uZWxDb3VudFRvQ29uZmlndXJhdGlv
bihpbnQgY2hhbm5lbHMpIHsKLSAgICByZXR1cm4gKGNoYW5uZWxzID09IDEgPyBBdWRpb0Zvcm1h
dC5DSEFOTkVMX09VVF9NT05PIDogQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVPKTsKLSAg
fQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNz
KEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgcHJp
dmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVHZXRQbGF5b3V0RGF0YShpbnQgYnl0ZXMsIGxvbmcgbmF0
aXZlQXVkaW9SZWNvcmQpOwotCi0gIC8vIFNldHMgYWxsIHNhbXBsZXMgdG8gYmUgcGxheWVkIG91
dCB0byB6ZXJvIGlmIHxtdXRlfCBpcyB0cnVlLCBpLmUuLAotICAvLyBlbnN1cmVzIHRoYXQgdGhl
IHNwZWFrZXIgaXMgbXV0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTcGVha2VyTXV0ZShi
b29sZWFuIG11dGUpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAic2V0U3BlYWtlck11dGUoIiArIG11
dGUgKyAiKSIpOwotICAgIHNwZWFrZXJNdXRlID0gbXV0ZTsKLSAgfQotCi0gIC8vIFJlbGVhc2Vz
IHRoZSBuYXRpdmUgQXVkaW9UcmFjayByZXNvdXJjZXMuCi0gIHByaXZhdGUgdm9pZCByZWxlYXNl
QXVkaW9SZXNvdXJjZXMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInJlbGVhc2VBdWRpb1Jlc291
cmNlcyIpOwotICAgIGlmIChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIGF1ZGlvVHJhY2su
cmVsZWFzZSgpOwotICAgICAgYXVkaW9UcmFjayA9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIHJlcG9ydFdlYlJ0Y0F1ZGlvVHJhY2tJbml0RXJyb3IoU3RyaW5nIGVycm9yTWVz
c2FnZSkgewotICAgIExvZ2dpbmcuZShUQUcsICJJbml0IHBsYXlvdXQgZXJyb3I6ICIgKyBlcnJv
ck1lc3NhZ2UpOwotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMubG9nQXVkaW9TdGF0ZShUQUcpOwotICAg
IGlmIChlcnJvckNhbGxiYWNrT2xkICE9IG51bGwpIHsKLSAgICAgIGVycm9yQ2FsbGJhY2tPbGQu
b25XZWJSdGNBdWRpb1RyYWNrSW5pdEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICAgIGlm
IChlcnJvckNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGVycm9yQ2FsbGJhY2sub25XZWJSdGNB
dWRpb1RyYWNrSW5pdEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIHJlcG9ydFdlYlJ0Y0F1ZGlvVHJhY2tTdGFydEVycm9yKAotICAgICAgQXVkaW9UcmFj
a1N0YXJ0RXJyb3JDb2RlIGVycm9yQ29kZSwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExv
Z2dpbmcuZShUQUcsICJTdGFydCBwbGF5b3V0IGVycm9yOiAiICArIGVycm9yQ29kZSArICIuICIg
KyBlcnJvck1lc3NhZ2UpOwotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMubG9nQXVkaW9TdGF0ZShUQUcp
OwotICAgIGlmIChlcnJvckNhbGxiYWNrT2xkICE9IG51bGwpIHsKLSAgICAgIGVycm9yQ2FsbGJh
Y2tPbGQub25XZWJSdGNBdWRpb1RyYWNrU3RhcnRFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgIH0K
LSAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBlcnJvckNhbGxiYWNrLm9u
V2ViUnRjQXVkaW9UcmFja1N0YXJ0RXJyb3IoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRXZWJSdGNBdWRpb1RyYWNrRXJyb3IoU3Ry
aW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZ2dpbmcuZShUQUcsICJSdW4tdGltZSBwbGF5YmFj
ayBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgV2ViUnRjQXVkaW9VdGlscy5sb2dBdWRp
b1N0YXRlKFRBRyk7Ci0gICAgaWYgKGVycm9yQ2FsbGJhY2tPbGQgIT0gbnVsbCkgewotICAgICAg
ZXJyb3JDYWxsYmFja09sZC5vbldlYlJ0Y0F1ZGlvVHJhY2tFcnJvcihlcnJvck1lc3NhZ2UpOwot
ICAgIH0KLSAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBlcnJvckNhbGxi
YWNrLm9uV2ViUnRjQXVkaW9UcmFja0Vycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vlbmdp
bmUvV2ViUnRjQXVkaW9VdGlscy5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjFjYWI1OGYwN2VkODI5ZjQzOTJlMzY4MjliY2U5NzJkYzJmODYzMy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9VdGlscy5qYXZhCisr
KyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5t
ZWRpYS5BdWRpb01hbmFnZXIuTU9ERV9JTl9DQUxMOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1l
ZGlhLkF1ZGlvTWFuYWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT047Ci1pbXBvcnQgc3RhdGljIGFu
ZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyLk1PREVfTk9STUFMOwotaW1wb3J0IHN0YXRpYyBhbmRy
b2lkLm1lZGlhLkF1ZGlvTWFuYWdlci5NT0RFX1JJTkdUT05FOwotCi1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2Vy
OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9EZXZpY2VJbmZvOwotaW1wb3J0IGFuZHJvaWQu
bWVkaWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgamF2
YS5sYW5nLlRocmVhZDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRp
bC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuQ29udGV4dFV0aWxzOwotaW1wb3J0IG9yZy53ZWJy
dGMuTG9nZ2luZzsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdlYlJ0Y0F1ZGlvVXRpbHMgewotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvVXRpbHMiOwotCi0g
IC8vIExpc3Qgb2YgZGV2aWNlcyB3aGVyZSB3ZSBoYXZlIHNlZW4gaXNzdWVzIChlLmcuIGJhZCBh
dWRpbyBxdWFsaXR5KSB1c2luZwotICAvLyB0aGUgbG93IGxhdGVuY3kgb3V0cHV0IG1vZGUgaW4g
Y29tYmluYXRpb24gd2l0aCBPcGVuU0wgRVMuCi0gIC8vIFRoZSBkZXZpY2UgbmFtZSBpcyBnaXZl
biBieSBCdWlsZC5NT0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQkxBQ0tM
SVNURURfT1BFTl9TTF9FU19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgLy8gSXQgaXMg
cmVjb21tZW5kZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGJsYWNrbGlzdGVkIG1vZGVscyBvdXRz
aWRlCi0gICAgICAvLyB0aGlzIHBhY2thZ2UgYW5kIGluc3RlYWQgY2FsbAotICAgICAgLy8gV2Vi
UnRjQXVkaW9NYW5hZ2VyLnNldEJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UodHJ1ZSkK
LSAgICAgIC8vIGZyb20gdGhlIGNsaWVudCBmb3IgZGV2aWNlcyB3aGVyZSBPcGVuU0wgRVMgc2hh
bGwgYmUgZGlzYWJsZWQuCi0gIH07Ci0KLSAgLy8gTGlzdCBvZiBkZXZpY2VzIHdoZXJlIGl0IGhh
cyBiZWVuIHZlcmlmaWVkIHRoYXQgdGhlIGJ1aWx0LWluIGVmZmVjdAotICAvLyBiYWQgYW5kIHdo
ZXJlIGl0IG1ha2VzIHNlbnNlIHRvIGF2b2lkIHVzaW5nIGl0IGFuZCBpbnN0ZWFkIHJlbHkgb24g
dGhlCi0gIC8vIG5hdGl2ZSBXZWJSVEMgdmVyc2lvbiBpbnN0ZWFkLiBUaGUgZGV2aWNlIG5hbWUg
aXMgZ2l2ZW4gYnkgQnVpbGQuTU9ERUwuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1td
IEJMQUNLTElTVEVEX0FFQ19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgLy8gSXQgaXMg
cmVjb21tZW5kZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGJsYWNrbGlzdGVkIG1vZGVscyBvdXRz
aWRlCi0gICAgICAvLyB0aGlzIHBhY2thZ2UgYW5kIGluc3RlYWQgY2FsbCBzZXRXZWJSdGNCYXNl
ZEFjb3VzdGljRWNob0NhbmNlbGVyKHRydWUpCi0gICAgICAvLyBmcm9tIHRoZSBjbGllbnQgZm9y
IGRldmljZXMgd2hlcmUgdGhlIGJ1aWx0LWluIEFFQyBzaGFsbCBiZSBkaXNhYmxlZC4KLSAgfTsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQkxBQ0tMSVNURURfTlNfTU9ERUxTID0g
bmV3IFN0cmluZ1tdIHsKLSAgICAvLyBJdCBpcyByZWNvbW1lbmRlZCB0byBtYWludGFpbiBhIGxp
c3Qgb2YgYmxhY2tsaXN0ZWQgbW9kZWxzIG91dHNpZGUKLSAgICAvLyB0aGlzIHBhY2thZ2UgYW5k
IGluc3RlYWQgY2FsbCBzZXRXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3Nvcih0cnVlKQotICAgIC8v
IGZyb20gdGhlIGNsaWVudCBmb3IgZGV2aWNlcyB3aGVyZSB0aGUgYnVpbHQtaW4gTlMgc2hhbGwg
YmUgZGlzYWJsZWQuCi0gIH07Ci0KLSAgLy8gVXNlIDE2a0h6IGFzIHRoZSBkZWZhdWx0IHNhbXBs
ZSByYXRlLiBBIGhpZ2hlciBzYW1wbGUgcmF0ZSBtaWdodCBwcmV2ZW50Ci0gIC8vIHVzIGZyb20g
c3VwcG9ydGluZyBjb21tdW5pY2F0aW9uIG1vZGUgb24gc29tZSBvbGRlciAoZS5nLiBJQ1MpIGRl
dmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NBTVBMRV9SQVRFX0ha
ID0gMTYwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGludCBkZWZhdWx0U2FtcGxlUmF0ZUh6ID0gREVG
QVVMVF9TQU1QTEVfUkFURV9IWjsKLSAgLy8gU2V0IHRvIHRydWUgaWYgc2V0RGVmYXVsdFNhbXBs
ZVJhdGVIeigpIGhhcyBiZWVuIGNhbGxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Rl
ZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbjsKLQotICAvLyBCeSBkZWZhdWx0LCB1dGlsaXplIGhh
cmR3YXJlIGJhc2VkIGF1ZGlvIGVmZmVjdHMgZm9yIEFFQyBhbmQgTlMgd2hlbgotICAvLyBhdmFp
bGFibGUuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdXNlV2ViUnRjQmFzZWRBY291c3RpY0Vj
aG9DYW5jZWxlcjsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZE5vaXNl
U3VwcHJlc3NvcjsKLQotICAvLyBDYWxsIHRoZXNlIG1ldGhvZHMgaWYgYW55IGhhcmR3YXJlIGJh
c2VkIGVmZmVjdCBzaGFsbCBiZSByZXBsYWNlZCBieSBhCi0gIC8vIHNvZnR3YXJlIGJhc2VkIHZl
cnNpb24gcHJvdmlkZWQgYnkgdGhlIFdlYlJUQyBzdGFjayBpbnN0ZWFkLgotICAvLyBUT0RPKGJ1
Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3Vw
cHJlc3Npb24uCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNr
IikKLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRXZWJSdGNCYXNlZEFjb3Vz
dGljRWNob0NhbmNlbGVyKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgdXNlV2ViUnRjQmFzZWRBY291
c3RpY0VjaG9DYW5jZWxlciA9IGVuYWJsZTsKLSAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0
Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9u
LgotICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gIHB1
YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNz
b3IoYm9vbGVhbiBlbmFibGUpIHsKLSAgICB1c2VXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvciA9
IGVuYWJsZTsKLSAgfQotCi0gIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUg
Tm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgQFN1cHByZXNzV2Fybmlu
Z3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9u
aXplZCB2b2lkIHNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woYm9vbGVhbiBlbmFi
bGUpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVkOyByZW1vdmUgd2hlbiBubyBs
b25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICAgIExvZ2dpbmcudyhUQUcsICJzZXRXZWJSdGNC
YXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKCkgaXMgZGVwcmVjYXRlZCIpOwotICB9Ci0KLSAgLy8g
VE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENo
ZWNrIHN1cHByZXNzaW9uLgotICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRo
b2RDaGVjayIpCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gdXNlV2ViUnRj
QmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcigpIHsKLSAgICBpZiAodXNlV2ViUnRjQmFzZWRBY291
c3RpY0VjaG9DYW5jZWxlcikgewotICAgICAgTG9nZ2luZy53KFRBRywgIk92ZXJyaWRpbmcgZGVm
YXVsdCBiZWhhdmlvcjsgbm93IHVzaW5nIFdlYlJUQyBBRUMhIik7Ci0gICAgfQotICAgIHJldHVy
biB1c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyOwotICB9Ci0KLSAgLy8gVE9ETyhi
dWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1
cHByZXNzaW9uLgotICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVj
ayIpCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gdXNlV2ViUnRjQmFzZWRO
b2lzZVN1cHByZXNzb3IoKSB7Ci0gICAgaWYgKHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29y
KSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiT3ZlcnJpZGluZyBkZWZhdWx0IGJlaGF2aW9yOyBu
b3cgdXNpbmcgV2ViUlRDIE5TISIpOwotICAgIH0KLSAgICByZXR1cm4gdXNlV2ViUnRjQmFzZWRO
b2lzZVN1cHByZXNzb3I7Ci0gIH0KLQotICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVkOyBy
ZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICAvLyBUT0RPKGJ1Z3Mu
d2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJl
c3Npb24uCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikK
LSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZEF1dG9t
YXRpY0dhaW5Db250cm9sKCkgewotICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBoZXJlIHRvIGF2
b2lkIHRyeWluZyB0byB1c2UgYW55IGJ1aWx0LWluIEFHQy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGFuIGF1ZGlvIGVm
ZmVjdCAoQUVDIG9yIE5TKS4KLSAgLy8gRm91ciBjb25kaXRpb25zIG11c3QgYmUgZnVsZmlsbGVk
IGlmIGZ1bmN0aW9ucyBhcmUgdG8gcmV0dXJuIHRydWU6Ci0gIC8vIDEpIHRoZSBwbGF0Zm9ybSBt
dXN0IHN1cHBvcnQgdGhlIGJ1aWx0LWluIChIVykgZWZmZWN0LAotICAvLyAyKSBleHBsaWNpdCB1
c2UgKG92ZXJyaWRlKSBvZiBhIFdlYlJUQyBiYXNlZCB2ZXJzaW9uIG11c3Qgbm90IGJlIHNldCwK
LSAgLy8gMykgdGhlIGRldmljZSBtdXN0IG5vdCBiZSBibGFja2xpc3RlZCBmb3IgdXNlIG9mIHRo
ZSBlZmZlY3QsIGFuZAotICAvLyA0KSB0aGUgVVVJRCBvZiB0aGUgZWZmZWN0IG11c3QgYmUgYXBw
cm92ZWQgKHNvbWUgVVVJRHMgY2FuIGJlIGV4Y2x1ZGVkKS4KLSAgcHVibGljIHN0YXRpYyBib29s
ZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0
Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICB9Ci0gIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIHsKLSAgICByZXR1
cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwotICB9Ci0gIC8v
IFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7IHJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkIGJ5
IGFueSBjbGllbnQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0F1dG9tYXRpY0dhaW5Db250
cm9sU3VwcG9ydGVkKCkgewotICAgIC8vIEFsd2F5cyByZXR1cm4gZmFsc2UgaGVyZSB0byBhdm9p
ZCB0cnlpbmcgdG8gdXNlIGFueSBidWlsdC1pbiBBR0MuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgZGVmYXVsdCBoYW5kbGluZyBvZiBxdWVy
eWluZyB0aGUgbmF0aXZlIHNhbXBsZQotICAvLyByYXRlIHNoYWxsIGJlIG92ZXJyaWRkZW4uIENh
biBiZSB1c2VmdWwgb24gc29tZSBkZXZpY2VzIHdoZXJlIHRoZQotICAvLyBhdmFpbGFibGUgQW5k
cm9pZCBBUElzIGFyZSBrbm93biB0byByZXR1cm4gaW52YWxpZCByZXN1bHRzLgotICAvLyBUT0RP
KGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sg
c3VwcHJlc3Npb24uCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENo
ZWNrIikKLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0U2FtcGxl
UmF0ZUh6KGludCBzYW1wbGVSYXRlSHopIHsKLSAgICBpc0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJp
ZGRlbiA9IHRydWU7Ci0gICAgZGVmYXVsdFNhbXBsZVJhdGVIeiA9IHNhbXBsZVJhdGVIejsKLSAg
fQotCi0gIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6
ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBib29sZWFu
IGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuKCkgewotICAgIHJldHVybiBpc0RlZmF1bHRT
YW1wbGVSYXRlT3ZlcnJpZGRlbjsKLSAgfQotCi0gIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0
OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgQFN1
cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCBpbnQgZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpIHsKLSAgICByZXR1
cm4gZGVmYXVsdFNhbXBsZVJhdGVIejsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdDxTdHJp
bmc+IGdldEJsYWNrTGlzdGVkTW9kZWxzRm9yQWVjVXNhZ2UoKSB7Ci0gICAgcmV0dXJuIEFycmF5
cy5hc0xpc3QoV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9BRUNfTU9ERUxTKTsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldEJsYWNrTGlzdGVkTW9kZWxzRm9yTnNV
c2FnZSgpIHsKLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChXZWJSdGNBdWRpb1V0aWxzLkJMQUNL
TElTVEVEX05TX01PREVMUyk7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIGZvciBidWlsZGlu
ZyBhIHN0cmluZyBvZiB0aHJlYWQgaW5mb3JtYXRpb24uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5n
IGdldFRocmVhZEluZm8oKSB7Ci0gICAgcmV0dXJuICJAW25hbWU9IiArIFRocmVhZC5jdXJyZW50
VGhyZWFkKCkuZ2V0TmFtZSgpICsgIiwgaWQ9IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0
SWQoKQotICAgICAgICArICJdIjsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBy
dW5uaW5nIG9uIGVtdWxhdG9yLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uRW11
bGF0b3IoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLkhBUkRXQVJFLmVxdWFscygiZ29sZGZpc2giKSAm
JiBCdWlsZC5CUkFORC5zdGFydHNXaXRoKCJnZW5lcmljXyIpOwotICB9Ci0KLSAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIE9wZW5TTCBFUyB1c2FnZS4K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRldmljZUlzQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1Vz
YWdlKCkgewotICAgIExpc3Q8U3RyaW5nPiBibGFja0xpc3RlZE1vZGVscyA9IEFycmF5cy5hc0xp
c3QoQkxBQ0tMSVNURURfT1BFTl9TTF9FU19NT0RFTFMpOwotICAgIHJldHVybiBibGFja0xpc3Rl
ZE1vZGVscy5jb250YWlucyhCdWlsZC5NT0RFTCk7Ci0gIH0KLQotICAvLyBJbmZvcm1hdGlvbiBh
Ym91dCB0aGUgY3VycmVudCBidWlsZCwgdGFrZW4gZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4KLSAg
c3RhdGljIHZvaWQgbG9nRGV2aWNlSW5mbyhTdHJpbmcgdGFnKSB7Ci0gICAgTG9nZ2luZy5kKHRh
ZywgIkFuZHJvaWQgU0RLOiAiICsgQnVpbGQuVkVSU0lPTi5TREtfSU5UICsgIiwgIgotICAgICAg
ICAgICAgKyAiUmVsZWFzZTogIiArIEJ1aWxkLlZFUlNJT04uUkVMRUFTRSArICIsICIKLSAgICAg
ICAgICAgICsgIkJyYW5kOiAiICsgQnVpbGQuQlJBTkQgKyAiLCAiCi0gICAgICAgICAgICArICJE
ZXZpY2U6ICIgKyBCdWlsZC5ERVZJQ0UgKyAiLCAiCi0gICAgICAgICAgICArICJJZDogIiArIEJ1
aWxkLklEICsgIiwgIgotICAgICAgICAgICAgKyAiSGFyZHdhcmU6ICIgKyBCdWlsZC5IQVJEV0FS
RSArICIsICIKLSAgICAgICAgICAgICsgIk1hbnVmYWN0dXJlcjogIiArIEJ1aWxkLk1BTlVGQUNU
VVJFUiArICIsICIKLSAgICAgICAgICAgICsgIk1vZGVsOiAiICsgQnVpbGQuTU9ERUwgKyAiLCAi
Ci0gICAgICAgICAgICArICJQcm9kdWN0OiAiICsgQnVpbGQuUFJPRFVDVCk7Ci0gIH0KLQotICAv
LyBMb2dzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGF1ZGlvIHN0YXRlLiBUaGUgaWRl
YSBpcyB0byBjYWxsIHRoaXMKLSAgLy8gbWV0aG9kIHdoZW4gZXJyb3JzIGFyZSBkZXRlY3RlZCB0
byBsb2cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBlcnJvcgotICAvLyBvY2N1cnJlZC4gSG9w
ZWZ1bGx5IGl0IHdpbGwgcHJvdmlkZSBjbHVlcyB0byB3aGF0IG1pZ2h0IGJlIHRoZSByb290IGNh
dXNlLgotICBzdGF0aWMgdm9pZCBsb2dBdWRpb1N0YXRlKFN0cmluZyB0YWcpIHsKLSAgICBsb2dE
ZXZpY2VJbmZvKHRhZyk7Ci0gICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gQ29udGV4dFV0aWxz
LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotICAgIGZpbmFsIEF1ZGlvTWFuYWdlciBhdWRpb01h
bmFnZXIgPQotICAgICAgICAoQXVkaW9NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2Uo
Q29udGV4dC5BVURJT19TRVJWSUNFKTsKLSAgICBsb2dBdWRpb1N0YXRlQmFzaWModGFnLCBhdWRp
b01hbmFnZXIpOwotICAgIGxvZ0F1ZGlvU3RhdGVWb2x1bWUodGFnLCBhdWRpb01hbmFnZXIpOwot
ICAgIGxvZ0F1ZGlvRGV2aWNlSW5mbyh0YWcsIGF1ZGlvTWFuYWdlcik7Ci0gIH0KLQotICAvLyBS
ZXBvcnRzIGJhc2ljIGF1ZGlvIHN0YXRpc3RpY3MuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgbG9n
QXVkaW9TdGF0ZUJhc2ljKFN0cmluZyB0YWcsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIpIHsK
LSAgICBMb2dnaW5nLmQodGFnLCAiQXVkaW8gU3RhdGU6ICIKLSAgICAgICAgICAgICsgImF1ZGlv
IG1vZGU6ICIgKyBtb2RlVG9TdHJpbmcoYXVkaW9NYW5hZ2VyLmdldE1vZGUoKSkgKyAiLCAiCi0g
ICAgICAgICAgICArICJoYXMgbWljOiAiICsgaGFzTWljcm9waG9uZSgpICsgIiwgIgotICAgICAg
ICAgICAgKyAibWljIG11dGVkOiAiICsgYXVkaW9NYW5hZ2VyLmlzTWljcm9waG9uZU11dGUoKSAr
ICIsICIKLSAgICAgICAgICAgICsgIm11c2ljIGFjdGl2ZTogIiArIGF1ZGlvTWFuYWdlci5pc011
c2ljQWN0aXZlKCkgKyAiLCAiCi0gICAgICAgICAgICArICJzcGVha2VycGhvbmU6ICIgKyBhdWRp
b01hbmFnZXIuaXNTcGVha2VycGhvbmVPbigpICsgIiwgIgotICAgICAgICAgICAgKyAiQlQgU0NP
OiAiICsgYXVkaW9NYW5hZ2VyLmlzQmx1ZXRvb3RoU2NvT24oKSk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGlzVm9sdW1lRml4ZWQoQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcikg
ewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAyMSkgewotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmlzVm9sdW1lRml4ZWQoKTsKLSAg
fQotCi0gIC8vIEFkZHMgdm9sdW1lIGluZm9ybWF0aW9uIGZvciBhbGwgcG9zc2libGUgc3RyZWFt
IHR5cGVzLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGxvZ0F1ZGlvU3RhdGVWb2x1bWUoU3RyaW5n
IHRhZywgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcikgewotICAgIGZpbmFsIGludFtdIHN0cmVh
bXMgPSB7Ci0gICAgICAgIEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwKLSAgICAgICAg
QXVkaW9NYW5hZ2VyLlNUUkVBTV9NVVNJQywKLSAgICAgICAgQXVkaW9NYW5hZ2VyLlNUUkVBTV9S
SU5HLAotICAgICAgICBBdWRpb01hbmFnZXIuU1RSRUFNX0FMQVJNLAotICAgICAgICBBdWRpb01h
bmFnZXIuU1RSRUFNX05PVElGSUNBVElPTiwKLSAgICAgICAgQXVkaW9NYW5hZ2VyLlNUUkVBTV9T
WVNURU0KLSAgICB9OwotICAgIExvZ2dpbmcuZCh0YWcsICJBdWRpbyBTdGF0ZTogIik7Ci0gICAg
Ly8gU29tZSBkZXZpY2VzIG1heSBub3QgaGF2ZSB2b2x1bWUgY29udHJvbHMgYW5kIG1pZ2h0IHVz
ZSBhIGZpeGVkIHZvbHVtZS4KLSAgICBib29sZWFuIGZpeGVkVm9sdW1lID0gaXNWb2x1bWVGaXhl
ZChhdWRpb01hbmFnZXIpOwotICAgIExvZ2dpbmcuZCh0YWcsICIgIGZpeGVkIHZvbHVtZT0iICsg
Zml4ZWRWb2x1bWUpOwotICAgIGlmICghZml4ZWRWb2x1bWUpIHsKLSAgICAgIGZvciAoaW50IHN0
cmVhbSA6IHN0cmVhbXMpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbmZvID0gbmV3IFN0cmlu
Z0J1aWxkZXIoKTsKLSAgICAgICAgaW5mby5hcHBlbmQoIiAgIiArIHN0cmVhbVR5cGVUb1N0cmlu
ZyhzdHJlYW0pICsgIjogIik7Ci0gICAgICAgIGluZm8uYXBwZW5kKCJ2b2x1bWU9IikuYXBwZW5k
KGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoc3RyZWFtKSk7Ci0gICAgICAgIGluZm8uYXBw
ZW5kKCIsIG1heD0iKS5hcHBlbmQoYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShzdHJl
YW0pKTsKLSAgICAgICAgbG9nSXNTdHJlYW1NdXRlKHRhZywgYXVkaW9NYW5hZ2VyLCBzdHJlYW0s
IGluZm8pOwotICAgICAgICBMb2dnaW5nLmQodGFnLCBpbmZvLnRvU3RyaW5nKCkpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgbG9nSXNTdHJlYW1NdXRlKAot
ICAgICAgU3RyaW5nIHRhZywgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlciwgaW50IHN0cmVhbSwg
U3RyaW5nQnVpbGRlciBpbmZvKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAy
MykgewotICAgICAgaW5mby5hcHBlbmQoIiwgbXV0ZWQ9IikuYXBwZW5kKGF1ZGlvTWFuYWdlci5p
c1N0cmVhbU11dGUoc3RyZWFtKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9p
ZCBsb2dBdWRpb0RldmljZUluZm8oU3RyaW5nIHRhZywgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdl
cikgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAyMykgewotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBmaW5hbCBBdWRpb0RldmljZUluZm9bXSBkZXZpY2VzID0KLSAgICAgICAg
YXVkaW9NYW5hZ2VyLmdldERldmljZXMoQXVkaW9NYW5hZ2VyLkdFVF9ERVZJQ0VTX0FMTCk7Ci0g
ICAgaWYgKGRldmljZXMubGVuZ3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
TG9nZ2luZy5kKHRhZywgIkF1ZGlvIERldmljZXM6ICIpOwotICAgIGZvciAoQXVkaW9EZXZpY2VJ
bmZvIGRldmljZSA6IGRldmljZXMpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgaW5mbyA9IG5ldyBT
dHJpbmdCdWlsZGVyKCk7Ci0gICAgICBpbmZvLmFwcGVuZCgiICAiKS5hcHBlbmQoZGV2aWNlVHlw
ZVRvU3RyaW5nKGRldmljZS5nZXRUeXBlKCkpKTsKLSAgICAgIGluZm8uYXBwZW5kKGRldmljZS5p
c1NvdXJjZSgpID8gIihpbik6ICIgOiAiKG91dCk6ICIpOwotICAgICAgLy8gQW4gZW1wdHkgYXJy
YXkgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cyBhcmJpdHJhcnkgY2hhbm5lbCBj
b3VudHMuCi0gICAgICBpZiAoZGV2aWNlLmdldENoYW5uZWxDb3VudHMoKS5sZW5ndGggPiAwKSB7
Ci0gICAgICAgIGluZm8uYXBwZW5kKCJjaGFubmVscz0iKS5hcHBlbmQoQXJyYXlzLnRvU3RyaW5n
KGRldmljZS5nZXRDaGFubmVsQ291bnRzKCkpKTsKLSAgICAgICAgaW5mby5hcHBlbmQoIiwgIik7
Ci0gICAgICB9Ci0gICAgICBpZiAoZGV2aWNlLmdldEVuY29kaW5ncygpLmxlbmd0aCA+IDApIHsK
LSAgICAgICAgLy8gRXhhbXBsZXM6IEVOQ09ESU5HX1BDTV8xNkJJVCA9IDIsIEVOQ09ESU5HX1BD
TV9GTE9BVCA9IDQuCi0gICAgICAgIGluZm8uYXBwZW5kKCJlbmNvZGluZ3M9IikuYXBwZW5kKEFy
cmF5cy50b1N0cmluZyhkZXZpY2UuZ2V0RW5jb2RpbmdzKCkpKTsKLSAgICAgICAgaW5mby5hcHBl
bmQoIiwgIik7Ci0gICAgICB9Ci0gICAgICBpZiAoZGV2aWNlLmdldFNhbXBsZVJhdGVzKCkubGVu
Z3RoID4gMCkgewotICAgICAgICBpbmZvLmFwcGVuZCgic2FtcGxlIHJhdGVzPSIpLmFwcGVuZChB
cnJheXMudG9TdHJpbmcoZGV2aWNlLmdldFNhbXBsZVJhdGVzKCkpKTsKLSAgICAgICAgaW5mby5h
cHBlbmQoIiwgIik7Ci0gICAgICB9Ci0gICAgICBpbmZvLmFwcGVuZCgiaWQ9IikuYXBwZW5kKGRl
dmljZS5nZXRJZCgpKTsKLSAgICAgIExvZ2dpbmcuZCh0YWcsIGluZm8udG9TdHJpbmcoKSk7Ci0g
ICAgfQotICB9Ci0KLSAgLy8gQ29udmVydHMgbWVkaWEuQXVkaW9NYW5hZ2VyIG1vZGVzIGludG8g
bG9jYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICBzdGF0aWMgU3RyaW5nIG1vZGVUb1N0cmlu
ZyhpbnQgbW9kZSkgewotICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgY2FzZSBNT0RFX0lOX0NB
TEw6Ci0gICAgICAgIHJldHVybiAiTU9ERV9JTl9DQUxMIjsKLSAgICAgIGNhc2UgTU9ERV9JTl9D
T01NVU5JQ0FUSU9OOgotICAgICAgICByZXR1cm4gIk1PREVfSU5fQ09NTVVOSUNBVElPTiI7Ci0g
ICAgICBjYXNlIE1PREVfTk9STUFMOgotICAgICAgICByZXR1cm4gIk1PREVfTk9STUFMIjsKLSAg
ICAgIGNhc2UgTU9ERV9SSU5HVE9ORToKLSAgICAgICAgcmV0dXJuICJNT0RFX1JJTkdUT05FIjsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiTU9ERV9JTlZBTElEIjsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyZWFtVHlwZVRvU3RyaW5nKGludCBzdHJl
YW0pIHsKLSAgICBzd2l0Y2goc3RyZWFtKSB7Ci0gICAgICBjYXNlIEF1ZGlvTWFuYWdlci5TVFJF
QU1fVk9JQ0VfQ0FMTDoKLSAgICAgICAgcmV0dXJuICJTVFJFQU1fVk9JQ0VfQ0FMTCI7Ci0gICAg
ICBjYXNlIEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUM6Ci0gICAgICAgIHJldHVybiAiU1RSRUFN
X01VU0lDIjsKLSAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLlNUUkVBTV9SSU5HOgotICAgICAgICBy
ZXR1cm4gIlNUUkVBTV9SSU5HIjsKLSAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLlNUUkVBTV9BTEFS
TToKLSAgICAgICAgcmV0dXJuICJTVFJFQU1fQUxBUk0iOwotICAgICAgY2FzZSBBdWRpb01hbmFn
ZXIuU1RSRUFNX05PVElGSUNBVElPTjoKLSAgICAgICAgcmV0dXJuICJTVFJFQU1fTk9USUZJQ0FU
SU9OIjsKLSAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLlNUUkVBTV9TWVNURU06Ci0gICAgICAgIHJl
dHVybiAiU1RSRUFNX1NZU1RFTSI7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIlNU
UkVBTV9JTlZBTElEIjsKLSAgICB9Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBBdWRpb0RldmljZUlu
Zm8gdHlwZXMgdG8gbG9jYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICBwcml2YXRlIHN0YXRp
YyBTdHJpbmcgZGV2aWNlVHlwZVRvU3RyaW5nKGludCB0eXBlKSB7Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX1VOS05PV046Ci0gICAgICAgIHJl
dHVybiAiVFlQRV9VTktOT1dOIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfQlVJ
TFRJTl9FQVJQSUVDRToKLSAgICAgICAgcmV0dXJuICJUWVBFX0JVSUxUSU5fRUFSUElFQ0UiOwot
ICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9CVUlMVElOX1NQRUFLRVI6Ci0gICAgICAg
IHJldHVybiAiVFlQRV9CVUlMVElOX1NQRUFLRVIiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUlu
Zm8uVFlQRV9XSVJFRF9IRUFEU0VUOgotICAgICAgICByZXR1cm4gIlRZUEVfV0lSRURfSEVBRFNF
VCI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX1dJUkVEX0hFQURQSE9ORVM6Ci0g
ICAgICAgIHJldHVybiAiVFlQRV9XSVJFRF9IRUFEUEhPTkVTIjsKLSAgICAgIGNhc2UgQXVkaW9E
ZXZpY2VJbmZvLlRZUEVfTElORV9BTkFMT0c6Ci0gICAgICAgIHJldHVybiAiVFlQRV9MSU5FX0FO
QUxPRyI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX0xJTkVfRElHSVRBTDoKLSAg
ICAgICAgcmV0dXJuICJUWVBFX0xJTkVfRElHSVRBTCI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNl
SW5mby5UWVBFX0JMVUVUT09USF9TQ086Ci0gICAgICAgIHJldHVybiAiVFlQRV9CTFVFVE9PVEhf
U0NPIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfQkxVRVRPT1RIX0EyRFA6Ci0g
ICAgICAgIHJldHVybiAiVFlQRV9CTFVFVE9PVEhfQTJEUCI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2
aWNlSW5mby5UWVBFX0hETUk6Ci0gICAgICAgIHJldHVybiAiVFlQRV9IRE1JIjsKLSAgICAgIGNh
c2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfSERNSV9BUkM6Ci0gICAgICAgIHJldHVybiAiVFlQRV9I
RE1JX0FSQyI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX1VTQl9ERVZJQ0U6Ci0g
ICAgICAgIHJldHVybiAiVFlQRV9VU0JfREVWSUNFIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJ
bmZvLlRZUEVfVVNCX0FDQ0VTU09SWToKLSAgICAgICAgcmV0dXJuICJUWVBFX1VTQl9BQ0NFU1NP
UlkiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9ET0NLOgotICAgICAgICByZXR1
cm4gIlRZUEVfRE9DSyI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX0ZNOgotICAg
ICAgICByZXR1cm4gIlRZUEVfRk0iOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9C
VUlMVElOX01JQzoKLSAgICAgICAgcmV0dXJuICJUWVBFX0JVSUxUSU5fTUlDIjsKLSAgICAgIGNh
c2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfRk1fVFVORVI6Ci0gICAgICAgIHJldHVybiAiVFlQRV9G
TV9UVU5FUiI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX1RWX1RVTkVSOgotICAg
ICAgICByZXR1cm4gIlRZUEVfVFZfVFVORVIiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8u
VFlQRV9URUxFUEhPTlk6Ci0gICAgICAgIHJldHVybiAiVFlQRV9URUxFUEhPTlkiOwotICAgICAg
Y2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9BVVhfTElORToKLSAgICAgICAgcmV0dXJuICJUWVBF
X0FVWF9MSU5FIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfSVA6Ci0gICAgICAg
IHJldHVybiAiVFlQRV9JUCI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX0JVUzoK
LSAgICAgICAgcmV0dXJuICJUWVBFX0JVUyI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5U
WVBFX1VTQl9IRUFEU0VUOgotICAgICAgICByZXR1cm4gIlRZUEVfVVNCX0hFQURTRVQiOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJUWVBFX1VOS05PV04iOwotICAgIH0KLSAgfQot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGNhbiByZWNvcmQgYXVkaW8gdmlhIGEg
bWljcm9waG9uZS4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNNaWNyb3Bob25lKCkgewot
ICAgIHJldHVybiBDb250ZXh0VXRpbHMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0UGFja2Fn
ZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKAotICAgICAgICBQYWNrYWdlTWFuYWdlci5GRUFU
VVJFX01JQ1JPUEhPTkUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5z
bGVzX2NvbW1vbi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTk3MTRkYWU0NmZjMzdjODc4M2VkNTAyMDNkOTM4MWRi
ZTQ3MmE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaCIKLQotI2luY2x1ZGUgPFNMRVMvT3BlblNM
RVMuaD4KLQotI2luY2x1ZGUgInJ0Y19iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL2NoZWNrcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gUmV0dXJucyBhIHN0cmlu
ZyByZXByZXNlbnRhdGlvbiBnaXZlbiBhbiBpbnRlZ2VyIFNMX1JFU1VMVF9YWFggY29kZS4KLS8v
IFRoZSBtYXBwaW5nIGNhbiBiZSBmb3VuZCBpbiA8U0xFUy9PcGVuU0xFUy5oPi4KLWNvbnN0IGNo
YXIqIEdldFNMRXJyb3JTdHJpbmcoc2l6ZV90IGNvZGUpIHsKLSAgc3RhdGljIGNvbnN0IGNoYXIq
IHNsX2Vycm9yX3N0cmluZ3NbXSA9IHsKLSAgICAgICJTTF9SRVNVTFRfU1VDQ0VTUyIsICAgICAg
ICAgICAgICAgICAvLyAwCi0gICAgICAiU0xfUkVTVUxUX1BSRUNPTkRJVElPTlNfVklPTEFURUQi
LCAgLy8gMQotICAgICAgIlNMX1JFU1VMVF9QQVJBTUVURVJfSU5WQUxJRCIsICAgICAgIC8vIDIK
LSAgICAgICJTTF9SRVNVTFRfTUVNT1JZX0ZBSUxVUkUiLCAgICAgICAgICAvLyAzCi0gICAgICAi
U0xfUkVTVUxUX1JFU09VUkNFX0VSUk9SIiwgICAgICAgICAgLy8gNAotICAgICAgIlNMX1JFU1VM
VF9SRVNPVVJDRV9MT1NUIiwgICAgICAgICAgIC8vIDUKLSAgICAgICJTTF9SRVNVTFRfSU9fRVJS
T1IiLCAgICAgICAgICAgICAgICAvLyA2Ci0gICAgICAiU0xfUkVTVUxUX0JVRkZFUl9JTlNVRkZJ
Q0lFTlQiLCAgICAgLy8gNwotICAgICAgIlNMX1JFU1VMVF9DT05URU5UX0NPUlJVUFRFRCIsICAg
ICAgIC8vIDgKLSAgICAgICJTTF9SRVNVTFRfQ09OVEVOVF9VTlNVUFBPUlRFRCIsICAgICAvLyA5
Ci0gICAgICAiU0xfUkVTVUxUX0NPTlRFTlRfTk9UX0ZPVU5EIiwgICAgICAgLy8gMTAKLSAgICAg
ICJTTF9SRVNVTFRfUEVSTUlTU0lPTl9ERU5JRUQiLCAgICAgICAvLyAxMQotICAgICAgIlNMX1JF
U1VMVF9GRUFUVVJFX1VOU1VQUE9SVEVEIiwgICAgIC8vIDEyCi0gICAgICAiU0xfUkVTVUxUX0lO
VEVSTkFMX0VSUk9SIiwgICAgICAgICAgLy8gMTMKLSAgICAgICJTTF9SRVNVTFRfVU5LTk9XTl9F
UlJPUiIsICAgICAgICAgICAvLyAxNAotICAgICAgIlNMX1JFU1VMVF9PUEVSQVRJT05fQUJPUlRF
RCIsICAgICAgIC8vIDE1Ci0gICAgICAiU0xfUkVTVUxUX0NPTlRST0xfTE9TVCIsICAgICAgICAg
ICAgLy8gMTYKLSAgfTsKLQotICBpZiAoY29kZSA+PSBhcnJheXNpemUoc2xfZXJyb3Jfc3RyaW5n
cykpIHsKLSAgICByZXR1cm4gIlNMX1JFU1VMVF9VTktOT1dOX0VSUk9SIjsKLSAgfQotICByZXR1
cm4gc2xfZXJyb3Jfc3RyaW5nc1tjb2RlXTsKLX0KLQotU0xEYXRhRm9ybWF0X1BDTSBDcmVhdGVQ
Q01Db25maWd1cmF0aW9uKHNpemVfdCBjaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGJpdHNfcGVyX3NhbXBsZSkgewotICBSVENfQ0hFQ0tf
RVEoYml0c19wZXJfc2FtcGxlLCBTTF9QQ01TQU1QTEVGT1JNQVRfRklYRURfMTYpOwotICBTTERh
dGFGb3JtYXRfUENNIGZvcm1hdDsKLSAgZm9ybWF0LmZvcm1hdFR5cGUgPSBTTF9EQVRBRk9STUFU
X1BDTTsKLSAgZm9ybWF0Lm51bUNoYW5uZWxzID0gc3RhdGljX2Nhc3Q8U0x1aW50MzI+KGNoYW5u
ZWxzKTsKLSAgLy8gTm90ZSB0aGF0LCB0aGUgdW5pdCBvZiBzYW1wbGUgcmF0ZSBpcyBhY3R1YWxs
eSBpbiBtaWxsaUhlcnR6IGFuZCBub3QgSGVydHouCi0gIHN3aXRjaCAoc2FtcGxlX3JhdGUpIHsK
LSAgICBjYXNlIDgwMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5H
UkFURV84OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNjAwMDoKLSAgICAgIGZvcm1hdC5zYW1w
bGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzE2OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAy
MjA1MDoKLSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzIyXzA1
OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzMjAwMDoKLSAgICAgIGZvcm1hdC5zYW1wbGVzUGVy
U2VjID0gU0xfU0FNUExJTkdSQVRFXzMyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0NDEwMDoK
LSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzQ0XzE7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIDQ4MDAwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBT
TF9TQU1QTElOR1JBVEVfNDg7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDY0MDAwOgotICAgICAg
Zm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfNjQ7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIDg4MjAwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElO
R1JBVEVfODhfMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgOTYwMDA6Ci0gICAgICBmb3JtYXQu
c2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5HUkFURV85NjsKLSAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbnN1cHBvcnRlZCBzYW1wbGUgcmF0
ZTogIiA8PCBzYW1wbGVfcmF0ZTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGZvcm1hdC5iaXRzUGVy
U2FtcGxlID0gU0xfUENNU0FNUExFRk9STUFUX0ZJWEVEXzE2OwotICBmb3JtYXQuY29udGFpbmVy
U2l6ZSA9IFNMX1BDTVNBTVBMRUZPUk1BVF9GSVhFRF8xNjsKLSAgZm9ybWF0LmVuZGlhbm5lc3Mg
PSBTTF9CWVRFT1JERVJfTElUVExFRU5ESUFOOwotICBpZiAoZm9ybWF0Lm51bUNoYW5uZWxzID09
IDEpIHsKLSAgICBmb3JtYXQuY2hhbm5lbE1hc2sgPSBTTF9TUEVBS0VSX0ZST05UX0NFTlRFUjsK
LSAgfSBlbHNlIGlmIChmb3JtYXQubnVtQ2hhbm5lbHMgPT0gMikgewotICAgIGZvcm1hdC5jaGFu
bmVsTWFzayA9IFNMX1NQRUFLRVJfRlJPTlRfTEVGVCB8IFNMX1NQRUFLRVJfRlJPTlRfUklHSFQ7
Ci0gIH0gZWxzZSB7Ci0gICAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5zdXBwb3J0ZWQgbnVtYmVy
IG9mIGNoYW5uZWxzOiAiCi0gICAgICAgICAgICAgICAgICAgICA8PCBmb3JtYXQubnVtQ2hhbm5l
bHM7Ci0gIH0KLSAgcmV0dXJuIGZvcm1hdDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Ywpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvb3BlbnNsZXNfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzOGM1
MjIwNzIyZTQ5YjdkZGRiNmUxYTU3YmRhZmQ3ODViZTU5OWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24u
aAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaWZuZGVmIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfQ09NTU9OX0hf
Ci0jZGVmaW5lIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfQ09NTU9OX0hf
Ci0KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSNp
bmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIFJl
dHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZ2l2ZW4gYW4gaW50ZWdlciBTTF9SRVNVTFRf
WFhYIGNvZGUuCi0vLyBUaGUgbWFwcGluZyBjYW4gYmUgZm91bmQgaW4gPFNMRVMvT3BlblNMRVMu
aD4uCi1jb25zdCBjaGFyKiBHZXRTTEVycm9yU3RyaW5nKHNpemVfdCBjb2RlKTsKLQotLy8gQ29u
ZmlndXJlcyBhbiBTTF9EQVRBRk9STUFUX1BDTSBzdHJ1Y3R1cmUgYmFzZWQgb24gbmF0aXZlIGF1
ZGlvIHBhcmFtZXRlcnMuCi1TTERhdGFGb3JtYXRfUENNIENyZWF0ZVBDTUNvbmZpZ3VyYXRpb24o
c2l6ZV90IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgYml0c19wZXJfc2FtcGxlKTsKLQotLy8gSGVscGVyIGNsYXNzIGZvciB1c2luZyBT
TE9iamVjdEl0ZiBpbnRlcmZhY2VzLgotdGVtcGxhdGUgPHR5cGVuYW1lIFNMVHlwZSwgdHlwZW5h
bWUgU0xEZXJlZlR5cGU+Ci1jbGFzcyBTY29wZWRTTE9iamVjdCB7Ci0gcHVibGljOgotICBTY29w
ZWRTTE9iamVjdCgpIDogb2JqXyhudWxscHRyKSB7fQotCi0gIH5TY29wZWRTTE9iamVjdCgpIHsg
UmVzZXQoKTsgfQotCi0gIFNMVHlwZSogUmVjZWl2ZSgpIHsKLSAgICBSVENfRENIRUNLKCFvYmpf
KTsKLSAgICByZXR1cm4gJm9ial87Ci0gIH0KLQotICBTTERlcmVmVHlwZSBvcGVyYXRvci0+KCkg
eyByZXR1cm4gKm9ial87IH0KLQotICBTTFR5cGUgR2V0KCkgY29uc3QgeyByZXR1cm4gb2JqXzsg
fQotCi0gIHZvaWQgUmVzZXQoKSB7Ci0gICAgaWYgKG9ial8pIHsKLSAgICAgICgqb2JqXyktPkRl
c3Ryb3kob2JqXyk7Ci0gICAgICBvYmpfID0gbnVsbHB0cjsKLSAgICB9Ci0gIH0KLQotIHByaXZh
dGU6Ci0gIFNMVHlwZSBvYmpfOwotfTsKLQotdHlwZWRlZiBTY29wZWRTTE9iamVjdDxTTE9iamVj
dEl0ZiwgY29uc3QgU0xPYmplY3RJdGZfKj4gU2NvcGVkU0xPYmplY3RJdGY7Ci0KLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBNT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lE
X09QRU5TTEVTX0NPTU1PTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19w
bGF5ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjU4NTFmNzU4MmYzODdhMDg0YzMwMzBhZGZhNDYwODJmNGM5ZTM4
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL29wZW5zbGVzX3BsYXllci5jYworKysgL2Rldi9udWxsCkBAIC0xLDQzNSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmgiCi0KLSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgot
Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYXBpL2FycmF5X3ZpZXcuaCIKLSNpbmNs
dWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1
ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgotI2luY2x1
ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2ZpbmVfYXVkaW9fYnVmZmVyLmgiCi0jaW5jbHVkZSAi
cnRjX2Jhc2UvYXJyYXlzaXplLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5j
bHVkZSAicnRjX2Jhc2UvZm9ybWF0X21hY3Jvcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3BsYXRm
b3JtX3RocmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RpbWVfdXRpbHMuaCIKLQotI2RlZmlu
ZSBUQUcgIk9wZW5TTEVTUGxheWVyIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9sb2df
cHJpbnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxP
R0QoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFf
QVJHU19fKQotI2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9M
T0dfRVJST1IsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRyb2lk
X2xvZ19wcmludChBTkRST0lEX0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBB
TE9HSSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBfX1ZB
X0FSR1NfXykKLQotI2RlZmluZSBSRVRVUk5fT05fRVJST1Iob3AsIC4uLikgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgU0xyZXN1bHQgZXJyID0gKG9wKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChlcnIgIT0gU0xfUkVTVUxUX1NVQ0NFU1Mp
IHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEFMT0dFKCIlcyBmYWlsZWQ6ICVzIiwg
I29wLCBHZXRTTEVycm9yU3RyaW5nKGVycikpOyBcCi0gICAgICByZXR1cm4gX19WQV9BUkdTX187
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQot
bmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLU9wZW5TTEVTUGxheWVyOjpPcGVuU0xFU1BsYXllcihBdWRp
b01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBhdWRpb19tYW5hZ2VyXyhhdWRpb19tYW5h
Z2VyKSwKLSAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX21hbmFnZXItPkdldFBsYXlvdXRB
dWRpb1BhcmFtZXRlcnMoKSksCi0gICAgICBhdWRpb19kZXZpY2VfYnVmZmVyXyhudWxscHRyKSwK
LSAgICAgIGluaXRpYWxpemVkXyhmYWxzZSksCi0gICAgICBwbGF5aW5nXyhmYWxzZSksCi0gICAg
ICBidWZmZXJfaW5kZXhfKDApLAotICAgICAgZW5naW5lXyhudWxscHRyKSwKLSAgICAgIHBsYXll
cl8obnVsbHB0ciksCi0gICAgICBzaW1wbGVfYnVmZmVyX3F1ZXVlXyhudWxscHRyKSwKLSAgICAg
IHZvbHVtZV8obnVsbHB0ciksCi0gICAgICBsYXN0X3BsYXlfdGltZV8oMCkgewotICBBTE9HRCgi
Y3Rvclt0aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIC8vIFVzZSBuYXRpdmUg
YXVkaW8gb3V0cHV0IHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIGF1ZGlvIG1hbmFnZXIgYW5k
Ci0gIC8vIGRlZmluZSB0aGUgUENNIGZvcm1hdCBzdHJ1Y3R1cmUuCi0gIHBjbV9mb3JtYXRfID0g
Q3JlYXRlUENNQ29uZmlndXJhdGlvbihhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uc2Ft
cGxlX3JhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlv
X3BhcmFtZXRlcnNfLmJpdHNfcGVyX3NhbXBsZSgpKTsKLSAgLy8gRGV0YWNoIGZyb20gdGhpcyB0
aHJlYWQgc2luY2Ugd2Ugd2FudCB0byB1c2UgdGhlIGNoZWNrZXIgdG8gdmVyaWZ5IGNhbGxzCi0g
IC8vIGZyb20gdGhlIGludGVybmFsICBhdWRpbyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2VyX29w
ZW5zbGVzXy5EZXRhY2goKTsKLX0KLQotT3BlblNMRVNQbGF5ZXI6On5PcGVuU0xFU1BsYXllcigp
IHsKLSAgQUxPR0QoImR0b3JbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRocmVhZElkKCkpOwotICBS
VENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFRlcm1pbmF0ZSgpOwot
ICBEZXN0cm95QXVkaW9QbGF5ZXIoKTsKLSAgRGVzdHJveU1peCgpOwotICBlbmdpbmVfID0gbnVs
bHB0cjsKLSAgUlRDX0RDSEVDSyghZW5naW5lXyk7Ci0gIFJUQ19EQ0hFQ0soIW91dHB1dF9taXhf
LkdldCgpKTsKLSAgUlRDX0RDSEVDSyghcGxheWVyXyk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9i
dWZmZXJfcXVldWVfKTsKLSAgUlRDX0RDSEVDSyghdm9sdW1lXyk7Ci19Ci0KLWludCBPcGVuU0xF
U1BsYXllcjo6SW5pdCgpIHsKLSAgQUxPR0QoIkluaXRbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRo
cmVhZElkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0g
IGlmIChhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpID09IDIpIHsKLSAgICBBTE9HVygiU3Rl
cmVvIG1vZGUgaXMgZW5hYmxlZCIpOwotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNM
RVNQbGF5ZXI6OlRlcm1pbmF0ZSgpIHsKLSAgQUxPR0QoIlRlcm1pbmF0ZVt0aWQ9JWRdIiwgcnRj
OjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3Vy
cmVudCgpKTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xF
U1BsYXllcjo6SW5pdFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJJbml0UGxheW91dFt0aWQ9JWRdIiwg
cnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklz
Q3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSygh
cGxheWluZ18pOwotICBpZiAoIU9idGFpbkVuZ2luZUludGVyZmFjZSgpKSB7Ci0gICAgQUxPR0Uo
IkZhaWxlZCB0byBvYnRhaW4gU0wgRW5naW5lIGludGVyZmFjZSIpOwotICAgIHJldHVybiAtMTsK
LSAgfQotICBDcmVhdGVNaXgoKTsKLSAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgYnVmZmVyX2lu
ZGV4XyA9IDA7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNQbGF5ZXI6OlN0YXJ0UGxh
eW91dCgpIHsKLSAgQUxPR0QoIlN0YXJ0UGxheW91dFt0aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhy
ZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAg
UlRDX0RDSEVDSyhpbml0aWFsaXplZF8pOwotICBSVENfRENIRUNLKCFwbGF5aW5nXyk7Ci0gIGlm
IChmaW5lX2F1ZGlvX2J1ZmZlcl8pIHsKLSAgICBmaW5lX2F1ZGlvX2J1ZmZlcl8tPlJlc2V0UGxh
eW91dCgpOwotICB9Ci0gIC8vIFRoZSBudW1iZXIgb2YgbG93ZXIgbGF0ZW5jeSBhdWRpbyBwbGF5
ZXJzIGlzIGxpbWl0ZWQsIGhlbmNlIHdlIGNyZWF0ZSB0aGUKLSAgLy8gYXVkaW8gcGxheWVyIGlu
IFN0YXJ0KCkgYW5kIGRlc3Ryb3kgaXQgaW4gU3RvcCgpLgotICBDcmVhdGVBdWRpb1BsYXllcigp
OwotICAvLyBGaWxsIHVwIGF1ZGlvIGJ1ZmZlcnMgdG8gYXZvaWQgaW5pdGlhbCBnbGl0Y2ggYW5k
IHRvIGVuc3VyZSB0aGF0IHBsYXliYWNrCi0gIC8vIHN0YXJ0cyB3aGVuIG1vZGUgaXMgbGF0ZXIg
Y2hhbmdlZCB0byBTTF9QTEFZU1RBVEVfUExBWUlORy4KLSAgLy8gVE9ETyhoZW5yaWthKTogd2Ug
Y2FuIHNhdmUgc29tZSBkZWxheSBieSBvbmx5IG1ha2luZyBvbmUgY2FsbCB0bwotICAvLyBFbnF1
ZXVlUGxheW91dERhdGEuIE1vc3QgbGlrZWx5IG5vdCB3b3J0aCB0aGUgcmlzayBvZiBhZGRpbmcg
YSBnbGl0Y2guCi0gIGxhc3RfcGxheV90aW1lXyA9IHJ0Yzo6VGltZSgpOwotICBmb3IgKGludCBp
ID0gMDsgaSA8IGtOdW1PZk9wZW5TTEVTQnVmZmVyczsgKytpKSB7Ci0gICAgRW5xdWV1ZVBsYXlv
dXREYXRhKHRydWUpOwotICB9Ci0gIC8vIFN0YXJ0IHN0cmVhbWluZyBkYXRhIGJ5IHNldHRpbmcg
dGhlIHBsYXkgc3RhdGUgdG8gU0xfUExBWVNUQVRFX1BMQVlJTkcuCi0gIC8vIEZvciBhIHBsYXll
ciBvYmplY3QsIHdoZW4gdGhlIG9iamVjdCBpcyBpbiB0aGUgU0xfUExBWVNUQVRFX1BMQVlJTkcK
LSAgLy8gc3RhdGUsIGFkZGluZyBidWZmZXJzIHdpbGwgaW1wbGljaXRseSBzdGFydCBwbGF5YmFj
ay4KLSAgUkVUVVJOX09OX0VSUk9SKCgqcGxheWVyXyktPlNldFBsYXlTdGF0ZShwbGF5ZXJfLCBT
TF9QTEFZU1RBVEVfUExBWUlORyksIC0xKTsKLSAgcGxheWluZ18gPSAoR2V0UGxheVN0YXRlKCkg
PT0gU0xfUExBWVNUQVRFX1BMQVlJTkcpOwotICBSVENfRENIRUNLKHBsYXlpbmdfKTsKLSAgcmV0
dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXllcjo6U3RvcFBsYXlvdXQoKSB7Ci0gIEFMT0dE
KCJTdG9wUGxheW91dFt0aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgaWYgKCFpbml0aWFsaXplZF8g
fHwgIXBsYXlpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgLy8gU3RvcCBwbGF5aW5nIGJ5
IHNldHRpbmcgdGhlIHBsYXkgc3RhdGUgdG8gU0xfUExBWVNUQVRFX1NUT1BQRUQuCi0gIFJFVFVS
Tl9PTl9FUlJPUigoKnBsYXllcl8pLT5TZXRQbGF5U3RhdGUocGxheWVyXywgU0xfUExBWVNUQVRF
X1NUT1BQRUQpLCAtMSk7Ci0gIC8vIENsZWFyIHRoZSBidWZmZXIgcXVldWUgdG8gZmx1c2ggb3V0
IGFueSByZW1haW5pbmcgZGF0YS4KLSAgUkVUVVJOX09OX0VSUk9SKCgqc2ltcGxlX2J1ZmZlcl9x
dWV1ZV8pLT5DbGVhcihzaW1wbGVfYnVmZmVyX3F1ZXVlXyksIC0xKTsKLSNpZiBSVENfRENIRUNL
X0lTX09OCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBidWZmZXIgcXVldWUgaXMgaW4gZmFjdCBjbGVh
cmVkIGFzIGl0IHNob3VsZC4KLSAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBidWZm
ZXJfcXVldWVfc3RhdGU7Ci0gICgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pLT5HZXRTdGF0ZShzaW1w
bGVfYnVmZmVyX3F1ZXVlXywgJmJ1ZmZlcl9xdWV1ZV9zdGF0ZSk7Ci0gIFJUQ19EQ0hFQ0tfRVEo
MCwgYnVmZmVyX3F1ZXVlX3N0YXRlLmNvdW50KTsKLSAgUlRDX0RDSEVDS19FUSgwLCBidWZmZXJf
cXVldWVfc3RhdGUuaW5kZXgpOwotI2VuZGlmCi0gIC8vIFRoZSBudW1iZXIgb2YgbG93ZXIgbGF0
ZW5jeSBhdWRpbyBwbGF5ZXJzIGlzIGxpbWl0ZWQsIGhlbmNlIHdlIGNyZWF0ZSB0aGUKLSAgLy8g
YXVkaW8gcGxheWVyIGluIFN0YXJ0KCkgYW5kIGRlc3Ryb3kgaXQgaW4gU3RvcCgpLgotICBEZXN0
cm95QXVkaW9QbGF5ZXIoKTsKLSAgdGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNfLkRldGFjaCgpOwot
ICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgcGxheWluZ18gPSBmYWxzZTsKLSAgcmV0dXJuIDA7
Ci19Ci0KLWludCBPcGVuU0xFU1BsYXllcjo6U3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKGJvb2wm
IGF2YWlsYWJsZSkgewotICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBPcGVuU0xFU1BsYXllcjo6TWF4U3BlYWtlclZvbHVtZSh1aW50MzJfdCYgbWF4Vm9sdW1lKSBj
b25zdCB7Ci0gIHJldHVybiAtMTsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVyOjpNaW5TcGVha2Vy
Vm9sdW1lKHVpbnQzMl90JiBtaW5Wb2x1bWUpIGNvbnN0IHsKLSAgcmV0dXJuIC0xOwotfQotCi1p
bnQgT3BlblNMRVNQbGF5ZXI6OlNldFNwZWFrZXJWb2x1bWUodWludDMyX3Qgdm9sdW1lKSB7Ci0g
IHJldHVybiAtMTsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVyOjpTcGVha2VyVm9sdW1lKHVpbnQz
Ml90JiB2b2x1bWUpIGNvbnN0IHsKLSAgcmV0dXJuIC0xOwotfQotCi12b2lkIE9wZW5TTEVTUGxh
eWVyOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIpIHsK
LSAgQUxPR0QoIkF0dGFjaEF1ZGlvQnVmZmVyIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLklzQ3VycmVudCgpKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb0J1ZmZlcjsK
LSAgY29uc3QgaW50IHNhbXBsZV9yYXRlX2h6ID0gYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3Jh
dGUoKTsKLSAgQUxPR0QoIlNldFBsYXlvdXRTYW1wbGVSYXRlKCVkKSIsIHNhbXBsZV9yYXRlX2h6
KTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFBsYXlvdXRTYW1wbGVSYXRlKHNhbXBsZV9y
YXRlX2h6KTsKLSAgY29uc3Qgc2l6ZV90IGNoYW5uZWxzID0gYXVkaW9fcGFyYW1ldGVyc18uY2hh
bm5lbHMoKTsKLSAgQUxPR0QoIlNldFBsYXlvdXRDaGFubmVscyglIiBSVENfUFJJdVMgIikiLCBj
aGFubmVscyk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRQbGF5b3V0Q2hhbm5lbHMoY2hh
bm5lbHMpOwotICBSVENfQ0hFQ0soYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICBBbGxvY2F0ZURh
dGFCdWZmZXJzKCk7Ci19Ci0KLXZvaWQgT3BlblNMRVNQbGF5ZXI6OkFsbG9jYXRlRGF0YUJ1ZmZl
cnMoKSB7Ci0gIEFMT0dEKCJBbGxvY2F0ZURhdGFCdWZmZXJzIik7Ci0gIFJUQ19EQ0hFQ0sodGhy
ZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyghc2ltcGxlX2J1ZmZlcl9x
dWV1ZV8pOwotICBSVENfQ0hFQ0soYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICAvLyBDcmVhdGUg
YSBtb2RpZmllZCBhdWRpbyBidWZmZXIgY2xhc3Mgd2hpY2ggYWxsb3dzIHVzIHRvIGFzayBmb3Ig
YW55IG51bWJlcgotICAvLyBvZiBzYW1wbGVzIChhbmQgbm90IG9ubHkgbXVsdGlwbGUgb2YgMTBt
cykgdG8gbWF0Y2ggdGhlIG5hdGl2ZSBPcGVuU0wgRVMKLSAgLy8gYnVmZmVyIHNpemUuIFRoZSBu
YXRpdmUgYnVmZmVyIHNpemUgY29ycmVzcG9uZHMgdG8gdGhlCi0gIC8vIFBST1BFUlRZX09VVFBV
VF9GUkFNRVNfUEVSX0JVRkZFUiBwcm9wZXJ0eSB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGF1ZGlv
Ci0gIC8vIGZyYW1lcyB0aGF0IHRoZSBIQUwgKEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyKSBi
dWZmZXIgY2FuIGhvbGQuIEl0IGlzCi0gIC8vIHJlY29tbWVuZGVkIHRvIGNvbnN0cnVjdCBhdWRp
byBidWZmZXJzIHNvIHRoYXQgdGhleSBjb250YWluIGFuIGV4YWN0Ci0gIC8vIG11bHRpcGxlIG9m
IHRoaXMgbnVtYmVyLiBJZiBzbywgY2FsbGJhY2tzIHdpbGwgb2NjdXIgYXQgcmVndWxhciBpbnRl
cnZhbHMsCi0gIC8vIHdoaWNoIHJlZHVjZXMgaml0dGVyLgotICBjb25zdCBzaXplX3QgYnVmZmVy
X3NpemVfaW5fc2FtcGxlcyA9Ci0gICAgICBhdWRpb19wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1
ZmZlcigpICogYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKTsKLSAgQUxPR0QoIm5hdGl2ZSBi
dWZmZXIgc2l6ZTogJSIgUlRDX1BSSXVTLCBidWZmZXJfc2l6ZV9pbl9zYW1wbGVzKTsKLSAgQUxP
R0QoIm5hdGl2ZSBidWZmZXIgc2l6ZSBpbiBtczogJS4yZiIsCi0gICAgICAgIGF1ZGlvX3BhcmFt
ZXRlcnNfLkdldEJ1ZmZlclNpemVJbk1pbGxpc2Vjb25kcygpKTsKLSAgZmluZV9hdWRpb19idWZm
ZXJfID0gc3RkOjptYWtlX3VuaXF1ZTxGaW5lQXVkaW9CdWZmZXI+KGF1ZGlvX2RldmljZV9idWZm
ZXJfKTsKLSAgLy8gQWxsb2NhdGVkIG1lbW9yeSBmb3IgYXVkaW8gYnVmZmVycy4KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrTnVtT2ZPcGVuU0xFU0J1ZmZlcnM7ICsraSkgewotICAgIGF1ZGlvX2J1
ZmZlcnNfW2ldLnJlc2V0KG5ldyBTTGludDE2W2J1ZmZlcl9zaXplX2luX3NhbXBsZXNdKTsKLSAg
fQotfQotCi1ib29sIE9wZW5TTEVTUGxheWVyOjpPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSB7Ci0g
IEFMT0dEKCJPYnRhaW5FbmdpbmVJbnRlcmZhY2UiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoZW5naW5lXykKLSAgICByZXR1cm4gdHJ1ZTsKLSAg
Ly8gR2V0IGFjY2VzcyB0byAob3IgY3JlYXRlIGlmIG5vdCBhbHJlYWR5IGV4aXN0aW5nKSB0aGUg
Z2xvYmFsIE9wZW5TTCBFbmdpbmUKLSAgLy8gb2JqZWN0LgotICBTTE9iamVjdEl0ZiBlbmdpbmVf
b2JqZWN0ID0gYXVkaW9fbWFuYWdlcl8tPkdldE9wZW5TTEVuZ2luZSgpOwotICBpZiAoZW5naW5l
X29iamVjdCA9PSBudWxscHRyKSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBhY2Nlc3MgdGhlIGds
b2JhbCBPcGVuU0wgZW5naW5lIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8vIEdldCB0
aGUgU0wgRW5naW5lIEludGVyZmFjZSB3aGljaCBpcyBpbXBsaWNpdC4KLSAgUkVUVVJOX09OX0VS
Uk9SKAotICAgICAgKCplbmdpbmVfb2JqZWN0KS0+R2V0SW50ZXJmYWNlKGVuZ2luZV9vYmplY3Qs
IFNMX0lJRF9FTkdJTkUsICZlbmdpbmVfKSwKLSAgICAgIGZhbHNlKTsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgT3BlblNMRVNQbGF5ZXI6OkNyZWF0ZU1peCgpIHsKLSAgQUxPR0QoIkNyZWF0
ZU1peCIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJU
Q19EQ0hFQ0soZW5naW5lXyk7Ci0gIGlmIChvdXRwdXRfbWl4Xy5HZXQoKSkKLSAgICByZXR1cm4g
dHJ1ZTsKLQotICAvLyBDcmVhdGUgdGhlIG91cHV0IG1peCBvbiB0aGUgZW5naW5lIG9iamVjdC4g
Tm8gaW50ZXJmYWNlcyB3aWxsIGJlIHVzZWQuCi0gIFJFVFVSTl9PTl9FUlJPUigoKmVuZ2luZV8p
LT5DcmVhdGVPdXRwdXRNaXgoZW5naW5lXywgb3V0cHV0X21peF8uUmVjZWl2ZSgpLCAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxw
dHIpLAotICAgICAgICAgICAgICAgICAgZmFsc2UpOwotICBSRVRVUk5fT05fRVJST1Iob3V0cHV0
X21peF8tPlJlYWxpemUob3V0cHV0X21peF8uR2V0KCksIFNMX0JPT0xFQU5fRkFMU0UpLAotICAg
ICAgICAgICAgICAgICAgZmFsc2UpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBPcGVuU0xF
U1BsYXllcjo6RGVzdHJveU1peCgpIHsKLSAgQUxPR0QoIkRlc3Ryb3lNaXgiKTsKLSAgUlRDX0RD
SEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoIW91dHB1dF9taXhfLkdl
dCgpKQotICAgIHJldHVybjsKLSAgb3V0cHV0X21peF8uUmVzZXQoKTsKLX0KLQotYm9vbCBPcGVu
U0xFU1BsYXllcjo6Q3JlYXRlQXVkaW9QbGF5ZXIoKSB7Ci0gIEFMT0dEKCJDcmVhdGVBdWRpb1Bs
YXllciIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJU
Q19EQ0hFQ0sob3V0cHV0X21peF8uR2V0KCkpOwotICBpZiAocGxheWVyX29iamVjdF8uR2V0KCkp
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIFJUQ19EQ0hFQ0soIXBsYXllcl8pOwotICBSVENfRENIRUNL
KCFzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci0gIFJUQ19EQ0hFQ0soIXZvbHVtZV8pOwotCi0gIC8v
IHNvdXJjZTogQW5kcm9pZCBTaW1wbGUgQnVmZmVyIFF1ZXVlIERhdGEgTG9jYXRvciBpcyBzb3Vy
Y2UuCi0gIFNMRGF0YUxvY2F0b3JfQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlIHNpbXBsZV9idWZm
ZXJfcXVldWUgPSB7Ci0gICAgICBTTF9EQVRBTE9DQVRPUl9BTkRST0lEU0lNUExFQlVGRkVSUVVF
VUUsCi0gICAgICBzdGF0aWNfY2FzdDxTTHVpbnQzMj4oa051bU9mT3BlblNMRVNCdWZmZXJzKX07
Ci0gIFNMRGF0YVNvdXJjZSBhdWRpb19zb3VyY2UgPSB7JnNpbXBsZV9idWZmZXJfcXVldWUsICZw
Y21fZm9ybWF0X307Ci0KLSAgLy8gc2luazogT3V0cHV0TWl4LWJhc2VkIGRhdGEgaXMgc2luay4K
LSAgU0xEYXRhTG9jYXRvcl9PdXRwdXRNaXggbG9jYXRvcl9vdXRwdXRfbWl4ID0ge1NMX0RBVEFM
T0NBVE9SX09VVFBVVE1JWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dF9taXhfLkdldCgpfTsKLSAgU0xEYXRhU2luayBhdWRpb19zaW5rID0g
eyZsb2NhdG9yX291dHB1dF9taXgsIG51bGxwdHJ9OwotCi0gIC8vIERlZmluZSBpbnRlcmZhY2Vz
IHRoYXQgd2UgaW5kZW5kIHRvIHVzZSBhbmQgcmVhbGl6ZS4KLSAgY29uc3QgU0xJbnRlcmZhY2VJ
RCBpbnRlcmZhY2VfaWRzW10gPSB7U0xfSUlEX0FORFJPSURDT05GSUdVUkFUSU9OLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9JSURfQlVGRkVSUVVFVUUsIFNM
X0lJRF9WT0xVTUV9OwotICBjb25zdCBTTGJvb2xlYW4gaW50ZXJmYWNlX3JlcXVpcmVkW10gPSB7
U0xfQk9PTEVBTl9UUlVFLCBTTF9CT09MRUFOX1RSVUUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTTF9CT09MRUFOX1RSVUV9OwotCi0gIC8vIENyZWF0ZSB0aGUg
YXVkaW8gcGxheWVyIG9uIHRoZSBlbmdpbmUgaW50ZXJmYWNlLgotICBSRVRVUk5fT05fRVJST1Io
Ci0gICAgICAoKmVuZ2luZV8pLT5DcmVhdGVBdWRpb1BsYXllcigKLSAgICAgICAgICBlbmdpbmVf
LCBwbGF5ZXJfb2JqZWN0Xy5SZWNlaXZlKCksICZhdWRpb19zb3VyY2UsICZhdWRpb19zaW5rLAot
ICAgICAgICAgIGFycmF5c2l6ZShpbnRlcmZhY2VfaWRzKSwgaW50ZXJmYWNlX2lkcywgaW50ZXJm
YWNlX3JlcXVpcmVkKSwKLSAgICAgIGZhbHNlKTsKLQotICAvLyBVc2UgdGhlIEFuZHJvaWQgY29u
ZmlndXJhdGlvbiBpbnRlcmZhY2UgdG8gc2V0IHBsYXRmb3JtLXNwZWNpZmljCi0gIC8vIHBhcmFt
ZXRlcnMuIFNob3VsZCBiZSBkb25lIGJlZm9yZSBwbGF5ZXIgaXMgcmVhbGl6ZWQuCi0gIFNMQW5k
cm9pZENvbmZpZ3VyYXRpb25JdGYgcGxheWVyX2NvbmZpZzsKLSAgUkVUVVJOX09OX0VSUk9SKAot
ICAgICAgcGxheWVyX29iamVjdF8tPkdldEludGVyZmFjZShwbGF5ZXJfb2JqZWN0Xy5HZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xfSUlEX0FORFJPSURDT05GSUdV
UkFUSU9OLCAmcGxheWVyX2NvbmZpZyksCi0gICAgICBmYWxzZSk7Ci0gIC8vIFNldCBhdWRpbyBw
bGF5ZXIgY29uZmlndXJhdGlvbiB0byBTTF9BTkRST0lEX1NUUkVBTV9WT0lDRSB3aGljaAotICAv
LyBjb3JyZXNwb25kcyB0byBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0Vf
Q0FMTC4KLSAgU0xpbnQzMiBzdHJlYW1fdHlwZSA9IFNMX0FORFJPSURfU1RSRUFNX1ZPSUNFOwot
ICBSRVRVUk5fT05fRVJST1IoCi0gICAgICAoKnBsYXllcl9jb25maWcpCi0gICAgICAgICAgLT5T
ZXRDb25maWd1cmF0aW9uKHBsYXllcl9jb25maWcsIFNMX0FORFJPSURfS0VZX1NUUkVBTV9UWVBF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyZWFtX3R5cGUsIHNpemVvZihTTGlu
dDMyKSksCi0gICAgICBmYWxzZSk7Ci0KLSAgLy8gUmVhbGl6ZSB0aGUgYXVkaW8gcGxheWVyIG9i
amVjdCBhZnRlciBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNldC4KLSAgUkVUVVJOX09OX0VSUk9S
KAotICAgICAgcGxheWVyX29iamVjdF8tPlJlYWxpemUocGxheWVyX29iamVjdF8uR2V0KCksIFNM
X0JPT0xFQU5fRkFMU0UpLCBmYWxzZSk7Ci0KLSAgLy8gR2V0IHRoZSBTTFBsYXlJdGYgaW50ZXJm
YWNlIG9uIHRoZSBhdWRpbyBwbGF5ZXIuCi0gIFJFVFVSTl9PTl9FUlJPUigKLSAgICAgIHBsYXll
cl9vYmplY3RfLT5HZXRJbnRlcmZhY2UocGxheWVyX29iamVjdF8uR2V0KCksIFNMX0lJRF9QTEFZ
LCAmcGxheWVyXyksCi0gICAgICBmYWxzZSk7Ci0KLSAgLy8gR2V0IHRoZSBTTEFuZHJvaWRTaW1w
bGVCdWZmZXJRdWV1ZUl0ZiBpbnRlcmZhY2Ugb24gdGhlIGF1ZGlvIHBsYXllci4KLSAgUkVUVVJO
X09OX0VSUk9SKAotICAgICAgcGxheWVyX29iamVjdF8tPkdldEludGVyZmFjZShwbGF5ZXJfb2Jq
ZWN0Xy5HZXQoKSwgU0xfSUlEX0JVRkZFUlFVRVVFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pLAotICAgICAgZmFsc2UpOwotCi0gIC8v
IFJlZ2lzdGVyIGNhbGxiYWNrIG1ldGhvZCBmb3IgdGhlIEFuZHJvaWQgU2ltcGxlIEJ1ZmZlciBR
dWV1ZSBpbnRlcmZhY2UuCi0gIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhl
IG5hdGl2ZSBhdWRpbyBsYXllciBuZWVkcyBhdWRpbyBkYXRhLgotICBSRVRVUk5fT05fRVJST1Io
KCpzaW1wbGVfYnVmZmVyX3F1ZXVlXykKLSAgICAgICAgICAgICAgICAgICAgICAtPlJlZ2lzdGVy
Q2FsbGJhY2soc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNpbXBsZUJ1ZmZlclF1ZXVlQ2FsbGJhY2ssIHRoaXMpLAotICAgICAg
ICAgICAgICAgICAgZmFsc2UpOwotCi0gIC8vIEdldCB0aGUgU0xWb2x1bWVJdGYgaW50ZXJmYWNl
IG9uIHRoZSBhdWRpbyBwbGF5ZXIuCi0gIFJFVFVSTl9PTl9FUlJPUihwbGF5ZXJfb2JqZWN0Xy0+
R2V0SW50ZXJmYWNlKHBsYXllcl9vYmplY3RfLkdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9JSURfVk9MVU1FLCAmdm9sdW1lXyksCi0gICAg
ICAgICAgICAgICAgICBmYWxzZSk7Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogbWlnaHQgbm90IGJl
IHJlcXVpcmVkIHRvIHNldCB2b2x1bWUgdG8gbWF4IGhlcmUgc2luY2UgaXQKLSAgLy8gc2VlbXMg
dG8gYmUgZGVmYXVsdCBvbiBtb3N0IGRldmljZXMuIE1pZ2h0IGJlIHJlcXVpcmVkIGZvciB1bml0
IHRlc3RzLgotICAvLyBSRVRVUk5fT05fRVJST1IoKCp2b2x1bWVfKS0+U2V0Vm9sdW1lTGV2ZWwo
dm9sdW1lXywgMCksIGZhbHNlKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBPcGVuU0xF
U1BsYXllcjo6RGVzdHJveUF1ZGlvUGxheWVyKCkgewotICBBTE9HRCgiRGVzdHJveUF1ZGlvUGxh
eWVyIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgaWYg
KCFwbGF5ZXJfb2JqZWN0Xy5HZXQoKSkKLSAgICByZXR1cm47Ci0gICgqc2ltcGxlX2J1ZmZlcl9x
dWV1ZV8pCi0gICAgICAtPlJlZ2lzdGVyQ2FsbGJhY2soc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sIG51
bGxwdHIsIG51bGxwdHIpOwotICBwbGF5ZXJfb2JqZWN0Xy5SZXNldCgpOwotICBwbGF5ZXJfID0g
bnVsbHB0cjsKLSAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8gPSBudWxscHRyOwotICB2b2x1bWVfID0g
bnVsbHB0cjsKLX0KLQotLy8gc3RhdGljCi12b2lkIE9wZW5TTEVTUGxheWVyOjpTaW1wbGVCdWZm
ZXJRdWV1ZUNhbGxiYWNrKAotICAgIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGNhbGxl
ciwKLSAgICB2b2lkKiBjb250ZXh0KSB7Ci0gIE9wZW5TTEVTUGxheWVyKiBzdHJlYW0gPSByZWlu
dGVycHJldF9jYXN0PE9wZW5TTEVTUGxheWVyKj4oY29udGV4dCk7Ci0gIHN0cmVhbS0+RmlsbEJ1
ZmZlclF1ZXVlKCk7Ci19Ci0KLXZvaWQgT3BlblNMRVNQbGF5ZXI6OkZpbGxCdWZmZXJRdWV1ZSgp
IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl9vcGVuc2xlc18uSXNDdXJyZW50KCkpOwot
ICBTTHVpbnQzMiBzdGF0ZSA9IEdldFBsYXlTdGF0ZSgpOwotICBpZiAoc3RhdGUgIT0gU0xfUExB
WVNUQVRFX1BMQVlJTkcpIHsKLSAgICBBTE9HVygiQnVmZmVyIGNhbGxiYWNrIGluIG5vbi1wbGF5
aW5nIHN0YXRlISIpOwotICAgIHJldHVybjsKLSAgfQotICBFbnF1ZXVlUGxheW91dERhdGEoZmFs
c2UpOwotfQotCi12b2lkIE9wZW5TTEVTUGxheWVyOjpFbnF1ZXVlUGxheW91dERhdGEoYm9vbCBz
aWxlbmNlKSB7Ci0gIC8vIENoZWNrIGRlbHRhIHRpbWUgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBj
YWxsYmFja3MgYW5kIHByb3ZpZGUgYSB3YXJuaW5nCi0gIC8vIGlmIGl0IGJlY29tZXMgdmVyeSBs
YXJnZS4KLSAgLy8gVE9ETyhoZW5yaWthKTogdXNpbmcgMTUwbXMgYXMgdXBwZXIgbGltaXQgYnV0
IHRoaXMgdmFsdWUgaXMgcmF0aGVyIHJhbmRvbS4KLSAgY29uc3QgdWludDMyX3QgY3VycmVudF90
aW1lID0gcnRjOjpUaW1lKCk7Ci0gIGNvbnN0IHVpbnQzMl90IGRpZmYgPSBjdXJyZW50X3RpbWUg
LSBsYXN0X3BsYXlfdGltZV87Ci0gIGlmIChkaWZmID4gMTUwKSB7Ci0gICAgQUxPR1coIkJhZCBP
cGVuU0wgRVMgcGxheW91dCB0aW1pbmcsIGRUPSV1IFttc10iLCBkaWZmKTsKLSAgfQotICBsYXN0
X3BsYXlfdGltZV8gPSBjdXJyZW50X3RpbWU7Ci0gIFNMaW50OCogYXVkaW9fcHRyOCA9Ci0gICAg
ICByZWludGVycHJldF9jYXN0PFNMaW50OCo+KGF1ZGlvX2J1ZmZlcnNfW2J1ZmZlcl9pbmRleF9d
LmdldCgpKTsKLSAgaWYgKHNpbGVuY2UpIHsKLSAgICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
Xy5Jc0N1cnJlbnQoKSk7Ci0gICAgLy8gQXZvaWQgYWNxdWlyaW5nIHJlYWwgYXVkaW8gZGF0YSBm
cm9tIFdlYlJUQyBhbmQgZmlsbCB0aGUgYnVmZmVyIHdpdGgKLSAgICAvLyB6ZXJvcyBpbnN0ZWFk
LiBVc2VkIHRvIHByaW1lIHRoZSBidWZmZXIgd2l0aCBzaWxlbmNlIGFuZCB0byBhdm9pZCBhc2tp
bmcKLSAgICAvLyBmb3IgYXVkaW8gZGF0YSBmcm9tIHR3byBkaWZmZXJlbnQgdGhyZWFkcy4KLSAg
ICBtZW1zZXQoYXVkaW9fcHRyOCwgMCwgYXVkaW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZm
ZXIoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl9vcGVuc2xl
c18uSXNDdXJyZW50KCkpOwotICAgIC8vIFJlYWQgYXVkaW8gZGF0YSBmcm9tIHRoZSBXZWJSVEMg
c291cmNlIHVzaW5nIHRoZSBGaW5lQXVkaW9CdWZmZXIgb2JqZWN0Ci0gICAgLy8gdG8gYWRqdXN0
IGZvciBkaWZmZXJlbmNlcyBpbiBidWZmZXIgc2l6ZSBiZXR3ZWVuIFdlYlJUQyAoMTBtcykgYW5k
IG5hdGl2ZQotICAgIC8vIE9wZW5TTCBFUy4gVXNlIGhhcmRjb2RlZCBkZWxheSBlc3RpbWF0ZSBz
aW5jZSBPcGVuU0wgRVMgZG9lcyBub3Qgc3VwcG9ydAotICAgIC8vIGRlbGF5IGVzdGltYXRpb24u
Ci0gICAgZmluZV9hdWRpb19idWZmZXJfLT5HZXRQbGF5b3V0RGF0YSgKLSAgICAgICAgcnRjOjpB
cnJheVZpZXc8aW50MTZfdD4oYXVkaW9fYnVmZmVyc19bYnVmZmVyX2luZGV4X10uZ2V0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLmZyYW1lc19w
ZXJfYnVmZmVyKCkgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9f
cGFyYW1ldGVyc18uY2hhbm5lbHMoKSksCi0gICAgICAgIDI1KTsKLSAgfQotICAvLyBFbnF1ZXVl
IHRoZSBkZWNvZGVkIGF1ZGlvIGJ1ZmZlciBmb3IgcGxheWJhY2suCi0gIFNMcmVzdWx0IGVyciA9
ICgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAgICAgICAgICAgICAgICAtPkVucXVldWUo
c2ltcGxlX2J1ZmZlcl9xdWV1ZV8sIGF1ZGlvX3B0cjgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIGlmIChT
TF9SRVNVTFRfU1VDQ0VTUyAhPSBlcnIpIHsKLSAgICBBTE9HRSgiRW5xdWV1ZSBmYWlsZWQ6ICVk
IiwgZXJyKTsKLSAgfQotICBidWZmZXJfaW5kZXhfID0gKGJ1ZmZlcl9pbmRleF8gKyAxKSAlIGtO
dW1PZk9wZW5TTEVTQnVmZmVyczsKLX0KLQotU0x1aW50MzIgT3BlblNMRVNQbGF5ZXI6OkdldFBs
YXlTdGF0ZSgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhwbGF5ZXJfKTsKLSAgU0x1aW50MzIgc3Rh
dGU7Ci0gIFNMcmVzdWx0IGVyciA9ICgqcGxheWVyXyktPkdldFBsYXlTdGF0ZShwbGF5ZXJfLCAm
c3RhdGUpOwotICBpZiAoU0xfUkVTVUxUX1NVQ0NFU1MgIT0gZXJyKSB7Ci0gICAgQUxPR0UoIkdl
dFBsYXlTdGF0ZSBmYWlsZWQ6ICVkIiwgZXJyKTsKLSAgfQotICByZXR1cm4gc3RhdGU7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNs
ZXNfcGxheWVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyMDEwNzU4NWE2OTk4ZTcxMmNkM2Q2ODlmNmVkZWY5NjBhNjZl
NjI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgTU9EVUxFU19BVURJT19ERVZJQ0Vf
QU5EUk9JRF9PUEVOU0xFU19QTEFZRVJfSF8KLSNkZWZpbmUgTU9EVUxFU19BVURJT19ERVZJQ0Vf
QU5EUk9JRF9PUEVOU0xFU19QTEFZRVJfSF8KLQotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVMuaD4K
LSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJvaWQuaD4KLSNpbmNsdWRlIDxTTEVTL09wZW5T
TEVTX0FuZHJvaWRDb25maWd1cmF0aW9uLmg+Ci0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19k
ZXZpY2UvYXVkaW9fZGV2aWNlX2dlbmVyaWMuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rl
dmljZS9pbmNsdWRlL2F1ZGlvX2RldmljZV9kZWZpbmVzLmgiCi0jaW5jbHVkZSAibW9kdWxlcy91
dGlsaXR5L2luY2x1ZGUvaGVscGVyc19hbmRyb2lkLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGhy
ZWFkX2NoZWNrZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLWNsYXNzIEZpbmVBdWRpb0J1
ZmZlcjsKLQotLy8gSW1wbGVtZW50cyAxNi1iaXQgbW9ubyBQQ00gYXVkaW8gb3V0cHV0IHN1cHBv
cnQgZm9yIEFuZHJvaWQgdXNpbmcgdGhlCi0vLyBDIGJhc2VkIE9wZW5TTCBFUyBBUEkuIE5vIGNh
bGxzIGZyb20gQy9DKysgdG8gSmF2YSB1c2luZyBKTkkgaXMgZG9uZS4KLS8vCi0vLyBBbiBpbnN0
YW5jZSBtdXN0IGJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBvbmUgYW5kIHRoZSBzYW1lIHRo
cmVhZC4KLS8vIEFsbCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUgY2FsbGVkIG9uIHRoZSBz
YW1lIHRocmVhZC4gQSB0aHJlYWQgY2hlY2tlcgotLy8gd2lsbCBSVENfRENIRUNLIGlmIGFueSBt
ZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLiBEZWNvZGVkIGF1ZGlvCi0vLyBi
dWZmZXJzIGFyZSByZXF1ZXN0ZWQgb24gYSBkZWRpY2F0ZWQgaW50ZXJuYWwgdGhyZWFkIG1hbmFn
ZWQgYnkgdGhlIE9wZW5TTAotLy8gRVMgbGF5ZXIuCi0vLwotLy8gVGhlIGV4aXN0aW5nIGRlc2ln
biBmb3JjZXMgdGhlIHVzZXIgdG8gY2FsbCBJbml0UGxheW91dCgpIGFmdGVyIFN0b3BsYXlvdXQo
KQotLy8gdG8gYmUgYWJsZSB0byBjYWxsIFN0YXJ0UGxheW91dCgpIGFnYWluLiBUaGlzIGlzIGlu
bGluZSB3aXRoIGhvdyB0aGUgSmF2YS0KLS8vIGJhc2VkIGltcGxlbWVudGF0aW9uIHdvcmtzLgot
Ly8KLS8vIE9wZW5TTCBFUyBpcyBhIG5hdGl2ZSBDIEFQSSB3aGljaCBoYXZlIG5vIERhbHZpay1y
ZWxhdGVkIG92ZXJoZWFkIHN1Y2ggYXMKLS8vIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgYW5k
IGl0IHN1cHBvcnRzIHJlZHVjZWQgYXVkaW8gb3V0cHV0IGxhdGVuY3kuCi0vLyBJZiB0aGUgZGV2
aWNlIGRvZXNuJ3QgY2xhaW0gdGhpcyBmZWF0dXJlIGJ1dCBzdXBwb3J0cyBBUEkgbGV2ZWwgOSAo
QW5kcm9pZAotLy8gcGxhdGZvcm0gdmVyc2lvbiAyLjMpIG9yIGxhdGVyLCB0aGVuIHdlIGNhbiBz
dGlsbCB1c2UgdGhlIE9wZW5TTCBFUyBBUElzIGJ1dAotLy8gdGhlIG91dHB1dCBsYXRlbmN5IG1h
eSBiZSBoaWdoZXIuCi1jbGFzcyBPcGVuU0xFU1BsYXllciB7Ci0gcHVibGljOgotICAvLyBCZWdp
bm5pbmcgd2l0aCBBUEkgbGV2ZWwgMTcgKEFuZHJvaWQgNC4yKSwgYSBidWZmZXIgY291bnQgb2Yg
MiBvciBtb3JlIGlzCi0gIC8vIHJlcXVpcmVkIGZvciBsb3dlciBsYXRlbmN5LiBCZWdpbm5pbmcg
d2l0aCBBUEkgbGV2ZWwgMTggKEFuZHJvaWQgNC4zKSwgYQotICAvLyBidWZmZXIgY291bnQgb2Yg
MSBpcyBzdWZmaWNpZW50IGZvciBsb3dlciBsYXRlbmN5LiBJbiBhZGRpdGlvbiwgdGhlIGJ1ZmZl
cgotICAvLyBzaXplIGFuZCBzYW1wbGUgcmF0ZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUg
ZGV2aWNlJ3MgbmF0aXZlIG91dHB1dAotICAvLyBjb25maWd1cmF0aW9uIHByb3ZpZGVkIHZpYSB0
aGUgYXVkaW8gbWFuYWdlciBhdCBjb25zdHJ1Y3Rpb24uCi0gIC8vIFRPRE8oaGVucmlrYSk6IHBl
cmhhcHMgc2V0IHRoaXMgdmFsdWUgZHluYW1pY2FsbHkgYmFzZWQgb24gT1MgdmVyc2lvbi4KLSAg
c3RhdGljIGNvbnN0IGludCBrTnVtT2ZPcGVuU0xFU0J1ZmZlcnMgPSAyOwotCi0gIGV4cGxpY2l0
IE9wZW5TTEVTUGxheWVyKEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcik7Ci0gIH5PcGVuU0xF
U1BsYXllcigpOwotCi0gIGludCBJbml0KCk7Ci0gIGludCBUZXJtaW5hdGUoKTsKLQotICBpbnQg
SW5pdFBsYXlvdXQoKTsKLSAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0
dXJuIGluaXRpYWxpemVkXzsgfQotCi0gIGludCBTdGFydFBsYXlvdXQoKTsKLSAgaW50IFN0b3BQ
bGF5b3V0KCk7Ci0gIGJvb2wgUGxheWluZygpIGNvbnN0IHsgcmV0dXJuIHBsYXlpbmdfOyB9Ci0K
LSAgaW50IFNwZWFrZXJWb2x1bWVJc0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpOwotICBpbnQg
U2V0U3BlYWtlclZvbHVtZSh1aW50MzJfdCB2b2x1bWUpOwotICBpbnQgU3BlYWtlclZvbHVtZSh1
aW50MzJfdCYgdm9sdW1lKSBjb25zdDsKLSAgaW50IE1heFNwZWFrZXJWb2x1bWUodWludDMyX3Qm
IG1heFZvbHVtZSkgY29uc3Q7Ci0gIGludCBNaW5TcGVha2VyVm9sdW1lKHVpbnQzMl90JiBtaW5W
b2x1bWUpIGNvbnN0OwotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZm
ZXIqIGF1ZGlvQnVmZmVyKTsKLQotIHByaXZhdGU6Ci0gIC8vIFRoZXNlIGNhbGxiYWNrIG1ldGhv
ZHMgYXJlIGNhbGxlZCB3aGVuIGRhdGEgaXMgcmVxdWlyZWQgZm9yIHBsYXlvdXQuCi0gIC8vIFRo
ZXkgYXJlIGJvdGggY2FsbGVkIGZyb20gYW4gaW50ZXJuYWwgIk9wZW5TTCBFUyB0aHJlYWQiIHdo
aWNoIGlzIG5vdAotICAvLyBhdHRhY2hlZCB0byB0aGUgRGFsdmlrIFZNLgotICBzdGF0aWMgdm9p
ZCBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrKFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRm
IGNhbGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBj
b250ZXh0KTsKLSAgdm9pZCBGaWxsQnVmZmVyUXVldWUoKTsKLSAgLy8gUmVhZHMgYXVkaW8gZGF0
YSBpbiBQQ00gZm9ybWF0IHVzaW5nIHRoZSBBdWRpb0RldmljZUJ1ZmZlci4KLSAgLy8gQ2FuIGJl
IGNhbGxlZCBib3RoIG9uIHRoZSBtYWluIHRocmVhZCAoZHVyaW5nIFN0YXJ0KCkpIGFuZCBmcm9t
IHRoZQotICAvLyBpbnRlcm5hbCBhdWRpbyB0aHJlYWQgd2hpbGUgb3V0cHV0IHN0cmVhbWluZyBp
cyBhY3RpdmUuCi0gIC8vIElmIHRoZSB8c2lsZW5jZXwgZmxhZyBpcyBzZXQsIHRoZSBhdWRpbyBp
cyBmaWxsZWQgd2l0aCB6ZXJvcyBpbnN0ZWFkIG9mCi0gIC8vIGFza2luZyB0aGUgV2ViUlRDIGxh
eWVyIGZvciByZWFsIGF1ZGlvIGRhdGEuIFRoaXMgcHJvY2VkdXJlIGlzIGFsc28ga25vd24KLSAg
Ly8gYXMgYXVkaW8gcHJpbWluZy4KLSAgdm9pZCBFbnF1ZXVlUGxheW91dERhdGEoYm9vbCBzaWxl
bmNlKTsKLQotICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGF1ZGlvIGJ1ZmZlcnMgd2hpY2ggd2ls
bCBiZSB1c2VkIHRvIHJlbmRlciBhdWRpbwotICAvLyB2aWEgdGhlIFNMQW5kcm9pZFNpbXBsZUJ1
ZmZlclF1ZXVlSXRmIGludGVyZmFjZS4KLSAgdm9pZCBBbGxvY2F0ZURhdGFCdWZmZXJzKCk7Ci0K
LSAgLy8gT2J0YWluZXMgdGhlIFNMIEVuZ2luZSBJbnRlcmZhY2UgZnJvbSB0aGUgZXhpc3Rpbmcg
Z2xvYmFsIEVuZ2luZSBvYmplY3QuCi0gIC8vIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyBjcmVhdGlv
biBtZXRob2RzIG9mIGFsbCB0aGUgT3BlblNMIEVTIG9iamVjdCB0eXBlcy4KLSAgLy8gVGhpcyBt
ZXRob2QgZGVmaW5lcyB0aGUgfGVuZ2luZV98IG1lbWJlciB2YXJpYWJsZS4KLSAgYm9vbCBPYnRh
aW5FbmdpbmVJbnRlcmZhY2UoKTsKLQotICAvLyBDcmVhdGVzL2Rlc3Ryb3lzIHRoZSBvdXRwdXQg
bWl4IG9iamVjdC4KLSAgYm9vbCBDcmVhdGVNaXgoKTsKLSAgdm9pZCBEZXN0cm95TWl4KCk7Ci0K
LSAgLy8gQ3JlYXRlcy9kZXN0cm95cyB0aGUgYXVkaW8gcGxheWVyIGFuZCB0aGUgc2ltcGxlLWJ1
ZmZlciBvYmplY3QuCi0gIC8vIEFsc28gY3JlYXRlcyB0aGUgdm9sdW1lIG9iamVjdC4KLSAgYm9v
bCBDcmVhdGVBdWRpb1BsYXllcigpOwotICB2b2lkIERlc3Ryb3lBdWRpb1BsYXllcigpOwotCi0g
IFNMdWludDMyIEdldFBsYXlTdGF0ZSgpIGNvbnN0OwotCi0gIC8vIEVuc3VyZXMgdGhhdCBtZXRo
b2RzIGFyZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgYXMgdGhpcyBvYmplY3QgaXMKLSAg
Ly8gY3JlYXRlZCBvbi4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyXzsKLQot
ICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8gU2ltcGxlQnVmZmVyUXVldWVD
YWxsYmFjaygpIGZyb20gaW50ZXJuYWwKLSAgLy8gbm9uLWFwcGxpY2F0aW9uIHRocmVhZCB3aGlj
aCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIERhbHZpayBKVk0uCi0gIC8vIERldGFjaGVkIGR1cmlu
ZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBvYmplY3QuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJl
YWRfY2hlY2tlcl9vcGVuc2xlc187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgdG8gdGhlIGF1ZGlvIG1h
bmFnZXIgaW5qZWN0ZWQgYXQgY29uc3RydWN0aW9uLiBVc2VkIHRvIGNhY2hlCi0gIC8vIGF1ZGlv
IHBhcmFtZXRlcnMgYW5kIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIFNMIGVuZ2luZSBvYmplY3QgbmVl
ZGVkIGJ5IHRoZQotICAvLyBPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSBtZXRob2QuIFRoZSBhdWRp
byBtYW5hZ2VyIG91dGxpdmVzIGFueSBpbnN0YW5jZSBvZgotICAvLyB0aGlzIGNsYXNzLgotICBB
dWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXJfOwotCi0gIC8vIENvbnRhaW5zIGF1ZGlvIHBhcmFt
ZXRlcnMgcHJvdmlkZWQgdG8gdGhpcyBjbGFzcyBhdCBjb25zdHJ1Y3Rpb24gYnkgdGhlCi0gIC8v
IEF1ZGlvTWFuYWdlci4KLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1ZGlvX3BhcmFtZXRlcnNf
OwotCi0gIC8vIFJhdyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hBdWRp
b0J1ZmZlcigpLiBPd25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNsYXNz
IGFuZCBjYWxsZWQgYnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgotICBBdWRpb0Rldmlj
ZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1ZmZlcl87Ci0KLSAgYm9vbCBpbml0aWFsaXplZF87Ci0g
IGJvb2wgcGxheWluZ187Ci0KLSAgLy8gUENNLXR5cGUgZm9ybWF0IGRlZmluaXRpb24uCi0gIC8v
IFRPRE8oaGVucmlrYSk6IGFkZCBzdXBwb3J0IGZvciBTTEFuZHJvaWREYXRhRm9ybWF0X1BDTV9F
WCAoYW5kcm9pZC0yMSkgaWYKLSAgLy8gMzItYml0IGZsb2F0IHJlcHJlc2VudGF0aW9uIGlzIG5l
ZWRlZC4KLSAgU0xEYXRhRm9ybWF0X1BDTSBwY21fZm9ybWF0XzsKLQotICAvLyBRdWV1ZSBvZiBh
dWRpbyBidWZmZXJzIHRvIGJlIHVzZWQgYnkgdGhlIHBsYXllciBvYmplY3QgZm9yIHJlbmRlcmlu
ZwotICAvLyBhdWRpby4KLSAgc3RkOjp1bmlxdWVfcHRyPFNMaW50MTZbXT4gYXVkaW9fYnVmZmVy
c19ba051bU9mT3BlblNMRVNCdWZmZXJzXTsKLQotICAvLyBGaW5lQXVkaW9CdWZmZXIgdGFrZXMg
YW4gQXVkaW9EZXZpY2VCdWZmZXIgd2hpY2ggZGVsaXZlcnMgYXVkaW8gZGF0YQotICAvLyBpbiBj
aHVua3Mgb2YgMTBtcy4gSXQgdGhlbiBhbGxvd3MgZm9yIHRoaXMgZGF0YSB0byBiZSBwdWxsZWQg
aW4KLSAgLy8gYSBmaW5lciBvciBjb2Fyc2VyIGdyYW51bGFyaXR5LiBJLmUuIGludGVyYWN0aW5n
IHdpdGggdGhpcyBjbGFzcyBpbnN0ZWFkCi0gIC8vIG9mIGRpcmVjdGx5IHdpdGggdGhlIEF1ZGlv
RGV2aWNlQnVmZmVyIG9uZSBjYW4gYXNrIGZvciBhbnkgbnVtYmVyIG9mCi0gIC8vIGF1ZGlvIGRh
dGEgc2FtcGxlcy4KLSAgLy8gRXhhbXBsZTogbmF0aXZlIGJ1ZmZlciBzaXplIGNhbiBiZSAxOTIg
YXVkaW8gZnJhbWVzIGF0IDQ4a0h6IHNhbXBsZSByYXRlLgotICAvLyBXZWJSVEMgd2lsbCBwcm92
aWRlIDQ4MCBhdWRpbyBmcmFtZXMgcGVyIDEwbXMgYnV0IE9wZW5TTCBFUyBhc2tzIGZvciAxOTIK
LSAgLy8gaW4gZWFjaCBjYWxsYmFjayAob25lIGV2ZXJ5IDR0aCBtcykuIFRoaXMgY2xhc3MgY2Fu
IHRoZW4gYXNrIGZvciAxOTIgYW5kCi0gIC8vIHRoZSBGaW5lQXVkaW9CdWZmZXIgd2lsbCBhc2sg
V2ViUlRDIGZvciBuZXcgZGF0YSBhcHByb3hpbWF0ZWx5IG9ubHkgZXZlcnkKLSAgLy8gc2Vjb25k
IGNhbGxiYWNrIGFuZCBhbHNvIGNhY2hlIG5vbi11dGlsaXplZCBhdWRpby4KLSAgc3RkOjp1bmlx
dWVfcHRyPEZpbmVBdWRpb0J1ZmZlcj4gZmluZV9hdWRpb19idWZmZXJfOwotCi0gIC8vIEtlZXBz
IHRyYWNrIG9mIGFjdGl2ZSBhdWRpbyBidWZmZXIgJ24nIGluIHRoZSBhdWRpb19idWZmZXJzX1tu
XSBxdWV1ZS4KLSAgLy8gRXhhbXBsZSAoa051bU9mT3BlblNMRVNCdWZmZXJzID0gMik6IGNvdW50
cyAwLCAxLCAwLCAxLCAuLi4KLSAgaW50IGJ1ZmZlcl9pbmRleF87Ci0KLSAgLy8gVGhpcyBpbnRl
cmZhY2UgZXhwb3NlcyBjcmVhdGlvbiBtZXRob2RzIGZvciBhbGwgdGhlIE9wZW5TTCBFUyBvYmpl
Y3QgdHlwZXMuCi0gIC8vIEl0IGlzIHRoZSBPcGVuU0wgRVMgQVBJIGVudHJ5IHBvaW50LgotICBT
TEVuZ2luZUl0ZiBlbmdpbmVfOwotCi0gIC8vIE91dHB1dCBtaXggb2JqZWN0IHRvIGJlIHVzZWQg
YnkgdGhlIHBsYXllciBvYmplY3QuCi0gIHdlYnJ0Yzo6U2NvcGVkU0xPYmplY3RJdGYgb3V0cHV0
X21peF87Ci0KLSAgLy8gVGhlIGF1ZGlvIHBsYXllciBtZWRpYSBvYmplY3QgcGxheXMgb3V0IGF1
ZGlvIHRvIHRoZSBzcGVha2Vycy4gSXQgYWxzbwotICAvLyBzdXBwb3J0cyB2b2x1bWUgY29udHJv
bC4KLSAgd2VicnRjOjpTY29wZWRTTE9iamVjdEl0ZiBwbGF5ZXJfb2JqZWN0XzsKLQotICAvLyBU
aGlzIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQgb24gdGhlIGF1ZGlvIHBsYXllciBhbmQgaXQgY29u
dHJvbHMgdGhlIHN0YXRlCi0gIC8vIG9mIHRoZSBhdWRpbyBwbGF5ZXIuCi0gIFNMUGxheUl0ZiBw
bGF5ZXJfOwotCi0gIC8vIFRoZSBBbmRyb2lkIFNpbXBsZSBCdWZmZXIgUXVldWUgaW50ZXJmYWNl
IGlzIHN1cHBvcnRlZCBvbiB0aGUgYXVkaW8gcGxheWVyCi0gIC8vIGFuZCBpdCBwcm92aWRlcyBt
ZXRob2RzIHRvIHNlbmQgYXVkaW8gZGF0YSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGF1ZGlvCi0g
IC8vIHBsYXllciBmb3IgcmVuZGVyaW5nLgotICBTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZUl0
ZiBzaW1wbGVfYnVmZmVyX3F1ZXVlXzsKLQotICAvLyBUaGlzIGludGVyZmFjZSBleHBvc2VzIGNv
bnRyb2xzIGZvciBtYW5pcHVsYXRpbmcgdGhlIG9iamVjdOKAmXMgYXVkaW8gdm9sdW1lCi0gIC8v
IHByb3BlcnRpZXMuIFRoaXMgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCBvbiB0aGUgQXVkaW8gUGxh
eWVyIG9iamVjdC4KLSAgU0xWb2x1bWVJdGYgdm9sdW1lXzsKLQotICAvLyBMYXN0IHRpbWUgdGhl
IE9wZW5TTCBFUyBsYXllciBhc2tlZCBmb3IgYXVkaW8gZGF0YSB0byBwbGF5IG91dC4KLSAgdWlu
dDMyX3QgbGFzdF9wbGF5X3RpbWVfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0j
ZW5kaWYgIC8vIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfUExBWUVSX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9vcGVuc2xlc19yZWNvcmRlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGJlY2QyMDJjY2M2MjBkYjE3MjUyMDAyZGE5NTIxYTQ4NTdiMTU5Ni4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVz
X3JlY29yZGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVu
c2xlc19yZWNvcmRlci5oIgotCi0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLQotI2luY2x1ZGUg
PG1lbW9yeT4KLQotI2luY2x1ZGUgImFwaS9hcnJheV92aWV3LmgiCi0jaW5jbHVkZSAibW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNpbmNsdWRlICJtb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJtb2R1bGVz
L2F1ZGlvX2RldmljZS9maW5lX2F1ZGlvX2J1ZmZlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2Fy
cmF5c2l6ZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9wbGF0Zm9ybV90aHJlYWQu
aCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1lX3V0aWxzLmgiCi0KLSNkZWZpbmUgVEFHICJPcGVu
U0xFU1JlY29yZGVyIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5E
Uk9JRF9MT0dfVkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR0QoLi4uKSBf
X2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFfQVJHU19fKQot
I2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1Is
IFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRyb2lkX2xvZ19wcmlu
dChBTkRST0lEX0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HSSguLi4p
IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBfX1ZBX0FSR1NfXykK
LQotI2RlZmluZSBMT0dfT05fRVJST1Iob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBbXShTTHJlc3VsdCBlcnIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGlmIChlcnIgIT0gU0xfUkVTVUxUX1NVQ0NFU1MpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgQUxPR0UoIiVzOiVkICVzIGZhaWxlZDogJXMiLCBf
X0ZJTEVfXywgX19MSU5FX18sICNvcCwgXAotICAgICAgICAgICAgR2V0U0xFcnJvclN0cmluZyhl
cnIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIHRydWU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBm
YWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9KG9w
KQotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotT3BlblNMRVNSZWNvcmRlcjo6T3BlblNMRVNSZWNv
cmRlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBhdWRpb19tYW5hZ2VyXyhh
dWRpb19tYW5hZ2VyKSwKLSAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX21hbmFnZXItPkdl
dFJlY29yZEF1ZGlvUGFyYW1ldGVycygpKSwKLSAgICAgIGF1ZGlvX2RldmljZV9idWZmZXJfKG51
bGxwdHIpLAotICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSwKLSAgICAgIHJlY29yZGluZ18oZmFs
c2UpLAotICAgICAgZW5naW5lXyhudWxscHRyKSwKLSAgICAgIHJlY29yZGVyXyhudWxscHRyKSwK
LSAgICAgIHNpbXBsZV9idWZmZXJfcXVldWVfKG51bGxwdHIpLAotICAgICAgYnVmZmVyX2luZGV4
XygwKSwKLSAgICAgIGxhc3RfcmVjX3RpbWVfKDApIHsKLSAgQUxPR0QoImN0b3JbdGlkPSVkXSIs
IHJ0Yzo6Q3VycmVudFRocmVhZElkKCkpOwotICAvLyBEZXRhY2ggZnJvbSB0aGlzIHRocmVhZCBz
aW5jZSB3ZSB3YW50IHRvIHVzZSB0aGUgY2hlY2tlciB0byB2ZXJpZnkgY2FsbHMKLSAgLy8gZnJv
bSB0aGUgaW50ZXJuYWwgIGF1ZGlvIHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNf
LkRldGFjaCgpOwotICAvLyBVc2UgbmF0aXZlIGF1ZGlvIG91dHB1dCBwYXJhbWV0ZXJzIHByb3Zp
ZGVkIGJ5IHRoZSBhdWRpbyBtYW5hZ2VyIGFuZAotICAvLyBkZWZpbmUgdGhlIFBDTSBmb3JtYXQg
c3RydWN0dXJlLgotICBwY21fZm9ybWF0XyA9IENyZWF0ZVBDTUNvbmZpZ3VyYXRpb24oYXVkaW9f
cGFyYW1ldGVyc18uY2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5iaXRzX3Blcl9zYW1wbGUo
KSk7Ci19Ci0KLU9wZW5TTEVTUmVjb3JkZXI6On5PcGVuU0xFU1JlY29yZGVyKCkgewotICBBTE9H
RCgiZHRvclt0aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgVGVybWluYXRlKCk7Ci0gIERlc3Ryb3lB
dWRpb1JlY29yZGVyKCk7Ci0gIGVuZ2luZV8gPSBudWxscHRyOwotICBSVENfRENIRUNLKCFlbmdp
bmVfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkZXJfKTsKLSAgUlRDX0RDSEVDSyghc2ltcGxlX2J1
ZmZlcl9xdWV1ZV8pOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6SW5pdCgpIHsKLSAgQUxP
R0QoIkluaXRbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRocmVhZElkKCkpOwotICBSVENfRENIRUNL
KHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmIChhdWRpb19wYXJhbWV0ZXJzXy5j
aGFubmVscygpID09IDIpIHsKLSAgICBBTE9HRCgiU3RlcmVvIG1vZGUgaXMgZW5hYmxlZCIpOwot
ICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6VGVybWluYXRlKCkg
ewotICBBTE9HRCgiVGVybWluYXRlW3RpZD0lZF0iLCBydGM6OkN1cnJlbnRUaHJlYWRJZCgpKTsK
LSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBTdG9wUmVjb3Jk
aW5nKCk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6SW5pdFJlY29y
ZGluZygpIHsKLSAgQUxPR0QoIkluaXRSZWNvcmRpbmdbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRo
cmVhZElkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0g
IFJUQ19EQ0hFQ0soIWluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGluZ18pOwot
ICBpZiAoIU9idGFpbkVuZ2luZUludGVyZmFjZSgpKSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBv
YnRhaW4gU0wgRW5naW5lIGludGVyZmFjZSIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBDcmVh
dGVBdWRpb1JlY29yZGVyKCk7Ci0gIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gIGJ1ZmZlcl9pbmRl
eF8gPSAwOwotICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUmVjb3JkZXI6OlN0YXJ0UmVj
b3JkaW5nKCkgewotICBBTE9HRCgiU3RhcnRSZWNvcmRpbmdbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVu
dFRocmVhZElkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7
Ci0gIFJUQ19EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkaW5nXyk7
Ci0gIGlmIChmaW5lX2F1ZGlvX2J1ZmZlcl8pIHsKLSAgICBmaW5lX2F1ZGlvX2J1ZmZlcl8tPlJl
c2V0UmVjb3JkKCk7Ci0gIH0KLSAgLy8gQWRkIGJ1ZmZlcnMgdG8gdGhlIHF1ZXVlIGJlZm9yZSBj
aGFuZ2luZyBzdGF0ZSB0byBTTF9SRUNPUkRTVEFURV9SRUNPUkRJTkcKLSAgLy8gdG8gZW5zdXJl
IHRoYXQgcmVjb3JkaW5nIHN0YXJ0cyBhcyBzb29uIGFzIHRoZSBzdGF0ZSBpcyBtb2RpZmllZC4g
T24gc29tZQotICAvLyBkZXZpY2VzLCBTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZTo6Q2xlYXIo
KSB1c2VkIGluIFN0b3AoKSBkb2VzIG5vdCBmbHVzaAotICAvLyB0aGUgYnVmZmVycyBhcyBpbnRl
bmRlZCBhbmQgd2UgdGhlcmVmb3JlIGNoZWNrIHRoZSBudW1iZXIgb2YgYnVmZmVycwotICAvLyBh
bHJlYWR5IHF1ZXVlZCBmaXJzdC4gRW5xdWV1ZSgpIGNhbiByZXR1cm4gU0xfUkVTVUxUX0JVRkZF
Ul9JTlNVRkZJQ0lFTlQKLSAgLy8gb3RoZXJ3aXNlLgotICBpbnQgbnVtX2J1ZmZlcnNfaW5fcXVl
dWUgPSBHZXRCdWZmZXJDb3VudCgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1PZk9wZW5T
TEVTQnVmZmVycyAtIG51bV9idWZmZXJzX2luX3F1ZXVlOyArK2kpIHsKLSAgICBpZiAoIUVucXVl
dWVBdWRpb0J1ZmZlcigpKSB7Ci0gICAgICByZWNvcmRpbmdfID0gZmFsc2U7Ci0gICAgICByZXR1
cm4gLTE7Ci0gICAgfQotICB9Ci0gIG51bV9idWZmZXJzX2luX3F1ZXVlID0gR2V0QnVmZmVyQ291
bnQoKTsKLSAgUlRDX0RDSEVDS19FUShudW1fYnVmZmVyc19pbl9xdWV1ZSwga051bU9mT3BlblNM
RVNCdWZmZXJzKTsKLSAgTG9nQnVmZmVyU3RhdGUoKTsKLSAgLy8gU3RhcnQgYXVkaW8gcmVjb3Jk
aW5nIGJ5IGNoYW5naW5nIHRoZSBzdGF0ZSB0byBTTF9SRUNPUkRTVEFURV9SRUNPUkRJTkcuCi0g
IC8vIEdpdmVuIHRoYXQgYnVmZmVycyBhcmUgYWxyZWFkeSBlbnF1ZXVlZCwgcmVjb3JkaW5nIHNo
b3VsZCBzdGFydCBhdCBvbmNlLgotICAvLyBUaGUgbWFjcm8gcmV0dXJucyAtMSBpZiByZWNvcmRp
bmcgZmFpbHMgdG8gc3RhcnQuCi0gIGxhc3RfcmVjX3RpbWVfID0gcnRjOjpUaW1lKCk7Ci0gIGlm
IChMT0dfT05fRVJST1IoCi0gICAgICAgICAgKCpyZWNvcmRlcl8pLT5TZXRSZWNvcmRTdGF0ZShy
ZWNvcmRlcl8sIFNMX1JFQ09SRFNUQVRFX1JFQ09SRElORykpKSB7Ci0gICAgcmV0dXJuIC0xOwot
ICB9Ci0gIHJlY29yZGluZ18gPSAoR2V0UmVjb3JkU3RhdGUoKSA9PSBTTF9SRUNPUkRTVEFURV9S
RUNPUkRJTkcpOwotICBSVENfRENIRUNLKHJlY29yZGluZ18pOwotICByZXR1cm4gMDsKLX0KLQot
aW50IE9wZW5TTEVTUmVjb3JkZXI6OlN0b3BSZWNvcmRpbmcoKSB7Ci0gIEFMT0dEKCJTdG9wUmVj
b3JkaW5nW3RpZD0lZF0iLCBydGM6OkN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgUlRDX0RDSEVDSyh0
aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoIWluaXRpYWxpemVkXyB8fCAhcmVj
b3JkaW5nXykgewotICAgIHJldHVybiAwOwotICB9Ci0gIC8vIFN0b3AgcmVjb3JkaW5nIGJ5IHNl
dHRpbmcgdGhlIHJlY29yZCBzdGF0ZSB0byBTTF9SRUNPUkRTVEFURV9TVE9QUEVELgotICBpZiAo
TE9HX09OX0VSUk9SKAotICAgICAgICAgICgqcmVjb3JkZXJfKS0+U2V0UmVjb3JkU3RhdGUocmVj
b3JkZXJfLCBTTF9SRUNPUkRTVEFURV9TVE9QUEVEKSkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0K
LSAgLy8gQ2xlYXIgdGhlIGJ1ZmZlciBxdWV1ZSB0byBnZXQgcmlkIG9mIG9sZCBkYXRhIHdoZW4g
cmVzdW1pbmcgcmVjb3JkaW5nLgotICBpZiAoTE9HX09OX0VSUk9SKCgqc2ltcGxlX2J1ZmZlcl9x
dWV1ZV8pLT5DbGVhcihzaW1wbGVfYnVmZmVyX3F1ZXVlXykpKSB7Ci0gICAgcmV0dXJuIC0xOwot
ICB9Ci0gIHRocmVhZF9jaGVja2VyX29wZW5zbGVzXy5EZXRhY2goKTsKLSAgaW5pdGlhbGl6ZWRf
ID0gZmFsc2U7Ci0gIHJlY29yZGluZ18gPSBmYWxzZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
T3BlblNMRVNSZWNvcmRlcjo6QXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1
ZGlvX2J1ZmZlcikgewotICBBTE9HRCgiQXR0YWNoQXVkaW9CdWZmZXIiKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENfQ0hFQ0soYXVkaW9fYnVmZmVy
KTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb19idWZmZXI7Ci0gIC8vIEVuc3VyZSB0
aGF0IHRoZSBhdWRpbyBkZXZpY2UgYnVmZmVyIGlzIGluZm9ybWVkIGFib3V0IHRoZSBuYXRpdmUg
c2FtcGxlCi0gIC8vIHJhdGUgdXNlZCBvbiB0aGUgcmVjb3JkaW5nIHNpZGUuCi0gIGNvbnN0IGlu
dCBzYW1wbGVfcmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCk7Ci0gIEFM
T0dEKCJTZXRSZWNvcmRpbmdTYW1wbGVSYXRlKCVkKSIsIHNhbXBsZV9yYXRlX2h6KTsKLSAgYXVk
aW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJlY29yZGluZ1NhbXBsZVJhdGUoc2FtcGxlX3JhdGVfaHop
OwotICAvLyBFbnN1cmUgdGhhdCB0aGUgYXVkaW8gZGV2aWNlIGJ1ZmZlciBpcyBpbmZvcm1lZCBh
Ym91dCB0aGUgbnVtYmVyIG9mCi0gIC8vIGNoYW5uZWxzIHByZWZlcnJlZCBieSB0aGUgT1Mgb24g
dGhlIHJlY29yZGluZyBzaWRlLgotICBjb25zdCBzaXplX3QgY2hhbm5lbHMgPSBhdWRpb19wYXJh
bWV0ZXJzXy5jaGFubmVscygpOwotICBBTE9HRCgiU2V0UmVjb3JkaW5nQ2hhbm5lbHMoJSIgUlRD
X1BSSXVTICIpIiwgY2hhbm5lbHMpOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0UmVjb3Jk
aW5nQ2hhbm5lbHMoY2hhbm5lbHMpOwotICAvLyBBbGxvY2F0ZWQgbWVtb3J5IGZvciBpbnRlcm5h
bCBkYXRhIGJ1ZmZlcnMgZ2l2ZW4gZXhpc3RpbmcgYXVkaW8gcGFyYW1ldGVycy4KLSAgQWxsb2Nh
dGVEYXRhQnVmZmVycygpOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6RW5hYmxlQnVpbHRJ
bkFFQyhib29sIGVuYWJsZSkgewotICBBTE9HRCgiRW5hYmxlQnVpbHRJbkFFQyglZCkiLCBlbmFi
bGUpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIEFMT0dF
KCJOb3QgaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29y
ZGVyOjpFbmFibGVCdWlsdEluQUdDKGJvb2wgZW5hYmxlKSB7Ci0gIEFMT0dEKCJFbmFibGVCdWls
dEluQUdDKCVkKSIsIGVuYWJsZSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3Vy
cmVudCgpKTsKLSAgQUxPR0UoIk5vdCBpbXBsZW1lbnRlZCIpOwotICByZXR1cm4gMDsKLX0KLQot
aW50IE9wZW5TTEVTUmVjb3JkZXI6OkVuYWJsZUJ1aWx0SW5OUyhib29sIGVuYWJsZSkgewotICBB
TE9HRCgiRW5hYmxlQnVpbHRJbk5TKCVkKSIsIGVuYWJsZSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFk
X2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgQUxPR0UoIk5vdCBpbXBsZW1lbnRlZCIpOwotICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBPcGVuU0xFU1JlY29yZGVyOjpPYnRhaW5FbmdpbmVJbnRlcmZh
Y2UoKSB7Ci0gIEFMT0dEKCJPYnRhaW5FbmdpbmVJbnRlcmZhY2UiKTsKLSAgUlRDX0RDSEVDSyh0
aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoZW5naW5lXykKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgLy8gR2V0IGFjY2VzcyB0byAob3IgY3JlYXRlIGlmIG5vdCBhbHJlYWR5IGV4aXN0
aW5nKSB0aGUgZ2xvYmFsIE9wZW5TTCBFbmdpbmUKLSAgLy8gb2JqZWN0LgotICBTTE9iamVjdEl0
ZiBlbmdpbmVfb2JqZWN0ID0gYXVkaW9fbWFuYWdlcl8tPkdldE9wZW5TTEVuZ2luZSgpOwotICBp
ZiAoZW5naW5lX29iamVjdCA9PSBudWxscHRyKSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBhY2Nl
c3MgdGhlIGdsb2JhbCBPcGVuU0wgZW5naW5lIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0g
IC8vIEdldCB0aGUgU0wgRW5naW5lIEludGVyZmFjZSB3aGljaCBpcyBpbXBsaWNpdC4KLSAgaWYg
KExPR19PTl9FUlJPUigKLSAgICAgICAgICAoKmVuZ2luZV9vYmplY3QpCi0gICAgICAgICAgICAg
IC0+R2V0SW50ZXJmYWNlKGVuZ2luZV9vYmplY3QsIFNMX0lJRF9FTkdJTkUsICZlbmdpbmVfKSkp
IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3Bl
blNMRVNSZWNvcmRlcjo6Q3JlYXRlQXVkaW9SZWNvcmRlcigpIHsKLSAgQUxPR0QoIkNyZWF0ZUF1
ZGlvUmVjb3JkZXIiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkp
OwotICBpZiAocmVjb3JkZXJfb2JqZWN0Xy5HZXQoKSkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgUlRD
X0RDSEVDSyghcmVjb3JkZXJfKTsKLSAgUlRDX0RDSEVDSyghc2ltcGxlX2J1ZmZlcl9xdWV1ZV8p
OwotCi0gIC8vIEF1ZGlvIHNvdXJjZSBjb25maWd1cmF0aW9uLgotICBTTERhdGFMb2NhdG9yX0lP
RGV2aWNlIG1pY19sb2NhdG9yID0ge1NMX0RBVEFMT0NBVE9SX0lPREVWSUNFLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0lPREVWSUNFX0FVRElPSU5QVVQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xfREVGQVVMVERFVklDRUlE
X0FVRElPSU5QVVQsIE5VTEx9OwotICBTTERhdGFTb3VyY2UgYXVkaW9fc291cmNlID0geyZtaWNf
bG9jYXRvciwgTlVMTH07Ci0KLSAgLy8gQXVkaW8gc2luayBjb25maWd1cmF0aW9uLgotICBTTERh
dGFMb2NhdG9yX0FuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZSBidWZmZXJfcXVldWUgPSB7Ci0gICAg
ICBTTF9EQVRBTE9DQVRPUl9BTkRST0lEU0lNUExFQlVGRkVSUVVFVUUsCi0gICAgICBzdGF0aWNf
Y2FzdDxTTHVpbnQzMj4oa051bU9mT3BlblNMRVNCdWZmZXJzKX07Ci0gIFNMRGF0YVNpbmsgYXVk
aW9fc2luayA9IHsmYnVmZmVyX3F1ZXVlLCAmcGNtX2Zvcm1hdF99OwotCi0gIC8vIENyZWF0ZSB0
aGUgYXVkaW8gcmVjb3JkZXIgb2JqZWN0IChyZXF1aXJlcyB0aGUgUkVDT1JEX0FVRElPIHBlcm1p
c3Npb24pLgotICAvLyBEbyBub3QgcmVhbGl6ZSB0aGUgcmVjb3JkZXIgeWV0LiBTZXQgdGhlIGNv
bmZpZ3VyYXRpb24gZmlyc3QuCi0gIGNvbnN0IFNMSW50ZXJmYWNlSUQgaW50ZXJmYWNlX2lkW10g
PSB7U0xfSUlEX0FORFJPSURTSU1QTEVCVUZGRVJRVUVVRSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTTF9JSURfQU5EUk9JRENPTkZJR1VSQVRJT059OwotICBjb25z
dCBTTGJvb2xlYW4gaW50ZXJmYWNlX3JlcXVpcmVkW10gPSB7U0xfQk9PTEVBTl9UUlVFLCBTTF9C
T09MRUFOX1RSVUV9OwotICBpZiAoTE9HX09OX0VSUk9SKCgqZW5naW5lXyktPkNyZWF0ZUF1ZGlv
UmVjb3JkZXIoCi0gICAgICAgICAgZW5naW5lXywgcmVjb3JkZXJfb2JqZWN0Xy5SZWNlaXZlKCks
ICZhdWRpb19zb3VyY2UsICZhdWRpb19zaW5rLAotICAgICAgICAgIGFycmF5c2l6ZShpbnRlcmZh
Y2VfaWQpLCBpbnRlcmZhY2VfaWQsIGludGVyZmFjZV9yZXF1aXJlZCkpKSB7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgLy8gQ29uZmlndXJlIHRoZSBhdWRpbyByZWNvcmRlciAoYmVmb3Jl
IGl0IGlzIHJlYWxpemVkKS4KLSAgU0xBbmRyb2lkQ29uZmlndXJhdGlvbkl0ZiByZWNvcmRlcl9j
b25maWc7Ci0gIGlmIChMT0dfT05fRVJST1IoKHJlY29yZGVyX29iamVjdF8tPkdldEludGVyZmFj
ZShyZWNvcmRlcl9vYmplY3RfLkdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0xfSUlEX0FORFJPSURDT05GSUdVUkFUSU9OLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlY29yZGVyX2Nv
bmZpZykpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFVzZXMgdGhlIGRlZmF1
bHQgbWljcm9waG9uZSB0dW5lZCBmb3IgYXVkaW8gY29tbXVuaWNhdGlvbi4KLSAgLy8gTm90ZSB0
aGF0LCBTTF9BTkRST0lEX1JFQ09SRElOR19QUkVTRVRfVk9JQ0VfUkVDT0dOSVRJT04gbGVhZHMg
dG8gYSBmYXN0Ci0gIC8vIHRyYWNrIGJ1dCBhbHNvIGV4Y2x1ZGVzIHVzYWdlIG9mIHJlcXVpcmVk
IGVmZmVjdHMgbGlrZSBBRUMsIEFHQyBhbmQgTlMuCi0gIC8vIFNMX0FORFJPSURfUkVDT1JESU5H
X1BSRVNFVF9WT0lDRV9DT01NVU5JQ0FUSU9OCi0gIFNMaW50MzIgc3RyZWFtX3R5cGUgPSBTTF9B
TkRST0lEX1JFQ09SRElOR19QUkVTRVRfVk9JQ0VfQ09NTVVOSUNBVElPTjsKLSAgaWYgKExPR19P
Tl9FUlJPUigoKCpyZWNvcmRlcl9jb25maWcpCi0gICAgICAgICAgICAgICAgICAgICAgICAtPlNl
dENvbmZpZ3VyYXRpb24ocmVjb3JkZXJfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNMX0FORFJPSURfS0VZX1JFQ09SRElOR19QUkVTRVQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmVhbV90eXBlLCBzaXpl
b2YoU0xpbnQzMikpKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUaGUgYXVk
aW8gcmVjb3JkZXIgY2FuIG5vdyBiZSByZWFsaXplZCAoaW4gc3luY2hyb25vdXMgbW9kZSkuCi0g
IGlmIChMT0dfT05fRVJST1IoKHJlY29yZGVyX29iamVjdF8tPlJlYWxpemUocmVjb3JkZXJfb2Jq
ZWN0Xy5HZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTTF9CT09MRUFOX0ZBTFNFKSkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8g
R2V0IHRoZSBpbXBsaWNpdCByZWNvcmRlciBpbnRlcmZhY2UgKFNMX0lJRF9SRUNPUkQpLgotICBp
ZiAoTE9HX09OX0VSUk9SKChyZWNvcmRlcl9vYmplY3RfLT5HZXRJbnRlcmZhY2UoCi0gICAgICAg
ICAgcmVjb3JkZXJfb2JqZWN0Xy5HZXQoKSwgU0xfSUlEX1JFQ09SRCwgJnJlY29yZGVyXykpKSkg
ewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEdldCB0aGUgc2ltcGxlIGJ1ZmZlciBx
dWV1ZSBpbnRlcmZhY2UgKFNMX0lJRF9BTkRST0lEU0lNUExFQlVGRkVSUVVFVUUpLgotICAvLyBJ
dCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuCi0gIGlmIChMT0dfT05fRVJST1IoKHJlY29yZGVy
X29iamVjdF8tPkdldEludGVyZmFjZSgKLSAgICAgICAgICByZWNvcmRlcl9vYmplY3RfLkdldCgp
LCBTTF9JSURfQU5EUk9JRFNJTVBMRUJVRkZFUlFVRVVFLAotICAgICAgICAgICZzaW1wbGVfYnVm
ZmVyX3F1ZXVlXykpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFJlZ2lzdGVy
IHRoZSBpbnB1dCBjYWxsYmFjayBmb3IgdGhlIHNpbXBsZSBidWZmZXIgcXVldWUuCi0gIC8vIFRo
aXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbiByZWNlaXZpbmcgbmV3IGRhdGEgZnJvbSB0
aGUgZGV2aWNlLgotICBpZiAoTE9HX09OX0VSUk9SKCgoKnNpbXBsZV9idWZmZXJfcXVldWVfKQot
ICAgICAgICAgICAgICAgICAgICAgICAgLT5SZWdpc3RlckNhbGxiYWNrKHNpbXBsZV9idWZmZXJf
cXVldWVfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBs
ZUJ1ZmZlclF1ZXVlQ2FsbGJhY2ssIHRoaXMpKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT3BlblNMRVNSZWNvcmRlcjo6RGVzdHJveUF1ZGlv
UmVjb3JkZXIoKSB7Ci0gIEFMT0dEKCJEZXN0cm95QXVkaW9SZWNvcmRlciIpOwotICBSVENfRENI
RUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmICghcmVjb3JkZXJfb2JqZWN0
Xy5HZXQoKSkKLSAgICByZXR1cm47Ci0gICgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAt
PlJlZ2lzdGVyQ2FsbGJhY2soc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sIG51bGxwdHIsIG51bGxwdHIp
OwotICByZWNvcmRlcl9vYmplY3RfLlJlc2V0KCk7Ci0gIHJlY29yZGVyXyA9IG51bGxwdHI7Ci0g
IHNpbXBsZV9idWZmZXJfcXVldWVfID0gbnVsbHB0cjsKLX0KLQotdm9pZCBPcGVuU0xFU1JlY29y
ZGVyOjpTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrKAotICAgIFNMQW5kcm9pZFNpbXBsZUJ1ZmZl
clF1ZXVlSXRmIGJ1ZmZlcl9xdWV1ZSwKLSAgICB2b2lkKiBjb250ZXh0KSB7Ci0gIE9wZW5TTEVT
UmVjb3JkZXIqIHN0cmVhbSA9IHN0YXRpY19jYXN0PE9wZW5TTEVTUmVjb3JkZXIqPihjb250ZXh0
KTsKLSAgc3RyZWFtLT5SZWFkQnVmZmVyUXVldWUoKTsKLX0KLQotdm9pZCBPcGVuU0xFU1JlY29y
ZGVyOjpBbGxvY2F0ZURhdGFCdWZmZXJzKCkgewotICBBTE9HRCgiQWxsb2NhdGVEYXRhQnVmZmVy
cyIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJUQ19E
Q0hFQ0soIXNpbXBsZV9idWZmZXJfcXVldWVfKTsKLSAgUlRDX0NIRUNLKGF1ZGlvX2RldmljZV9i
dWZmZXJfKTsKLSAgLy8gQ3JlYXRlIGEgbW9kaWZpZWQgYXVkaW8gYnVmZmVyIGNsYXNzIHdoaWNo
IGFsbG93cyB1cyB0byBkZWxpdmVyIGFueSBudW1iZXIKLSAgLy8gb2Ygc2FtcGxlcyAoYW5kIG5v
dCBvbmx5IG11bHRpcGxlIG9mIDEwbXMpIHRvIG1hdGNoIHRoZSBuYXRpdmUgYXVkaW8gdW5pdAot
ICAvLyBidWZmZXIgc2l6ZS4KLSAgQUxPR0QoImZyYW1lcyBwZXIgbmF0aXZlIGJ1ZmZlcjogJSIg
UlRDX1BSSXVTLAotICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1ZmZlcigp
KTsKLSAgQUxPR0QoImZyYW1lcyBwZXIgMTBtcyBidWZmZXI6ICUiIFJUQ19QUkl1UywKLSAgICAg
ICAgYXVkaW9fcGFyYW1ldGVyc18uZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpKTsKLSAgQUxPR0Qo
ImJ5dGVzIHBlciBuYXRpdmUgYnVmZmVyOiAlIiBSVENfUFJJdVMsCi0gICAgICAgIGF1ZGlvX3Bh
cmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBBTE9HRCgibmF0aXZlIHNhbXBsZSBy
YXRlOiAlZCIsIGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCkpOwotICBSVENfRENIRUNL
KGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgZmluZV9hdWRpb19idWZmZXJfID0gc3RkOjptYWtl
X3VuaXF1ZTxGaW5lQXVkaW9CdWZmZXI+KGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgLy8gQWxs
b2NhdGUgcXVldWUgb2YgYXVkaW8gYnVmZmVycyB0aGF0IHN0b3JlcyByZWNvcmRlZCBhdWRpbyBz
YW1wbGVzLgotICBjb25zdCBpbnQgYnVmZmVyX3NpemVfc2FtcGxlcyA9Ci0gICAgICBhdWRpb19w
YXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1ZmZlcigpICogYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5l
bHMoKTsKLSAgYXVkaW9fYnVmZmVyc18ucmVzZXQobmV3IHN0ZDo6dW5pcXVlX3B0cjxTTGludDE2
W10+W2tOdW1PZk9wZW5TTEVTQnVmZmVyc10pOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1P
Zk9wZW5TTEVTQnVmZmVyczsgKytpKSB7Ci0gICAgYXVkaW9fYnVmZmVyc19baV0ucmVzZXQobmV3
IFNMaW50MTZbYnVmZmVyX3NpemVfc2FtcGxlc10pOwotICB9Ci19Ci0KLXZvaWQgT3BlblNMRVNS
ZWNvcmRlcjo6UmVhZEJ1ZmZlclF1ZXVlKCkgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
X29wZW5zbGVzXy5Jc0N1cnJlbnQoKSk7Ci0gIFNMdWludDMyIHN0YXRlID0gR2V0UmVjb3JkU3Rh
dGUoKTsKLSAgaWYgKHN0YXRlICE9IFNMX1JFQ09SRFNUQVRFX1JFQ09SRElORykgewotICAgIEFM
T0dXKCJCdWZmZXIgY2FsbGJhY2sgaW4gbm9uLXJlY29yZGluZyBzdGF0ZSEiKTsKLSAgICByZXR1
cm47Ci0gIH0KLSAgLy8gQ2hlY2sgZGVsdGEgdGltZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGNh
bGxiYWNrcyBhbmQgcHJvdmlkZSBhIHdhcm5pbmcKLSAgLy8gaWYgaXQgYmVjb21lcyB2ZXJ5IGxh
cmdlLgotICAvLyBUT0RPKGhlbnJpa2EpOiB1c2luZyAxNTBtcyBhcyB1cHBlciBsaW1pdCBidXQg
dGhpcyB2YWx1ZSBpcyByYXRoZXIgcmFuZG9tLgotICBjb25zdCB1aW50MzJfdCBjdXJyZW50X3Rp
bWUgPSBydGM6OlRpbWUoKTsKLSAgY29uc3QgdWludDMyX3QgZGlmZiA9IGN1cnJlbnRfdGltZSAt
IGxhc3RfcmVjX3RpbWVfOwotICBpZiAoZGlmZiA+IDE1MCkgewotICAgIEFMT0dXKCJCYWQgT3Bl
blNMIEVTIHJlY29yZCB0aW1pbmcsIGRUPSV1IFttc10iLCBkaWZmKTsKLSAgfQotICBsYXN0X3Jl
Y190aW1lXyA9IGN1cnJlbnRfdGltZTsKLSAgLy8gU2VuZCByZWNvcmRlZCBhdWRpbyBkYXRhIHRv
IHRoZSBXZWJSVEMgc2luay4KLSAgLy8gVE9ETyhoZW5yaWthKTogZml4IGRlbGF5IGVzdGltYXRl
cy4gSXQgaXMgT0sgdG8gdXNlIGZpeGVkIHZhbHVlcyBmb3Igbm93Ci0gIC8vIHNpbmNlIHRoZXJl
IGlzIG5vIHN1cHBvcnQgdG8gdHVybiBvZmYgYnVpbHQtaW4gRUMgaW4gY29tYmluYXRpb24gd2l0
aAotICAvLyBPcGVuU0wgRVMgYW55aG93LiBIZW5jZSwgYXMgaXMsIHRoZSBXZWJSVEMgYmFzZWQg
QUVDICh3aGljaCB3b3VsZCB1c2UKLSAgLy8gdGhlc2UgZXN0aW1hdGVzKSB3aWxsIG5ldmVyIGJl
IGFjdGl2ZS4KLSAgZmluZV9hdWRpb19idWZmZXJfLT5EZWxpdmVyUmVjb3JkZWREYXRhKAotICAg
ICAgcnRjOjpBcnJheVZpZXc8Y29uc3QgaW50MTZfdD4oCi0gICAgICAgICAgYXVkaW9fYnVmZmVy
c19bYnVmZmVyX2luZGV4X10uZ2V0KCksCi0gICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uZnJh
bWVzX3Blcl9idWZmZXIoKSAqIGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCkpLAotICAgICAg
MjUpOwotICAvLyBFbnF1ZXVlIHRoZSB1dGlsaXplZCBhdWRpbyBidWZmZXIgYW5kIHVzZSBpZiBm
b3IgcmVjb3JkaW5nIGFnYWluLgotICBFbnF1ZXVlQXVkaW9CdWZmZXIoKTsKLX0KLQotYm9vbCBP
cGVuU0xFU1JlY29yZGVyOjpFbnF1ZXVlQXVkaW9CdWZmZXIoKSB7Ci0gIFNMcmVzdWx0IGVyciA9
Ci0gICAgICAoKnNpbXBsZV9idWZmZXJfcXVldWVfKQotICAgICAgICAgIC0+RW5xdWV1ZSgKLSAg
ICAgICAgICAgICAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sCi0gICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8U0xpbnQ4Kj4oYXVkaW9fYnVmZmVyc19bYnVmZmVyX2luZGV4X10uZ2V0KCkpLAot
ICAgICAgICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAg
aWYgKFNMX1JFU1VMVF9TVUNDRVNTICE9IGVycikgewotICAgIEFMT0dFKCJFbnF1ZXVlIGZhaWxl
ZDogJXMiLCBHZXRTTEVycm9yU3RyaW5nKGVycikpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICBidWZmZXJfaW5kZXhfID0gKGJ1ZmZlcl9pbmRleF8gKyAxKSAlIGtOdW1PZk9wZW5TTEVTQnVm
ZmVyczsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVNMdWludDMyIE9wZW5TTEVTUmVjb3JkZXI6Okdl
dFJlY29yZFN0YXRlKCkgY29uc3QgewotICBSVENfRENIRUNLKHJlY29yZGVyXyk7Ci0gIFNMdWlu
dDMyIHN0YXRlOwotICBTTHJlc3VsdCBlcnIgPSAoKnJlY29yZGVyXyktPkdldFJlY29yZFN0YXRl
KHJlY29yZGVyXywgJnN0YXRlKTsKLSAgaWYgKFNMX1JFU1VMVF9TVUNDRVNTICE9IGVycikgewot
ICAgIEFMT0dFKCJHZXRSZWNvcmRTdGF0ZSBmYWlsZWQ6ICVzIiwgR2V0U0xFcnJvclN0cmluZyhl
cnIpKTsKLSAgfQotICByZXR1cm4gc3RhdGU7Ci19Ci0KLVNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1
ZXVlU3RhdGUgT3BlblNMRVNSZWNvcmRlcjo6R2V0QnVmZmVyUXVldWVTdGF0ZSgpIGNvbnN0IHsK
LSAgUlRDX0RDSEVDSyhzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci0gIC8vIHN0YXRlLmNvdW50OiBO
dW1iZXIgb2YgYnVmZmVycyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgotICAvLyBzdGF0ZS5pbmRl
eDogSW5kZXggb2YgdGhlIGN1cnJlbnRseSBmaWxsaW5nIGJ1ZmZlci4gVGhpcyBpcyBhIGxpbmVh
ciBpbmRleAotICAvLyB0aGF0IGtlZXBzIGEgY3VtdWxhdGl2ZSBjb3VudCBvZiB0aGUgbnVtYmVy
IG9mIGJ1ZmZlcnMgcmVjb3JkZWQuCi0gIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlU3RhdGUg
c3RhdGU7Ci0gIFNMcmVzdWx0IGVyciA9Ci0gICAgICAoKnNpbXBsZV9idWZmZXJfcXVldWVfKS0+
R2V0U3RhdGUoc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sICZzdGF0ZSk7Ci0gIGlmIChTTF9SRVNVTFRf
U1VDQ0VTUyAhPSBlcnIpIHsKLSAgICBBTE9HRSgiR2V0U3RhdGUgZmFpbGVkOiAlcyIsIEdldFNM
RXJyb3JTdHJpbmcoZXJyKSk7Ci0gIH0KLSAgcmV0dXJuIHN0YXRlOwotfQotCi12b2lkIE9wZW5T
TEVTUmVjb3JkZXI6OkxvZ0J1ZmZlclN0YXRlKCkgY29uc3QgewotICBTTEFuZHJvaWRTaW1wbGVC
dWZmZXJRdWV1ZVN0YXRlIHN0YXRlID0gR2V0QnVmZmVyUXVldWVTdGF0ZSgpOwotICBBTE9HRCgi
c3RhdGUuY291bnQ6JWQgc3RhdGUuaW5kZXg6JWQiLCBzdGF0ZS5jb3VudCwgc3RhdGUuaW5kZXgp
OwotfQotCi1TTHVpbnQzMiBPcGVuU0xFU1JlY29yZGVyOjpHZXRCdWZmZXJDb3VudCgpIHsKLSAg
U0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBzdGF0ZSA9IEdldEJ1ZmZlclF1ZXVlU3Rh
dGUoKTsKLSAgcmV0dXJuIHN0YXRlLmNvdW50OwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVlMWVkZTUxZDU4Mjg2MjMxYzIzNjViZjRkM2M4MTI1MzdlMzY0NDUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19y
ZWNvcmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi0jaWZuZGVmIE1PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNf
UkVDT1JERVJfSF8KLSNkZWZpbmUgTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9PUEVOU0xF
U19SRUNPUkRFUl9IXwotCi0jaW5jbHVkZSA8U0xFUy9PcGVuU0xFUy5oPgotI2luY2x1ZGUgPFNM
RVMvT3BlblNMRVNfQW5kcm9pZC5oPgotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZENv
bmZpZ3VyYXRpb24uaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgIm1vZHVsZXMv
YXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaCIKLSNpbmNsdWRlICJtb2R1bGVz
L2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIm1vZHVsZXMv
YXVkaW9fZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlX2RlZmluZXMuaCIKLSNpbmNsdWRlICJt
b2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJydGNf
YmFzZS90aHJlYWRfY2hlY2tlci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotY2xhc3MgRmlu
ZUF1ZGlvQnVmZmVyOwotCi0vLyBJbXBsZW1lbnRzIDE2LWJpdCBtb25vIFBDTSBhdWRpbyBpbnB1
dCBzdXBwb3J0IGZvciBBbmRyb2lkIHVzaW5nIHRoZQotLy8gQyBiYXNlZCBPcGVuU0wgRVMgQVBJ
LiBObyBjYWxscyBmcm9tIEMvQysrIHRvIEphdmEgdXNpbmcgSk5JIGlzIGRvbmUuCi0vLwotLy8g
QW4gaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgb24gb25lIGFuZCB0aGUg
c2FtZSB0aHJlYWQuCi0vLyBBbGwgcHVibGljIG1ldGhvZHMgbXVzdCBhbHNvIGJlIGNhbGxlZCBv
biB0aGUgc2FtZSB0aHJlYWQuIEEgdGhyZWFkIGNoZWNrZXIKLS8vIHdpbGwgUlRDX0RDSEVDSyBp
ZiBhbnkgbWV0aG9kIGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRocmVhZC4gUmVjb3JkZWQgYXVk
aW8KLS8vIGJ1ZmZlcnMgYXJlIHByb3ZpZGVkIG9uIGEgZGVkaWNhdGVkIGludGVybmFsIHRocmVh
ZCBtYW5hZ2VkIGJ5IHRoZSBPcGVuU0wKLS8vIEVTIGxheWVyLgotLy8KLS8vIFRoZSBleGlzdGlu
ZyBkZXNpZ24gZm9yY2VzIHRoZSB1c2VyIHRvIGNhbGwgSW5pdFJlY29yZGluZygpIGFmdGVyCi0v
LyBTdG9wUmVjb3JkaW5nKCkgdG8gYmUgYWJsZSB0byBjYWxsIFN0YXJ0UmVjb3JkaW5nKCkgYWdh
aW4uIFRoaXMgaXMgaW5saW5lCi0vLyB3aXRoIGhvdyB0aGUgSmF2YS1iYXNlZCBpbXBsZW1lbnRh
dGlvbiB3b3Jrcy4KLS8vCi0vLyBBcyBvZiBBUEkgbGV2ZWwgMjEsIGxvd2VyIGxhdGVuY3kgYXVk
aW8gaW5wdXQgaXMgc3VwcG9ydGVkIG9uIHNlbGVjdCBkZXZpY2VzLgotLy8gVG8gdGFrZSBhZHZh
bnRhZ2Ugb2YgdGhpcyBmZWF0dXJlLCBmaXJzdCBjb25maXJtIHRoYXQgbG93ZXIgbGF0ZW5jeSBv
dXRwdXQgaXMKLS8vIGF2YWlsYWJsZS4gVGhlIGNhcGFiaWxpdHkgZm9yIGxvd2VyIGxhdGVuY3kg
b3V0cHV0IGlzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGUKLS8vIGxvd2VyIGxhdGVuY3kgaW5wdXQg
ZmVhdHVyZS4gVGhlbiwgY3JlYXRlIGFuIEF1ZGlvUmVjb3JkZXIgd2l0aCB0aGUgc2FtZQotLy8g
c2FtcGxlIHJhdGUgYW5kIGJ1ZmZlciBzaXplIGFzIHdvdWxkIGJlIHVzZWQgZm9yIG91dHB1dC4g
T3BlblNMIEVTIGludGVyZmFjZXMKLS8vIGZvciBpbnB1dCBlZmZlY3RzIHByZWNsdWRlIHRoZSBs
b3dlciBsYXRlbmN5IHBhdGguCi0vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20v
bmRrL2d1aWRlcy9hdWRpby9vcGVuc2wtcHJvZy1ub3Rlcy5odG1sCi0vLyBmb3IgbW9yZSBkZXRh
aWxzLgotY2xhc3MgT3BlblNMRVNSZWNvcmRlciB7Ci0gcHVibGljOgotICAvLyBCZWdpbm5pbmcg
d2l0aCBBUEkgbGV2ZWwgMTcgKEFuZHJvaWQgNC4yKSwgYSBidWZmZXIgY291bnQgb2YgMiBvciBt
b3JlIGlzCi0gIC8vIHJlcXVpcmVkIGZvciBsb3dlciBsYXRlbmN5LiBCZWdpbm5pbmcgd2l0aCBB
UEkgbGV2ZWwgMTggKEFuZHJvaWQgNC4zKSwgYQotICAvLyBidWZmZXIgY291bnQgb2YgMSBpcyBz
dWZmaWNpZW50IGZvciBsb3dlciBsYXRlbmN5LiBJbiBhZGRpdGlvbiwgdGhlIGJ1ZmZlcgotICAv
LyBzaXplIGFuZCBzYW1wbGUgcmF0ZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgZGV2aWNl
J3MgbmF0aXZlIGlucHV0Ci0gIC8vIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdmlhIHRoZSBhdWRp
byBtYW5hZ2VyIGF0IGNvbnN0cnVjdGlvbi4KLSAgLy8gVE9ETyhoZW5yaWthKTogcGVyaGFwcyBz
ZXQgdGhpcyB2YWx1ZSBkeW5hbWljYWxseSBiYXNlZCBvbiBPUyB2ZXJzaW9uLgotICBzdGF0aWMg
Y29uc3QgaW50IGtOdW1PZk9wZW5TTEVTQnVmZmVycyA9IDI7Ci0KLSAgZXhwbGljaXQgT3BlblNM
RVNSZWNvcmRlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpOwotICB+T3BlblNMRVNSZWNv
cmRlcigpOwotCi0gIGludCBJbml0KCk7Ci0gIGludCBUZXJtaW5hdGUoKTsKLQotICBpbnQgSW5p
dFJlY29yZGluZygpOwotICBib29sIFJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJl
dHVybiBpbml0aWFsaXplZF87IH0KLQotICBpbnQgU3RhcnRSZWNvcmRpbmcoKTsKLSAgaW50IFN0
b3BSZWNvcmRpbmcoKTsKLSAgYm9vbCBSZWNvcmRpbmcoKSBjb25zdCB7IHJldHVybiByZWNvcmRp
bmdfOyB9Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVk
aW9fYnVmZmVyKTsKLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCB1c2luZyBPcGVu
U0wgRVMgQVBJcyB3aGVuIGF2YWlsYWJsZS4KLSAgaW50IEVuYWJsZUJ1aWx0SW5BRUMoYm9vbCBl
bmFibGUpOwotICBpbnQgRW5hYmxlQnVpbHRJbkFHQyhib29sIGVuYWJsZSk7Ci0gIGludCBFbmFi
bGVCdWlsdEluTlMoYm9vbCBlbmFibGUpOwotCi0gcHJpdmF0ZToKLSAgLy8gT2J0YWluZXMgdGhl
IFNMIEVuZ2luZSBJbnRlcmZhY2UgZnJvbSB0aGUgZXhpc3RpbmcgZ2xvYmFsIEVuZ2luZSBvYmpl
Y3QuCi0gIC8vIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyBjcmVhdGlvbiBtZXRob2RzIG9mIGFsbCB0
aGUgT3BlblNMIEVTIG9iamVjdCB0eXBlcy4KLSAgLy8gVGhpcyBtZXRob2QgZGVmaW5lcyB0aGUg
fGVuZ2luZV98IG1lbWJlciB2YXJpYWJsZS4KLSAgYm9vbCBPYnRhaW5FbmdpbmVJbnRlcmZhY2Uo
KTsKLQotICAvLyBDcmVhdGVzL2Rlc3Ryb3lzIHRoZSBhdWRpbyByZWNvcmRlciBhbmQgdGhlIHNp
bXBsZS1idWZmZXIgcXVldWUgb2JqZWN0LgotICBib29sIENyZWF0ZUF1ZGlvUmVjb3JkZXIoKTsK
LSAgdm9pZCBEZXN0cm95QXVkaW9SZWNvcmRlcigpOwotCi0gIC8vIEFsbG9jYXRlIG1lbW9yeSBm
b3IgYXVkaW8gYnVmZmVycyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY2FwdHVyZSBhdWRpbwotICAv
LyB2aWEgdGhlIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGludGVyZmFjZS4KLSAgdm9p
ZCBBbGxvY2F0ZURhdGFCdWZmZXJzKCk7Ci0KLSAgLy8gVGhlc2UgY2FsbGJhY2sgbWV0aG9kcyBh
cmUgY2FsbGVkIHdoZW4gZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBpbnB1dAotICAvLyBi
dWZmZXIgcXVldWUuIFRoZXkgYXJlIGJvdGggY2FsbGVkIGZyb20gYW4gaW50ZXJuYWwgIk9wZW5T
TCBFUyB0aHJlYWQiCi0gIC8vIHdoaWNoIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRGFsdmlrIFZN
LgotICBzdGF0aWMgdm9pZCBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrKFNMQW5kcm9pZFNpbXBs
ZUJ1ZmZlclF1ZXVlSXRmIGNhbGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBjb250ZXh0KTsKLSAgdm9pZCBSZWFkQnVmZmVyUXVldWUoKTsKLQotICAv
LyBXcmFwcyBjYWxscyB0byBTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZVN0YXRlOjpFbnF1ZXVl
KCkgYW5kIGl0IGNhbiBiZQotICAvLyBjYWxsZWQgYm90aCBvbiB0aGUgbWFpbiB0aHJlYWQgKGJ1
dCBiZWZvcmUgcmVjb3JkaW5nIGhhcyBzdGFydGVkKSBhbmQgZnJvbQotICAvLyB0aGUgaW50ZXJu
YWwgYXVkaW8gdGhyZWFkIHdoaWxlIGlucHV0IHN0cmVhbWluZyBpcyBhY3RpdmUuIEl0IHVzZXMK
LSAgLy8gfHNpbXBsZV9idWZmZXJfcXVldWVffCBidXQgbm8gbG9jayBpcyBuZWVkZWQgc2luY2Ug
dGhlIGluaXRpYWwgY2FsbHMgZnJvbQotICAvLyB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBuYXRp
dmUgY2FsbGJhY2sgdGhyZWFkIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCi0gIGJvb2wgRW5xdWV1
ZUF1ZGlvQnVmZmVyKCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVudCByZWNvcmRlciBzdGF0
ZS4KLSAgU0x1aW50MzIgR2V0UmVjb3JkU3RhdGUoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRo
ZSBjdXJyZW50IGJ1ZmZlciBxdWV1ZSBzdGF0ZS4KLSAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVl
dWVTdGF0ZSBHZXRCdWZmZXJRdWV1ZVN0YXRlKCkgY29uc3Q7Ci0KLSAgLy8gTnVtYmVyIG9mIGJ1
ZmZlcnMgY3VycmVudGx5IGluIHRoZSBxdWV1ZS4KLSAgU0x1aW50MzIgR2V0QnVmZmVyQ291bnQo
KTsKLQotICAvLyBQcmludHMgYSBsb2cgbWVzc2FnZSBvZiB0aGUgY3VycmVudCBxdWV1ZSBzdGF0
ZS4gQ2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZwotICAvLyBwdXJwb3Nlcy4KLSAgdm9pZCBMb2dC
dWZmZXJTdGF0ZSgpIGNvbnN0OwotCi0gIC8vIEVuc3VyZXMgdGhhdCBtZXRob2RzIGFyZSBjYWxs
ZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgYXMgdGhpcyBvYmplY3QgaXMKLSAgLy8gY3JlYXRlZCBv
bi4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyXzsKLQotICAvLyBTdG9yZXMg
dGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8gU2ltcGxlQnVmZmVyUXVldWVDYWxsYmFjaygpIGZy
b20gaW50ZXJuYWwKLSAgLy8gbm9uLWFwcGxpY2F0aW9uIHRocmVhZCB3aGljaCBpcyBub3QgYXR0
YWNoZWQgdG8gdGhlIERhbHZpayBKVk0uCi0gIC8vIERldGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rp
b24gb2YgdGhpcyBvYmplY3QuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl9v
cGVuc2xlc187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgdG8gdGhlIGF1ZGlvIG1hbmFnZXIgaW5qZWN0
ZWQgYXQgY29uc3RydWN0aW9uLiBVc2VkIHRvIGNhY2hlCi0gIC8vIGF1ZGlvIHBhcmFtZXRlcnMg
YW5kIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIFNMIGVuZ2luZSBvYmplY3QgbmVlZGVkIGJ5IHRoZQot
ICAvLyBPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSBtZXRob2QuIFRoZSBhdWRpbyBtYW5hZ2VyIG91
dGxpdmVzIGFueSBpbnN0YW5jZSBvZgotICAvLyB0aGlzIGNsYXNzLgotICBBdWRpb01hbmFnZXIq
IGNvbnN0IGF1ZGlvX21hbmFnZXJfOwotCi0gIC8vIENvbnRhaW5zIGF1ZGlvIHBhcmFtZXRlcnMg
cHJvdmlkZWQgdG8gdGhpcyBjbGFzcyBhdCBjb25zdHJ1Y3Rpb24gYnkgdGhlCi0gIC8vIEF1ZGlv
TWFuYWdlci4KLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1ZGlvX3BhcmFtZXRlcnNfOwotCi0g
IC8vIFJhdyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hBdWRpb0J1ZmZl
cigpLiBPd25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNsYXNzIGFuZCBj
YWxsZWQgYnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgotICBBdWRpb0RldmljZUJ1ZmZl
ciogYXVkaW9fZGV2aWNlX2J1ZmZlcl87Ci0KLSAgLy8gUENNLXR5cGUgZm9ybWF0IGRlZmluaXRp
b24uCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBzdXBwb3J0IGZvciBTTEFuZHJvaWREYXRhRm9y
bWF0X1BDTV9FWCAoYW5kcm9pZC0yMSkgaWYKLSAgLy8gMzItYml0IGZsb2F0IHJlcHJlc2VudGF0
aW9uIGlzIG5lZWRlZC4KLSAgU0xEYXRhRm9ybWF0X1BDTSBwY21fZm9ybWF0XzsKLQotICBib29s
IGluaXRpYWxpemVkXzsKLSAgYm9vbCByZWNvcmRpbmdfOwotCi0gIC8vIFRoaXMgaW50ZXJmYWNl
IGV4cG9zZXMgY3JlYXRpb24gbWV0aG9kcyBmb3IgYWxsIHRoZSBPcGVuU0wgRVMgb2JqZWN0IHR5
cGVzLgotICAvLyBJdCBpcyB0aGUgT3BlblNMIEVTIEFQSSBlbnRyeSBwb2ludC4KLSAgU0xFbmdp
bmVJdGYgZW5naW5lXzsKLQotICAvLyBUaGUgYXVkaW8gcmVjb3JkZXIgbWVkaWEgb2JqZWN0IHJl
Y29yZHMgYXVkaW8gdG8gdGhlIGRlc3RpbmF0aW9uIHNwZWNpZmllZAotICAvLyBieSB0aGUgZGF0
YSBzaW5rIGNhcHR1cmluZyBpdCBmcm9tIHRoZSBpbnB1dCBzcGVjaWZpZWQgYnkgdGhlIGRhdGEg
c291cmNlLgotICB3ZWJydGM6OlNjb3BlZFNMT2JqZWN0SXRmIHJlY29yZGVyX29iamVjdF87Ci0K
LSAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkIG9uIHRoZSBhdWRpbyByZWNvcmRlciBv
YmplY3QgYW5kIGl0IGNvbnRyb2xzCi0gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgYXVkaW8gcmVjb3Jk
ZXIuCi0gIFNMUmVjb3JkSXRmIHJlY29yZGVyXzsKLQotICAvLyBUaGUgQW5kcm9pZCBTaW1wbGUg
QnVmZmVyIFF1ZXVlIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQgb24gdGhlIGF1ZGlvCi0gIC8vIHJl
Y29yZGVyLiBGb3IgcmVjb3JkaW5nLCBhbiBhcHAgc2hvdWxkIGVucXVldWUgZW1wdHkgYnVmZmVy
cy4gV2hlbiBhCi0gIC8vIHJlZ2lzdGVyZWQgY2FsbGJhY2sgc2VuZHMgbm90aWZpY2F0aW9uIHRo
YXQgdGhlIHN5c3RlbSBoYXMgZmluaXNoZWQgd3JpdGluZwotICAvLyBkYXRhIHRvIHRoZSBidWZm
ZXIsIHRoZSBhcHAgY2FuIHJlYWQgdGhlIGJ1ZmZlci4KLSAgU0xBbmRyb2lkU2ltcGxlQnVmZmVy
UXVldWVJdGYgc2ltcGxlX2J1ZmZlcl9xdWV1ZV87Ci0KLSAgLy8gQ29uc3VtZXMgYXVkaW8gb2Yg
bmF0aXZlIGJ1ZmZlciBzaXplIGFuZCBmZWVkcyB0aGUgV2ViUlRDIGxheWVyIHdpdGggMTBtcwot
ICAvLyBjaHVua3Mgb2YgYXVkaW8uCi0gIHN0ZDo6dW5pcXVlX3B0cjxGaW5lQXVkaW9CdWZmZXI+
IGZpbmVfYXVkaW9fYnVmZmVyXzsKLQotICAvLyBRdWV1ZSBvZiBhdWRpbyBidWZmZXJzIHRvIGJl
IHVzZWQgYnkgdGhlIHJlY29yZGVyIG9iamVjdCBmb3IgY2FwdHVyaW5nCi0gIC8vIGF1ZGlvLiBU
aGV5IHdpbGwgYmUgdXNlZCBpbiBhIFJvdW5kLXJvYmluIHdheSBhbmQgdGhlIHNpemUgb2YgZWFj
aCBidWZmZXIKLSAgLy8gaXMgZ2l2ZW4gYnkgQXVkaW9QYXJhbWV0ZXJzOjpmcmFtZXNfcGVyX2J1
ZmZlcigpLCBpLmUuLCBpdCBjb3JyZXNwb25kcyB0bwotICAvLyB0aGUgbmF0aXZlIE9wZW5TTCBF
UyBidWZmZXIgc2l6ZS4KLSAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dW5pcXVlX3B0cjxTTGludDE2
W10+W10+IGF1ZGlvX2J1ZmZlcnNfOwotCi0gIC8vIEtlZXBzIHRyYWNrIG9mIGFjdGl2ZSBhdWRp
byBidWZmZXIgJ24nIGluIHRoZSBhdWRpb19idWZmZXJzX1tuXSBxdWV1ZS4KLSAgLy8gRXhhbXBs
ZSAoa051bU9mT3BlblNMRVNCdWZmZXJzID0gMik6IGNvdW50cyAwLCAxLCAwLCAxLCAuLi4KLSAg
aW50IGJ1ZmZlcl9pbmRleF87Ci0KLSAgLy8gTGFzdCB0aW1lIHRoZSBPcGVuU0wgRVMgbGF5ZXIg
ZGVsaXZlcmVkIHJlY29yZGVkIGF1ZGlvIGRhdGEuCi0gIHVpbnQzMl90IGxhc3RfcmVjX3RpbWVf
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIE1PRFVMRVNfQVVE
SU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfUkVDT1JERVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL3dpbi93aW5kb3dz
X3ZlcnNpb24uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9y
dGNfYmFzZS93aW4vd2luZG93c192ZXJzaW9uLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyZTZjMTU3N2NlZGFiMWQ2M2FmMWI1MDM1MDEwYjUwYjU0NTEyZTI0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL3dpbi93aW5kb3dzX3ZlcnNpb24uY2MKKysr
IC9kZXYvbnVsbApAQCAtMSw0MjIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNp
bmNsdWRlICJydGNfYmFzZS93aW4vd2luZG93c192ZXJzaW9uLmgiCi0KLSNpbmNsdWRlIDx3aW5k
b3dzLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3Mu
aCIKLSNpbmNsdWRlICJydGNfYmFzZS9zdHJpbmdfdXRpbHMuaCIKLQotI2lmICFkZWZpbmVkKF9f
Y2xhbmdfXykgJiYgX01TQ19GVUxMX1ZFUiA8IDE5MTEyNTUwNwotI2Vycm9yIFZTIDIwMTcgVXBk
YXRlIDMuMiBvciBoaWdoZXIgaXMgcmVxdWlyZWQKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoV0lO
VVdQKQotCi1uYW1lc3BhY2UgewotCi10eXBlZGVmIEJPT0woV0lOQVBJKiBHZXRQcm9kdWN0SW5m
b1B0cikoRFdPUkQsIERXT1JELCBEV09SRCwgRFdPUkQsIFBEV09SRCk7Ci0KLS8vIE1hc2sgdG8g
cHVsbCBXT1c2NCBhY2Nlc3MgZmxhZ3Mgb3V0IG9mIFJFR1NBTSBhY2Nlc3MuCi1jb25zdCBSRUdT
QU0ga1dvdzY0QWNjZXNzTWFzayA9IEtFWV9XT1c2NF8zMktFWSB8IEtFWV9XT1c2NF82NEtFWTsK
LQotLy8gVXRpbGl0eSBjbGFzcyB0byByZWFkLCB3cml0ZSBhbmQgbWFuaXB1bGF0ZSB0aGUgV2lu
ZG93cyBSZWdpc3RyeS4KLS8vIFJlZ2lzdHJ5IHZvY2FidWxhcnkgcHJpbWVyOiBhICJrZXkiIGlz
IGxpa2UgYSBmb2xkZXIsIGluIHdoaWNoIHRoZXJlCi0vLyBhcmUgInZhbHVlcyIsIHdoaWNoIGFy
ZSA8bmFtZSwgZGF0YT4gcGFpcnMsIHdpdGggYW4gYXNzb2NpYXRlZCBkYXRhIHR5cGUuCi0vLyBC
YXNlZCBvbiBiYXNlOjp3aW46OlJlZ0tleSBidXQgb25seSBpbXBsZW1lbnRzIGEgc21hbGwgZnJh
Y3Rpb24gb2YgaXQuCi1jbGFzcyBSZWdLZXkgewotIHB1YmxpYzoKLSAgUmVnS2V5KCkgOiBrZXlf
KG51bGxwdHIpLCB3b3c2NGFjY2Vzc18oMCkge30KLQotICBSZWdLZXkoSEtFWSByb290a2V5LCBj
b25zdCB3Y2hhcl90KiBzdWJrZXksIFJFR1NBTSBhY2Nlc3MpCi0gICAgICA6IGtleV8obnVsbHB0
ciksIHdvdzY0YWNjZXNzXygwKSB7Ci0gICAgaWYgKHJvb3RrZXkpIHsKLSAgICAgIGlmIChhY2Nl
c3MgJiAoS0VZX1NFVF9WQUxVRSB8IEtFWV9DUkVBVEVfU1VCX0tFWSB8IEtFWV9DUkVBVEVfTElO
SykpCi0gICAgICAgIENyZWF0ZShyb290a2V5LCBzdWJrZXksIGFjY2Vzcyk7Ci0gICAgICBlbHNl
Ci0gICAgICAgIE9wZW4ocm9vdGtleSwgc3Via2V5LCBhY2Nlc3MpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBSVENfRENIRUNLKCFzdWJrZXkpOwotICAgICAgd293NjRhY2Nlc3NfID0gYWNjZXNzICYg
a1dvdzY0QWNjZXNzTWFzazsKLSAgICB9Ci0gIH0KLQotICB+UmVnS2V5KCkgeyBDbG9zZSgpOyB9
Ci0KLSAgTE9ORyBDcmVhdGUoSEtFWSByb290a2V5LCBjb25zdCB3Y2hhcl90KiBzdWJrZXksIFJF
R1NBTSBhY2Nlc3MpIHsKLSAgICBEV09SRCBkaXNwb3NpdGlvbl92YWx1ZTsKLSAgICByZXR1cm4g
Q3JlYXRlV2l0aERpc3Bvc2l0aW9uKHJvb3RrZXksIHN1YmtleSwgJmRpc3Bvc2l0aW9uX3ZhbHVl
LCBhY2Nlc3MpOwotICB9Ci0KLSAgTE9ORyBDcmVhdGVXaXRoRGlzcG9zaXRpb24oSEtFWSByb290
a2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBzdWJrZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKiBkaXNwb3NpdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVHU0FNIGFjY2VzcykgewotICAgIFJUQ19EQ0hFQ0so
cm9vdGtleSAmJiBzdWJrZXkgJiYgYWNjZXNzICYmIGRpc3Bvc2l0aW9uKTsKLSAgICBIS0VZIHN1
YmhrZXkgPSBOVUxMOwotICAgIExPTkcgcmVzdWx0ID0KLSAgICAgICAgOjpSZWdDcmVhdGVLZXlF
eFcocm9vdGtleSwgc3Via2V5LCAwLCBOVUxMLCBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLCBOVUxMLCAmc3ViaGtleSwgZGlzcG9zaXRp
b24pOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgQ2xvc2UoKTsK
LSAgICAgIGtleV8gPSBzdWJoa2V5OwotICAgICAgd293NjRhY2Nlc3NfID0gYWNjZXNzICYga1dv
dzY0QWNjZXNzTWFzazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8g
T3BlbnMgYW4gZXhpc3RpbmcgcmVnIGtleS4KLSAgTE9ORyBPcGVuKEhLRVkgcm9vdGtleSwgY29u
c3Qgd2NoYXJfdCogc3Via2V5LCBSRUdTQU0gYWNjZXNzKSB7Ci0gICAgUlRDX0RDSEVDSyhyb290
a2V5ICYmIHN1YmtleSAmJiBhY2Nlc3MpOwotICAgIEhLRVkgc3ViaGtleSA9IE5VTEw7Ci0KLSAg
ICBMT05HIHJlc3VsdCA9IDo6UmVnT3BlbktleUV4Vyhyb290a2V5LCBzdWJrZXksIDAsIGFjY2Vz
cywgJnN1YmhrZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAg
Q2xvc2UoKTsKLSAgICAgIGtleV8gPSBzdWJoa2V5OwotICAgICAgd293NjRhY2Nlc3NfID0gYWNj
ZXNzICYga1dvdzY0QWNjZXNzTWFzazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9
Ci0KLSAgLy8gQ2xvc2VzIHRoaXMgcmVnIGtleS4KLSAgdm9pZCBDbG9zZSgpIHsKLSAgICBpZiAo
a2V5XykgewotICAgICAgOjpSZWdDbG9zZUtleShrZXlfKTsKLSAgICAgIGtleV8gPSBudWxscHRy
OwotICAgIH0KLSAgfQotCi0gIC8vIFJlYWRzIGEgUkVHX0RXT1JEICh1aW50MzJfdCkgaW50byB8
b3V0X3ZhbHVlfC4gSWYgfG5hbWV8IGlzIG51bGwgb3IgZW1wdHksCi0gIC8vIHJlYWRzIHRoZSBr
ZXkncyBkZWZhdWx0IHZhbHVlLCBpZiBhbnkuCi0gIExPTkcgUmVhZFZhbHVlRFcoY29uc3Qgd2No
YXJfdCogbmFtZSwgRFdPUkQqIG91dF92YWx1ZSkgY29uc3QgewotICAgIFJUQ19EQ0hFQ0sob3V0
X3ZhbHVlKTsKLSAgICBEV09SRCB0eXBlID0gUkVHX0RXT1JEOwotICAgIERXT1JEIHNpemUgPSBz
aXplb2YoRFdPUkQpOwotICAgIERXT1JEIGxvY2FsX3ZhbHVlID0gMDsKLSAgICBMT05HIHJlc3Vs
dCA9IFJlYWRWYWx1ZShuYW1lLCAmbG9jYWxfdmFsdWUsICZzaXplLCAmdHlwZSk7Ci0gICAgaWYg
KHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICBpZiAoKHR5cGUgPT0gUkVHX0RXT1JE
IHx8IHR5cGUgPT0gUkVHX0JJTkFSWSkgJiYgc2l6ZSA9PSBzaXplb2YoRFdPUkQpKQotICAgICAg
ICAqb3V0X3ZhbHVlID0gbG9jYWxfdmFsdWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9
IEVSUk9SX0NBTlRSRUFEOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAv
LyBSZWFkcyBhIHN0cmluZyBpbnRvIHxvdXRfdmFsdWV8LiBJZiB8bmFtZXwgaXMgbnVsbCBvciBl
bXB0eSwgcmVhZHMKLSAgLy8gdGhlIGtleSdzIGRlZmF1bHQgdmFsdWUsIGlmIGFueS4KLSAgTE9O
RyBSZWFkVmFsdWUoY29uc3Qgd2NoYXJfdCogbmFtZSwgc3RkOjp3c3RyaW5nKiBvdXRfdmFsdWUp
IGNvbnN0IHsKLSAgICBSVENfRENIRUNLKG91dF92YWx1ZSk7Ci0gICAgY29uc3Qgc2l6ZV90IGtN
YXhTdHJpbmdMZW5ndGggPSAxMDI0OyAgLy8gVGhpcyBpcyBhZnRlciBleHBhbnNpb24uCi0gICAg
Ly8gVXNlIHRoZSBvbmUgb2YgdGhlIG90aGVyIGZvcm1zIG9mIFJlYWRWYWx1ZSBpZiAxMDI0IGlz
IHRvbyBzbWFsbCBmb3IgeW91LgotICAgIHdjaGFyX3QgcmF3X3ZhbHVlW2tNYXhTdHJpbmdMZW5n
dGhdOwotICAgIERXT1JEIHR5cGUgPSBSRUdfU1osIHNpemUgPSBzaXplb2YocmF3X3ZhbHVlKTsK
LSAgICBMT05HIHJlc3VsdCA9IFJlYWRWYWx1ZShuYW1lLCByYXdfdmFsdWUsICZzaXplLCAmdHlw
ZSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICBpZiAodHlwZSA9
PSBSRUdfU1opIHsKLSAgICAgICAgKm91dF92YWx1ZSA9IHJhd192YWx1ZTsKLSAgICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBSRUdfRVhQQU5EX1NaKSB7Ci0gICAgICAgIHdjaGFyX3QgZXhwYW5kZWRb
a01heFN0cmluZ0xlbmd0aF07Ci0gICAgICAgIHNpemUgPQotICAgICAgICAgICAgOjpFeHBhbmRF
bnZpcm9ubWVudFN0cmluZ3NXKHJhd192YWx1ZSwgZXhwYW5kZWQsIGtNYXhTdHJpbmdMZW5ndGgp
OwotICAgICAgICAvLyBTdWNjZXNzOiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2NoYXJfdCdzIGNv
cGllZAotICAgICAgICAvLyBGYWlsOiBidWZmZXIgdG9vIHNtYWxsLCByZXR1cm5zIHRoZSBzaXpl
IHJlcXVpcmVkCi0gICAgICAgIC8vIEZhaWw6IG90aGVyLCByZXR1cm5zIDAKLSAgICAgICAgaWYg
KHNpemUgPT0gMCB8fCBzaXplID4ga01heFN0cmluZ0xlbmd0aCkgewotICAgICAgICAgIHJlc3Vs
dCA9IEVSUk9SX01PUkVfREFUQTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAqb3V0X3Zh
bHVlID0gZXhwYW5kZWQ7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5v
dCBhIHN0cmluZy4gT29wcy4KLSAgICAgICAgcmVzdWx0ID0gRVJST1JfQ0FOVFJFQUQ7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIExPTkcgUmVhZFZhbHVl
KGNvbnN0IHdjaGFyX3QqIG5hbWUsCi0gICAgICAgICAgICAgICAgIHZvaWQqIGRhdGEsCi0gICAg
ICAgICAgICAgICAgIERXT1JEKiBkc2l6ZSwKLSAgICAgICAgICAgICAgICAgRFdPUkQqIGR0eXBl
KSBjb25zdCB7Ci0gICAgTE9ORyByZXN1bHQgPSBSZWdRdWVyeVZhbHVlRXhXKGtleV8sIG5hbWUs
IDAsIGR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PExQQllURT4oZGF0YSksIGRzaXplKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0K
LSBwcml2YXRlOgotICBIS0VZIGtleV87Ci0gIFJFR1NBTSB3b3c2NGFjY2Vzc187Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UKLQotI2VuZGlmICAvLyAhZGVmaW5lZChXSU5VV1ApCi0KLW5hbWVzcGFj
ZSBydGMgewotbmFtZXNwYWNlIHJ0Y193aW4gewotbmFtZXNwYWNlIHsKLQotLy8gSGVscGVyIHRv
IG1hcCBhIG1ham9yLm1pbm9yLnguYnVpbGQgdmVyc2lvbiAoZS5nLiA2LjEpIHRvIGEgV2luZG93
cyByZWxlYXNlLgotVmVyc2lvbiBNYWpvck1pbm9yQnVpbGRUb1ZlcnNpb24oaW50IG1ham9yLCBp
bnQgbWlub3IsIGludCBidWlsZCkgewotICBpZiAoKG1ham9yID09IDUpICYmIChtaW5vciA+IDAp
KSB7Ci0gICAgLy8gVHJlYXQgWFAgUHJvIHg2NCwgSG9tZSBTZXJ2ZXIsIGFuZCBTZXJ2ZXIgMjAw
MyBSMiBhcyBTZXJ2ZXIgMjAwMy4KLSAgICByZXR1cm4gKG1pbm9yID09IDEpID8gVkVSU0lPTl9Y
UCA6IFZFUlNJT05fU0VSVkVSXzIwMDM7Ci0gIH0gZWxzZSBpZiAobWFqb3IgPT0gNikgewotICAg
IHN3aXRjaCAobWlub3IpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgLy8gVHJlYXQgV2luZG93
cyBTZXJ2ZXIgMjAwOCB0aGUgc2FtZSBhcyBXaW5kb3dzIFZpc3RhLgotICAgICAgICByZXR1cm4g
VkVSU0lPTl9WSVNUQTsKLSAgICAgIGNhc2UgMToKLSAgICAgICAgLy8gVHJlYXQgV2luZG93cyBT
ZXJ2ZXIgMjAwOCBSMiB0aGUgc2FtZSBhcyBXaW5kb3dzIDcuCi0gICAgICAgIHJldHVybiBWRVJT
SU9OX1dJTjc7Ci0gICAgICBjYXNlIDI6Ci0gICAgICAgIC8vIFRyZWF0IFdpbmRvd3MgU2VydmVy
IDIwMTIgdGhlIHNhbWUgYXMgV2luZG93cyA4LgotICAgICAgICByZXR1cm4gVkVSU0lPTl9XSU44
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgUlRDX0RDSEVDS19FUShtaW5vciwgMyk7Ci0gICAg
ICAgIHJldHVybiBWRVJTSU9OX1dJTjhfMTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAobWFqb3IgPT0g
MTApIHsKLSAgICBpZiAoYnVpbGQgPCAxMDU4NikgewotICAgICAgcmV0dXJuIFZFUlNJT05fV0lO
MTA7Ci0gICAgfSBlbHNlIGlmIChidWlsZCA8IDE0MzkzKSB7Ci0gICAgICByZXR1cm4gVkVSU0lP
Tl9XSU4xMF9USDI7Ci0gICAgfSBlbHNlIGlmIChidWlsZCA8IDE1MDYzKSB7Ci0gICAgICByZXR1
cm4gVkVSU0lPTl9XSU4xMF9SUzE7Ci0gICAgfSBlbHNlIGlmIChidWlsZCA8IDE2Mjk5KSB7Ci0g
ICAgICByZXR1cm4gVkVSU0lPTl9XSU4xMF9SUzI7Ci0gICAgfSBlbHNlIGlmIChidWlsZCA8IDE3
MTM0KSB7Ci0gICAgICByZXR1cm4gVkVSU0lPTl9XSU4xMF9SUzM7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHJldHVybiBWRVJTSU9OX1dJTjEwX1JTNDsKLSAgICB9Ci0gIH0gZWxzZSBpZiAobWFqb3Ig
PiA2KSB7Ci0gICAgUlRDX05PVFJFQUNIRUQoKTsKLSAgICByZXR1cm4gVkVSU0lPTl9XSU5fTEFT
VDsKLSAgfQotCi0gIHJldHVybiBWRVJTSU9OX1BSRV9YUDsKLX0KLQotLy8gUmV0dXJucyB0aGUg
dGhlICJVQlIiIHZhbHVlIGZyb20gdGhlIHJlZ2lzdHJ5LiBJbnRyb2R1Y2VkIGluIFdpbmRvd3Mg
MTAsCi0vLyB0aGlzIHVuZG9jdW1lbnRlZCB2YWx1ZSBhcHBlYXJzIHRvIGJlIHNpbWlsYXIgdG8g
YSBwYXRjaCBudW1iZXIuCi0vLyBSZXR1cm5zIDAgaWYgdGhlIHZhbHVlIGRvZXMgbm90IGV4aXN0
IG9yIGl0IGNvdWxkIG5vdCBiZSByZWFkLgotaW50IEdldFVCUigpIHsKLSNpZiBkZWZpbmVkKFdJ
TlVXUCkKLSAgLy8gVGhlIHJlZ2lzdHJ5IGlzIG5vdCBhY2Nlc3NpYmxlIGZvciBXaW5VV1Agc2Fu
ZGJveGVkIHN0b3JlIGFwcGxpY2F0aW9ucy4KLSAgcmV0dXJuIDA7Ci0jZWxzZQotICAvLyBUaGUg
dmFsdWVzIHVuZGVyIHRoZSBDdXJyZW50VmVyc2lvbiByZWdpc3RyeSBoaXZlIGFyZSBtaXJyb3Jl
ZCB1bmRlcgotICAvLyB0aGUgY29ycmVzcG9uZGluZyBXb3c2NDMyIGhpdmUuCi0gIHN0YXRpYyBj
b25zdGV4cHIgd2NoYXJfdCBrUmVnS2V5V2luZG93c05UQ3VycmVudFZlcnNpb25bXSA9Ci0gICAg
ICBMIlNPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uIjsKLQot
ICBSZWdLZXkga2V5OwotICBpZiAoa2V5Lk9wZW4oSEtFWV9MT0NBTF9NQUNISU5FLCBrUmVnS2V5
V2luZG93c05UQ3VycmVudFZlcnNpb24sCi0gICAgICAgICAgICAgICBLRVlfUVVFUllfVkFMVUUp
ICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIERXT1JEIHViciA9
IDA7Ci0gIGtleS5SZWFkVmFsdWVEVyhMIlVCUiIsICZ1YnIpOwotCi0gIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHVicik7Ci0jZW5kaWYgIC8vIGRlZmluZWQoV0lOVVdQKQotfQotCi19ICAvLyBu
YW1lc3BhY2UKLQotLy8gc3RhdGljCi1PU0luZm8qIE9TSW5mbzo6R2V0SW5zdGFuY2UoKSB7Ci0g
IC8vIE5vdGU6IHdlIGRvbid0IHVzZSB0aGUgU2luZ2xldG9uIGNsYXNzIGJlY2F1c2UgaXQgZGVw
ZW5kcyBvbiBBdEV4aXRNYW5hZ2VyLAotICAvLyBhbmQgaXQncyBjb252ZW5pZW50IGZvciBvdGhl
ciBtb2R1bGVzIHRvIHVzZSB0aGlzIGNsYXNzIHdpdGhvdXQgaXQuIFRoaXMKLSAgLy8gcGF0dGVy
biBpcyBjb3BpZWQgZnJvbSBndXJsLmNjLgotICBzdGF0aWMgT1NJbmZvKiBpbmZvOwotICBpZiAo
IWluZm8pIHsKLSAgICBPU0luZm8qIG5ld19pbmZvID0gbmV3IE9TSW5mbygpOwotICAgIGlmIChJ
bnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxQVk9JRCo+
KCZpbmZvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19p
bmZvLCBOVUxMKSkgewotICAgICAgZGVsZXRlIG5ld19pbmZvOwotICAgIH0KLSAgfQotICByZXR1
cm4gaW5mbzsKLX0KLQotT1NJbmZvOjpPU0luZm8oKQotICAgIDogdmVyc2lvbl8oVkVSU0lPTl9Q
UkVfWFApLAotICAgICAgYXJjaGl0ZWN0dXJlXyhPVEhFUl9BUkNISVRFQ1RVUkUpLAotICAgICAg
d293NjRfc3RhdHVzXyhHZXRXT1c2NFN0YXR1c0ZvclByb2Nlc3MoR2V0Q3VycmVudFByb2Nlc3Mo
KSkpIHsKLSAgT1NWRVJTSU9OSU5GT0VYVyB2ZXJzaW9uX2luZm8gPSB7c2l6ZW9mIHZlcnNpb25f
aW5mb307Ci0gIC8vIEFwcGxpY2F0aW9ucyBub3QgbWFuaWZlc3RlZCBmb3IgV2luZG93cyA4LjEg
b3IgV2luZG93cyAxMCB3aWxsIHJldHVybiB0aGUKLSAgLy8gV2luZG93cyA4IE9TIHZlcnNpb24g
dmFsdWUgKDYuMikuIE9uY2UgYW4gYXBwbGljYXRpb24gaXMgbWFuaWZlc3RlZCBmb3IgYQotICAv
LyBnaXZlbiBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24sIEdldFZlcnNpb25FeCgpIHdpbGwgYWx3
YXlzIHJldHVybiB0aGUKLSAgLy8gdmVyc2lvbiB0aGF0IHRoZSBhcHBsaWNhdGlvbiBpcyBtYW5p
ZmVzdGVkIGZvciBpbiBmdXR1cmUgcmVsZWFzZXMuCi0gIC8vIGh0dHBzOi8vZG9jcy5taWNyb3Nv
ZnQuY29tL2VuLXVzL3dpbmRvd3MvZGVza3RvcC9TeXNJbmZvL3RhcmdldGluZy15b3VyLWFwcGxp
Y2F0aW9uLWF0LXdpbmRvd3MtOC0xLgotICAvLyBodHRwczovL3d3dy5jb2RlcHJvamVjdC5jb20v
QXJ0aWNsZXMvNjc4NjA2L1BhcnQtT3ZlcmNvbWluZy1XaW5kb3dzLXMtZGVwcmVjYXRpb24tb2Yt
R2V0VmUuCi0gIDo6R2V0VmVyc2lvbkV4VyhyZWludGVycHJldF9jYXN0PE9TVkVSU0lPTklORk9X
Kj4oJnZlcnNpb25faW5mbykpOwotICB2ZXJzaW9uX251bWJlcl8ubWFqb3IgPSB2ZXJzaW9uX2lu
Zm8uZHdNYWpvclZlcnNpb247Ci0gIHZlcnNpb25fbnVtYmVyXy5taW5vciA9IHZlcnNpb25faW5m
by5kd01pbm9yVmVyc2lvbjsKLSAgdmVyc2lvbl9udW1iZXJfLmJ1aWxkID0gdmVyc2lvbl9pbmZv
LmR3QnVpbGROdW1iZXI7Ci0gIHZlcnNpb25fbnVtYmVyXy5wYXRjaCA9IEdldFVCUigpOwotICB2
ZXJzaW9uXyA9IE1ham9yTWlub3JCdWlsZFRvVmVyc2lvbigKLSAgICAgIHZlcnNpb25fbnVtYmVy
Xy5tYWpvciwgdmVyc2lvbl9udW1iZXJfLm1pbm9yLCB2ZXJzaW9uX251bWJlcl8uYnVpbGQpOwot
ICBzZXJ2aWNlX3BhY2tfLm1ham9yID0gdmVyc2lvbl9pbmZvLndTZXJ2aWNlUGFja01ham9yOwot
ICBzZXJ2aWNlX3BhY2tfLm1pbm9yID0gdmVyc2lvbl9pbmZvLndTZXJ2aWNlUGFja01pbm9yOwot
ICBzZXJ2aWNlX3BhY2tfc3RyXyA9IHJ0Yzo6VG9VdGY4KHZlcnNpb25faW5mby5zekNTRFZlcnNp
b24pOwotCi0gIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvID0ge307Ci0gIDo6R2V0TmF0aXZlU3lz
dGVtSW5mbygmc3lzdGVtX2luZm8pOwotICBzd2l0Y2ggKHN5c3RlbV9pbmZvLndQcm9jZXNzb3JB
cmNoaXRlY3R1cmUpIHsKLSAgICBjYXNlIFBST0NFU1NPUl9BUkNISVRFQ1RVUkVfSU5URUw6Ci0g
ICAgICBhcmNoaXRlY3R1cmVfID0gWDg2X0FSQ0hJVEVDVFVSRTsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRV9BTUQ2NDoKLSAgICAgIGFyY2hpdGVjdHVyZV8g
PSBYNjRfQVJDSElURUNUVVJFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9DRVNTT1JfQVJD
SElURUNUVVJFX0lBNjQ6Ci0gICAgICBhcmNoaXRlY3R1cmVfID0gSUE2NF9BUkNISVRFQ1RVUkU7
Ci0gICAgICBicmVhazsKLSAgfQotICBwcm9jZXNzb3JzXyA9IHN5c3RlbV9pbmZvLmR3TnVtYmVy
T2ZQcm9jZXNzb3JzOwotICBhbGxvY2F0aW9uX2dyYW51bGFyaXR5XyA9IHN5c3RlbV9pbmZvLmR3
QWxsb2NhdGlvbkdyYW51bGFyaXR5OwotCi0jaWYgIWRlZmluZWQoV0lOVVdQKQotICBHZXRQcm9k
dWN0SW5mb1B0ciBnZXRfcHJvZHVjdF9pbmZvOwotICBEV09SRCBvc190eXBlOwotCi0gIGlmICh2
ZXJzaW9uX2luZm8uZHdNYWpvclZlcnNpb24gPT0gNiB8fCB2ZXJzaW9uX2luZm8uZHdNYWpvclZl
cnNpb24gPT0gMTApIHsKLSAgICAvLyBPbmx5IHByZXNlbnQgb24gVmlzdGErLgotICAgIGdldF9w
cm9kdWN0X2luZm8gPSByZWludGVycHJldF9jYXN0PEdldFByb2R1Y3RJbmZvUHRyPig6OkdldFBy
b2NBZGRyZXNzKAotICAgICAgICA6OkdldE1vZHVsZUhhbmRsZVcoTCJrZXJuZWwzMi5kbGwiKSwg
IkdldFByb2R1Y3RJbmZvIikpOwotCi0gICAgZ2V0X3Byb2R1Y3RfaW5mbyh2ZXJzaW9uX2luZm8u
ZHdNYWpvclZlcnNpb24sIHZlcnNpb25faW5mby5kd01pbm9yVmVyc2lvbiwKLSAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsICZvc190eXBlKTsKLSAgICBzd2l0Y2ggKG9zX3R5cGUpIHsKLSAgICAg
IGNhc2UgUFJPRFVDVF9DTFVTVEVSX1NFUlZFUjoKLSAgICAgIGNhc2UgUFJPRFVDVF9EQVRBQ0VO
VEVSX1NFUlZFUjoKLSAgICAgIGNhc2UgUFJPRFVDVF9EQVRBQ0VOVEVSX1NFUlZFUl9DT1JFOgot
ICAgICAgY2FzZSBQUk9EVUNUX0VOVEVSUFJJU0VfU0VSVkVSOgotICAgICAgY2FzZSBQUk9EVUNU
X0VOVEVSUFJJU0VfU0VSVkVSX0NPUkU6Ci0gICAgICBjYXNlIFBST0RVQ1RfRU5URVJQUklTRV9T
RVJWRVJfSUE2NDoKLSAgICAgIGNhc2UgUFJPRFVDVF9TTUFMTEJVU0lORVNTX1NFUlZFUjoKLSAg
ICAgIGNhc2UgUFJPRFVDVF9TTUFMTEJVU0lORVNTX1NFUlZFUl9QUkVNSVVNOgotICAgICAgY2Fz
ZSBQUk9EVUNUX1NUQU5EQVJEX1NFUlZFUjoKLSAgICAgIGNhc2UgUFJPRFVDVF9TVEFOREFSRF9T
RVJWRVJfQ09SRToKLSAgICAgIGNhc2UgUFJPRFVDVF9XRUJfU0VSVkVSOgotICAgICAgICB2ZXJz
aW9uX3R5cGVfID0gU1VJVEVfU0VSVkVSOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJP
RFVDVF9QUk9GRVNTSU9OQUw6Ci0gICAgICBjYXNlIFBST0RVQ1RfVUxUSU1BVEU6Ci0gICAgICAg
IHZlcnNpb25fdHlwZV8gPSBTVUlURV9QUk9GRVNTSU9OQUw7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBQUk9EVUNUX0VOVEVSUFJJU0U6Ci0gICAgICBjYXNlIFBST0RVQ1RfRU5URVJQUklT
RV9FOgotICAgICAgY2FzZSBQUk9EVUNUX0VOVEVSUFJJU0VfRVZBTFVBVElPTjoKLSAgICAgIGNh
c2UgUFJPRFVDVF9FTlRFUlBSSVNFX046Ci0gICAgICBjYXNlIFBST0RVQ1RfRU5URVJQUklTRV9O
X0VWQUxVQVRJT046Ci0gICAgICBjYXNlIFBST0RVQ1RfRU5URVJQUklTRV9TOgotICAgICAgY2Fz
ZSBQUk9EVUNUX0VOVEVSUFJJU0VfU19FVkFMVUFUSU9OOgotICAgICAgY2FzZSBQUk9EVUNUX0VO
VEVSUFJJU0VfU19OOgotICAgICAgY2FzZSBQUk9EVUNUX0VOVEVSUFJJU0VfU19OX0VWQUxVQVRJ
T046Ci0gICAgICBjYXNlIFBST0RVQ1RfQlVTSU5FU1M6Ci0gICAgICBjYXNlIFBST0RVQ1RfQlVT
SU5FU1NfTjoKLSAgICAgICAgdmVyc2lvbl90eXBlXyA9IFNVSVRFX0VOVEVSUFJJU0U7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBQUk9EVUNUX0VEVUNBVElPTjoKLSAgICAgIGNhc2UgUFJP
RFVDVF9FRFVDQVRJT05fTjoKLSAgICAgICAgdmVyc2lvbl90eXBlXyA9IFNVSVRFX0VEVUNBVElP
TjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFBST0RVQ1RfSE9NRV9CQVNJQzoKLSAgICAg
IGNhc2UgUFJPRFVDVF9IT01FX1BSRU1JVU06Ci0gICAgICBjYXNlIFBST0RVQ1RfU1RBUlRFUjoK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHZlcnNpb25fdHlwZV8gPSBTVUlURV9IT01FOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSBpZiAodmVyc2lvbl9pbmZvLmR3TWFqb3JWZXJz
aW9uID09IDUgJiYKLSAgICAgICAgICAgICB2ZXJzaW9uX2luZm8uZHdNaW5vclZlcnNpb24gPT0g
MikgewotICAgIGlmICh2ZXJzaW9uX2luZm8ud1Byb2R1Y3RUeXBlID09IFZFUl9OVF9XT1JLU1RB
VElPTiAmJgotICAgICAgICBzeXN0ZW1faW5mby53UHJvY2Vzc29yQXJjaGl0ZWN0dXJlID09IFBS
T0NFU1NPUl9BUkNISVRFQ1RVUkVfQU1ENjQpIHsKLSAgICAgIHZlcnNpb25fdHlwZV8gPSBTVUlU
RV9QUk9GRVNTSU9OQUw7Ci0gICAgfSBlbHNlIGlmICh2ZXJzaW9uX2luZm8ud1N1aXRlTWFzayAm
IFZFUl9TVUlURV9XSF9TRVJWRVIpIHsKLSAgICAgIHZlcnNpb25fdHlwZV8gPSBTVUlURV9IT01F
OwotICAgIH0gZWxzZSB7Ci0gICAgICB2ZXJzaW9uX3R5cGVfID0gU1VJVEVfU0VSVkVSOwotICAg
IH0KLSAgfSBlbHNlIGlmICh2ZXJzaW9uX2luZm8uZHdNYWpvclZlcnNpb24gPT0gNSAmJgotICAg
ICAgICAgICAgIHZlcnNpb25faW5mby5kd01pbm9yVmVyc2lvbiA9PSAxKSB7Ci0gICAgaWYgKHZl
cnNpb25faW5mby53U3VpdGVNYXNrICYgVkVSX1NVSVRFX1BFUlNPTkFMKQotICAgICAgdmVyc2lv
bl90eXBlXyA9IFNVSVRFX0hPTUU7Ci0gICAgZWxzZQotICAgICAgdmVyc2lvbl90eXBlXyA9IFNV
SVRFX1BST0ZFU1NJT05BTDsKLSAgfSBlbHNlIHsKLSAgICAvLyBXaW5kb3dzIGlzIHByZSBYUCBz
byB3ZSBkb24ndCBjYXJlIGJ1dCBwaWNrIGEgc2FmZSBkZWZhdWx0LgotICAgIHZlcnNpb25fdHlw
ZV8gPSBTVUlURV9IT01FOwotICB9Ci0jZWxzZQotICAvLyBXaW5VV1Agc2FuZGJveGVkIHN0b3Jl
IGFwcHMgZG8gbm90IGhhdmUgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lCi0gIC8vIHByb2R1Y3Qg
c3VpdGUgdGh1cyB0aGUgbW9zdCByZXN0cmljdGVkIHN1aXRlIGlzIGNob3Nlbi4KLSAgdmVyc2lv
bl90eXBlXyA9IFNVSVRFX0hPTUU7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKFdJTlVXUCkKLX0KLQot
T1NJbmZvOjp+T1NJbmZvKCkge30KLQotc3RkOjpzdHJpbmcgT1NJbmZvOjpwcm9jZXNzb3JfbW9k
ZWxfbmFtZSgpIHsKLSNpZiBkZWZpbmVkKFdJTlVXUCkKLSAgLy8gV2luVVdQIHNhbmRib3hlZCBz
dG9yZSBhcHBzIGRvIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvCi0gIC8vIHByb2JlIHRoZSBuYW1l
IG9mIHRoZSBjdXJyZW50IHByb2Nlc3Nvci4KLSAgcmV0dXJuICJVbmtub3duIFByb2Nlc3NvciAo
VVdQKSI7Ci0jZWxzZQotICBpZiAocHJvY2Vzc29yX21vZGVsX25hbWVfLmVtcHR5KCkpIHsKLSAg
ICBjb25zdCB3Y2hhcl90IGtQcm9jZXNzb3JOYW1lU3RyaW5nW10gPQotICAgICAgICBMIkhBUkRX
QVJFXFxERVNDUklQVElPTlxcU3lzdGVtXFxDZW50cmFsUHJvY2Vzc29yXFwwIjsKLSAgICBSZWdL
ZXkga2V5KEhLRVlfTE9DQUxfTUFDSElORSwga1Byb2Nlc3Nvck5hbWVTdHJpbmcsIEtFWV9SRUFE
KTsKLSAgICBzdGQ6OndzdHJpbmcgdmFsdWU7Ci0gICAga2V5LlJlYWRWYWx1ZShMIlByb2Nlc3Nv
ck5hbWVTdHJpbmciLCAmdmFsdWUpOwotICAgIHByb2Nlc3Nvcl9tb2RlbF9uYW1lXyA9IHJ0Yzo6
VG9VdGY4KHZhbHVlKTsKLSAgfQotICByZXR1cm4gcHJvY2Vzc29yX21vZGVsX25hbWVfOwotI2Vu
ZGlmICAvLyBkZWZpbmVkKFdJTlVXUCkKLX0KLQotLy8gc3RhdGljCi1PU0luZm86OldPVzY0U3Rh
dHVzIE9TSW5mbzo6R2V0V09XNjRTdGF0dXNGb3JQcm9jZXNzKEhBTkRMRSBwcm9jZXNzX2hhbmRs
ZSkgewotICBCT09MIGlzX3dvdzY0OwotI2lmIGRlZmluZWQoV0lOVVdQKQotICBpZiAoIUlzV293
NjRQcm9jZXNzKHByb2Nlc3NfaGFuZGxlLCAmaXNfd293NjQpKQotICAgIHJldHVybiBXT1c2NF9V
TktOT1dOOwotI2Vsc2UKLSAgdHlwZWRlZiBCT09MKFdJTkFQSSAqIElzV293NjRQcm9jZXNzRnVu
YykoSEFORExFLCBQQk9PTCk7Ci0gIElzV293NjRQcm9jZXNzRnVuYyBpc193b3c2NF9wcm9jZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDxJc1dvdzY0UHJvY2Vzc0Z1bmM+KAotICAgICAgR2V0UHJvY0Fk
ZHJlc3MoR2V0TW9kdWxlSGFuZGxlVyhMImtlcm5lbDMyLmRsbCIpLCAiSXNXb3c2NFByb2Nlc3Mi
KSk7Ci0gIGlmICghaXNfd293NjRfcHJvY2VzcykKLSAgICByZXR1cm4gV09XNjRfRElTQUJMRUQ7
Ci0gIGlmICghKCppc193b3c2NF9wcm9jZXNzKShwcm9jZXNzX2hhbmRsZSwgJmlzX3dvdzY0KSkK
LSAgICByZXR1cm4gV09XNjRfVU5LTk9XTjsKLSNlbmRpZiAgLy8gZGVmaW5lZChXSU5VV1ApCi0g
IHJldHVybiBpc193b3c2NCA/IFdPVzY0X0VOQUJMRUQgOiBXT1c2NF9ESVNBQkxFRDsKLX0KLQot
VmVyc2lvbiBHZXRWZXJzaW9uKCkgewotICByZXR1cm4gT1NJbmZvOjpHZXRJbnN0YW5jZSgpLT52
ZXJzaW9uKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBydGNfd2luCi19ICAvLyBuYW1lc3BhY2Ug
cnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9ydGNfYmFzZS93aW4vd2luZG93c192ZXJzaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS93aW4vd2luZG93c192ZXJzaW9uLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZDMxOWU0Y2NmZmViZmI3ZmIyZjY4ZDk4MDljZTQ3
NzNiNzlmMzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcnRjX2Jhc2Uvd2luL3dp
bmRvd3NfdmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IChjKSAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFJUQ19CQVNFX1dJTl9XSU5ET1dTX1ZFUlNJT05fSF8K
LSNkZWZpbmUgUlRDX0JBU0VfV0lOX1dJTkRPV1NfVkVSU0lPTl9IXwotCi0jaW5jbHVkZSA8c3Rk
ZGVmLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9jb25zdHJ1
Y3Rvcl9tYWdpYy5oIgotCi10eXBlZGVmIHZvaWQqIEhBTkRMRTsKLQotbmFtZXNwYWNlIHJ0YyB7
Ci1uYW1lc3BhY2UgcnRjX3dpbiB7Ci0KLS8vIFRoZSBydW5uaW5nIHZlcnNpb24gb2YgV2luZG93
cy4gIFRoaXMgaXMgZGVjbGFyZWQgb3V0c2lkZSBPU0luZm8gZm9yCi0vLyBzeW50YWN0aWMgc3Vn
YXIgcmVhc29uczsgc2VlIHRoZSBkZWNsYXJhdGlvbiBvZiBHZXRWZXJzaW9uKCkgYmVsb3cuCi0v
LyBOT1RFOiBLZWVwIHRoZXNlIGluIG9yZGVyIHNvIGNhbGxlcnMgY2FuIGRvIHRoaW5ncyBsaWtl
Ci0vLyAiaWYgKHJ0Y193aW46OkdldFZlcnNpb24oKSA+PSBydGNfd2luOjpWRVJTSU9OX1ZJU1RB
KSAuLi4iLgotLy8KLS8vIFRoaXMgZW51bSBpcyB1c2VkIGluIG1ldHJpY3MgaGlzdG9ncmFtcywg
c28gdGhleSBzaG91bGRuJ3QgYmUgcmVvcmRlcmVkIG9yCi0vLyByZW1vdmVkLiBOZXcgdmFsdWVz
IGNhbiBiZSBhZGRlZCBiZWZvcmUgVkVSU0lPTl9XSU5fTEFTVC4KLWVudW0gVmVyc2lvbiB7Ci0g
IFZFUlNJT05fUFJFX1hQID0gMCwgIC8vIE5vdCBzdXBwb3J0ZWQuCi0gIFZFUlNJT05fWFAgPSAx
LAotICBWRVJTSU9OX1NFUlZFUl8yMDAzID0gMiwgIC8vIEFsc28gaW5jbHVkZXMgWFAgUHJvIHg2
NCBhbmQgU2VydmVyIDIwMDMgUjIuCi0gIFZFUlNJT05fVklTVEEgPSAzLCAgICAgICAgLy8gQWxz
byBpbmNsdWRlcyBXaW5kb3dzIFNlcnZlciAyMDA4LgotICBWRVJTSU9OX1dJTjcgPSA0LCAgICAg
ICAgIC8vIEFsc28gaW5jbHVkZXMgV2luZG93cyBTZXJ2ZXIgMjAwOCBSMi4KLSAgVkVSU0lPTl9X
SU44ID0gNSwgICAgICAgICAvLyBBbHNvIGluY2x1ZGVzIFdpbmRvd3MgU2VydmVyIDIwMTIuCi0g
IFZFUlNJT05fV0lOOF8xID0gNiwgICAgICAgLy8gQWxzbyBpbmNsdWRlcyBXaW5kb3dzIFNlcnZl
ciAyMDEyIFIyLgotICBWRVJTSU9OX1dJTjEwID0gNywgICAgICAgIC8vIFRocmVzaG9sZCAxOiBW
ZXJzaW9uIDE1MDcsIEJ1aWxkIDEwMjQwLgotICBWRVJTSU9OX1dJTjEwX1RIMiA9IDgsICAgIC8v
IFRocmVzaG9sZCAyOiBWZXJzaW9uIDE1MTEsIEJ1aWxkIDEwNTg2LgotICBWRVJTSU9OX1dJTjEw
X1JTMSA9IDksICAgIC8vIFJlZHN0b25lIDE6IFZlcnNpb24gMTYwNywgQnVpbGQgMTQzOTMuCi0g
IFZFUlNJT05fV0lOMTBfUlMyID0gMTAsICAgLy8gUmVkc3RvbmUgMjogVmVyc2lvbiAxNzAzLCBC
dWlsZCAxNTA2My4KLSAgVkVSU0lPTl9XSU4xMF9SUzMgPSAxMSwgICAvLyBSZWRzdG9uZSAzOiBW
ZXJzaW9uIDE3MDksIEJ1aWxkIDE2Mjk5LgotICBWRVJTSU9OX1dJTjEwX1JTNCA9IDEyLCAgIC8v
IFJlZHN0b25lIDQ6IFZlcnNpb24gMTgwMywgQnVpbGQgMTcxMzQuCi0gIC8vIE9uIGVkaXQsIHVw
ZGF0ZSB0b29sc1xtZXRyaWNzXGhpc3RvZ3JhbXNcZW51bXMueG1sICJXaW5kb3dzVmVyc2lvbiIg
YW5kCi0gIC8vICJHcHVCbGFja2xpc3RGZWF0dXJlVGVzdFJlc3VsdHNXaW5kb3dzMiIuCi0gIFZF
UlNJT05fV0lOX0xBU1QsICAvLyBJbmRpY2F0ZXMgZXJyb3IgY29uZGl0aW9uLgotfTsKLQotLy8g
QSByb3VnaCBidWNrZXRpbmcgb2YgdGhlIGF2YWlsYWJsZSB0eXBlcyBvZiB2ZXJzaW9ucyBvZiBX
aW5kb3dzLiBUaGlzIGlzIHVzZWQKLS8vIHRvIGRpc3Rpbmd1aXNoIGVudGVycHJpc2UgZW5hYmxl
ZCB2ZXJzaW9ucyBmcm9tIGhvbWUgdmVyc2lvbnMgYW5kIHBvdGVudGlhbGx5Ci0vLyBzZXJ2ZXIg
dmVyc2lvbnMuIEtlZXAgdGhlc2UgdmFsdWVzIGluIHRoZSBzYW1lIG9yZGVyLCBzaW5jZSB0aGV5
IGFyZSB1c2VkIGFzCi0vLyBpcyBmb3IgbWV0cmljcyBoaXN0b2dyYW0gaWRzLgotZW51bSBWZXJz
aW9uVHlwZSB7Ci0gIFNVSVRFX0hPTUUgPSAwLAotICBTVUlURV9QUk9GRVNTSU9OQUwsCi0gIFNV
SVRFX1NFUlZFUiwKLSAgU1VJVEVfRU5URVJQUklTRSwKLSAgU1VJVEVfRURVQ0FUSU9OLAotICBT
VUlURV9MQVNULAotfTsKLQotLy8gQSBzaW5nbGV0b24gdGhhdCBjYW4gYmUgdXNlZCB0byBxdWVy
eSB2YXJpb3VzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLS8vIE9TIGFuZCBwcm9j
ZXNzIHN0YXRlLiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHVzZSB0aGUgYmFzZSBTaW5nbGV0b24g
Y2xhc3MsIHNvCi0vLyBpdCBjYW4gYmUgdXNlZCB3aXRob3V0IGFuIEF0RXhpdE1hbmFnZXIuCi1j
bGFzcyBPU0luZm8gewotIHB1YmxpYzoKLSAgc3RydWN0IFZlcnNpb25OdW1iZXIgewotICAgIGlu
dCBtYWpvcjsKLSAgICBpbnQgbWlub3I7Ci0gICAgaW50IGJ1aWxkOwotICAgIGludCBwYXRjaDsK
LSAgfTsKLQotICBzdHJ1Y3QgU2VydmljZVBhY2sgewotICAgIGludCBtYWpvcjsKLSAgICBpbnQg
bWlub3I7Ci0gIH07Ci0KLSAgLy8gVGhlIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgdGhpcyBjb3B5
IG9mIFdpbmRvd3MgbmF0aXZlbHkgdXNlcy4gIEZvcgotICAvLyBleGFtcGxlLCBnaXZlbiBhbiB4
NjQtY2FwYWJsZSBwcm9jZXNzb3IsIHdlIGhhdmUgdGhyZWUgcG9zc2liaWxpdGllczoKLSAgLy8g
ICAzMi1iaXQgQ2hyb21lIHJ1bm5pbmcgb24gMzItYml0IFdpbmRvd3M6ICAgICAgICAgICBYODZf
QVJDSElURUNUVVJFCi0gIC8vICAgMzItYml0IENocm9tZSBydW5uaW5nIG9uIDY0LWJpdCBXaW5k
b3dzIHZpYSBXT1c2NDogWDY0X0FSQ0hJVEVDVFVSRQotICAvLyAgIDY0LWJpdCBDaHJvbWUgcnVu
bmluZyBvbiA2NC1iaXQgV2luZG93czogICAgICAgICAgIFg2NF9BUkNISVRFQ1RVUkUKLSAgZW51
bSBXaW5kb3dzQXJjaGl0ZWN0dXJlIHsKLSAgICBYODZfQVJDSElURUNUVVJFLAotICAgIFg2NF9B
UkNISVRFQ1RVUkUsCi0gICAgSUE2NF9BUkNISVRFQ1RVUkUsCi0gICAgT1RIRVJfQVJDSElURUNU
VVJFLAotICB9OwotCi0gIC8vIFdoZXRoZXIgYSBwcm9jZXNzIGlzIHJ1bm5pbmcgdW5kZXIgV09X
NjQgKHRoZSB3cmFwcGVyIHRoYXQgYWxsb3dzIDMyLWJpdAotICAvLyBwcm9jZXNzZXMgdG8gcnVu
IG9uIDY0LWJpdCB2ZXJzaW9ucyBvZiBXaW5kb3dzKS4gIFRoaXMgd2lsbCByZXR1cm4KLSAgLy8g
V09XNjRfRElTQUJMRUQgZm9yIGJvdGggIjMyLWJpdCBDaHJvbWUgb24gMzItYml0IFdpbmRvd3Mi
IGFuZCAiNjQtYml0Ci0gIC8vIENocm9tZSBvbiA2NC1iaXQgV2luZG93cyIuICBXT1c2NF9VTktO
T1dOIG1lYW5zICJhbiBlcnJvciBvY2N1cnJlZCIsIGUuZy4KLSAgLy8gdGhlIHByb2Nlc3MgZG9l
cyBub3QgaGF2ZSBzdWZmaWNpZW50IGFjY2VzcyByaWdodHMgdG8gZGV0ZXJtaW5lIHRoaXMuCi0g
IGVudW0gV09XNjRTdGF0dXMgewotICAgIFdPVzY0X0RJU0FCTEVELAotICAgIFdPVzY0X0VOQUJM
RUQsCi0gICAgV09XNjRfVU5LTk9XTiwKLSAgfTsKLQotICBzdGF0aWMgT1NJbmZvKiBHZXRJbnN0
YW5jZSgpOwotCi0gIFZlcnNpb24gdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHZlcnNpb25fOyB9
Ci0gIFZlcnNpb25OdW1iZXIgdmVyc2lvbl9udW1iZXIoKSBjb25zdCB7IHJldHVybiB2ZXJzaW9u
X251bWJlcl87IH0KLSAgVmVyc2lvblR5cGUgdmVyc2lvbl90eXBlKCkgY29uc3QgeyByZXR1cm4g
dmVyc2lvbl90eXBlXzsgfQotICBTZXJ2aWNlUGFjayBzZXJ2aWNlX3BhY2soKSBjb25zdCB7IHJl
dHVybiBzZXJ2aWNlX3BhY2tfOyB9Ci0gIHN0ZDo6c3RyaW5nIHNlcnZpY2VfcGFja19zdHIoKSBj
b25zdCB7IHJldHVybiBzZXJ2aWNlX3BhY2tfc3RyXzsgfQotICBXaW5kb3dzQXJjaGl0ZWN0dXJl
IGFyY2hpdGVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGFyY2hpdGVjdHVyZV87IH0KLSAgaW50IHBy
b2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBwcm9jZXNzb3JzXzsgfQotICBzaXplX3QgYWxsb2Nh
dGlvbl9ncmFudWxhcml0eSgpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRpb25fZ3JhbnVsYXJpdHlf
OyB9Ci0gIFdPVzY0U3RhdHVzIHdvdzY0X3N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIHdvdzY0X3N0
YXR1c187IH0KLSAgc3RkOjpzdHJpbmcgcHJvY2Vzc29yX21vZGVsX25hbWUoKTsKLQotICAvLyBM
aWtlIHdvdzY0X3N0YXR1cygpLCBidXQgZm9yIHRoZSBzdXBwbGllZCBoYW5kbGUgaW5zdGVhZCBv
ZiB0aGUgY3VycmVudAotICAvLyBwcm9jZXNzLiAgVGhpcyBkb2Vzbid0IHRvdWNoIG1lbWJlciBz
dGF0ZSwgc28geW91IGNhbiBieXBhc3MgdGhlIHNpbmdsZXRvbi4KLSAgc3RhdGljIFdPVzY0U3Rh
dHVzIEdldFdPVzY0U3RhdHVzRm9yUHJvY2VzcyhIQU5ETEUgcHJvY2Vzc19oYW5kbGUpOwotCi0g
cHJpdmF0ZToKLSAgT1NJbmZvKCk7Ci0gIH5PU0luZm8oKTsKLQotICBWZXJzaW9uIHZlcnNpb25f
OwotICBWZXJzaW9uTnVtYmVyIHZlcnNpb25fbnVtYmVyXzsKLSAgVmVyc2lvblR5cGUgdmVyc2lv
bl90eXBlXzsKLSAgU2VydmljZVBhY2sgc2VydmljZV9wYWNrXzsKLQotICAvLyBBIHN0cmluZywg
c3VjaCBhcyAiU2VydmljZSBQYWNrIDMiLCB0aGF0IGluZGljYXRlcyB0aGUgbGF0ZXN0IFNlcnZp
Y2UgUGFjawotICAvLyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4gSWYgbm8gU2VydmljZSBQYWNr
IGhhcyBiZWVuIGluc3RhbGxlZCwgdGhlIHN0cmluZwotICAvLyBpcyBlbXB0eS4KLSAgc3RkOjpz
dHJpbmcgc2VydmljZV9wYWNrX3N0cl87Ci0gIFdpbmRvd3NBcmNoaXRlY3R1cmUgYXJjaGl0ZWN0
dXJlXzsKLSAgaW50IHByb2Nlc3NvcnNfOwotICBzaXplX3QgYWxsb2NhdGlvbl9ncmFudWxhcml0
eV87Ci0gIFdPVzY0U3RhdHVzIHdvdzY0X3N0YXR1c187Ci0gIHN0ZDo6c3RyaW5nIHByb2Nlc3Nv
cl9tb2RlbF9uYW1lXzsKLQotICBSVENfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE9TSW5mbyk7
Ci19OwotCi0vLyBCZWNhdXNlIHRoaXMgaXMgYnkgZmFyIHRoZSBtb3N0IGNvbW1vbmx5LXJlcXVl
c3RlZCB2YWx1ZSBmcm9tIHRoZSBhYm92ZQotLy8gc2luZ2xldG9uLCB3ZSBhZGQgYSBnbG9iYWwt
c2NvcGUgYWNjZXNzb3IgaGVyZSBhcyBzeW50YWN0aWMgc3VnYXIuCi1WZXJzaW9uIEdldFZlcnNp
b24oKTsKLQotfSAgLy8gbmFtZXNwYWNlIHJ0Y193aW4KLX0gIC8vIG5hbWVzcGFjZSBydGMKLQot
I2VuZGlmICAvLyBSVENfQkFTRV9XSU5fV0lORE9XU19WRVJTSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS93aW4vd2lu
ZG93c192ZXJzaW9uX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvcnRjX2Jhc2Uvd2luL3dpbmRvd3NfdmVyc2lvbl91bml0dGVzdC5jYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1ODJlNTQ5Zjk1ZTM5NzU5NGFiYTg5OGNkOGE5
NTM1NmRjNzRkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS93aW4v
d2luZG93c192ZXJzaW9uX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJydGNfYmFzZS93aW4vd2luZG93
c192ZXJzaW9uLmgiCi0KLSNpbmNsdWRlICJydGNfYmFzZS9ndW5pdC5oIgotI2luY2x1ZGUgInJ0
Y19iYXNlL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIHJ0YyB7Ci1uYW1lc3BhY2UgcnRjX3dpbiB7
Ci1uYW1lc3BhY2UgewotCi12b2lkIE1ldGhvZFN1cHBvcnRlZE9uV2luMTBBbmRMYXRlcigpIHsK
LSAgUlRDX0RMT0coSU5GTykgPDwgIk1ldGhvZFN1cHBvcnRlZE9uV2luMTBBbmRMYXRlciI7Ci19
Ci0KLXZvaWQgTWV0aG9kTm90U3VwcG9ydGVkT25XaW4xMEFuZExhdGVyKCkgewotICBSVENfRExP
RyhJTkZPKSA8PCAiTWV0aG9kTm90U3VwcG9ydGVkT25XaW4xMEFuZExhdGVyIjsKLX0KLQotLy8g
VXNlIGdsb2JhbCBHZXRWZXJzaW9uKCkgYW5kIHVzZSBpdCBpbiBhIHdheSBhIHVzZXIgd291bGQg
dHlwaWNhbGx5IHVzZSBpdAotLy8gd2hlbiBjaGVja2luZyBmb3Igc3VwcG9ydCBvZiBhIGNlcnRh
aW4gQVBJOgotLy8gImlmIChydGNfd2luOjpHZXRWZXJzaW9uKCkgPCBWRVJTSU9OX1dJTjEwKSAu
Li4iLgotVEVTVChXaW5kb3dzVmVyc2lvbiwgR2V0VmVyc2lvbkdsb2JhbFNjb3BlQWNjZXNzb3Ip
IHsKLSAgaWYgKEdldFZlcnNpb24oKSA8IFZFUlNJT05fV0lOMTApIHsKLSAgICBNZXRob2ROb3RT
dXBwb3J0ZWRPbldpbjEwQW5kTGF0ZXIoKTsKLSAgfSBlbHNlIHsKLSAgICBNZXRob2RTdXBwb3J0
ZWRPbldpbjEwQW5kTGF0ZXIoKTsKLSAgfQotfQotCi1URVNUKFdpbmRvd3NWZXJzaW9uLCBQcm9j
ZXNzb3JNb2RlbE5hbWUpIHsKLSAgc3RkOjpzdHJpbmcgbmFtZSA9IE9TSW5mbzo6R2V0SW5zdGFu
Y2UoKS0+cHJvY2Vzc29yX21vZGVsX25hbWUoKTsKLSAgRVhQRUNUX0ZBTFNFKG5hbWUuZW1wdHko
KSk7Ci0gIFJUQ19ETE9HKElORk8pIDw8ICJwcm9jZXNzb3JfbW9kZWxfbmFtZTogIiA8PCBuYW1l
OwotfQotCi19ICAvLyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBydGNfd2luCi19ICAvLyBu
YW1lc3BhY2UgcnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9BbmRyb2lkTWFuaWZlc3QueG1sIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvQW5kcm9pZE1hbmlmZXN0
LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFmYmQ3YmZlMzI2ODQ5MGI3Y2M3
ZTAwNWVkZTM5MDIwZjQ3NjkxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBA
QAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLSAqICBDb3B5
cmlnaHQgMjAxNyBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0tLT4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNv
bS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgcGFja2FnZT0ib3JnLndlYnJ0YyI+Ci0gIDx1c2VzLXNk
ayBhbmRyb2lkOm1pblNka1ZlcnNpb249IjE2IiBhbmRyb2lkOnRhcmdldFNka1ZlcnNpb249IjIz
IiAvPgotPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL0JVSUxELmduIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvQlVJTEQuZ24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDllZTQyMTZiZGZhMTlmZDMyMTBmOTc4OTI1ODI4ZTg1MjIzN2Nh
ZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvQlVJTEQuZ24K
KysrIC9kZXYvbnVsbApAQCAtMSwxNTU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE2IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0j
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotIyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0jIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSMgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0KLWlmIChpc19hbmRyb2lkKSB7Ci0g
IGltcG9ydCgiLy9idWlsZC9jb25maWcvYW5kcm9pZC9jb25maWcuZ25pIikKLSAgaW1wb3J0KCIv
L2J1aWxkL2NvbmZpZy9hbmRyb2lkL3J1bGVzLmduaSIpCi0gIGltcG9ydCgiLi4vLi4vd2VicnRj
LmduaSIpCi0KLSAgZ3JvdXAoImFuZHJvaWQiKSB7Ci0gICAgaWYgKCFidWlsZF93aXRoX2Nocm9t
aXVtICYmIGlzX2FuZHJvaWQpIHsKLSAgICAgIHB1YmxpY19kZXBzID0gWwotICAgICAgICAiOmxp
YmppbmdsZV9wZWVyY29ubmVjdGlvbl9qbmkiLAotICAgICAgICAiOmxpYmppbmdsZV9wZWVyY29u
bmVjdGlvbl9zbyIsCi0gICAgICAgICI6bGlid2VicnRjIiwKLSAgICAgICAgIjpuYXRpdmVfYXBp
IiwKLSAgICAgIF0KLSAgICB9Ci0gIH0KLQotICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgIyBB
Z2dyZWdhdGUgdGFyZ2V0cyAjCi0gICMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gIGRpc3RfamFy
KCJsaWJ3ZWJydGMiKSB7Ci0gICAgX3RhcmdldF9kaXJfbmFtZSA9IGdldF9sYWJlbF9pbmZvKCI6
JHRhcmdldF9uYW1lIiwgImRpciIpCi0gICAgb3V0cHV0ID0gIiR7cm9vdF9vdXRfZGlyfS9saWIu
amF2YSR7X3RhcmdldF9kaXJfbmFtZX0vJHt0YXJnZXRfbmFtZX0uamFyIgotICAgIGRpcmVjdF9k
ZXBzX29ubHkgPSB0cnVlCi0gICAgdXNlX3VucHJvY2Vzc2VkX2phcnMgPSB0cnVlCi0gICAgcmVx
dWlyZXNfYW5kcm9pZCA9IHRydWUKLSAgICBub19idWlsZF9ob29rcyA9IHRydWUKLQotICAgIGRl
cHMgPSBbCi0gICAgICAiOmF1ZGlvX2FwaV9qYXZhIiwKLSAgICAgICI6YmFzZV9qYXZhIiwKLSAg
ICAgICI6YnVpbHRpbl9hdWRpb19jb2RlY3NfamF2YSIsCi0gICAgICAiOmNhbWVyYV9qYXZhIiwK
LSAgICAgICI6ZGVmYXVsdF92aWRlb19jb2RlY19mYWN0b3J5X2phdmEiLAotICAgICAgIjpmaWxl
dmlkZW9famF2YSIsCi0gICAgICAiOmh3Y29kZWNzX2phdmEiLAotICAgICAgIjpqYXZhX2F1ZGlv
X2RldmljZV9tb2R1bGVfamF2YSIsCi0gICAgICAiOmxpYmppbmdsZV9wZWVyY29ubmVjdGlvbl9q
YXZhIiwKLSAgICAgICI6bGliamluZ2xlX3BlZXJjb25uZWN0aW9uX21ldHJpY3NfZGVmYXVsdF9q
YXZhIiwKLSAgICAgICI6bGlidnB4X3ZwOF9qYXZhIiwKLSAgICAgICI6bGlidnB4X3ZwOV9qYXZh
IiwKLSAgICAgICI6bG9nZ2luZ19qYXZhIiwKLSAgICAgICI6cGVlcmNvbm5lY3Rpb25famF2YSIs
Ci0gICAgICAiOnNjcmVlbmNhcHR1cmVyX2phdmEiLAotICAgICAgIjpzdXJmYWNldmlld3JlbmRl
cmVyX2phdmEiLAotICAgICAgIjpzd2NvZGVjc19qYXZhIiwKLSAgICAgICI6dmlkZW9fYXBpX2ph
dmEiLAotICAgICAgIjp2aWRlb19qYXZhIiwKLSAgICAgICIuLi8uLi9tb2R1bGVzL2F1ZGlvX2Rl
dmljZTphdWRpb19kZXZpY2VfamF2YSIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6YmFzZV9qYXZh
IiwKLSAgICBdCi0gIH0KLQotICAjIFRoZSBuYXRpdmUgQVBJIGlzIGN1cnJlbnRseSBleHBlcmlt
ZW50YWwgYW5kIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuCi0gIGdyb3VwKCJuYXRpdmVfYXBp
IikgewotICAgIGRlcHMgPSBbCi0gICAgICAiOm5hdGl2ZV9hcGlfYXVkaW9fZGV2aWNlX21vZHVs
ZSIsCi0gICAgICAiOm5hdGl2ZV9hcGlfYmFzZSIsCi0gICAgICAiOm5hdGl2ZV9hcGlfY29kZWNz
IiwKLSAgICAgICI6bmF0aXZlX2FwaV9qbmkiLAotICAgICAgIjpuYXRpdmVfYXBpX3BlZXJjb25u
ZWN0aW9uIiwKLSAgICAgICI6bmF0aXZlX2FwaV9zdGFja3RyYWNlIiwKLSAgICAgICI6bmF0aXZl
X2FwaV92aWRlbyIsCi0gICAgXQotICB9Ci0KLSAgIyBPbGQgdGFyZ2V0IHRoYXQgcHVsbHMgaW4g
ZXZlcnl0aGluZy4gVGhpcyB3aWxsIGJlIGdvaW5nIGF3YXkgaW4gdGhlIGZ1dHVyZSwKLSAgIyBj
bGllbnRzIHNob3VsZCBkZXBlbmQgb24gaW5kaXZpZHVhbCB2aWRlb19qYXZhIGV0Yy4gdGFyZ2V0
cyBpbnN0ZWFkLgotICBydGNfYW5kcm9pZF9saWJyYXJ5KCJsaWJqaW5nbGVfcGVlcmNvbm5lY3Rp
b25famF2YSIpIHsKLSAgICBzb3VyY2VzID0gWyAic3JjL2phdmEvb3JnL3dlYnJ0Yy9FbXB0eS5q
YXZhIiBdCi0KLSAgICBkZXBzID0gWwotICAgICAgIjphdWRpb19hcGlfamF2YSIsCi0gICAgICAi
OmJhc2VfamF2YSIsCi0gICAgICAiOmNhbWVyYV9qYXZhIiwKLSAgICAgICI6ZmlsZXZpZGVvX2ph
dmEiLAotICAgICAgIjpod2NvZGVjc19qYXZhIiwKLSAgICAgICI6amF2YV9hdWRpb19kZXZpY2Vf
bW9kdWxlX2phdmEiLAotICAgICAgIjpwZWVyY29ubmVjdGlvbl9qYXZhIiwKLSAgICAgICI6c2Ny
ZWVuY2FwdHVyZXJfamF2YSIsCi0gICAgICAiOnN1cmZhY2V2aWV3cmVuZGVyZXJfamF2YSIsCi0g
ICAgICAiOnZpZGVvX2FwaV9qYXZhIiwKLSAgICAgICI6dmlkZW9famF2YSIsCi0gICAgICAiLy9t
b2R1bGVzL2F1ZGlvX2RldmljZTphdWRpb19kZXZpY2VfamF2YSIsCi0gICAgICAiLy9ydGNfYmFz
ZTpiYXNlX2phdmEiLAotICAgIF0KLSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoImxpYmpp
bmdsZV9wZWVyY29ubmVjdGlvbl9tZXRyaWNzX2RlZmF1bHRfamF2YSIpIHsKLSAgICBzb3VyY2Vz
ID0gWyAiYXBpL29yZy93ZWJydGMvTWV0cmljcy5qYXZhIiBdCi0KLSAgICBkZXBzID0gWwotICAg
ICAgIjpiYXNlX2phdmEiLAotICAgICAgIjpsaWJqaW5nbGVfcGVlcmNvbm5lY3Rpb25famF2YSIs
Ci0gICAgICAiLi4vLi4vcnRjX2Jhc2U6YmFzZV9qYXZhIiwKLSAgICBdCi0gIH0KLQotICBydGNf
bGlicmFyeSgibGliamluZ2xlX3BlZXJjb25uZWN0aW9uX2puaSIpIHsKLSAgICB2aXNpYmlsaXR5
ID0gWyAiKiIgXQotICAgIGFsbG93X3BvaXNvbiA9IFsKLSAgICAgICJhdWRpb19jb2RlY3MiLCAg
IyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84Mzk2KTogUmVtb3ZlLgotICAgICAgInNvZnR3YXJlX3Zp
ZGVvX2NvZGVjcyIsICAjIFRPRE8oYnVncy53ZWJydGMub3JnLzc5MjUpOiBSZW1vdmUuCi0gICAg
XQotICAgIHB1YmxpY19kZXBzID0gWyAgIyBuby1wcmVzdWJtaXQtY2hlY2sgVE9ETyh3ZWJydGM6
ODYwMykKLSAgICAgICI6YXVkaW9fam5pIiwKLSAgICAgICI6YmFzZV9qbmkiLAotICAgICAgIjpi
dWlsdGluX2F1ZGlvX2NvZGVjc19qbmkiLAotICAgICAgIjpkZWZhdWx0X3ZpZGVvX2NvZGVjX2Zh
Y3Rvcnlfam5pIiwKLSAgICAgICI6amF2YV9hdWRpb19kZXZpY2VfbW9kdWxlX2puaSIsCi0gICAg
ICAiOmxlZ2FjeV9od2NvZGVjc19qbmkiLAotICAgICAgIjpwZWVyY29ubmVjdGlvbl9qbmkiLAot
ICAgICAgIjp2aWRlb19qbmkiLAotICAgICAgIi4uLy4uL2FwaTpjcmVhdGVfcGVlcmNvbm5lY3Rp
b25fZmFjdG9yeSIsCi0gICAgXQotICB9Ci0KLSAgcnRjX2xpYnJhcnkoImxpYmppbmdsZV9wZWVy
Y29ubmVjdGlvbl9tZXRyaWNzX2RlZmF1bHRfam5pIikgewotICAgIHZpc2liaWxpdHkgPSBbICIq
IiBdCi0gICAgc291cmNlcyA9IFsgInNyYy9qbmkvYW5kcm9pZF9tZXRyaWNzLmNjIiBdCi0gICAg
ZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qbmkiLAotICAgICAgIjpnZW5lcmF0ZWRfbWV0cmljc19q
bmkiLAotICAgICAgIjpuYXRpdmVfYXBpX2puaSIsCi0gICAgICAiOnBlZXJjb25uZWN0aW9uX2pu
aSIsCi0gICAgICAiLi4vLi4vcGM6cGVlcmNvbm5lY3Rpb24iLAotICAgICAgIi4uLy4uL3N5c3Rl
bV93cmFwcGVyczptZXRyaWNzIiwKLSAgICBdCi0gIH0KLQotICBydGNfc2hhcmVkX2xpYnJhcnko
ImxpYmppbmdsZV9wZWVyY29ubmVjdGlvbl9zbyIpIHsKLSAgICBzb3VyY2VzID0gWyAic3JjL2pu
aS9qbmlfb25sb2FkLmNjIiBdCi0KLSAgICBzdXBwcmVzc2VkX2NvbmZpZ3MgKz0gWyAiLy9idWls
ZC9jb25maWcvYW5kcm9pZDpoaWRlX2FsbF9idXRfam5pX29ubG9hZCIgXQotICAgIGNvbmZpZ3Mg
Kz0gWyAiLy9idWlsZC9jb25maWcvYW5kcm9pZDpoaWRlX2FsbF9idXRfam5pIiBdCi0KLSAgICBk
ZXBzID0gWwotICAgICAgIjpsaWJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fam5pIiwKLSAgICAgICI6
bGliamluZ2xlX3BlZXJjb25uZWN0aW9uX21ldHJpY3NfZGVmYXVsdF9qbmkiLAotICAgICAgIi4u
Ly4uL3BjOmxpYmppbmdsZV9wZWVyY29ubmVjdGlvbiIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2Ui
LAotICAgIF0KLSAgICBvdXRwdXRfZXh0ZW5zaW9uID0gInNvIgotICB9Ci0KLSAgIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKLSAgIyBQdWJsaWMgSmF2YSBtb2R1bGVzICMKLSAgIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKLQotICAjIENvcmUgdGFyZ2V0cy4KLQotICAjIFRPRE8oc2FrYWwpOiBFeHRy
YWN0IGZpbGVzIGZyb20gdGhpcyB0YXJnZXQgdG8gcmVsZXZlYW50IHN1YnRhcmdldHMsIHZpZGVv
LCBhdWRpbyBldGMuCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoImJhc2VfamF2YSIpIHsKLSAgICBz
b3VyY2VzID0gWwotICAgICAgImFwaS9vcmcvd2VicnRjL1ByZWRpY2F0ZS5qYXZhIiwKLSAgICAg
ICJhcGkvb3JnL3dlYnJ0Yy9SZWZDb3VudGVkLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93
ZWJydGMvQ2FsbGVkQnlOYXRpdmUuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9D
YWxsZWRCeU5hdGl2ZVVuY2hlY2tlZC5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRj
L0hpc3RvZ3JhbS5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0puaUNvbW1vbi5q
YXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0puaUhlbHBlci5qYXZhIiwKLSAgICAg
ICJzcmMvamF2YS9vcmcvd2VicnRjL1JlZkNvdW50RGVsZWdhdGUuamF2YSIsCi0gICAgICAic3Jj
L2phdmEvb3JnL3dlYnJ0Yy9XZWJSdGNDbGFzc0xvYWRlci5qYXZhIiwKLSAgICBdCi0KLSAgICBk
ZXBzID0gWwotICAgICAgIi8vdGhpcmRfcGFydHkvYW5kcm9pZF9kZXBzOmNvbV9hbmRyb2lkX3N1
cHBvcnRfc3VwcG9ydF9hbm5vdGF0aW9uc19qYXZhIiwKLSAgICBdCi0gIH0KLQotICBydGNfYW5k
cm9pZF9saWJyYXJ5KCJhdWRpb19hcGlfamF2YSIpIHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIg
XQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAiYXBpL29yZy93ZWJydGMvQXVkaW9EZWNvZGVyRmFj
dG9yeUZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvQXVkaW9FbmNvZGVyRmFj
dG9yeUZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvYXVkaW8vQXVkaW9EZXZp
Y2VNb2R1bGUuamF2YSIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qYXZh
IiwKLSAgICAgICIvL3J0Y19iYXNlOmJhc2VfamF2YSIsCi0gICAgXQotICB9Ci0KLSAgcnRjX2Fu
ZHJvaWRfbGlicmFyeSgidmlkZW9fYXBpX2phdmEiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioi
IF0KLSAgICBzb3VyY2VzID0gWwotICAgICAgImFwaS9vcmcvd2VicnRjL0NhcHR1cmVyT2JzZXJ2
ZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvRW5jb2RlZEltYWdlLmphdmEiLAotICAg
ICAgImFwaS9vcmcvd2VicnRjL1ZpZGVvQ29kZWNJbmZvLmphdmEiLAotICAgICAgImFwaS9vcmcv
d2VicnRjL1ZpZGVvQ29kZWNTdGF0dXMuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvVmlk
ZW9EZWNvZGVyLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1ZpZGVvRGVjb2RlckZhY3Rv
cnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvVmlkZW9FbmNvZGVyLmphdmEiLAotICAg
ICAgImFwaS9vcmcvd2VicnRjL1ZpZGVvRW5jb2RlckZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBp
L29yZy93ZWJydGMvVmlkZW9GcmFtZS5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRl
b1NpbmsuamF2YSIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qYXZhIiwK
LSAgICAgICIvL3J0Y19iYXNlOmJhc2VfamF2YSIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9hbmRy
b2lkX2RlcHM6Y29tX2FuZHJvaWRfc3VwcG9ydF9zdXBwb3J0X2Fubm90YXRpb25zX2phdmEiLAot
ICAgIF0KLSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoInZpZGVvX2phdmEiKSB7Ci0gICAg
dmlzaWJpbGl0eSA9IFsgIioiIF0KLSAgICBzb3VyY2VzID0gWwotICAgICAgImFwaS9vcmcvd2Vi
cnRjL0VnbEJhc2UuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEi
LAotICAgICAgImFwaS9vcmcvd2VicnRjL0VnbEJhc2UxNC5qYXZhIiwKLSAgICAgICJhcGkvb3Jn
L3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9HbFJlY3RE
cmF3ZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvR2xTaGFkZXIuamF2YSIsCi0gICAg
ICAiYXBpL29yZy93ZWJydGMvR2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YSIsCi0gICAgICAiYXBp
L29yZy93ZWJydGMvR2xVdGlsLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0phdmFJNDIw
QnVmZmVyLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uLmphdmEi
LAotICAgICAgImFwaS9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyLmphdmEiLAotICAg
ICAgImFwaS9vcmcvd2VicnRjL1RleHR1cmVCdWZmZXJJbXBsLmphdmEiLAotICAgICAgImFwaS9v
cmcvd2VicnRjL1RpbWVzdGFtcEFsaWduZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMv
VmlkZW9DYXB0dXJlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0RlY29kZXJG
YWxsYmFjay5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXJGYWxsYmFj
ay5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0ZyYW1lRHJhd2VyLmphdmEiLAot
ICAgICAgImFwaS9vcmcvd2VicnRjL1dyYXBwZWROYXRpdmVWaWRlb0RlY29kZXIuamF2YSIsCi0g
ICAgICAiYXBpL29yZy93ZWJydGMvV3JhcHBlZE5hdGl2ZVZpZGVvRW5jb2Rlci5qYXZhIiwKLSAg
ICAgICJhcGkvb3JnL3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93
ZWJydGMvWXV2SGVscGVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvRWdsQmFz
ZTEwSW1wbC5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0VnbEJhc2UxNEltcGwu
amF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9HbEdlbmVyaWNEcmF3ZXIuamF2YSIs
Ci0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9IMjY0VXRpbHMuamF2YSIsCi0gICAgICAic3Jj
L2phdmEvb3JnL3dlYnJ0Yy9OVjIxQnVmZmVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93
ZWJydGMvVmlkZW9EZWNvZGVyV3JhcHBlci5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2Vi
cnRjL1ZpZGVvRW5jb2RlcldyYXBwZXIuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0
Yy9XcmFwcGVkTmF0aXZlSTQyMEJ1ZmZlci5qYXZhIiwKLSAgICBdCi0KLSAgICBkZXBzID0gWwot
ICAgICAgIjpiYXNlX2phdmEiLAotICAgICAgIjp2aWRlb19hcGlfamF2YSIsCi0gICAgICAiLy9y
dGNfYmFzZTpiYXNlX2phdmEiLAotICAgICAgIi8vdGhpcmRfcGFydHkvYW5kcm9pZF9kZXBzOmNv
bV9hbmRyb2lkX3N1cHBvcnRfc3VwcG9ydF9hbm5vdGF0aW9uc19qYXZhIiwKLSAgICBdCi0gIH0K
LQotICBydGNfYW5kcm9pZF9saWJyYXJ5KCJwZWVyY29ubmVjdGlvbl9qYXZhIikgewotICAgIHZp
c2liaWxpdHkgPSBbICIqIiBdCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0
Yy9BdWRpb1Byb2Nlc3NpbmdGYWN0b3J5LmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0F1
ZGlvU291cmNlLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0F1ZGlvVHJhY2suamF2YSIs
Ci0gICAgICAiYXBpL29yZy93ZWJydGMvQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rLmph
dmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0NhbmRpZGF0ZVBhaXJDaGFuZ2VFdmVudC5qYXZh
IiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9DcnlwdG9PcHRpb25zLmphdmEiLAotICAgICAgImFw
aS9vcmcvd2VicnRjL0RhdGFDaGFubmVsLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0R0
bWZTZW5kZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvRmVjQ29udHJvbGxlckZhY3Rv
cnlGYWN0b3J5SW50ZXJmYWNlLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0ZyYW1lRGVj
cnlwdG9yLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0ZyYW1lRW5jcnlwdG9yLmphdmEi
LAotICAgICAgImFwaS9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhIiwKLSAgICAgICJhcGkv
b3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEiLAotICAgICAgImFwaS9vcmcv
d2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJy
dGMvTWVkaWFDb25zdHJhaW50cy5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9NZWRpYVNv
dXJjZS5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbS5qYXZhIiwKLSAg
ICAgICJhcGkvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmphdmEiLAotICAgICAgImFwaS9v
cmcvd2VicnRjL01lZGlhVHJhbnNwb3J0RmFjdG9yeUZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBp
L29yZy93ZWJydGMvTmF0aXZlTGlicmFyeUxvYWRlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dl
YnJ0Yy9OYXRpdmVQZWVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93
ZWJydGMvTmV0RXFGYWN0b3J5RmFjdG9yeS5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9O
ZXR3b3JrQ29udHJvbGxlckZhY3RvcnlGYWN0b3J5LmphdmEiLAotICAgICAgImFwaS9vcmcvd2Vi
cnRjL05ldHdvcmtNb25pdG9yLmphdmEiLCAgIyBUT0RPKHNha2FsKTogQnJlYWsgZGVwZW5kZW5j
aWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBt
b3ZlIHRvIGJhc2VfamF2YS4KLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QuamF2YSIsICAjIFRPRE8oc2FrYWwpOiBCcmVhawotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzIGFuZCBt
b3ZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyB0byBiYXNlX2phdmEuCi0gICAgICAiYXBpL29yZy93ZWJydGMvTmV0d29ya1N0YXRlUHJl
ZGljdG9yRmFjdG9yeUZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUGVlckNv
bm5lY3Rpb24uamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25EZXBl
bmRlbmNpZXMuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0
b3J5LmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1JUQ1N0YXRzLmphdmEiLAotICAgICAg
ImFwaS9vcmcvd2VicnRjL1JUQ1N0YXRzQ29sbGVjdG9yQ2FsbGJhY2suamF2YSIsCi0gICAgICAi
YXBpL29yZy93ZWJydGMvUlRDU3RhdHNSZXBvcnQuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJy
dGMvUnRjQ2VydGlmaWNhdGVQZW0uamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUnRwUGFy
YW1ldGVycy5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhIiwK
LSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9SdHBTZW5kZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93
ZWJydGMvUnRwVHJhbnNjZWl2ZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvU1NMQ2Vy
dGlmaWNhdGVWZXJpZmllci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZl
ci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YSIs
Ci0gICAgICAiYXBpL29yZy93ZWJydGMvU3RhdHNPYnNlcnZlci5qYXZhIiwKLSAgICAgICJhcGkv
b3JnL3dlYnJ0Yy9TdGF0c1JlcG9ydC5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9UdXJu
Q3VzdG9taXplci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb1Byb2Nlc3Nvci5q
YXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb1NvdXJjZS5qYXZhIiwKLSAgICAgICJh
cGkvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJy
dGMvTmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuamF2YSIsCi0gICAgICAic3JjL2phdmEv
b3JnL3dlYnJ0Yy9OYXRpdmVDYXB0dXJlck9ic2VydmVyLmphdmEiLAotICAgICAgInNyYy9qYXZh
L29yZy93ZWJydGMvTmF0aXZlTGlicmFyeS5qYXZhIiwKLSAgICBdCi0KLSAgICBkZXBzID0gWwot
ICAgICAgIjphdWRpb19hcGlfamF2YSIsCi0gICAgICAiOmJhc2VfamF2YSIsCi0gICAgICAiOmJ1
aWx0aW5fYXVkaW9fY29kZWNzX2phdmEiLAotICAgICAgIjpkZWZhdWx0X3ZpZGVvX2NvZGVjX2Zh
Y3RvcnlfamF2YSIsCi0KLSAgICAgICNUT0RPKGJ1Z3Mud2VicnRjLm9yZy83NDUyKTogTWFrZSBp
bmplY3Rpb24gbWFuZGF0b3J5IGFuZCByZW1vdmUgdGhpcyBkZXAuCi0gICAgICAiOmphdmFfYXVk
aW9fZGV2aWNlX21vZHVsZV9qYXZhIiwKLSAgICAgICI6bG9nZ2luZ19qYXZhIiwKLSAgICAgICI6
c3djb2RlY3NfamF2YSIsCi0gICAgICAiOnZpZGVvX2FwaV9qYXZhIiwKLSAgICAgICI6dmlkZW9f
amF2YSIsCi0gICAgICAiLy9tb2R1bGVzL2F1ZGlvX2RldmljZTphdWRpb19kZXZpY2VfamF2YSIs
Ci0gICAgICAiLy9ydGNfYmFzZTpiYXNlX2phdmEiLAotICAgICAgIi8vdGhpcmRfcGFydHkvYW5k
cm9pZF9kZXBzOmNvbV9hbmRyb2lkX3N1cHBvcnRfc3VwcG9ydF9hbm5vdGF0aW9uc19qYXZhIiwK
LSAgICBdCi0gICAgc3JjamFyX2RlcHMgPSBbICIvL2FwaS92aWRlbzp2aWRlb19mcmFtZV9lbnVt
cyIgXQotICB9Ci0KLSAgIyBNb2R1bGVzLCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCi0KLSAgcnRj
X2FuZHJvaWRfbGlicmFyeSgiY2FtZXJhX2phdmEiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioi
IF0KLSAgICBzb3VyY2VzID0gWwotICAgICAgImFwaS9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJl
ci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9DYW1lcmExRW51bWVyYXRvci5qYXZhIiwK
LSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9DYW1lcmEyQ2FwdHVyZXIuamF2YSIsCi0gICAgICAiYXBp
L29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJy
dGMvQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRj
L0NhbWVyYUVudW1lcmF0b3IuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvQ2FtZXJhVmlk
ZW9DYXB0dXJlci5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYTFTZXNz
aW9uLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2
YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9DYW1lcmFDYXB0dXJlci5qYXZhIiwKLSAg
ICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYVNlc3Npb24uamF2YSIsCi0gICAgXQotCi0g
ICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qYXZhIiwKLSAgICAgICI6dmlkZW9fYXBpX2phdmEi
LAotICAgICAgIjp2aWRlb19qYXZhIiwKLSAgICAgICIvL3J0Y19iYXNlOmJhc2VfamF2YSIsCi0g
ICAgICAiLy90aGlyZF9wYXJ0eS9hbmRyb2lkX2RlcHM6Y29tX2FuZHJvaWRfc3VwcG9ydF9zdXBw
b3J0X2Fubm90YXRpb25zX2phdmEiLAotICAgIF0KLSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJh
cnkoImRlZmF1bHRfdmlkZW9fY29kZWNfZmFjdG9yeV9qYXZhIikgewotICAgIHZpc2liaWxpdHkg
PSBbICIqIiBdCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9EZWZhdWx0
VmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9EZWZhdWx0
VmlkZW9FbmNvZGVyRmFjdG9yeS5qYXZhIiwKLSAgICBdCi0KLSAgICBkZXBzID0gWwotICAgICAg
Ijpod2NvZGVjc19qYXZhIiwKLSAgICAgICI6c3djb2RlY3NfamF2YSIsCi0gICAgICAiOnZpZGVv
X2FwaV9qYXZhIiwKLSAgICAgICI6dmlkZW9famF2YSIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9h
bmRyb2lkX2RlcHM6Y29tX2FuZHJvaWRfc3VwcG9ydF9zdXBwb3J0X2Fubm90YXRpb25zX2phdmEi
LAotICAgIF0KLSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoImZpbGV2aWRlb19qYXZhIikg
ewotICAgIHZpc2liaWxpdHkgPSBbICIqIiBdCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkv
b3JnL3dlYnJ0Yy9GaWxlVmlkZW9DYXB0dXJlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0
Yy9WaWRlb0ZpbGVSZW5kZXJlci5qYXZhIiwKLSAgICBdCi0KLSAgICBkZXBzID0gWwotICAgICAg
IjpiYXNlX2phdmEiLAotICAgICAgIjp2aWRlb19hcGlfamF2YSIsCi0gICAgICAiOnZpZGVvX2ph
dmEiLAotICAgICAgIi8vcnRjX2Jhc2U6YmFzZV9qYXZhIiwKLSAgICBdCi0gIH0KLQotICBydGNf
YW5kcm9pZF9saWJyYXJ5KCJod2NvZGVjc19qYXZhIikgewotICAgIHZpc2liaWxpdHkgPSBbICIq
IiBdCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9IYXJkd2FyZVZpZGVv
RGVjb2RlckZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvSGFyZHdhcmVWaWRl
b0VuY29kZXJGYWN0b3J5LmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1BsYXRmb3JtU29m
dHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5LmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJy
dGMvQW5kcm9pZFZpZGVvRGVjb2Rlci5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRj
L0Jhc2VCaXRyYXRlQWRqdXN0ZXIuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9C
aXRyYXRlQWRqdXN0ZXIuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9EeW5hbWlj
Qml0cmF0ZUFkanVzdGVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvRnJhbWVy
YXRlQml0cmF0ZUFkanVzdGVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvSGFy
ZHdhcmVWaWRlb0VuY29kZXIuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9NZWRp
YUNvZGVjVXRpbHMuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVj
VmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL01l
ZGlhQ29kZWNXcmFwcGVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvTWVkaWFD
b2RlY1dyYXBwZXJGYWN0b3J5LmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvTWVk
aWFDb2RlY1dyYXBwZXJGYWN0b3J5SW1wbC5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2Vi
cnRjL05WMTJCdWZmZXIuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9WaWRlb0Nv
ZGVjTWltZVR5cGUuamF2YSIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9q
YXZhIiwKLSAgICAgICI6dmlkZW9fYXBpX2phdmEiLAotICAgICAgIjp2aWRlb19qYXZhIiwKLSAg
ICAgICIvL3J0Y19iYXNlOmJhc2VfamF2YSIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9hbmRyb2lk
X2RlcHM6Y29tX2FuZHJvaWRfc3VwcG9ydF9zdXBwb3J0X2Fubm90YXRpb25zX2phdmEiLAotICAg
IF0KLSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoImphdmFfYXVkaW9fZGV2aWNlX21vZHVs
ZV9qYXZhIikgewotICAgIHZpc2liaWxpdHkgPSBbICIqIiBdCi0gICAgc291cmNlcyA9IFsKLSAg
ICAgICJhcGkvb3JnL3dlYnJ0Yy9hdWRpby9KYXZhQXVkaW9EZXZpY2VNb2R1bGUuamF2YSIsCi0g
ICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9hdWRpby9Wb2x1bWVMb2dnZXIuamF2YSIsCi0gICAg
ICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb0VmZmVjdHMuamF2YSIsCi0g
ICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb01hbmFnZXIuamF2YSIs
Ci0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb1JlY29yZC5qYXZh
IiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL2F1ZGlvL1dlYlJ0Y0F1ZGlvVHJhY2suamF2
YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb1V0aWxzLmph
dmEiLAotICAgIF0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiOmF1ZGlvX2FwaV9qYXZhIiwKLSAg
ICAgICI6YmFzZV9qYXZhIiwKLSAgICAgICIvL3J0Y19iYXNlOmJhc2VfamF2YSIsCi0gICAgICAi
Ly90aGlyZF9wYXJ0eS9hbmRyb2lkX2RlcHM6Y29tX2FuZHJvaWRfc3VwcG9ydF9zdXBwb3J0X2Fu
bm90YXRpb25zX2phdmEiLAotICAgIF0KLSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoImJ1
aWx0aW5fYXVkaW9fY29kZWNzX2phdmEiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLSAg
ICBzb3VyY2VzID0gWwotICAgICAgImFwaS9vcmcvd2VicnRjL0J1aWx0aW5BdWRpb0RlY29kZXJG
YWN0b3J5RmFjdG9yeS5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9CdWlsdGluQXVkaW9F
bmNvZGVyRmFjdG9yeUZhY3RvcnkuamF2YSIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsgIjphdWRp
b19hcGlfamF2YSIgXQotICB9Ci0KLSAgcnRjX2FuZHJvaWRfbGlicmFyeSgic2NyZWVuY2FwdHVy
ZXJfamF2YSIpIHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMgPSBbICJh
cGkvb3JnL3dlYnJ0Yy9TY3JlZW5DYXB0dXJlckFuZHJvaWQuamF2YSIgXQotCi0gICAgZGVwcyA9
IFsKLSAgICAgICI6dmlkZW9fYXBpX2phdmEiLAotICAgICAgIjp2aWRlb19qYXZhIiwKLSAgICAg
ICIvL3J0Y19iYXNlOmJhc2VfamF2YSIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9hbmRyb2lkX2Rl
cHM6Y29tX2FuZHJvaWRfc3VwcG9ydF9zdXBwb3J0X2Fubm90YXRpb25zX2phdmEiLAotICAgIF0K
LSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoInN1cmZhY2V2aWV3cmVuZGVyZXJfamF2YSIp
IHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAiYXBp
L29yZy93ZWJydGMvU3VyZmFjZUVnbFJlbmRlcmVyLmphdmEiLAotICAgICAgImFwaS9vcmcvd2Vi
cnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIuamF2YSIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAg
ICAgICI6dmlkZW9fYXBpX2phdmEiLAotICAgICAgIjp2aWRlb19qYXZhIiwKLSAgICAgICIvL3J0
Y19iYXNlOmJhc2VfamF2YSIsCi0gICAgXQotICB9Ci0KLSAgcnRjX2FuZHJvaWRfbGlicmFyeSgi
bGlidnB4X3ZwOF9qYXZhIikgewotICAgIHZpc2liaWxpdHkgPSBbICIqIiBdCi0gICAgc291cmNl
cyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9MaWJ2cHhWcDhEZWNvZGVyLmphdmEiLAotICAg
ICAgImFwaS9vcmcvd2VicnRjL0xpYnZweFZwOEVuY29kZXIuamF2YSIsCi0gICAgXQotICAgIGRl
cHMgPSBbCi0gICAgICAiOmJhc2VfamF2YSIsCi0gICAgICAiOnZpZGVvX2FwaV9qYXZhIiwKLSAg
ICAgICI6dmlkZW9famF2YSIsCi0gICAgICAiLy9ydGNfYmFzZTpiYXNlX2phdmEiLAotICAgIF0K
LSAgfQotCi0gIHJ0Y19hbmRyb2lkX2xpYnJhcnkoImxpYnZweF92cDlfamF2YSIpIHsKLSAgICB2
aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAiYXBpL29yZy93ZWJy
dGMvTGlidnB4VnA5RGVjb2Rlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9MaWJ2cHhW
cDlFbmNvZGVyLmphdmEiLAotICAgIF0KLSAgICBkZXBzID0gWwotICAgICAgIjpiYXNlX2phdmEi
LAotICAgICAgIjp2aWRlb19hcGlfamF2YSIsCi0gICAgICAiOnZpZGVvX2phdmEiLAotICAgICAg
Ii8vcnRjX2Jhc2U6YmFzZV9qYXZhIiwKLSAgICBdCi0gIH0KLQotICBydGNfYW5kcm9pZF9saWJy
YXJ5KCJzd2NvZGVjc19qYXZhIikgewotICAgIHZpc2liaWxpdHkgPSBbICIqIiBdCi0gICAgc291
cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9Tb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3Rv
cnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvU29mdHdhcmVWaWRlb0VuY29kZXJGYWN0
b3J5LmphdmEiLAotICAgIF0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiOmJhc2VfamF2YSIsCi0g
ICAgICAiOmxpYnZweF92cDhfamF2YSIsCi0gICAgICAiOmxpYnZweF92cDlfamF2YSIsCi0gICAg
ICAiOnZpZGVvX2FwaV9qYXZhIiwKLSAgICAgICI6dmlkZW9famF2YSIsCi0gICAgICAiLy9ydGNf
YmFzZTpiYXNlX2phdmEiLAotICAgICAgIi8vdGhpcmRfcGFydHkvYW5kcm9pZF9kZXBzOmNvbV9h
bmRyb2lkX3N1cHBvcnRfc3VwcG9ydF9hbm5vdGF0aW9uc19qYXZhIiwKLSAgICBdCi0gIH0KLX0K
LQotaWYgKGN1cnJlbnRfb3MgPT0gImxpbnV4IiB8fCBpc19hbmRyb2lkKSB7Ci0gICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICMgSk5JIHRhcmdldHMgZm9yIEphdmEgbW9kdWxl
cyAjCi0gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgIyBNaXJyb3JzIHRo
ZSBvcmRlciBvZiB0YXJnZXRzIGluIHRoZSBzZWN0aW9uIGFib3ZlLgotCi0gIHJ0Y19saWJyYXJ5
KCJiYXNlX2puaSIpIHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMgPSBb
Ci0gICAgICAic3JjL2puaS9hbmRyb2lkX2hpc3RvZ3JhbS5jYyIsCi0gICAgICAic3JjL2puaS9h
bmRyb2lkX25ldHdvcmtfbW9uaXRvci5jYyIsCi0gICAgICAic3JjL2puaS9hbmRyb2lkX25ldHdv
cmtfbW9uaXRvci5oIiwKLSAgICAgICJzcmMvam5pL2NsYXNzX2xvYWRlci5oIiwKLSAgICAgICJz
cmMvam5pL2NsYXNzX3JlZmVyZW5jZV9ob2xkZXIuaCIsCi0gICAgICAic3JjL2puaS9qbmlfY29t
bW9uLmNjIiwKLSAgICAgICJzcmMvam5pL2puaV9oZWxwZXJzLmNjIiwKLSAgICAgICJzcmMvam5p
L2puaV9oZWxwZXJzLmgiLAotICAgICAgInNyYy9qbmkvcGMvYXVkaW8uaCIsCi0gICAgICAic3Jj
L2puaS9wYy9sb2dnaW5nLmNjIiwKLSAgICAgICJzcmMvam5pL3BjL3ZpZGVvLmgiLAotICAgICAg
InNyYy9qbmkvc2NvcGVkX2phdmFfcmVmX2NvdW50ZWQuY2MiLAotICAgICAgInNyYy9qbmkvc2Nv
cGVkX2phdmFfcmVmX2NvdW50ZWQuaCIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6
Z2VuZXJhdGVkX2Jhc2Vfam5pIiwKLSAgICAgICI6aW50ZXJuYWxfam5pIiwKLSAgICAgICI6bmF0
aXZlX2FwaV9qbmkiLAotICAgICAgIi4uLy4uL2FwaTpsaWJqaW5nbGVfcGVlcmNvbm5lY3Rpb25f
YXBpIiwKLSAgICAgICIuLi8uLi9hcGk6c2NvcGVkX3JlZnB0ciIsCi0gICAgICAiLi4vLi4vcnRj
X2Jhc2UiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlOmNoZWNrcyIsCi0gICAgICAiLi4vLi4vcnRj
X2Jhc2U6cnRjX2Jhc2VfYXBwcm92ZWQiLAotICAgICAgIi4uLy4uL3N5c3RlbV93cmFwcGVyczpm
aWVsZF90cmlhbCIsCi0gICAgICAiLi4vLi4vc3lzdGVtX3dyYXBwZXJzOm1ldHJpY3MiLAotICAg
ICAgIi8vdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzOm9wdGlvbmFsIiwKLSAgICBd
Ci0gIH0KLQotICBydGNfbGlicmFyeSgiYXVkaW9fam5pIikgewotICAgIHZpc2liaWxpdHkgPSBb
ICIqIiBdCi0gICAgYWxsb3dfcG9pc29uID0gWyAiYXVkaW9fY29kZWNzIiBdCi0gICAgc291cmNl
cyA9IFsgInNyYy9qbmkvcGMvYXVkaW8uY2MiIF0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiOmJh
c2Vfam5pIiwKLSAgICAgICI6YnVpbHRpbl9hdWRpb19jb2RlY3Nfam5pIiwKLSAgICAgICIuLi8u
Li9hcGkvYXVkaW9fY29kZWNzOmJ1aWx0aW5fYXVkaW9fZGVjb2Rlcl9mYWN0b3J5IiwKLSAgICAg
ICIuLi8uLi9hcGkvYXVkaW9fY29kZWNzOmJ1aWx0aW5fYXVkaW9fZW5jb2Rlcl9mYWN0b3J5IiwK
LSAgICAgICIuLi8uLi9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmciLAotICAgICAgIi4uLy4uL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZzphcGkiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlOnJ0Y19i
YXNlX2FwcHJvdmVkIiwKLSAgICBdCi0gIH0KLQotICBydGNfbGlicmFyeSgiYnVpbHRpbl9hdWRp
b19jb2RlY3Nfam5pIikgewotICAgIHZpc2liaWxpdHkgPSBbICIqIiBdCi0gICAgYWxsb3dfcG9p
c29uID0gWyAiYXVkaW9fY29kZWNzIiBdCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJzcmMvam5p
L2J1aWx0aW5fYXVkaW9fZGVjb2Rlcl9mYWN0b3J5X2ZhY3RvcnkuY2MiLAotICAgICAgInNyYy9q
bmkvYnVpbHRpbl9hdWRpb19lbmNvZGVyX2ZhY3RvcnlfZmFjdG9yeS5jYyIsCi0gICAgXQotCi0g
ICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qbmkiLAotICAgICAgIjpnZW5lcmF0ZWRfYnVpbHRp
bl9hdWRpb19jb2RlY3Nfam5pIiwKLSAgICAgICI6bmF0aXZlX2FwaV9qbmkiLAotICAgICAgIi4u
Ly4uL2FwaS9hdWRpb19jb2RlY3M6YnVpbHRpbl9hdWRpb19kZWNvZGVyX2ZhY3RvcnkiLAotICAg
ICAgIi4uLy4uL2FwaS9hdWRpb19jb2RlY3M6YnVpbHRpbl9hdWRpb19lbmNvZGVyX2ZhY3Rvcnki
LAotICAgICAgIi4uLy4uL3J0Y19iYXNlOnJ0Y19iYXNlX2FwcHJvdmVkIiwKLSAgICBdCi0gIH0K
LQotICAjIENvcnJlc3BvbmRzIHRvIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIvRGVjb2RlciBpbiBK
YXZhLgotICBydGNfbGlicmFyeSgibGVnYWN5X2h3Y29kZWNzX2puaSIpIHsKLSAgICB2aXNpYmls
aXR5ID0gWyAiKiIgXQotICAgIGFsbG93X3BvaXNvbiA9IFsgInNvZnR3YXJlX3ZpZGVvX2NvZGVj
cyIgXQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAic3JjL2puaS9hbmRyb2lkX21lZGlhX2NvZGVj
X2NvbW1vbi5oIiwKLSAgICAgICJzcmMvam5pL2FuZHJvaWRfbWVkaWFfZGVjb2Rlci5jYyIsCi0g
ICAgICAic3JjL2puaS9hbmRyb2lkX21lZGlhX2VuY29kZXIuY2MiLAotICAgIF0KLSAgICBkZXBz
ID0gWwotICAgICAgIjpiYXNlX2puaSIsCi0gICAgICAiOmRlZmF1bHRfdmlkZW9fY29kZWNfZmFj
dG9yeV9qbmkiLAotICAgICAgIjpnZW5lcmF0ZWRfdmlkZW9fam5pIiwKLSAgICAgICI6bmF0aXZl
X2FwaV9qbmkiLAotICAgICAgIjp2aWRlb19qbmkiLAotICAgICAgIjp2aWRlb2ZyYW1lX2puaSIs
Ci0gICAgICAiLi4vLi4vYXBpOnNjb3BlZF9yZWZwdHIiLAotICAgICAgIi4uLy4uL2FwaS90YXNr
X3F1ZXVlIiwKLSAgICAgICIuLi8uLi9hcGkvdmlkZW9fY29kZWNzOnZpZGVvX2NvZGVjc19hcGki
LAotICAgICAgIi4uLy4uL2NvbW1vbl92aWRlbyIsCi0gICAgICAiLi4vLi4vbWVkaWE6cnRjX2lu
dGVybmFsX3ZpZGVvX2NvZGVjcyIsCi0gICAgICAiLi4vLi4vbWVkaWE6cnRjX21lZGlhX2Jhc2Ui
LAotICAgICAgIi4uLy4uL21vZHVsZXMvdmlkZW9fY29kaW5nOnZpZGVvX2NvZGVjX2ludGVyZmFj
ZSIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy92aWRlb19jb2Rpbmc6dmlkZW9fY29kaW5nX3V0aWxp
dHkiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlIiwKLSAgICAgICIuLi8uLi9ydGNfYmFzZTpjaGVj
a3MiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlOnJ0Y190YXNrX3F1ZXVlIiwKLSAgICAgICIuLi8u
Li9ydGNfYmFzZTp3ZWFrX3B0ciIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2Uvc3luY2hyb25pemF0
aW9uOnNlcXVlbmNlX2NoZWNrZXIiLAotICAgICAgIi4uLy4uL3N5c3RlbV93cmFwcGVyczpmaWVs
ZF90cmlhbCIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9hYnNlaWwtY3BwL2Fic2wvbWVtb3J5IiwK
LSAgICAgICIvL3RoaXJkX3BhcnR5L2xpYnl1diIsCi0gICAgXQotICB9Ci0KLSAgcnRjX2xpYnJh
cnkoInZpZGVvX2puaSIpIHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMg
PSBbCi0gICAgICAic3JjL2puaS9hbmRyb2lkX3ZpZGVvX3RyYWNrX3NvdXJjZS5jYyIsCi0gICAg
ICAic3JjL2puaS9hbmRyb2lkX3ZpZGVvX3RyYWNrX3NvdXJjZS5oIiwKLSAgICAgICJzcmMvam5p
L2VuY29kZWRfaW1hZ2UuY2MiLAotICAgICAgInNyYy9qbmkvZW5jb2RlZF9pbWFnZS5oIiwKLSAg
ICAgICJzcmMvam5pL2gyNjRfdXRpbHMuY2MiLAotICAgICAgInNyYy9qbmkvamF2YV9pNDIwX2J1
ZmZlci5jYyIsCi0gICAgICAic3JjL2puaS9qbmlfZ2VuZXJhdG9yX2hlbHBlci5oIiwKLSAgICAg
ICJzcmMvam5pL25hdGl2ZV9jYXB0dXJlcl9vYnNlcnZlci5jYyIsCi0gICAgICAic3JjL2puaS9u
YXRpdmVfY2FwdHVyZXJfb2JzZXJ2ZXIuaCIsCi0gICAgICAic3JjL2puaS9udjEyX2J1ZmZlci5j
YyIsCi0gICAgICAic3JjL2puaS9udjIxX2J1ZmZlci5jYyIsCi0gICAgICAic3JjL2puaS9wYy92
aWRlby5jYyIsCi0gICAgICAic3JjL2puaS90aW1lc3RhbXBfYWxpZ25lci5jYyIsCi0gICAgICAi
c3JjL2puaS92aWRlb19jb2RlY19pbmZvLmNjIiwKLSAgICAgICJzcmMvam5pL3ZpZGVvX2NvZGVj
X2luZm8uaCIsCi0gICAgICAic3JjL2puaS92aWRlb19jb2RlY19zdGF0dXMuY2MiLAotICAgICAg
InNyYy9qbmkvdmlkZW9fY29kZWNfc3RhdHVzLmgiLAotICAgICAgInNyYy9qbmkvdmlkZW9fZGVj
b2Rlcl9mYWN0b3J5X3dyYXBwZXIuY2MiLAotICAgICAgInNyYy9qbmkvdmlkZW9fZGVjb2Rlcl9m
YWN0b3J5X3dyYXBwZXIuaCIsCi0gICAgICAic3JjL2puaS92aWRlb19kZWNvZGVyX2ZhbGxiYWNr
LmNjIiwKLSAgICAgICJzcmMvam5pL3ZpZGVvX2RlY29kZXJfd3JhcHBlci5jYyIsCi0gICAgICAi
c3JjL2puaS92aWRlb19kZWNvZGVyX3dyYXBwZXIuaCIsCi0gICAgICAic3JjL2puaS92aWRlb19l
bmNvZGVyX2ZhY3Rvcnlfd3JhcHBlci5jYyIsCi0gICAgICAic3JjL2puaS92aWRlb19lbmNvZGVy
X2ZhY3Rvcnlfd3JhcHBlci5oIiwKLSAgICAgICJzcmMvam5pL3ZpZGVvX2VuY29kZXJfZmFsbGJh
Y2suY2MiLAotICAgICAgInNyYy9qbmkvdmlkZW9fZW5jb2Rlcl93cmFwcGVyLmNjIiwKLSAgICAg
ICJzcmMvam5pL3ZpZGVvX2VuY29kZXJfd3JhcHBlci5oIiwKLSAgICAgICJzcmMvam5pL3ZpZGVv
X3NpbmsuY2MiLAotICAgICAgInNyYy9qbmkvdmlkZW9fc2luay5oIiwKLSAgICAgICJzcmMvam5p
L3ZpZGVvX3RyYWNrLmNjIiwKLSAgICAgICJzcmMvam5pL3l1dl9oZWxwZXIuY2MiLAotICAgIF0K
LQotICAgIGRlcHMgPSBbCi0gICAgICAiOmJhc2Vfam5pIiwKLSAgICAgICI6Z2VuZXJhdGVkX3Zp
ZGVvX2puaSIsCi0gICAgICAiOm5hdGl2ZV9hcGlfam5pIiwKLSAgICAgICI6dmlkZW9mcmFtZV9q
bmkiLAotICAgICAgIi4uLy4uL2FwaTpsaWJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fYXBpIiwKLSAg
ICAgICIuLi8uLi9hcGk6bWVkaWFfc3RyZWFtX2ludGVyZmFjZSIsCi0gICAgICAiLi4vLi4vYXBp
L3Rhc2tfcXVldWUiLAotICAgICAgIi4uLy4uL2FwaS92aWRlbzplbmNvZGVkX2ltYWdlIiwKLSAg
ICAgICIuLi8uLi9hcGkvdmlkZW86dmlkZW9fZnJhbWUiLAotICAgICAgIi4uLy4uL2FwaS92aWRl
bzp2aWRlb19mcmFtZV90eXBlIiwKLSAgICAgICIuLi8uLi9hcGkvdmlkZW86dmlkZW9fcnRwX2hl
YWRlcnMiLAotICAgICAgIi4uLy4uL2FwaS92aWRlb19jb2RlY3M6cnRjX3NvZnR3YXJlX2ZhbGxi
YWNrX3dyYXBwZXJzIiwKLSAgICAgICIuLi8uLi9hcGkvdmlkZW9fY29kZWNzOnZpZGVvX2NvZGVj
c19hcGkiLAotICAgICAgIi4uLy4uL2NvbW1vbl92aWRlbyIsCi0gICAgICAiLi4vLi4vbWVkaWE6
cnRjX21lZGlhX2Jhc2UiLAotICAgICAgIi4uLy4uL21vZHVsZXMvdmlkZW9fY29kaW5nOmNvZGVj
X2dsb2JhbHNfaGVhZGVycyIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy92aWRlb19jb2Rpbmc6dmlk
ZW9fY29kZWNfaW50ZXJmYWNlIiwKLSAgICAgICIuLi8uLi9tb2R1bGVzL3ZpZGVvX2NvZGluZzp2
aWRlb19jb2RpbmdfdXRpbGl0eSIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2UiLAotICAgICAgIi4u
Ly4uL3J0Y19iYXNlOmNoZWNrcyIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6cnRjX3Rhc2tfcXVl
dWUiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlL3Rhc2tfdXRpbHM6dG9fcXVldWVkX3Rhc2siLAot
ICAgICAgIi8vdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzOm9wdGlvbmFsIiwKLSAg
ICAgICIvL3RoaXJkX3BhcnR5L2xpYnl1diIsCi0gICAgXQotICB9Ci0KLSAgcnRjX2xpYnJhcnko
InBlZXJjb25uZWN0aW9uX2puaSIpIHsKLSAgICAjIERvIG5vdCBkZXBlbmQgb24gdGhpcyB0YXJn
ZXQgZXh0ZXJuYWxseSB1bmxlc3MgeW91IGFic29sdXRlIGhhdmUgdG8uIEl0IGlzCi0gICAgIyBt
YWRlIHB1YmxpYyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBwcm9wZXIgTkRLIHlldC4gSGVhZGVy
IEFQSXMgaGVyZSBhcmUgbm90Ci0gICAgIyBjb25zaWRlcmVkIHB1YmxpYyBhbmQgYXJlIHN1Ympl
Y3QgdG8gY2hhbmdlLgotICAgIHZpc2liaWxpdHkgPSBbICIqIiBdCi0KLSAgICBzb3VyY2VzID0g
WwotICAgICAgInNyYy9qbmkvcGMvYW5kcm9pZF9uZXR3b3JrX21vbml0b3IuaCIsCi0gICAgICAi
c3JjL2puaS9wYy9hdWRpb190cmFjay5jYyIsCi0gICAgICAic3JjL2puaS9wYy9jYWxsX3Nlc3Np
b25fZmlsZV9yb3RhdGluZ19sb2dfc2luay5jYyIsCi0gICAgICAic3JjL2puaS9wYy9jcnlwdG9f
b3B0aW9ucy5jYyIsCi0gICAgICAic3JjL2puaS9wYy9jcnlwdG9fb3B0aW9ucy5oIiwKLSAgICAg
ICJzcmMvam5pL3BjL2RhdGFfY2hhbm5lbC5jYyIsCi0gICAgICAic3JjL2puaS9wYy9kYXRhX2No
YW5uZWwuaCIsCi0gICAgICAic3JjL2puaS9wYy9kdG1mX3NlbmRlci5jYyIsCi0gICAgICAic3Jj
L2puaS9wYy9pY2VfY2FuZGlkYXRlLmNjIiwKLSAgICAgICJzcmMvam5pL3BjL2ljZV9jYW5kaWRh
dGUuaCIsCi0gICAgICAic3JjL2puaS9wYy9tZWRpYV9jb25zdHJhaW50cy5jYyIsCi0gICAgICAi
c3JjL2puaS9wYy9tZWRpYV9jb25zdHJhaW50cy5oIiwKLSAgICAgICJzcmMvam5pL3BjL21lZGlh
X3NvdXJjZS5jYyIsCi0gICAgICAic3JjL2puaS9wYy9tZWRpYV9zdHJlYW0uY2MiLAotICAgICAg
InNyYy9qbmkvcGMvbWVkaWFfc3RyZWFtLmgiLAotICAgICAgInNyYy9qbmkvcGMvbWVkaWFfc3Ry
ZWFtX3RyYWNrLmNjIiwKLSAgICAgICJzcmMvam5pL3BjL21lZGlhX3N0cmVhbV90cmFjay5oIiwK
LSAgICAgICJzcmMvam5pL3BjL293bmVkX2ZhY3RvcnlfYW5kX3RocmVhZHMuY2MiLAotICAgICAg
InNyYy9qbmkvcGMvb3duZWRfZmFjdG9yeV9hbmRfdGhyZWFkcy5oIiwKLSAgICAgICJzcmMvam5p
L3BjL3BlZXJfY29ubmVjdGlvbi5jYyIsCi0gICAgICAic3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rp
b24uaCIsCi0gICAgICAic3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeS5jYyIsCi0g
ICAgICAic3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeS5oIiwKLSAgICAgICJzcmMv
am5pL3BjL3J0Y19jZXJ0aWZpY2F0ZS5jYyIsCi0gICAgICAic3JjL2puaS9wYy9ydGNfY2VydGlm
aWNhdGUuaCIsCi0gICAgICAic3JjL2puaS9wYy9ydGNfc3RhdHNfY29sbGVjdG9yX2NhbGxiYWNr
X3dyYXBwZXIuY2MiLAotICAgICAgInNyYy9qbmkvcGMvcnRjX3N0YXRzX2NvbGxlY3Rvcl9jYWxs
YmFja193cmFwcGVyLmgiLAotICAgICAgInNyYy9qbmkvcGMvcnRwX3BhcmFtZXRlcnMuY2MiLAot
ICAgICAgInNyYy9qbmkvcGMvcnRwX3BhcmFtZXRlcnMuaCIsCi0gICAgICAic3JjL2puaS9wYy9y
dHBfcmVjZWl2ZXIuY2MiLAotICAgICAgInNyYy9qbmkvcGMvcnRwX3JlY2VpdmVyLmgiLAotICAg
ICAgInNyYy9qbmkvcGMvcnRwX3NlbmRlci5jYyIsCi0gICAgICAic3JjL2puaS9wYy9ydHBfc2Vu
ZGVyLmgiLAotICAgICAgInNyYy9qbmkvcGMvcnRwX3RyYW5zY2VpdmVyLmNjIiwKLSAgICAgICJz
cmMvam5pL3BjL3J0cF90cmFuc2NlaXZlci5oIiwKLSAgICAgICJzcmMvam5pL3BjL3NkcF9vYnNl
cnZlci5jYyIsCi0gICAgICAic3JjL2puaS9wYy9zZHBfb2JzZXJ2ZXIuaCIsCi0gICAgICAic3Jj
L2puaS9wYy9zZXNzaW9uX2Rlc2NyaXB0aW9uLmNjIiwKLSAgICAgICJzcmMvam5pL3BjL3Nlc3Np
b25fZGVzY3JpcHRpb24uaCIsCi0gICAgICAic3JjL2puaS9wYy9zc2xfY2VydGlmaWNhdGVfdmVy
aWZpZXJfd3JhcHBlci5jYyIsCi0gICAgICAic3JjL2puaS9wYy9zc2xfY2VydGlmaWNhdGVfdmVy
aWZpZXJfd3JhcHBlci5oIiwKLSAgICAgICJzcmMvam5pL3BjL3N0YXRzX29ic2VydmVyLmNjIiwK
LSAgICAgICJzcmMvam5pL3BjL3N0YXRzX29ic2VydmVyLmgiLAotICAgICAgInNyYy9qbmkvcGMv
dHVybl9jdXN0b21pemVyLmNjIiwKLSAgICAgICJzcmMvam5pL3BjL3R1cm5fY3VzdG9taXplci5o
IiwKLSAgICBdCi0KLSAgICBkZXBzID0gWwotICAgICAgIjpiYXNlX2puaSIsCi0gICAgICAiOmdl
bmVyYXRlZF9leHRlcm5hbF9jbGFzc2VzX2puaSIsCi0gICAgICAiOmdlbmVyYXRlZF9wZWVyY29u
bmVjdGlvbl9qbmkiLAotICAgICAgIjpsb2dnaW5nX2puaSIsCi0gICAgICAiOm5hdGl2ZV9hcGlf
am5pIiwKLSAgICAgICI6bmF0aXZlX2FwaV9zdGFja3RyYWNlIiwKLSAgICAgICIuLjptZWRpYV9j
b25zdHJhaW50cyIsCi0gICAgICAiLi4vLi4vYXBpOmNhbGxmYWN0b3J5X2FwaSIsCi0gICAgICAi
Li4vLi4vYXBpOmxpYmppbmdsZV9wZWVyY29ubmVjdGlvbl9hcGkiLAotICAgICAgIi4uLy4uL2Fw
aTptZWRpYV9zdHJlYW1faW50ZXJmYWNlIiwKLSAgICAgICIuLi8uLi9hcGk6cnRjX2V2ZW50X2xv
Z19vdXRwdXRfZmlsZSIsCi0gICAgICAiLi4vLi4vYXBpOnJ0cF9wYXJhbWV0ZXJzIiwKLSAgICAg
ICIuLi8uLi9hcGkvY3J5cHRvOm9wdGlvbnMiLAotICAgICAgIi4uLy4uL2FwaS9ydGNfZXZlbnRf
bG9nOnJ0Y19ldmVudF9sb2dfZmFjdG9yeSIsCi0gICAgICAiLi4vLi4vYXBpL3Rhc2tfcXVldWU6
ZGVmYXVsdF90YXNrX3F1ZXVlX2ZhY3RvcnkiLAotICAgICAgIi4uLy4uL2FwaS92aWRlb19jb2Rl
Y3M6dmlkZW9fY29kZWNzX2FwaSIsCi0gICAgICAiLi4vLi4vY2FsbDpjYWxsX2ludGVyZmFjZXMi
LAotICAgICAgIi4uLy4uL21lZGlhOnJ0Y19hdWRpb192aWRlbyIsCi0gICAgICAiLi4vLi4vbWVk
aWE6cnRjX2RhdGEiLAotICAgICAgIi4uLy4uL21lZGlhOnJ0Y19tZWRpYV9iYXNlIiwKLSAgICAg
ICIuLi8uLi9tb2R1bGVzL2F1ZGlvX2RldmljZSIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy9hdWRp
b19wcm9jZXNzaW5nOmFwaSIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy91dGlsaXR5IiwKLSAgICAg
ICIuLi8uLi9wYzpwZWVyY29ubmVjdGlvbiIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2UiLAotICAg
ICAgIi4uLy4uL3J0Y19iYXNlOmNoZWNrcyIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6cnRjX2Jh
c2VfYXBwcm92ZWQiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlOnJ0Y190YXNrX3F1ZXVlIiwKLSAg
ICAgICIuLi8uLi9ydGNfYmFzZS9zeXN0ZW06dGhyZWFkX3JlZ2lzdHJ5IiwKLSAgICAgICIuLi8u
Li9zeXN0ZW1fd3JhcHBlcnM6ZmllbGRfdHJpYWwiLAotICAgICAgIi8vdGhpcmRfcGFydHkvYWJz
ZWlsLWNwcC9hYnNsL21lbW9yeSIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9hYnNlaWwtY3BwL2Fi
c2wvdHlwZXM6b3B0aW9uYWwiLAotICAgIF0KLSAgfQotCi0gICMgSk5JIHRhcmdldCBmb3IgamF2
YV9hdWRpb19kZXZpY2VfbW9kdWxlX2phdmEKLSAgcnRjX2xpYnJhcnkoImphdmFfYXVkaW9fZGV2
aWNlX21vZHVsZV9qbmkiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLSAgICBzb3VyY2Vz
ID0gWyAic3JjL2puaS9hdWRpb19kZXZpY2UvamF2YV9hdWRpb19kZXZpY2VfbW9kdWxlLmNjIiBd
Ci0KLSAgICBkZXBzID0gWwotICAgICAgIjpiYXNlX2puaSIsCi0gICAgICAiOmdlbmVyYXRlZF9q
YXZhX2F1ZGlvX2puaSIsCi0gICAgICAiOmphdmFfYXVkaW9fZGV2aWNlX21vZHVsZSIsCi0gICAg
XQotICB9Ci0KLSAgcnRjX2xpYnJhcnkoImRlZmF1bHRfdmlkZW9fY29kZWNfZmFjdG9yeV9qbmki
KSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLSAgICBhbGxvd19wb2lzb24gPSBbICJzb2Z0
d2FyZV92aWRlb19jb2RlY3MiIF0KLSAgICBkZXBzID0gWwotICAgICAgIjpzd2NvZGVjc19qbmki
LAotICAgICAgIjp2aWRlb19qbmkiLAotICAgIF0KLSAgfQotCi0gIHJ0Y19saWJyYXJ5KCJsaWJ2
cHhfdnA4X2puaSIpIHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIGFsbG93X3BvaXNv
biA9IFsgInNvZnR3YXJlX3ZpZGVvX2NvZGVjcyIgXQotICAgIHNvdXJjZXMgPSBbICJzcmMvam5p
L3ZwOF9jb2RlYy5jYyIgXQotICAgIGRlcHMgPSBbCi0gICAgICAiOmJhc2Vfam5pIiwKLSAgICAg
ICI6Z2VuZXJhdGVkX2xpYnZweF92cDhfam5pIiwKLSAgICAgICI6dmlkZW9fam5pIiwKLSAgICAg
ICIuLi8uLi9tb2R1bGVzL3ZpZGVvX2NvZGluZzp3ZWJydGNfdnA4IiwKLSAgICBdCi0gIH0KLQot
ICBydGNfbGlicmFyeSgibGlidnB4X3ZwOV9qbmkiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioi
IF0KLSAgICBhbGxvd19wb2lzb24gPSBbICJzb2Z0d2FyZV92aWRlb19jb2RlY3MiIF0KLSAgICBz
b3VyY2VzID0gWyAic3JjL2puaS92cDlfY29kZWMuY2MiIF0KLSAgICBkZXBzID0gWwotICAgICAg
IjpiYXNlX2puaSIsCi0gICAgICAiOmdlbmVyYXRlZF9saWJ2cHhfdnA5X2puaSIsCi0gICAgICAi
OnZpZGVvX2puaSIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy92aWRlb19jb2Rpbmc6d2VicnRjX3Zw
OSIsCi0gICAgXQotICB9Ci0KLSAgcnRjX2xpYnJhcnkoInN3Y29kZWNzX2puaSIpIHsKLSAgICB2
aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIGFsbG93X3BvaXNvbiA9IFsgInNvZnR3YXJlX3ZpZGVv
X2NvZGVjcyIgXQotICAgIGRlcHMgPSBbCi0gICAgICAiOmxpYnZweF92cDhfam5pIiwKLSAgICAg
ICI6bGlidnB4X3ZwOV9qbmkiLAotICAgIF0KLSAgfQotCi0gICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKLSAgIyBOYXRpdmUgQVBJIHRhcmdldHMgIwotICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0K
LSAgIyBDb3JlIHRhcmdldHMuCi0KLSAgIyBKTkkgaGVscGVycyB0aGF0IGFyZSBhbHNvIG5lZWRl
ZCBmcm9tIGludGVybmFsIEpOSSBjb2RlLiBDYW5ub3QgZGVwZW5kIG9uIGFueQotICAjIG90aGVy
IEpOSSB0YXJnZXRzIHRoYW4gaW50ZXJuYWxfam5pLgotICBydGNfbGlicmFyeSgibmF0aXZlX2Fw
aV9qbmkiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLSAgICBzb3VyY2VzID0gWwotICAg
ICAgIm5hdGl2ZV9hcGkvam5pL2NsYXNzX2xvYWRlci5jYyIsCi0gICAgICAibmF0aXZlX2FwaS9q
bmkvamF2YV90eXBlcy5jYyIsCi0gICAgICAibmF0aXZlX2FwaS9qbmkvanZtLmNjIiwKLSAgICAg
ICJzcmMvam5pL2puaV9nZW5lcmF0b3JfaGVscGVyLmNjIiwKLSAgICAgICJzcmMvam5pL2puaV9n
ZW5lcmF0b3JfaGVscGVyLmgiLAotICAgIF0KLQotICAgIHB1YmxpYyA9IFsKLSAgICAgICJuYXRp
dmVfYXBpL2puaS9jbGFzc19sb2FkZXIuaCIsCi0gICAgICAibmF0aXZlX2FwaS9qbmkvamF2YV90
eXBlcy5oIiwKLSAgICAgICJuYXRpdmVfYXBpL2puaS9qbmlfaW50X3dyYXBwZXIuaCIsCi0gICAg
ICAibmF0aXZlX2FwaS9qbmkvanZtLmgiLAotICAgICAgIm5hdGl2ZV9hcGkvam5pL3Njb3BlZF9q
YXZhX3JlZi5oIiwKLSAgICBdCi0KLSAgICBkZXBzID0gWwotICAgICAgIjpnZW5lcmF0ZWRfZXh0
ZXJuYWxfY2xhc3Nlc19qbmkiLAotICAgICAgIjpnZW5lcmF0ZWRfbmF0aXZlX2FwaV9qbmkiLAot
ICAgICAgIjppbnRlcm5hbF9qbmkiLAotICAgICAgIi8vYXBpOmFycmF5X3ZpZXciLAotICAgICAg
Ii8vcnRjX2Jhc2U6Y2hlY2tzIiwKLSAgICAgICIvL3J0Y19iYXNlOnJ0Y19iYXNlX2FwcHJvdmVk
IiwKLSAgICAgICIvL3RoaXJkX3BhcnR5L2Fic2VpbC1jcHAvYWJzbC90eXBlczpvcHRpb25hbCIs
Ci0gICAgXQotICB9Ci0KLSAgcnRjX2xpYnJhcnkoIm5hdGl2ZV9hcGlfYmFzZSIpIHsKLSAgICB2
aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAibmF0aXZlX2FwaS9i
YXNlL2luaXQuY2MiLAotICAgICAgIm5hdGl2ZV9hcGkvYmFzZS9pbml0LmgiLAotICAgICAgIm5h
dGl2ZV9hcGkvYmFzZS9uZXR3b3JrX21vbml0b3IuY2MiLAotICAgICAgIm5hdGl2ZV9hcGkvYmFz
ZS9uZXR3b3JrX21vbml0b3IuaCIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFz
ZV9qbmkiLAotICAgICAgIjpuYXRpdmVfYXBpX2puaSIsCi0gICAgICAiLy9ydGNfYmFzZSIsCi0g
ICAgICAiLy9ydGNfYmFzZTpjaGVja3MiLAotICAgIF0KLSAgfQotCi0gICMgTW9kdWxlcywgaW4g
YWxwaGFiZXRpY2FsIG9yZGVyLgotCi0gIHJ0Y19saWJyYXJ5KCJuYXRpdmVfYXBpX2F1ZGlvX2Rl
dmljZV9tb2R1bGUiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLQotICAgIHNvdXJjZXMg
PSBbCi0gICAgICAibmF0aXZlX2FwaS9hdWRpb19kZXZpY2VfbW9kdWxlL2F1ZGlvX2RldmljZV9h
bmRyb2lkLmNjIiwKLSAgICAgICJuYXRpdmVfYXBpL2F1ZGlvX2RldmljZV9tb2R1bGUvYXVkaW9f
ZGV2aWNlX2FuZHJvaWQuaCIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9q
bmkiLAotICAgICAgIjpqYXZhX2F1ZGlvX2RldmljZV9tb2R1bGUiLAotICAgICAgIjpvcGVuc2xl
c19hdWRpb19kZXZpY2VfbW9kdWxlIiwKLSAgICAgICIuLi8uLi9hcGk6c2NvcGVkX3JlZnB0ciIs
Ci0gICAgICAiLi4vLi4vbW9kdWxlcy9hdWRpb19kZXZpY2UiLAotICAgICAgIi4uLy4uL3J0Y19i
YXNlOmNoZWNrcyIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6cnRjX2Jhc2VfYXBwcm92ZWQiLAot
ICAgICAgIi4uLy4uL3N5c3RlbV93cmFwcGVycyIsCi0gICAgICAiLi4vLi4vc3lzdGVtX3dyYXBw
ZXJzOm1ldHJpY3MiLAotICAgIF0KLSAgICBpZiAocnRjX2VuYWJsZV9hbmRyb2lkX2FhdWRpbykg
ewotICAgICAgZGVwcyArPSBbICI6YWF1ZGlvX2F1ZGlvX2RldmljZV9tb2R1bGUiIF0KLSAgICB9
Ci0gIH0KLQotICAjIEFQSSBmb3Igd3JhcHBpbmcgSmF2YSBWaWRlb0RlY29kZXJGYWN0b3J5L1Zp
ZGVvRW5jb2RlckZhY3RvcnkgY2xhc3NlcyB0byBDKysKLSAgIyBvYmplY3RzLgotICBydGNfbGli
cmFyeSgibmF0aXZlX2FwaV9jb2RlY3MiKSB7Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLSAg
ICBhbGxvd19wb2lzb24gPSBbICJhdWRpb19jb2RlY3MiIF0gICMgVE9ETyhidWdzLndlYnJ0Yy5v
cmcvODM5Nik6IFJlbW92ZS4KLSAgICBzb3VyY2VzID0gWwotICAgICAgIm5hdGl2ZV9hcGkvY29k
ZWNzL3dyYXBwZXIuY2MiLAotICAgICAgIm5hdGl2ZV9hcGkvY29kZWNzL3dyYXBwZXIuaCIsCi0g
ICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qbmkiLAotICAgICAgIjpuYXRpdmVf
YXBpX2puaSIsCi0gICAgICAiOnZpZGVvX2puaSIsCi0gICAgICAiLy9hcGkvdmlkZW9fY29kZWNz
OnZpZGVvX2NvZGVjc19hcGkiLAotICAgICAgIi8vcnRjX2Jhc2U6Y2hlY2tzIiwKLSAgICAgICIv
L3J0Y19iYXNlOnJ0Y19iYXNlX2FwcHJvdmVkIiwKLSAgICBdCi0gIH0KLQotICAjIEFQSSBmb3Ig
Y3JlYXRpbmcgSmF2YSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSBDKysgZXF1aXZhbGVudHMu
Ci0gIHJ0Y19saWJyYXJ5KCJuYXRpdmVfYXBpX3BlZXJjb25uZWN0aW9uIikgewotICAgIHZpc2li
aWxpdHkgPSBbICIqIiBdCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJuYXRpdmVfYXBpL3BlZXJj
b25uZWN0aW9uL3BlZXJfY29ubmVjdGlvbl9mYWN0b3J5LmNjIiwKLSAgICAgICJuYXRpdmVfYXBp
L3BlZXJjb25uZWN0aW9uL3BlZXJfY29ubmVjdGlvbl9mYWN0b3J5LmgiLAotICAgIF0KLSAgICBk
ZXBzID0gWwotICAgICAgIjpiYXNlX2puaSIsCi0gICAgICAiOnBlZXJjb25uZWN0aW9uX2puaSIs
Ci0gICAgICAiLy9hcGk6bGliamluZ2xlX3BlZXJjb25uZWN0aW9uX2FwaSIsCi0gICAgICAiLy9h
cGkvdmlkZW9fY29kZWNzOnZpZGVvX2NvZGVjc19hcGkiLAotICAgICAgIi8vcnRjX2Jhc2UiLAot
ICAgIF0KLSAgfQotCi0gICMgQVBJIGZvciBjYXB0dXJpbmcgYW5kIHByaW50aW5nIG5hdGl2ZSBz
dGFja3RyYWNlcy4KLSAgcnRjX2xpYnJhcnkoIm5hdGl2ZV9hcGlfc3RhY2t0cmFjZSIpIHsKLSAg
ICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAibmF0aXZlX2Fw
aS9zdGFja3RyYWNlL3N0YWNrdHJhY2UuY2MiLAotICAgICAgIm5hdGl2ZV9hcGkvc3RhY2t0cmFj
ZS9zdGFja3RyYWNlLmgiLAotICAgIF0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiLi4vLi4vcnRj
X2Jhc2U6Y3JpdGljYWxzZWN0aW9uIiwKLSAgICAgICIuLi8uLi9ydGNfYmFzZTpsb2dnaW5nIiwK
LSAgICAgICIuLi8uLi9ydGNfYmFzZTpzdHJpbmd1dGlscyIsCi0gICAgICAiLy90aGlyZF9wYXJ0
eS9hYnNlaWwtY3BwL2Fic2wvYmFzZTpjb3JlX2hlYWRlcnMiLAotICAgIF0KLSAgfQotCi0gICMg
QVBJIGZvciBjcmVhdGluZyBDKysgd3JhcHBlciBpbXBsZW1lbnRhdGlvbnMgb2YgYXBpL21lZGlh
c3RyZWFtaW50ZXJmYWNlLmgKLSAgIyB2aWRlbyBpbnRlcmZhY2VzIGZyb20gdGhlaXIgSmF2YSBl
cXVpdmFsZW50cy4KLSAgcnRjX2xpYnJhcnkoIm5hdGl2ZV9hcGlfdmlkZW8iKSB7Ci0gICAgdmlz
aWJpbGl0eSA9IFsgIioiIF0KLSAgICBhbGxvd19wb2lzb24gPSBbICJhdWRpb19jb2RlY3MiIF0g
ICMgVE9ETyhidWdzLndlYnJ0Yy5vcmcvODM5Nik6IFJlbW92ZS4KLSAgICBzb3VyY2VzID0gWwot
ICAgICAgIm5hdGl2ZV9hcGkvdmlkZW8vdmlkZW9fc291cmNlLmNjIiwKLSAgICAgICJuYXRpdmVf
YXBpL3ZpZGVvL3ZpZGVvX3NvdXJjZS5oIiwKLSAgICAgICJuYXRpdmVfYXBpL3ZpZGVvL3dyYXBw
ZXIuY2MiLAotICAgICAgIm5hdGl2ZV9hcGkvdmlkZW8vd3JhcHBlci5oIiwKLSAgICBdCi0gICAg
ZGVwcyA9IFsKLSAgICAgICI6bmF0aXZlX2FwaV9qbmkiLAotICAgICAgIjp2aWRlb19qbmkiLAot
ICAgICAgIjp2aWRlb2ZyYW1lX2puaSIsCi0gICAgICAiLy9hcGk6bGliamluZ2xlX3BlZXJjb25u
ZWN0aW9uX2FwaSIsCi0gICAgICAiLy9hcGk6bWVkaWFfc3RyZWFtX2ludGVyZmFjZSIsCi0gICAg
ICAiLy9hcGkvdmlkZW86dmlkZW9fZnJhbWUiLAotICAgICAgIi8vYXBpL3ZpZGVvOnZpZGVvX3J0
cF9oZWFkZXJzIiwKLSAgICAgICIvL3J0Y19iYXNlIiwKLSAgICAgICIvL3J0Y19iYXNlOnJ0Y19i
YXNlX2FwcHJvdmVkIiwKLSAgICBdCi0gIH0KLQotICAjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAj
IEludGVybmFsIHRhcmdldHMgIwotICAjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gIHJ0Y19hbmRy
b2lkX2xpYnJhcnkoImxvZ2dpbmdfamF2YSIpIHsKLSAgICBzb3VyY2VzID0gWyAic3JjL2phdmEv
b3JnL3dlYnJ0Yy9KTklMb2dnaW5nLmphdmEiIF0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiOmJh
c2VfamF2YSIsCi0gICAgICAiLy9ydGNfYmFzZTpiYXNlX2phdmEiLAotICAgIF0KLSAgfQotCi0g
ICMgSW50ZXJuYWwgY29kZSB0aGF0IGlzIG5lZWRlZCBieSBuYXRpdmVfYXBpX2puaS4gVGhlIGNv
ZGUgY2Fubm90IGJlIHBsYWNlZCBpbgotICAjIGJhc2Vfam5pIGJlY2F1c2UgbmF0aXZlX2FwaV9q
bmkgZGVwZW5kcyBvbiB0aGUgY29kZSAoYW5kIGJhc2Vfam5pIGRlcGVuZHMgb24KLSAgIyBuYXRp
dmVfYXBpX2puaSkuCi0gIHJ0Y19saWJyYXJ5KCJpbnRlcm5hbF9qbmkiKSB7Ci0gICAgc291cmNl
cyA9IFsKLSAgICAgICJzcmMvam5pL2p2bS5jYyIsCi0gICAgICAic3JjL2puaS9qdm0uaCIsCi0g
ICAgXQotCi0gICAgZGVwcyA9IFsgIi4uLy4uL3J0Y19iYXNlOmNoZWNrcyIgXQotICB9Ci0KLSAg
cnRjX2xpYnJhcnkoInZpZGVvZnJhbWVfam5pIikgewotICAgIHNvdXJjZXMgPSBbCi0gICAgICAi
c3JjL2puaS92aWRlb19mcmFtZS5jYyIsCi0gICAgICAic3JjL2puaS92aWRlb19mcmFtZS5oIiwK
LSAgICAgICJzcmMvam5pL3dyYXBwZWRfbmF0aXZlX2k0MjBfYnVmZmVyLmNjIiwKLSAgICAgICJz
cmMvam5pL3dyYXBwZWRfbmF0aXZlX2k0MjBfYnVmZmVyLmgiLAotICAgIF0KLQotICAgIGRlcHMg
PSBbCi0gICAgICAiOmJhc2Vfam5pIiwKLSAgICAgICI6Z2VuZXJhdGVkX3ZpZGVvX2puaSIsCi0g
ICAgICAiOm5hdGl2ZV9hcGlfam5pIiwKLSAgICAgICIuLi8uLi9hcGk6c2NvcGVkX3JlZnB0ciIs
Ci0gICAgICAiLi4vLi4vYXBpL3ZpZGVvOnZpZGVvX2ZyYW1lIiwKLSAgICAgICIuLi8uLi9hcGkv
dmlkZW86dmlkZW9fcnRwX2hlYWRlcnMiLAotICAgICAgIi4uLy4uL2NvbW1vbl92aWRlbyIsCi0g
ICAgICAiLi4vLi4vcnRjX2Jhc2UiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlOmNoZWNrcyIsCi0g
ICAgICAiLi4vLi4vcnRjX2Jhc2U6cnRjX2Jhc2VfYXBwcm92ZWQiLAotICAgIF0KLSAgfQotCi0g
IHJ0Y19saWJyYXJ5KCJsb2dnaW5nX2puaSIpIHsKLSAgICB2aXNpYmlsaXR5ID0gWyAiKiIgXQot
ICAgIHNvdXJjZXMgPSBbCi0gICAgICAic3JjL2puaS9sb2dnaW5nL2xvZ19zaW5rLmNjIiwKLSAg
ICAgICJzcmMvam5pL2xvZ2dpbmcvbG9nX3NpbmsuaCIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsK
LSAgICAgICI6YmFzZV9qbmkiLAotICAgICAgIjpnZW5lcmF0ZWRfbG9nZ2luZ19qbmkiLAotICAg
ICAgIjpuYXRpdmVfYXBpX2puaSIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2UiLAotICAgIF0KLSAg
fQotCi0gIHJ0Y19saWJyYXJ5KCJhdWRpb19kZXZpY2VfbW9kdWxlX2Jhc2UiKSB7Ci0gICAgdmlz
aWJpbGl0eSA9IFsgIioiIF0KLQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAic3JjL2puaS9hdWRp
b19kZXZpY2UvYXVkaW9fY29tbW9uLmgiLAotICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNlL2F1
ZGlvX2RldmljZV9tb2R1bGUuY2MiLAotICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlv
X2RldmljZV9tb2R1bGUuaCIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9q
bmkiLAotICAgICAgIjpnZW5lcmF0ZWRfYXVkaW9fZGV2aWNlX21vZHVsZV9iYXNlX2puaSIsCi0g
ICAgICAiOm5hdGl2ZV9hcGlfam5pIiwKLSAgICAgICIuLi8uLi9hcGkvdGFza19xdWV1ZSIsCi0g
ICAgICAiLi4vLi4vYXBpL3Rhc2tfcXVldWU6ZGVmYXVsdF90YXNrX3F1ZXVlX2ZhY3RvcnkiLAot
ICAgICAgIi4uLy4uL21vZHVsZXMvYXVkaW9fZGV2aWNlOmF1ZGlvX2RldmljZV9hcGkiLAotICAg
ICAgIi4uLy4uL21vZHVsZXMvYXVkaW9fZGV2aWNlOmF1ZGlvX2RldmljZV9idWZmZXIiLAotICAg
ICAgIi4uLy4uL3J0Y19iYXNlOmNoZWNrcyIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6cnRjX2Jh
c2VfYXBwcm92ZWQiLAotICAgICAgIi4uLy4uL3N5c3RlbV93cmFwcGVyczptZXRyaWNzIiwKLSAg
ICAgICIvL3RoaXJkX3BhcnR5L2Fic2VpbC1jcHAvYWJzbC90eXBlczpvcHRpb25hbCIsCi0gICAg
XQotICB9Ci0KLSAgcnRjX2xpYnJhcnkoImphdmFfYXVkaW9fZGV2aWNlX21vZHVsZSIpIHsKLSAg
ICB2aXNpYmlsaXR5ID0gWyAiKiIgXQotCi0gICAgc291cmNlcyA9IFsKLSAgICAgICJzcmMvam5p
L2F1ZGlvX2RldmljZS9hdWRpb19yZWNvcmRfam5pLmNjIiwKLSAgICAgICJzcmMvam5pL2F1ZGlv
X2RldmljZS9hdWRpb19yZWNvcmRfam5pLmgiLAotICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNl
L2F1ZGlvX3RyYWNrX2puaS5jYyIsCi0gICAgICAic3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9f
dHJhY2tfam5pLmgiLAotICAgIF0KLSAgICBkZXBzID0gWwotICAgICAgIjphdWRpb19kZXZpY2Vf
bW9kdWxlX2Jhc2UiLAotICAgICAgIjpiYXNlX2puaSIsCi0gICAgICAiOmdlbmVyYXRlZF9qYXZh
X2F1ZGlvX2RldmljZV9tb2R1bGVfbmF0aXZlX2puaSIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy9h
dWRpb19kZXZpY2UiLAotICAgICAgIi4uLy4uL21vZHVsZXMvYXVkaW9fZGV2aWNlOmF1ZGlvX2Rl
dmljZV9idWZmZXIiLAotICAgICAgIi4uLy4uL3J0Y19iYXNlOmNoZWNrcyIsCi0gICAgICAiLi4v
Li4vcnRjX2Jhc2U6cnRjX2Jhc2VfYXBwcm92ZWQiLAotICAgICAgIi4uLy4uL3N5c3RlbV93cmFw
cGVyczpmaWVsZF90cmlhbCIsCi0gICAgICAiLi4vLi4vc3lzdGVtX3dyYXBwZXJzOm1ldHJpY3Mi
LAotICAgICAgIi8vdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzOm9wdGlvbmFsIiwK
LSAgICBdCi0gIH0KLQotICBpZiAocnRjX2VuYWJsZV9hbmRyb2lkX2FhdWRpbykgewotICAgIHJ0
Y19saWJyYXJ5KCJhYXVkaW9fYXVkaW9fZGV2aWNlX21vZHVsZSIpIHsKLSAgICAgIHZpc2liaWxp
dHkgPSBbICIqIiBdCi0gICAgICBkZWZpbmVzID0gWyAiV0VCUlRDX0FVRElPX0RFVklDRV9JTkNM
VURFX0FORFJPSURfQUFVRElPIiBdCi0gICAgICBzb3VyY2VzID0gWwotICAgICAgICAic3JjL2pu
aS9hdWRpb19kZXZpY2UvYWF1ZGlvX3BsYXllci5jYyIsCi0gICAgICAgICJzcmMvam5pL2F1ZGlv
X2RldmljZS9hYXVkaW9fcGxheWVyLmgiLAotICAgICAgICAic3JjL2puaS9hdWRpb19kZXZpY2Uv
YWF1ZGlvX3JlY29yZGVyLmNjIiwKLSAgICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRp
b19yZWNvcmRlci5oIiwKLSAgICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRpb193cmFw
cGVyLmNjIiwKLSAgICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRpb193cmFwcGVyLmgi
LAotICAgICAgXQotICAgICAgbGlicyA9IFsgImFhdWRpbyIgXQotICAgICAgZGVwcyA9IFsKLSAg
ICAgICAgIjphdWRpb19kZXZpY2VfbW9kdWxlX2Jhc2UiLAotICAgICAgICAiOmJhc2Vfam5pIiwK
LSAgICAgICAgIi4uLy4uL2FwaTphcnJheV92aWV3IiwKLSAgICAgICAgIi4uLy4uL21vZHVsZXMv
YXVkaW9fZGV2aWNlIiwKLSAgICAgICAgIi4uLy4uL21vZHVsZXMvYXVkaW9fZGV2aWNlOmF1ZGlv
X2RldmljZV9idWZmZXIiLAotICAgICAgICAiLi4vLi4vcnRjX2Jhc2UiLAotICAgICAgICAiLi4v
Li4vcnRjX2Jhc2U6Y2hlY2tzIiwKLSAgICAgICAgIi4uLy4uL3J0Y19iYXNlOnJ0Y19iYXNlX2Fw
cHJvdmVkIiwKLSAgICAgICAgIi4uLy4uL3N5c3RlbV93cmFwcGVycyIsCi0gICAgICAgICIvL3Ro
aXJkX3BhcnR5L2Fic2VpbC1jcHAvYWJzbC90eXBlczpvcHRpb25hbCIsCi0gICAgICBdCi0gICAg
fQotICB9Ci0KLSAgcnRjX2xpYnJhcnkoIm9wZW5zbGVzX2F1ZGlvX2RldmljZV9tb2R1bGUiKSB7
Ci0gICAgdmlzaWJpbGl0eSA9IFsgIioiIF0KLSAgICBzb3VyY2VzID0gWwotICAgICAgInNyYy9q
bmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX2NvbW1vbi5jYyIsCi0gICAgICAic3JjL2puaS9hdWRp
b19kZXZpY2Uvb3BlbnNsZXNfY29tbW9uLmgiLAotICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNl
L29wZW5zbGVzX3BsYXllci5jYyIsCi0gICAgICAic3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNs
ZXNfcGxheWVyLmgiLAotICAgICAgInNyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX3JlY29y
ZGVyLmNjIiwKLSAgICAgICJzcmMvam5pL2F1ZGlvX2RldmljZS9vcGVuc2xlc19yZWNvcmRlci5o
IiwKLSAgICBdCi0gICAgbGlicyA9IFsgIk9wZW5TTEVTIiBdCi0gICAgZGVwcyA9IFsKLSAgICAg
ICI6YXVkaW9fZGV2aWNlX21vZHVsZV9iYXNlIiwKLSAgICAgICI6YmFzZV9qbmkiLAotICAgICAg
Ii4uLy4uL2FwaTphcnJheV92aWV3IiwKLSAgICAgICIuLi8uLi9hcGk6cmVmY291bnRlZGJhc2Ui
LAotICAgICAgIi4uLy4uL2FwaTpzY29wZWRfcmVmcHRyIiwKLSAgICAgICIuLi8uLi9tb2R1bGVz
L2F1ZGlvX2RldmljZSIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy9hdWRpb19kZXZpY2U6YXVkaW9f
ZGV2aWNlX2J1ZmZlciIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6Y2hlY2tzIiwKLSAgICAgICIu
Li8uLi9ydGNfYmFzZTpydGNfYmFzZV9hcHByb3ZlZCIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9h
YnNlaWwtY3BwL2Fic2wvdHlwZXM6b3B0aW9uYWwiLAotICAgIF0KLSAgfQotCi0gICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKLSAgIyBHZW5lcmF0ZWQgSk5JIHRhcmdldHMgIwotICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgZ2VuZXJhdGVfamFyX2puaSgiZ2VuZXJhdGVkX2V4dGVy
bmFsX2NsYXNzZXNfam5pIikgewotICAgIGNsYXNzZXMgPSBbCi0gICAgICAiamF2YS9sYW5nL0lu
dGVnZXIuY2xhc3MiLAotICAgICAgImphdmEvbGFuZy9Eb3VibGUuY2xhc3MiLAotICAgICAgImph
dmEvbGFuZy9Mb25nLmNsYXNzIiwKLSAgICAgICJqYXZhL2xhbmcvSXRlcmFibGUuY2xhc3MiLAot
ICAgICAgImphdmEvdXRpbC9JdGVyYXRvci5jbGFzcyIsCi0gICAgICAiamF2YS9sYW5nL0Jvb2xl
YW4uY2xhc3MiLAotICAgICAgImphdmEvbWF0aC9CaWdJbnRlZ2VyLmNsYXNzIiwKLSAgICAgICJq
YXZhL3V0aWwvTWFwLmNsYXNzIiwKLSAgICAgICJqYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5jbGFz
cyIsCi0gICAgICAiamF2YS91dGlsL0FycmF5TGlzdC5jbGFzcyIsCi0gICAgICAiamF2YS9sYW5n
L0VudW0uY2xhc3MiLAotICAgIF0KLSAgICBqbmlfZ2VuZXJhdG9yX2luY2x1ZGUgPSAiLy9zZGsv
YW5kcm9pZC9zcmMvam5pL2puaV9nZW5lcmF0b3JfaGVscGVyLmgiCi0gIH0KLQotICBnZW5lcmF0
ZV9qbmkoImdlbmVyYXRlZF9tZXRyaWNzX2puaSIpIHsKLSAgICBzb3VyY2VzID0gWyAiYXBpL29y
Zy93ZWJydGMvTWV0cmljcy5qYXZhIiBdCi0gICAgbmFtZXNwYWNlID0gIndlYnJ0Yzo6am5pIgot
ICAgIGpuaV9nZW5lcmF0b3JfaW5jbHVkZSA9ICIvL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dl
bmVyYXRvcl9oZWxwZXIuaCIKLSAgfQotCi0gICMgR2VuZXJhdGVkIEpOSSBmb3IgcHVibGljIEpO
SSB0YXJnZXRzLCBtYXRjaGluZyBvcmRlciBvZiB0YXJnZXRzCi0KLSAgZ2VuZXJhdGVfam5pKCJn
ZW5lcmF0ZWRfYmFzZV9qbmkiKSB7Ci0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dl
YnJ0Yy9OZXR3b3JrTW9uaXRvci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9OZXR3b3Jr
TW9uaXRvckF1dG9EZXRlY3QuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUmVmQ291bnRl
ZC5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0hpc3RvZ3JhbS5qYXZhIiwKLSAg
ICAgICJzcmMvamF2YS9vcmcvd2VicnRjL0puaUNvbW1vbi5qYXZhIiwKLSAgICBdCi0gICAgbmFt
ZXNwYWNlID0gIndlYnJ0Yzo6am5pIgotICAgIGpuaV9nZW5lcmF0b3JfaW5jbHVkZSA9ICIvL3Nk
ay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIuaCIKLSAgfQotCi0gIGdlbmVy
YXRlX2puaSgiZ2VuZXJhdGVkX3ZpZGVvX2puaSIpIHsKLSAgICBzb3VyY2VzID0gWwotICAgICAg
ImFwaS9vcmcvd2VicnRjL0VuY29kZWRJbWFnZS5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0
Yy9KYXZhSTQyMEJ1ZmZlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVj
VmlkZW9EZWNvZGVyLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRl
b0VuY29kZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvVGltZXN0YW1wQWxpZ25lci5q
YXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0NvZGVjSW5mby5qYXZhIiwKLSAgICAg
ICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0NvZGVjU3RhdHVzLmphdmEiLAotICAgICAgImFwaS9vcmcv
d2VicnRjL1ZpZGVvRGVjb2Rlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0Rl
Y29kZXJGYWN0b3J5LmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1ZpZGVvRGVjb2RlckZh
bGxiYWNrLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1ZpZGVvRW5jb2Rlci5qYXZhIiwK
LSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXJGYWN0b3J5LmphdmEiLAotICAgICAg
ImFwaS9vcmcvd2VicnRjL1ZpZGVvRW5jb2RlckZhbGxiYWNrLmphdmEiLAotICAgICAgImFwaS9v
cmcvd2VicnRjL1ZpZGVvRnJhbWUuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvVmlkZW9T
aW5rLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1ZpZGVvVHJhY2suamF2YSIsCi0gICAg
ICAiYXBpL29yZy93ZWJydGMvWXV2SGVscGVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93
ZWJydGMvSDI2NFV0aWxzLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvTlYxMkJ1
ZmZlci5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL05WMjFCdWZmZXIuamF2YSIs
Ci0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9OYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJj
ZS5qYXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL05hdGl2ZUNhcHR1cmVyT2JzZXJ2
ZXIuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9WaWRlb0RlY29kZXJXcmFwcGVy
LmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvVmlkZW9FbmNvZGVyV3JhcHBlci5q
YXZhIiwKLSAgICAgICJzcmMvamF2YS9vcmcvd2VicnRjL1dyYXBwZWROYXRpdmVJNDIwQnVmZmVy
LmphdmEiLAotICAgIF0KLSAgICBuYW1lc3BhY2UgPSAid2VicnRjOjpqbmkiCi0gICAgam5pX2dl
bmVyYXRvcl9pbmNsdWRlID0gIi8vc2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfZ2VuZXJhdG9yX2hl
bHBlci5oIgotICB9Ci0KLSAgZ2VuZXJhdGVfam5pKCJnZW5lcmF0ZWRfbGlidnB4X3ZwOF9qbmki
KSB7Ci0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9MaWJ2cHhWcDhEZWNv
ZGVyLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0xpYnZweFZwOEVuY29kZXIuamF2YSIs
Ci0gICAgXQotCi0gICAgbmFtZXNwYWNlID0gIndlYnJ0Yzo6am5pIgotICAgIGpuaV9nZW5lcmF0
b3JfaW5jbHVkZSA9ICIvL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIu
aCIKLSAgfQotCi0gIGdlbmVyYXRlX2puaSgiZ2VuZXJhdGVkX2xpYnZweF92cDlfam5pIikgewot
ICAgIHNvdXJjZXMgPSBbCi0gICAgICAiYXBpL29yZy93ZWJydGMvTGlidnB4VnA5RGVjb2Rlci5q
YXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9MaWJ2cHhWcDlFbmNvZGVyLmphdmEiLAotICAg
IF0KLQotICAgIG5hbWVzcGFjZSA9ICJ3ZWJydGM6OmpuaSIKLSAgICBqbmlfZ2VuZXJhdG9yX2lu
Y2x1ZGUgPSAiLy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9nZW5lcmF0b3JfaGVscGVyLmgiCi0g
IH0KLQotICBnZW5lcmF0ZV9qbmkoImdlbmVyYXRlZF9wZWVyY29ubmVjdGlvbl9qbmkiKSB7Ci0g
ICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEiLAot
ICAgICAgImFwaS9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luay5qYXZh
IiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9DYW5kaWRhdGVQYWlyQ2hhbmdlRXZlbnQuamF2YSIs
Ci0gICAgICAiYXBpL29yZy93ZWJydGMvQ3J5cHRvT3B0aW9ucy5qYXZhIiwKLSAgICAgICJhcGkv
b3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9EdG1m
U2VuZGVyLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhIiwK
LSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9NZWRpYUNvbnN0cmFpbnRzLmphdmEiLAotICAgICAgImFw
aS9vcmcvd2VicnRjL01lZGlhU291cmNlLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL01l
ZGlhU3RyZWFtLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL01lZGlhU3RyZWFtVHJhY2su
amF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24uamF2YSIsCi0gICAg
ICAiYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEiLAotICAgICAgImFw
aS9vcmcvd2VicnRjL1JUQ1N0YXRzLmphdmEiLAotICAgICAgImFwaS9vcmcvd2VicnRjL1JUQ1N0
YXRzQ29sbGVjdG9yQ2FsbGJhY2suamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUlRDU3Rh
dHNSZXBvcnQuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUnRjQ2VydGlmaWNhdGVQZW0u
amF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUnRwUGFyYW1ldGVycy5qYXZhIiwKLSAgICAg
ICJhcGkvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0
Yy9SdHBTZW5kZXIuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvUnRwVHJhbnNjZWl2ZXIu
amF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvU1NMQ2VydGlmaWNhdGVWZXJpZmllci5qYXZh
IiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZlci5qYXZhIiwKLSAgICAgICJhcGkv
b3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJy
dGMvU3RhdHNPYnNlcnZlci5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9TdGF0c1JlcG9y
dC5qYXZhIiwKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9UdXJuQ3VzdG9taXplci5qYXZhIiwKLSAg
ICBdCi0gICAgbmFtZXNwYWNlID0gIndlYnJ0Yzo6am5pIgotICAgIGpuaV9nZW5lcmF0b3JfaW5j
bHVkZSA9ICIvL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIuaCIKLSAg
fQotCi0gIGdlbmVyYXRlX2puaSgiZ2VuZXJhdGVkX2phdmFfYXVkaW9fam5pIikgewotICAgIHNv
dXJjZXMgPSBbICJhcGkvb3JnL3dlYnJ0Yy9hdWRpby9KYXZhQXVkaW9EZXZpY2VNb2R1bGUuamF2
YSIgXQotICAgIG5hbWVzcGFjZSA9ICJ3ZWJydGM6OmpuaSIKLSAgICBqbmlfZ2VuZXJhdG9yX2lu
Y2x1ZGUgPSAiLy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9nZW5lcmF0b3JfaGVscGVyLmgiCi0g
IH0KLQotICBnZW5lcmF0ZV9qbmkoImdlbmVyYXRlZF9idWlsdGluX2F1ZGlvX2NvZGVjc19qbmki
KSB7Ci0gICAgc291cmNlcyA9IFsKLSAgICAgICJhcGkvb3JnL3dlYnJ0Yy9CdWlsdGluQXVkaW9E
ZWNvZGVyRmFjdG9yeUZhY3RvcnkuamF2YSIsCi0gICAgICAiYXBpL29yZy93ZWJydGMvQnVpbHRp
bkF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5LmphdmEiLAotICAgIF0KLSAgICBuYW1lc3BhY2Ug
PSAid2VicnRjOjpqbmkiCi0gICAgam5pX2dlbmVyYXRvcl9pbmNsdWRlID0gIi8vc2RrL2FuZHJv
aWQvc3JjL2puaS9qbmlfZ2VuZXJhdG9yX2hlbHBlci5oIgotICB9Ci0KLSAgIyBHZW5lcmF0ZWQg
Sk5JIGZvciBuYXRpdmUgQVBJIHRhcmdldHMKLQotICBnZW5lcmF0ZV9qbmkoImdlbmVyYXRlZF9u
YXRpdmVfYXBpX2puaSIpIHsKLSAgICBzb3VyY2VzID0gWwotICAgICAgInNyYy9qYXZhL29yZy93
ZWJydGMvSm5pSGVscGVyLmphdmEiLAotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvV2ViUnRj
Q2xhc3NMb2FkZXIuamF2YSIsCi0gICAgXQotICAgIG5hbWVzcGFjZSA9ICJ3ZWJydGM6OmpuaSIK
LSAgICBqbmlfZ2VuZXJhdG9yX2luY2x1ZGUgPSAiLy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9n
ZW5lcmF0b3JfaGVscGVyLmgiCi0gIH0KLQotICAjIEdlbmVyYXRlZCBKTkkgZm9yIGludGVybmFs
IHRhcmdldHMuCi0KLSAgZ2VuZXJhdGVfam5pKCJnZW5lcmF0ZWRfbG9nZ2luZ19qbmkiKSB7Ci0g
ICAgc291cmNlcyA9IFsgInNyYy9qYXZhL29yZy93ZWJydGMvSk5JTG9nZ2luZy5qYXZhIiBdCi0g
ICAgam5pX2dlbmVyYXRvcl9pbmNsdWRlID0gIi8vc2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfZ2Vu
ZXJhdG9yX2hlbHBlci5oIgotICB9Ci0KLSAgZ2VuZXJhdGVfam5pKCJnZW5lcmF0ZWRfYXVkaW9f
ZGV2aWNlX21vZHVsZV9iYXNlX2puaSIpIHsKLSAgICBzb3VyY2VzID0gWyAic3JjL2phdmEvb3Jn
L3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb01hbmFnZXIuamF2YSIgXQotICAgIG5hbWVzcGFjZSA9
ICJ3ZWJydGM6OmpuaSIKLSAgICBqbmlfZ2VuZXJhdG9yX2luY2x1ZGUgPSAiLy9zZGsvYW5kcm9p
ZC9zcmMvam5pL2puaV9nZW5lcmF0b3JfaGVscGVyLmgiCi0gIH0KLQotICBnZW5lcmF0ZV9qbmko
ImdlbmVyYXRlZF9qYXZhX2F1ZGlvX2RldmljZV9tb2R1bGVfbmF0aXZlX2puaSIpIHsKLSAgICBz
b3VyY2VzID0gWwotICAgICAgInNyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9S
ZWNvcmQuamF2YSIsCi0gICAgICAic3JjL2phdmEvb3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRp
b1RyYWNrLmphdmEiLAotICAgIF0KLSAgICBuYW1lc3BhY2UgPSAid2VicnRjOjpqbmkiCi0gICAg
am5pX2dlbmVyYXRvcl9pbmNsdWRlID0gIi8vc2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfZ2VuZXJh
dG9yX2hlbHBlci5oIgotICB9Ci19Ci0KLWlmIChpc19hbmRyb2lkKSB7Ci0gICMjIyMjIyMjIyMj
IyMjIyMKLSAgIyBUZXN0IHRhcmdldHMgIwotICAjIyMjIyMjIyMjIyMjIyMjCi0KLSAgaWYgKHJ0
Y19pbmNsdWRlX3Rlc3RzKSB7Ci0gICAgcnRjX2luc3RydW1lbnRhdGlvbl90ZXN0X2FwaygiYW5k
cm9pZF9pbnN0cnVtZW50YXRpb25fdGVzdF9hcGsiKSB7Ci0gICAgICBhcGtfbmFtZSA9ICJhbmRy
b2lkX2luc3RydW1lbnRhdGlvbl90ZXN0X2FwayIKLSAgICAgIGFuZHJvaWRfbWFuaWZlc3QgPSAi
aW5zdHJ1bWVudGF0aW9udGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbCIKLSAgICAgIG1pbl9zZGtf
dmVyc2lvbiA9IDE2Ci0gICAgICB0YXJnZXRfc2RrX3ZlcnNpb24gPSAyMQotCi0gICAgICBzb3Vy
Y2VzID0gWwotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvQW5k
cm9pZFZpZGVvRGVjb2Rlckluc3RydW1lbnRhdGlvblRlc3QuamF2YSIsCi0gICAgICAgICJpbnN0
cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9CdWlsdGluQXVkaW9Db2RlY3NGYWN0b3J5
RmFjdG9yeVRlc3QuamF2YSIsCi0gICAgICAgICJpbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3Jn
L3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0LmphdmEiLAotICAgICAg
ICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNp
bmdUZXh0dXJlVGVzdC5qYXZhIiwKLSAgICAgICAgImluc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9v
cmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRlc3QuamF2YSIsCi0gICAgICAgICJpbnN0cnVtZW50
YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVz
LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvRGVm
YXVsdFZpZGVvRW5jb2RlckZhY3RvcnlUZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0
aW9udGVzdHMvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEiLAotICAgICAgICAi
aW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVyZXJUZXN0
LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvR2xS
ZWN0RHJhd2VyVGVzdC5qYXZhIiwKLSAgICAgICAgImluc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9v
cmcvd2VicnRjL0hhcmR3YXJlVmlkZW9FbmNvZGVyVGVzdC5qYXZhIiwKLSAgICAgICAgImluc3Ry
dW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL0xvZ2dhYmxlVGVzdC5qYXZhIiwKLSAgICAg
ICAgImluc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0Vu
Y29kZXJUZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93
ZWJydGMvTmV0d29ya01vbml0b3JUZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9u
dGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25FbmRUb0VuZFRlc3QuamF2YSIsCi0g
ICAgICAgICJpbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlv
bkZhY3RvcnlUZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29y
Zy93ZWJydGMvUGVlckNvbm5lY3Rpb25UZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0
aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmEiLAotICAgICAg
ICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUnRjQ2VydGlmaWNhdGVQZW1U
ZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMv
UnRwU2VuZGVyVGVzdC5qYXZhIiwKLSAgICAgICAgImluc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9v
cmcvd2VicnRjL1J0cFRyYW5zY2VpdmVyVGVzdC5qYXZhIiwKLSAgICAgICAgImluc3RydW1lbnRh
dGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5qYXZhIiwK
LSAgICAgICAgImluc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3
UmVuZGVyZXJPbk1lYXN1cmVUZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVz
dHMvc3JjL29yZy93ZWJydGMvVGVzdENvbnN0YW50cy5qYXZhIiwKLSAgICAgICAgImluc3RydW1l
bnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1RpbWVzdGFtcEFsaWduZXJUZXN0LmphdmEiLAot
ICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvVmlkZW9GaWxlUmVu
ZGVyZXJUZXN0LmphdmEiLAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93
ZWJydGMvVmlkZW9GcmFtZUJ1ZmZlclRlc3QuamF2YSIsCi0gICAgICAgICJpbnN0cnVtZW50YXRp
b250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrVGVzdC5qYXZhIiwKLSAgICAgICAgImlu
c3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJvb3RUZXN0LmphdmEi
LAotICAgICAgICAiaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvWXV2SGVscGVy
VGVzdC5qYXZhIiwKLSAgICAgIF0KLQotICAgICAgZGF0YSA9IFsgIi4uLy4uL3Nkay9hbmRyb2lk
L2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL2NhcHR1cmV0ZXN0dmlkZW8ueTRt
IiBdCi0KLSAgICAgIGRlcHMgPSBbCi0gICAgICAgICI6YmFzZV9qYXZhIiwKLSAgICAgICAgIjpk
ZWZhdWx0X3ZpZGVvX2NvZGVjX2ZhY3RvcnlfamF2YSIsCi0gICAgICAgICI6bGliamluZ2xlX3Bl
ZXJjb25uZWN0aW9uX2phdmEiLAotICAgICAgICAiOmxpYmppbmdsZV9wZWVyY29ubmVjdGlvbl9t
ZXRyaWNzX2RlZmF1bHRfamF2YSIsCi0gICAgICAgICI6dmlkZW9fYXBpX2phdmEiLAotICAgICAg
ICAiOnZpZGVvX2phdmEiLAotICAgICAgICAiLy9iYXNlOmJhc2VfamF2YV90ZXN0X3N1cHBvcnQi
LAotICAgICAgICAiLy9ydGNfYmFzZTpiYXNlX2phdmEiLAotICAgICAgICAiLy90aGlyZF9wYXJ0
eS9hbmRyb2lkX3N1cHBvcnRfdGVzdF9ydW5uZXI6cnVsZXNfamF2YSIsCi0gICAgICAgICIvL3Ro
aXJkX3BhcnR5L2FuZHJvaWRfc3VwcG9ydF90ZXN0X3J1bm5lcjpydW5uZXJfamF2YSIsCi0gICAg
ICAgICIvL3RoaXJkX3BhcnR5L2dvb2dsZS10cnV0aDpnb29nbGVfdHJ1dGhfamF2YSIsCi0gICAg
ICAgICIvL3RoaXJkX3BhcnR5L2p1bml0IiwKLSAgICAgICAgIi8vdGhpcmRfcGFydHkvbW9ja2l0
bzptb2NraXRvX2phdmEiLAotICAgICAgXQotCi0gICAgICBzaGFyZWRfbGlicmFyaWVzID0gWwot
ICAgICAgICAiLi4vLi4vc2RrL2FuZHJvaWQ6bGliamluZ2xlX3BlZXJjb25uZWN0aW9uX2luc3Ry
dW1lbnRhdGlvbnRlc3RzX3NvIiwKLSAgICAgIF0KLSAgICB9Ci0gIH0KLQotICBydGNfc2hhcmVk
X2xpYnJhcnkoImxpYmppbmdsZV9wZWVyY29ubmVjdGlvbl9pbnN0cnVtZW50YXRpb250ZXN0c19z
byIpIHsKLSAgICB0ZXN0b25seSA9IHRydWUKLSAgICBzb3VyY2VzID0gWyAic3JjL2puaS9qbmlf
b25sb2FkLmNjIiBdCi0KLSAgICBzdXBwcmVzc2VkX2NvbmZpZ3MgKz0gWyAiLy9idWlsZC9jb25m
aWcvYW5kcm9pZDpoaWRlX2FsbF9idXRfam5pX29ubG9hZCIgXQotICAgIGNvbmZpZ3MgKz0gWyAi
Ly9idWlsZC9jb25maWcvYW5kcm9pZDpoaWRlX2FsbF9idXRfam5pIiBdCi0KLSAgICBkZXBzID0g
WwotICAgICAgIjppbnN0cnVtZW50YXRpb250ZXN0c19qbmkiLAotICAgICAgIjpsaWJqaW5nbGVf
cGVlcmNvbm5lY3Rpb25fam5pIiwKLSAgICAgICI6bGliamluZ2xlX3BlZXJjb25uZWN0aW9uX21l
dHJpY3NfZGVmYXVsdF9qbmkiLAotICAgICAgIi4uLy4uL3BjOmxpYmppbmdsZV9wZWVyY29ubmVj
dGlvbiIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2UiLAotICAgIF0KLSAgICBvdXRwdXRfZXh0ZW5z
aW9uID0gInNvIgotICB9Ci0KLSAgcnRjX2xpYnJhcnkoImluc3RydW1lbnRhdGlvbnRlc3RzX2pu
aSIpIHsKLSAgICB0ZXN0b25seSA9IHRydWUKLSAgICBzb3VyY2VzID0gWyAiaW5zdHJ1bWVudGF0
aW9udGVzdHMvbG9nZ2FibGVfdGVzdC5jYyIgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFz
ZV9qbmkiLAotICAgICAgIjpuYXRpdmVfYXBpX2puaSIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2U6
cnRjX2Jhc2VfYXBwcm92ZWQiLAotICAgIF0KLSAgfQotCi0gIHJ0Y19saWJyYXJ5KCJuYXRpdmVf
dW5pdHRlc3RzIikgewotICAgIHRlc3Rvbmx5ID0gdHJ1ZQotCi0gICAgc291cmNlcyA9IFsKLSAg
ICAgICJuYXRpdmVfdW5pdHRlc3RzL2FuZHJvaWRfbmV0d29ya19tb25pdG9yX3VuaXR0ZXN0LmNj
IiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRleHRfcHJvdmlkZXIu
Y2MiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvYXBwbGljYXRpb25fY29udGV4dF9wcm92aWRl
ci5oIiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2Vf
dW5pdHRlc3QuY2MiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvY29kZWNzL3dyYXBwZXJfdW5p
dHRlc3QuY2MiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvamF2YV90eXBlc191bml0dGVzdC5j
YyIsCi0gICAgICAibmF0aXZlX3VuaXR0ZXN0cy9wZWVyY29ubmVjdGlvbi9wZWVyX2Nvbm5lY3Rp
b25fZmFjdG9yeV91bml0dGVzdC5jYyIsCi0gICAgICAibmF0aXZlX3VuaXR0ZXN0cy9zdGFja3Ry
YWNlL3N0YWNrdHJhY2VfdW5pdHRlc3QuY2MiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvdGVz
dF9qbmlfb25sb2FkLmNjIiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL3ZpZGVvL3ZpZGVvX3Nv
dXJjZV91bml0dGVzdC5jYyIsCi0gICAgXQotCi0gICAgZGF0YSA9IFsKLSAgICAgICIuLi8uLi9y
ZXNvdXJjZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX3Nob3J0NDQucGNtIiwKLSAgICAgICIuLi8uLi9y
ZXNvdXJjZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX3Nob3J0NDgucGNtIiwKLSAgICBdCi0KLSAgICBk
ZXBzID0gWwotICAgICAgIjphdWRpb19kZXZpY2VfbW9kdWxlX2Jhc2UiLAotICAgICAgIjphdWRp
b19qbmkiLAotICAgICAgIjpiYXNlX2puaSIsCi0gICAgICAiOmdlbmVyYXRlZF9uYXRpdmVfdW5p
dHRlc3RzX2puaSIsCi0gICAgICAiOm5hdGl2ZV9hcGlfYXVkaW9fZGV2aWNlX21vZHVsZSIsCi0g
ICAgICAiOm5hdGl2ZV9hcGlfYmFzZSIsCi0gICAgICAiOm5hdGl2ZV9hcGlfY29kZWNzIiwKLSAg
ICAgICI6bmF0aXZlX2FwaV9qbmkiLAotICAgICAgIjpuYXRpdmVfYXBpX3BlZXJjb25uZWN0aW9u
IiwKLSAgICAgICI6bmF0aXZlX2FwaV9zdGFja3RyYWNlIiwKLSAgICAgICI6bmF0aXZlX2FwaV92
aWRlbyIsCi0gICAgICAiOm9wZW5zbGVzX2F1ZGlvX2RldmljZV9tb2R1bGUiLAotICAgICAgIjp2
aWRlb19qbmkiLAotICAgICAgIi4uLy4uL2FwaTpzY29wZWRfcmVmcHRyIiwKLSAgICAgICIuLi8u
Li9hcGkvcnRjX2V2ZW50X2xvZzpydGNfZXZlbnRfbG9nX2ZhY3RvcnkiLAotICAgICAgIi4uLy4u
L2FwaS90YXNrX3F1ZXVlOmRlZmF1bHRfdGFza19xdWV1ZV9mYWN0b3J5IiwKLSAgICAgICIuLi8u
Li9hcGkvdmlkZW86dmlkZW9fZnJhbWUiLAotICAgICAgIi4uLy4uL2FwaS92aWRlbzp2aWRlb19y
dHBfaGVhZGVycyIsCi0gICAgICAiLi4vLi4vbWVkaWE6cnRjX2F1ZGlvX3ZpZGVvIiwKLSAgICAg
ICIuLi8uLi9tZWRpYTpydGNfaW50ZXJuYWxfdmlkZW9fY29kZWNzIiwKLSAgICAgICIuLi8uLi9t
ZWRpYTpydGNfbWVkaWFfYmFzZSIsCi0gICAgICAiLi4vLi4vbWVkaWE6cnRjX21lZGlhX2VuZ2lu
ZV9kZWZhdWx0cyIsCi0gICAgICAiLi4vLi4vbW9kdWxlcy9hdWRpb19kZXZpY2UiLAotICAgICAg
Ii4uLy4uL21vZHVsZXMvYXVkaW9fZGV2aWNlOm1vY2tfYXVkaW9fZGV2aWNlIiwKLSAgICAgICIu
Li8uLi9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Npbmc6YXBpIiwKLSAgICAgICIuLi8uLi9tb2R1bGVz
L3V0aWxpdHkiLAotICAgICAgIi4uLy4uL3BjOmxpYmppbmdsZV9wZWVyY29ubmVjdGlvbiIsCi0g
ICAgICAiLi4vLi4vcnRjX2Jhc2U6Y2hlY2tzIiwKLSAgICAgICIuLi8uLi9ydGNfYmFzZTpydGNf
YmFzZSIsCi0gICAgICAiLi4vLi4vcnRjX2Jhc2Uvc3lzdGVtOmlubGluZSIsCi0gICAgICAiLi4v
Li4vc3lzdGVtX3dyYXBwZXJzIiwKLSAgICAgICIuLi8uLi9zeXN0ZW1fd3JhcHBlcnM6ZmllbGRf
dHJpYWwiLAotICAgICAgIi4uLy4uL3Rlc3Q6ZmllbGRfdHJpYWwiLAotICAgICAgIi4uLy4uL3Rl
c3Q6ZmlsZXV0aWxzIiwKLSAgICAgICIuLi8uLi90ZXN0OnRlc3Rfc3VwcG9ydCIsCi0gICAgICAi
Li4vLi4vdGVzdGluZy9ndGVzdCIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9hYnNlaWwtY3BwL2Fi
c2wvbWVtb3J5IiwKLSAgICBdCi0gIH0KLQotICBydGNfYW5kcm9pZF9saWJyYXJ5KCJuYXRpdmVf
dW5pdHRlc3RzX2phdmEiKSB7Ci0gICAgdGVzdG9ubHkgPSB0cnVlCi0KLSAgICBzb3VyY2VzID0g
WwotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9BcHBsaWNhdGlvbkNvbnRleHRQ
cm92aWRlci5qYXZhIiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMvQnVpbGRJ
bmZvLmphdmEiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9Db2RlY3NXcmFw
cGVyVGVzdEhlbHBlci5qYXZhIiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMv
RmFrZVZpZGVvRW5jb2Rlci5qYXZhIiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJy
dGMvSmF2YVR5cGVzVGVzdEhlbHBlci5qYXZhIiwKLSAgICAgICJuYXRpdmVfdW5pdHRlc3RzL29y
Zy93ZWJydGMvSmF2YVZpZGVvU291cmNlVGVzdEhlbHBlci5qYXZhIiwKLSAgICAgICJuYXRpdmVf
dW5pdHRlc3RzL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5SW5pdGlhbGl6YXRpb25I
ZWxwZXIuamF2YSIsCi0gICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6YmFzZV9qYXZhIiwK
LSAgICAgICI6amF2YV9hdWRpb19kZXZpY2VfbW9kdWxlX2phdmEiLAotICAgICAgIjpwZWVyY29u
bmVjdGlvbl9qYXZhIiwKLSAgICAgICI6dmlkZW9fYXBpX2phdmEiLAotICAgICAgIjp2aWRlb19q
YXZhIiwKLSAgICAgICIuLi8uLi9ydGNfYmFzZTpiYXNlX2phdmEiLAotICAgICAgIi8vdGhpcmRf
cGFydHkvYW5kcm9pZF9zdXBwb3J0X3Rlc3RfcnVubmVyOnJ1bm5lcl9qYXZhIiwKLSAgICBdCi0g
IH0KLQotICBnZW5lcmF0ZV9qbmkoImdlbmVyYXRlZF9uYXRpdmVfdW5pdHRlc3RzX2puaSIpIHsK
LSAgICB0ZXN0b25seSA9IHRydWUKLQotICAgIHNvdXJjZXMgPSBbCi0gICAgICAibmF0aXZlX3Vu
aXR0ZXN0cy9vcmcvd2VicnRjL0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyLmphdmEiLAotICAg
ICAgIm5hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9CdWlsZEluZm8uamF2YSIsCi0gICAgICAi
bmF0aXZlX3VuaXR0ZXN0cy9vcmcvd2VicnRjL0NvZGVjc1dyYXBwZXJUZXN0SGVscGVyLmphdmEi
LAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9KYXZhVHlwZXNUZXN0SGVscGVy
LmphdmEiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9KYXZhVmlkZW9Tb3Vy
Y2VUZXN0SGVscGVyLmphdmEiLAotICAgICAgIm5hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9Q
ZWVyQ29ubmVjdGlvbkZhY3RvcnlJbml0aWFsaXphdGlvbkhlbHBlci5qYXZhIiwKLSAgICBdCi0g
ICAgbmFtZXNwYWNlID0gIndlYnJ0Yzo6am5pIgotICAgIGpuaV9nZW5lcmF0b3JfaW5jbHVkZSA9
ICIvL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIuaCIKLSAgfQotCi0g
IGp1bml0X2JpbmFyeSgiYW5kcm9pZF9zZGtfanVuaXRfdGVzdHMiKSB7Ci0gICAgc291cmNlcyA9
IFsKLSAgICAgICJ0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9BbmRyb2lkVmlkZW9EZWNvZGVyVGVzdC5q
YXZhIiwKLSAgICAgICJ0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlvblRlc3Qu
amF2YSIsCi0gICAgICAidGVzdHMvc3JjL29yZy93ZWJydGMvQ29kZWNUZXN0SGVscGVyLmphdmEi
LAotICAgICAgInRlc3RzL3NyYy9vcmcvd2VicnRjL0NyeXB0b09wdGlvbnNUZXN0LmphdmEiLAot
ICAgICAgInRlc3RzL3NyYy9vcmcvd2VicnRjL0Zha2VNZWRpYUNvZGVjV3JhcHBlci5qYXZhIiwK
LSAgICAgICJ0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9HbEdlbmVyaWNEcmF3ZXJUZXN0LmphdmEiLAot
ICAgICAgInRlc3RzL3NyYy9vcmcvd2VicnRjL0hhcmR3YXJlVmlkZW9FbmNvZGVyVGVzdC5qYXZh
IiwKLSAgICAgICJ0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGVUZXN0LmphdmEiLAot
ICAgICAgInRlc3RzL3NyYy9vcmcvd2VicnRjL1JlZkNvdW50RGVsZWdhdGVUZXN0LmphdmEiLAot
ICAgICAgInRlc3RzL3NyYy9vcmcvd2VicnRjL1NjYWxpbmdTZXR0aW5nc1Rlc3QuamF2YSIsCi0g
ICAgXQotCi0gICAgZGVwcyA9IFsKLSAgICAgICI6bGliamluZ2xlX3BlZXJjb25uZWN0aW9uX2ph
dmEiLAotICAgICAgIi8vYmFzZTpiYXNlX2phdmFfdGVzdF9zdXBwb3J0IiwKLSAgICAgICIvL3Ro
aXJkX3BhcnR5L2dvb2dsZS10cnV0aDpnb29nbGVfdHJ1dGhfamF2YSIsCi0gICAgXQotCi0gICAg
YWRkaXRpb25hbF9qYXJfZmlsZXMgPSBbIFsKLSAgICAgICAgICAidGVzdHMvcmVzb3VyY2VzL3Jv
Ym9sZWN0cmljLnByb3BlcnRpZXMiLAotICAgICAgICAgICJyb2JvbGVjdHJpYy5wcm9wZXJ0aWVz
IiwKLSAgICAgICAgXSBdCi0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL09XTkVSUyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL09XTkVSUwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkM2E4MjM0OGFlMGYzN2EyYjFmNGQ1OWYxNGI3NzkxYTY1
ZjhmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9PV05FUlMK
KysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW1hZ2plZEB3ZWJydGMub3JnCi1zYWthbEB3
ZWJydGMub3JnCi1wZXItZmlsZSAqQXVkaW8qLmphdmE9aGVucmlrYUB3ZWJydGMub3JnCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9QUkVTVUJNSVQucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9QUkVTVUJNSVQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJjMGNiY2I4YzgxZGY1NDU3OWE5Y2Y2ZGExN2I3NzQ4YzM3Zjc2NTAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvUFJFU1VCTUlULnB5CisrKyAvZGV2L251
bGwKQEAgLTEsMjggKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSMgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0jIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSMgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotIyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLQotZGVmIENoZWNrQ2hhbmdlT25VcGxvYWQoaW5wdXRfYXBp
LCBvdXRwdXRfYXBpKToKLSAgcmVzdWx0cyA9IFtdCi0gIHJlc3VsdHMuZXh0ZW5kKENoZWNrUGF0
Y2hGb3JtYXR0ZWQoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKSkKLSAgcmV0dXJuIHJlc3VsdHMKLQot
ZGVmIENoZWNrUGF0Y2hGb3JtYXR0ZWQoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKToKLSAgaW1wb3J0
IGdpdF9jbAotICBjbWQgPSBbJ2NsJywgJ2Zvcm1hdCcsICctLWRyeS1ydW4nLCBpbnB1dF9hcGku
UHJlc3VibWl0TG9jYWxQYXRoKCldCi0gIGNvZGUsIF8gPSBnaXRfY2wuUnVuR2l0V2l0aENvZGUo
Y21kLCBzdXBwcmVzc19zdGRlcnI9VHJ1ZSkKLSAgaWYgY29kZSA9PSAyOgotICAgIHNob3J0X3Bh
dGggPSBpbnB1dF9hcGkuYmFzZW5hbWUoaW5wdXRfYXBpLlByZXN1Ym1pdExvY2FsUGF0aCgpKQot
ICAgIGZ1bGxfcGF0aCA9IGlucHV0X2FwaS5vc19wYXRoLnJlbHBhdGgoaW5wdXRfYXBpLlByZXN1
Ym1pdExvY2FsUGF0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRfYXBpLmNoYW5nZS5SZXBvc2l0b3J5Um9vdCgpKQotICAgIHJldHVybiBbb3V0cHV0
X2FwaS5QcmVzdWJtaXRQcm9tcHRXYXJuaW5nKAotICAgICAgJ1RoZSAlcyBkaXJlY3RvcnkgcmVx
dWlyZXMgc291cmNlIGZvcm1hdHRpbmcuICcKLSAgICAgICdQbGVhc2UgcnVuIGdpdCBjbCBmb3Jt
YXQgJXMnICUKLSAgICAgIChzaG9ydF9wYXRoLCBmdWxsX3BhdGgpKV0KLSAgIyBBcyB0aGlzIGlz
IGp1c3QgYSB3YXJuaW5nLCBpZ25vcmUgYWxsIG90aGVyIGVycm9ycyBpZiB0aGUgdXNlcgotICAj
IGhhcHBlbnMgdG8gaGF2ZSBhIGJyb2tlbiBjbGFuZy1mb3JtYXQsIGRvZXNuJ3QgdXNlIGdpdCwg
ZXRjIGV0Yy4KLSAgcmV0dXJuIFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9SRUFETUUgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9SRUFETUUKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUzYmRjOWVkYzU4OWNjOTliOTk5YjE3NTM4M2MwNjc3NGFiMDZl
OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvUkVBRE1FCisr
KyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgaG9sZHMgYSBKYXZh
IGltcGxlbWVudGF0aW9uIG9mIHRoZSB3ZWJydGM6OlBlZXJDb25uZWN0aW9uIEFQSSwgYXMKLXdl
bGwgYXMgdGhlIEpOSSBnbHVlIEMrKyBjb2RlIHRoYXQgbGV0cyB0aGUgSmF2YSBpbXBsZW1lbnRh
dGlvbiByZXVzZSB0aGUgQysrCi1pbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2FtZSBBUEkuCi0KLVRv
IGJ1aWxkIHRoZSBKYXZhIEFQSSBhbmQgcmVsYXRlZCB0ZXN0cywgbWFrZSBzdXJlIHlvdSBoYXZl
IGEgV2ViUlRDIGNoZWNrb3V0Ci13aXRoIEFuZHJvaWQgc3BlY2lmaWMgcGFydHMuIFRoaXMgY2Fu
IGJlIHVzZWQgZm9yIGxpbnV4IGRldmVsb3BtZW50IGFzIHdlbGwgYnkKLWNvbmZpZ3VyaW5nIGdu
IGFwcHJvcHJpYXRlbHksIGFzIGl0IGlzIGEgc3VwZXJzZXQgb2YgdGhlIHdlYnJ0YyBjaGVja291
dDoKLWZldGNoIC0tbm9ob29rcyB3ZWJydGNfYW5kcm9pZAotZ2NsaWVudCBzeW5jCi0KLVlvdSBh
bHNvIG11c3QgZ2VuZXJhdGUgR04gcHJvamVjdHMgd2l0aDoKLS0tYXJncz0ndGFyZ2V0X29zPSJh
bmRyb2lkIiB0YXJnZXRfY3B1PSJhcm0iJwotCi1Nb3JlIGluZm9ybWF0aW9uIG9uIGdldHRpbmcg
dGhlIGNvZGUsIGNvbXBpbGluZyBhbmQgcnVubmluZyB0aGUgQXBwUlRDTW9iaWxlCi1hcHAgY2Fu
IGJlIGZvdW5kIGF0OgotaHR0cHM6Ly93ZWJydGMub3JnL25hdGl2ZS1jb2RlL2FuZHJvaWQvCi0K
LVRvIHVzZSB0aGUgSmF2YSBBUEksIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIHB1YmxpYyBpbnRl
cmZhY2Ugb2YKLW9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb257LEZhY3Rvcnl9IGFuZCB0aGUgb3Jn
LndlYnJ0Yy5QZWVyQ29ubmVjdGlvblRlc3QuCi0KLVRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIHRoZSBBUEksIHNlZSB0aGUgbmF0aXZlIGNvZGUgaW4gc3JjL2puaS9wYy8uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9BdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeS5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvQXVkaW9EZWNvZGVyRmFjdG9yeUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZGQzZTI2Mjg5NmNhYjg0NDQxZTRhN2QyYjdmODM4ZmI1OWMzYWI4
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dl
YnJ0Yy9BdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
MjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0v
KioKLSAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGludGVyZmFjZSBjYW4gY3JlYXRlIGEgbmF0
aXZlIHtAY29kZSB3ZWJydGM6OkF1ZGlvRGVjb2RlckZhY3Rvcnl9LgotICovCi1wdWJsaWMgaW50
ZXJmYWNlIEF1ZGlvRGVjb2RlckZhY3RvcnlGYWN0b3J5IHsKLSAgLyoqCi0gICAqIFJldHVybnMg
YSBwb2ludGVyIHRvIGEge0Bjb2RlIHdlYnJ0Yzo6QXVkaW9EZWNvZGVyRmFjdG9yeX0uIFRoZSBj
YWxsZXIgdGFrZXMgb3duZXJzaGlwLgotICAgKi8KLSAgbG9uZyBjcmVhdGVOYXRpdmVBdWRpb0Rl
Y29kZXJGYWN0b3J5KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9BdWRpb0VuY29kZXJG
YWN0b3J5RmFjdG9yeS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQXVkaW9FbmNvZGVyRmFjdG9yeUZhY3Rv
cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0YjcxYWJhMWYwNjBkNjZl
ZTBjM2EzMDRmODRjNDNlYjM5ZTY1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9BdWRpb0VuY29kZXJGYWN0b3J5RmFjdG9yeS5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGludGVy
ZmFjZSBjYW4gY3JlYXRlIGEgbmF0aXZlIHtAY29kZSB3ZWJydGM6OkF1ZGlvRW5jb2RlckZhY3Rv
cnl9LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5IHsK
LSAgLyoqCi0gICAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEge0Bjb2RlIHdlYnJ0Yzo6QXVkaW9F
bmNvZGVyRmFjdG9yeX0uIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwLgotICAgKi8KLSAgbG9u
ZyBjcmVhdGVOYXRpdmVBdWRpb0VuY29kZXJGYWN0b3J5KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9BdWRpb1Byb2Nlc3NpbmdGYWN0b3J5LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9BdWRpb1By
b2Nlc3NpbmdGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkOGZk
Yjg5ODljZjU0OWZkYTBjZTFhNmQ5MGZlN2E4OGRlOGVjMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQXVkaW9Qcm9jZXNzaW5nRmFj
dG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogRmFjdG9yeSBmb3IgY3JlYXRpbmcgd2Vi
cnRjOjpBdWRpb1Byb2Nlc3NpbmcgaW5zdGFuY2VzLiAqLwotcHVibGljIGludGVyZmFjZSBBdWRp
b1Byb2Nlc3NpbmdGYWN0b3J5IHsKLSAgLyoqCi0gICAqIER5bmFtaWNhbGx5IGFsbG9jYXRlcyBh
IHdlYnJ0Yzo6QXVkaW9Qcm9jZXNzaW5nIGluc3RhbmNlIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0
byBpdC4KLSAgICogVGhlIGNhbGxlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG9iamVjdC4KLSAg
ICovCi0gIHB1YmxpYyBsb25nIGNyZWF0ZU5hdGl2ZSgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93
ZWJydGMvQXVkaW9Tb3VyY2UuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0F1ZGlvU291cmNlLmphdmEKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MTA0ZTU5MDRkMGQ0YjVmYTdmY2FjNTdhMjQ3
Y2JmMDM5M2E2OWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvQXVkaW9Tb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0g
KiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIEF1ZGlvU291cmNlSW50ZXJmYWNlLiAgVXNlZCBhcyB0
aGUgc291cmNlIGZvciBvbmUgb3IKLSAqIG1vcmUge0Bjb2RlIEF1ZGlvVHJhY2t9IG9iamVjdHMu
Ci0gKi8KLXB1YmxpYyBjbGFzcyBBdWRpb1NvdXJjZSBleHRlbmRzIE1lZGlhU291cmNlIHsKLSAg
cHVibGljIEF1ZGlvU291cmNlKGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAgc3VwZXIobmF0aXZl
U291cmNlKTsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIGEgcG9pbnRlciB0byB3ZWJydGM6OkF1ZGlv
U291cmNlSW50ZXJmYWNlLiAqLwotICBsb25nIGdldE5hdGl2ZUF1ZGlvU291cmNlKCkgewotICAg
IHJldHVybiBnZXROYXRpdmVNZWRpYVNvdXJjZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNzQ1ZGI2MzQ2N2UwNzMyOGVlZmViZDNkOWM3
MWI0ZGRhZDExMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvQXVkaW9UcmFjay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2
YSB3cmFwcGVyIGZvciBhIEMrKyBBdWRpb1RyYWNrSW50ZXJmYWNlICovCi1wdWJsaWMgY2xhc3Mg
QXVkaW9UcmFjayBleHRlbmRzIE1lZGlhU3RyZWFtVHJhY2sgewotICBwdWJsaWMgQXVkaW9UcmFj
ayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgc3VwZXIobmF0aXZlVHJhY2spOwotICB9Ci0KLSAg
LyoqIFNldHMgdGhlIHZvbHVtZSBmb3IgdGhlIHVuZGVybHlpbmcgTWVkaWFTb3VyY2UuIFZvbHVt
ZSBpcyBhIGdhaW4gdmFsdWUgaW4gdGhlIHJhbmdlCi0gICAqICAwIHRvIDEwLgotICAgKi8KLSAg
cHVibGljIHZvaWQgc2V0Vm9sdW1lKGRvdWJsZSB2b2x1bWUpIHsKLSAgICBuYXRpdmVTZXRWb2x1
bWUoZ2V0TmF0aXZlQXVkaW9UcmFjaygpLCB2b2x1bWUpOwotICB9Ci0KLSAgLyoqIFJldHVybnMg
YSBwb2ludGVyIHRvIHdlYnJ0Yzo6QXVkaW9UcmFja0ludGVyZmFjZS4gKi8KLSAgbG9uZyBnZXRO
YXRpdmVBdWRpb1RyYWNrKCkgewotICAgIHJldHVybiBnZXROYXRpdmVNZWRpYVN0cmVhbVRyYWNr
KCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTZXRWb2x1bWUo
bG9uZyB0cmFjaywgZG91YmxlIHZvbHVtZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9C
dWlsdGluQXVkaW9EZWNvZGVyRmFjdG9yeUZhY3RvcnkuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0J1aWx0
aW5BdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1ZWJjMTlmMjVkY2VlYTNiZmE0ZWZhODgxMTU4NTA0NDU5ZWJlZjJlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0J1aWx0
aW5BdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioK
LSAqIENyZWF0ZXMgYSBuYXRpdmUge0Bjb2RlIHdlYnJ0Yzo6QXVkaW9EZWNvZGVyRmFjdG9yeX0g
d2l0aCB0aGUgYnVpbHRpbiBhdWRpbyBkZWNvZGVycy4KLSAqLwotcHVibGljIGNsYXNzIEJ1aWx0
aW5BdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeSBpbXBsZW1lbnRzIEF1ZGlvRGVjb2RlckZhY3Rv
cnlGYWN0b3J5IHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBsb25nIGNyZWF0ZU5hdGl2ZUF1ZGlv
RGVjb2RlckZhY3RvcnkoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZUJ1aWx0aW5BdWRpb0Rl
Y29kZXJGYWN0b3J5KCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRp
dmVDcmVhdGVCdWlsdGluQXVkaW9EZWNvZGVyRmFjdG9yeSgpOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvQnVpbHRpbkF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5LmphdmEgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dl
YnJ0Yy9CdWlsdGluQXVkaW9FbmNvZGVyRmFjdG9yeUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTg4NGQ0YzNiOThkNmNkN2QzYzJiYjVkNWE0YTAxYjkzYjMwYzJl
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dl
YnJ0Yy9CdWlsdGluQXVkaW9FbmNvZGVyRmFjdG9yeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNyZWF0ZXMgYSBuYXRpdmUge0Bjb2RlIHdlYnJ0Yzo6
QXVkaW9FbmNvZGVyRmFjdG9yeX0gd2l0aCB0aGUgYnVpbHRpbiBhdWRpbyBlbmNvZGVycy4KLSAq
LwotcHVibGljIGNsYXNzIEJ1aWx0aW5BdWRpb0VuY29kZXJGYWN0b3J5RmFjdG9yeSBpbXBsZW1l
bnRzIEF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5IHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBs
b25nIGNyZWF0ZU5hdGl2ZUF1ZGlvRW5jb2RlckZhY3RvcnkoKSB7Ci0gICAgcmV0dXJuIG5hdGl2
ZUNyZWF0ZUJ1aWx0aW5BdWRpb0VuY29kZXJGYWN0b3J5KCk7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVCdWlsdGluQXVkaW9FbmNvZGVyRmFjdG9yeSgp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dT
aW5rLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlZGI1ODg0NzE0NGFmZDgyMWNmMjNk
OTkyN2Y4ZmM0YzNmMDhjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsuamF2YQor
KysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotcHVibGljIGNsYXNzIENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9n
U2luayB7Ci0gIHByaXZhdGUgbG9uZyBuYXRpdmVTaW5rOwotCi0gIHB1YmxpYyBzdGF0aWMgYnl0
ZVtdIGdldExvZ0RhdGEoU3RyaW5nIGRpclBhdGgpIHsKLSAgICBpZiAoZGlyUGF0aCA9PSBudWxs
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkaXJQYXRoIG1h
eSBub3QgYmUgbnVsbC4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hdGl2ZUdldExvZ0RhdGEoZGly
UGF0aCk7Ci0gIH0KLQotICBwdWJsaWMgQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rKAot
ICAgICAgU3RyaW5nIGRpclBhdGgsIGludCBtYXhGaWxlU2l6ZSwgTG9nZ2luZy5TZXZlcml0eSBz
ZXZlcml0eSkgewotICAgIGlmIChkaXJQYXRoID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRpclBhdGggbWF5IG5vdCBiZSBudWxsLiIpOwotICAg
IH0KLSAgICBuYXRpdmVTaW5rID0gbmF0aXZlQWRkU2luayhkaXJQYXRoLCBtYXhGaWxlU2l6ZSwg
c2V2ZXJpdHkub3JkaW5hbCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0g
ICAgaWYgKG5hdGl2ZVNpbmsgIT0gMCkgewotICAgICAgbmF0aXZlRGVsZXRlU2luayhuYXRpdmVT
aW5rKTsKLSAgICAgIG5hdGl2ZVNpbmsgPSAwOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSBsb25nIG5hdGl2ZUFkZFNpbmsoU3RyaW5nIGRpclBhdGgsIGludCBtYXhGaWxl
U2l6ZSwgaW50IHNldmVyaXR5KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZl
RGVsZXRlU2luayhsb25nIHNpbmspOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYnl0ZVtdIG5h
dGl2ZUdldExvZ0RhdGEoU3RyaW5nIGRpclBhdGgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJy
dGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXIuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQyN2M2MDdmNzE2YTE3YTBmMjBhZjM2
ODcyODlhZjUzYjkwMzNhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXIuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDM0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgQ2FtZXJh
MUNhcHR1cmVyIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZXIgewotICBwcml2YXRlIGZpbmFsIGJvb2xl
YW4gY2FwdHVyZVRvVGV4dHVyZTsKLQotICBwdWJsaWMgQ2FtZXJhMUNhcHR1cmVyKAotICAgICAg
U3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlciwgYm9v
bGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgc3VwZXIoY2FtZXJhTmFtZSwgZXZlbnRzSGFu
ZGxlciwgbmV3IENhbWVyYTFFbnVtZXJhdG9yKGNhcHR1cmVUb1RleHR1cmUpKTsKLQotICAgIHRo
aXMuY2FwdHVyZVRvVGV4dHVyZSA9IGNhcHR1cmVUb1RleHR1cmU7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2FtZXJhU2Vzc2lvbihDYW1lcmFTZXNzaW9uLkNy
ZWF0ZVNlc3Npb25DYWxsYmFjayBjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssCi0gICAgICBDYW1lcmFT
ZXNzaW9uLkV2ZW50cyBldmVudHMsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAg
U3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0cmluZyBjYW1lcmFO
YW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICBpbnQgZnJhbWVyYXRlKSB7Ci0gICAg
Q2FtZXJhMVNlc3Npb24uY3JlYXRlKGNyZWF0ZVNlc3Npb25DYWxsYmFjaywgZXZlbnRzLCBjYXB0
dXJlVG9UZXh0dXJlLCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLCBDYW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChjYW1lcmFOYW1lKSwgd2lk
dGgsIGhlaWdodCwKLSAgICAgICAgZnJhbWVyYXRlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvQ2FtZXJhMUVudW1lcmF0b3IuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0NhbWVyYTFFbnVt
ZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNjQzNWViYzQ0OTJi
MWNkNGI0Y2NkNzc2ZmQzZGE2YjEyNDUyZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQ2FtZXJhMUVudW1lcmF0b3IuamF2YQorKysg
L2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFu
ZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFF
bnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLQotQFN1cHByZXNzV2FybmluZ3MoImRl
cHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBDYW1lcmExRW51bWVyYXRvciBpbXBsZW1lbnRzIENh
bWVyYUVudW1lcmF0b3IgewotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNh
bWVyYTFFbnVtZXJhdG9yIjsKLSAgLy8gRWFjaCBlbnRyeSBjb250YWlucyB0aGUgc3VwcG9ydGVk
IGZvcm1hdHMgZm9yIGNvcnJlc3BvbmRpbmcgY2FtZXJhIGluZGV4LiBUaGUgZm9ybWF0cyBmb3Ig
YWxsCi0gIC8vIGNhbWVyYXMgYXJlIGVudW1lcmF0ZWQgb24gdGhlIGZpcnN0IGNhbGwgdG8gZ2V0
U3VwcG9ydGVkRm9ybWF0cygpLCBhbmQgY2FjaGVkIGZvciBmdXR1cmUKLSAgLy8gcmVmZXJlbmNl
LgotICBwcml2YXRlIHN0YXRpYyBMaXN0PExpc3Q8Q2FwdHVyZUZvcm1hdD4+IGNhY2hlZFN1cHBv
cnRlZEZvcm1hdHM7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmU7
Ci0KLSAgcHVibGljIENhbWVyYTFFbnVtZXJhdG9yKCkgewotICAgIHRoaXModHJ1ZSAvKiBjYXB0
dXJlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIHB1YmxpYyBDYW1lcmExRW51bWVyYXRvcihib29s
ZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICB0aGlzLmNhcHR1cmVUb1RleHR1cmUgPSBjYXB0
dXJlVG9UZXh0dXJlOwotICB9Ci0KLSAgLy8gUmV0dXJucyBkZXZpY2UgbmFtZXMgdGhhdCBjYW4g
YmUgdXNlZCB0byBjcmVhdGUgYSBuZXcgVmlkZW9DYXB0dXJlckFuZHJvaWQuCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2aWNlTmFtZXMoKSB7Ci0gICAgQXJyYXlMaXN0PFN0
cmluZz4gbmFtZXNMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7
Ci0gICAgICBTdHJpbmcgbmFtZSA9IGdldERldmljZU5hbWUoaSk7Ci0gICAgICBpZiAobmFtZSAh
PSBudWxsKSB7Ci0gICAgICAgIG5hbWVzTGlzdC5hZGQobmFtZSk7Ci0gICAgICAgIExvZ2dpbmcu
ZChUQUcsICJJbmRleDogIiArIGkgKyAiLiAiICsgbmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBMb2dnaW5nLmUoVEFHLCAiSW5kZXg6ICIgKyBpICsgIi4gRmFpbGVkIHRvIHF1ZXJ5IGNh
bWVyYSBuYW1lLiIpOwotICAgICAgfQotICAgIH0KLSAgICBTdHJpbmdbXSBuYW1lc0FycmF5ID0g
bmV3IFN0cmluZ1tuYW1lc0xpc3Quc2l6ZSgpXTsKLSAgICByZXR1cm4gbmFtZXNMaXN0LnRvQXJy
YXkobmFtZXNBcnJheSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNG
cm9udEZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdldENhbWVyYUluZm8oZ2V0Q2FtZXJhSW5kZXgoZGV2aWNl
TmFtZSkpOwotICAgIHJldHVybiBpbmZvICE9IG51bGwgJiYgaW5mby5mYWNpbmcgPT0gYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZST05UOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzQmFja0ZhY2luZyhTdHJpbmcgZGV2aWNl
TmFtZSkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdl
dENhbWVyYUluZm8oZ2V0Q2FtZXJhSW5kZXgoZGV2aWNlTmFtZSkpOwotICAgIHJldHVybiBpbmZv
ICE9IG51bGwgJiYgaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJh
SW5mby5DQU1FUkFfRkFDSU5HX0JBQ0s7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIExp
c3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhTdHJpbmcgZGV2aWNlTmFtZSkg
ewotICAgIHJldHVybiBnZXRTdXBwb3J0ZWRGb3JtYXRzKGdldENhbWVyYUluZGV4KGRldmljZU5h
bWUpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBj
cmVhdGVDYXB0dXJlcigKLSAgICAgIFN0cmluZyBkZXZpY2VOYW1lLCBDYW1lcmFWaWRlb0NhcHR1
cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgIHJldHVybiBuZXcg
Q2FtZXJhMUNhcHR1cmVyKGRldmljZU5hbWUsIGV2ZW50c0hhbmRsZXIsIGNhcHR1cmVUb1RleHR1
cmUpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQE51bGxhYmxlIGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLkNhbWVyYUluZm8gZ2V0Q2FtZXJhSW5mbyhpbnQgaW5kZXgpIHsKLSAgICBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBuZXcgYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuQ2FtZXJhSW5mbygpOwotICAgIHRyeSB7Ci0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5nZXRDYW1lcmFJbmZvKGluZGV4LCBpbmZvKTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24g
ZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImdldENhbWVyYUluZm8gZmFpbGVkIG9uIGluZGV4
ICIgKyBpbmRleCwgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIGlu
Zm87Ci0gIH0KLQotICBzdGF0aWMgc3luY2hyb25pemVkIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0
U3VwcG9ydGVkRm9ybWF0cyhpbnQgY2FtZXJhSWQpIHsKLSAgICBpZiAoY2FjaGVkU3VwcG9ydGVk
Rm9ybWF0cyA9PSBudWxsKSB7Ci0gICAgICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzID0gbmV3IEFy
cmF5TGlzdDxMaXN0PENhcHR1cmVGb3JtYXQ+PigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0g
ICAgICAgIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuYWRkKGVudW1lcmF0ZUZvcm1hdHMoaSkpOwot
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5nZXQoY2Ft
ZXJhSWQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBlbnVt
ZXJhdGVGb3JtYXRzKGludCBjYW1lcmFJZCkgewotICAgIExvZ2dpbmcuZChUQUcsICJHZXQgc3Vw
cG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQgKyAiLiIpOwotICAg
IGZpbmFsIGxvbmcgc3RhcnRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsK
LSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
Ci0gICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhID0gbnVsbDsKLSAgICB0cnkgewot
ICAgICAgTG9nZ2luZy5kKFRBRywgIk9wZW5pbmcgY2FtZXJhIHdpdGggaW5kZXggIiArIGNhbWVy
YUlkKTsKLSAgICAgIGNhbWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oY2FtZXJh
SWQpOwotICAgICAgcGFyYW1ldGVycyA9IGNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgfSBj
YXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiT3BlbiBj
YW1lcmEgZmFpbGVkIG9uIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQsIGUpOwotICAgICAgcmV0
dXJuIG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsKLSAgICB9IGZpbmFsbHkgewotICAg
ICAgaWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRMaXN0ID0g
bmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0PigpOwotICAgIHRyeSB7Ci0gICAgICBpbnQgbWlu
RnBzID0gMDsKLSAgICAgIGludCBtYXhGcHMgPSAwOwotICAgICAgZmluYWwgTGlzdDxpbnRbXT4g
bGlzdEZwc1JhbmdlID0gcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKTsK
LSAgICAgIGlmIChsaXN0RnBzUmFuZ2UgIT0gbnVsbCkgewotICAgICAgICAvLyBnZXRTdXBwb3J0
ZWRQcmV2aWV3RnBzUmFuZ2UoKSByZXR1cm5zIGEgc29ydGVkIGxpc3QuIFRha2UgdGhlIGZwcyBy
YW5nZQotICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBoaWdoZXN0IGZwcy4KLSAgICAg
ICAgZmluYWwgaW50W10gcmFuZ2UgPSBsaXN0RnBzUmFuZ2UuZ2V0KGxpc3RGcHNSYW5nZS5zaXpl
KCkgLSAxKTsKLSAgICAgICAgbWluRnBzID0gcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
UGFyYW1ldGVycy5QUkVWSUVXX0ZQU19NSU5fSU5ERVhdOwotICAgICAgICBtYXhGcHMgPSByYW5n
ZVthbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJRVdfRlBTX01BWF9JTkRF
WF07Ci0gICAgICB9Ci0gICAgICBmb3IgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemUgc2l6
ZSA6IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld1NpemVzKCkpIHsKLSAgICAgICAgZm9y
bWF0TGlzdC5hZGQobmV3IENhcHR1cmVGb3JtYXQoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIG1p
bkZwcywgbWF4RnBzKSk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAg
ICAgIExvZ2dpbmcuZShUQUcsICJnZXRTdXBwb3J0ZWRGb3JtYXRzKCkgZmFpbGVkIG9uIGNhbWVy
YSBpbmRleCAiICsgY2FtZXJhSWQsIGUpOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgZW5kVGlt
ZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IkdldCBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIg
ZG9uZS4iCi0gICAgICAgICAgICArICIgVGltZSBzcGVudDogIiArIChlbmRUaW1lTXMgLSBzdGFy
dFRpbWVNcykgKyAiIG1zLiIpOwotICAgIHJldHVybiBmb3JtYXRMaXN0OwotICB9Ci0KLSAgLy8g
Q29udmVydCBmcm9tIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemUgdG8gU2l6ZS4KLSAgc3Rh
dGljIExpc3Q8U2l6ZT4gY29udmVydFNpemVzKExpc3Q8YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
U2l6ZT4gY2FtZXJhU2l6ZXMpIHsKLSAgICBmaW5hbCBMaXN0PFNpemU+IHNpemVzID0gbmV3IEFy
cmF5TGlzdDxTaXplPigpOwotICAgIGZvciAoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuU2l6ZSBz
aXplIDogY2FtZXJhU2l6ZXMpIHsKLSAgICAgIHNpemVzLmFkZChuZXcgU2l6ZShzaXplLndpZHRo
LCBzaXplLmhlaWdodCkpOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZXM7Ci0gIH0KLQotICAvLyBD
b252ZXJ0IGZyb20gaW50WzJdIHRvIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UuCi0gIHN0
YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IGNvbnZlcnRGcmFtZXJhdGVz
KExpc3Q8aW50W10+IGFycmF5UmFuZ2VzKSB7Ci0gICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0
LkZyYW1lcmF0ZVJhbmdlPiByYW5nZXMgPSBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQuRnJh
bWVyYXRlUmFuZ2U+KCk7Ci0gICAgZm9yIChpbnRbXSByYW5nZSA6IGFycmF5UmFuZ2VzKSB7Ci0g
ICAgICByYW5nZXMuYWRkKG5ldyBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlKAotICAgICAg
ICAgIHJhbmdlW2FuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMuUFJFVklFV19GUFNf
TUlOX0lOREVYXSwKLSAgICAgICAgICByYW5nZVthbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJh
bWV0ZXJzLlBSRVZJRVdfRlBTX01BWF9JTkRFWF0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJhbmdl
czsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIGNhbWVyYSBpbmRleCBmb3IgY2FtZXJhIHdpdGgg
bmFtZSB8ZGV2aWNlTmFtZXwsIG9yIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAg
Ly8gaWYgbm8gc3VjaCBjYW1lcmEgY2FuIGJlIGZvdW5kLgotICBzdGF0aWMgaW50IGdldENhbWVy
YUluZGV4KFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldENhbWVy
YUluZGV4OiAiICsgZGV2aWNlTmFtZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0gICAgICBpZiAo
ZGV2aWNlTmFtZS5lcXVhbHMoZ2V0RGV2aWNlTmFtZShpKSkpIHsKLSAgICAgICAgcmV0dXJuIGk7
Ci0gICAgICB9Ci0gICAgfQotICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
Ik5vIHN1Y2ggY2FtZXJhOiAiICsgZGV2aWNlTmFtZSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRo
ZSBuYW1lIG9mIHRoZSBjYW1lcmEgd2l0aCBjYW1lcmEgaW5kZXguIFJldHVybnMgbnVsbCBpZiB0
aGUKLSAgLy8gY2FtZXJhIGNhbiBub3QgYmUgdXNlZC4KLSAgc3RhdGljIEBOdWxsYWJsZSBTdHJp
bmcgZ2V0RGV2aWNlTmFtZShpbnQgaW5kZXgpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5DYW1lcmFJbmZvIGluZm8gPSBnZXRDYW1lcmFJbmZvKGluZGV4KTsKLSAgICBpZiAoaW5mbyA9
PSBudWxsKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZmFjaW5n
ID0KLSAgICAgICAgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVy
YUluZm8uQ0FNRVJBX0ZBQ0lOR19GUk9OVCkgPyAiZnJvbnQiIDogImJhY2siOwotICAgIHJldHVy
biAiQ2FtZXJhICIgKyBpbmRleCArICIsIEZhY2luZyAiICsgZmFjaW5nICsgIiwgT3JpZW50YXRp
b24gIiArIGluZm8ub3JpZW50YXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRj
L0NhbWVyYTJDYXB0dXJlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZjFlOTZiNmJkYzI3YjNiODc3Nzc5Yjk2
M2IxNjA3NjE4N2M1ZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAt
MSwzOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuY29u
dGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5h
Z2VyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotCi1AVGFy
Z2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENhbWVyYTJDYXB0dXJlciBleHRlbmRzIENhbWVyYUNh
cHR1cmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0gIEBOdWxsYWJsZSBw
cml2YXRlIGZpbmFsIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLQotICBwdWJsaWMgQ2Ft
ZXJhMkNhcHR1cmVyKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2
ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgIHN1cGVyKGNhbWVyYU5hbWUsIGV2ZW50
c0hhbmRsZXIsIG5ldyBDYW1lcmEyRW51bWVyYXRvcihjb250ZXh0KSk7Ci0KLSAgICB0aGlzLmNv
bnRleHQgPSBjb250ZXh0OwotICAgIGNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29u
dGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUNhbWVyYVNlc3Npb24oQ2FtZXJhU2Vz
c2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLAotICAgICAg
Q2FtZXJhU2Vzc2lvbi5FdmVudHMgZXZlbnRzLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwK
LSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBTdHJpbmcg
Y2FtZXJhTmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgaW50IGZyYW1lcmF0ZSkg
ewotICAgIENhbWVyYTJTZXNzaW9uLmNyZWF0ZShjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIGV2ZW50
cywgYXBwbGljYXRpb25Db250ZXh0LCBjYW1lcmFNYW5hZ2VyLAotICAgICAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlciwgY2FtZXJhTmFtZSwgd2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcv
d2VicnRjL0NhbWVyYTJFbnVtZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIzMmIzYWQzMDIzMzA3MmMyYzIxZmQ5MzM1Mjk3NDNkODIwZTg5YWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQ2FtZXJhMkVu
dW1lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRp
b24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFu
ZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0
dXJlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3M7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBv
cnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhOwotaW1wb3J0IGFuZHJv
aWQuaGFyZHdhcmUuY2FtZXJhMi5wYXJhbXMuU3RyZWFtQ29uZmlndXJhdGlvbk1hcDsKLWltcG9y
dCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBv
cnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51
dGlsLkFuZHJvaWRFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlJhbmdlOwotaW1wb3J0
IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQg
amF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBvcmcud2VicnRj
LkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotCi1AVGFyZ2V0QXBpKDIx
KQotcHVibGljIGNsYXNzIENhbWVyYTJFbnVtZXJhdG9yIGltcGxlbWVudHMgQ2FtZXJhRW51bWVy
YXRvciB7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiQ2FtZXJhMkVudW1l
cmF0b3IiOwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBkb3VibGUgTkFOT19TRUNPTkRTX1BFUl9T
RUNPTkQgPSAxLjBlOTsKLQotICAvLyBFYWNoIGVudHJ5IGNvbnRhaW5zIHRoZSBzdXBwb3J0ZWQg
Zm9ybWF0cyBmb3IgYSBnaXZlbiBjYW1lcmEgaW5kZXguIFRoZSBmb3JtYXRzIGFyZSBlbnVtZXJh
dGVkCi0gIC8vIGxhemlseSBpbiBnZXRTdXBwb3J0ZWRGb3JtYXRzKCksIGFuZCBjYWNoZWQgZm9y
IGZ1dHVyZSByZWZlcmVuY2UuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIExp
c3Q8Q2FwdHVyZUZvcm1hdD4+IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMgPQotICAgICAgbmV3IEhh
c2hNYXA8U3RyaW5nLCBMaXN0PENhcHR1cmVGb3JtYXQ+PigpOwotCi0gIGZpbmFsIENvbnRleHQg
Y29udGV4dDsKLSAgQE51bGxhYmxlIGZpbmFsIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsK
LQotICBwdWJsaWMgQ2FtZXJhMkVudW1lcmF0b3IoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgdGhp
cy5jb250ZXh0ID0gY29udGV4dDsKLSAgICB0aGlzLmNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFu
YWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZXZpY2VOYW1lcygpIHsK
LSAgICB0cnkgewotICAgICAgcmV0dXJuIGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhSWRMaXN0KCk7
Ci0gICAgICAvLyBPbiBBbmRyb2lkIE9TIHByZSA0LjQuMiwgYSBjbGFzcyB3aWxsIG5vdCBsb2Fk
IGJlY2F1c2Ugb2YgVmVyaWZ5RXJyb3IgaWYgaXQgY29udGFpbnMgYQotICAgICAgLy8gY2F0Y2gg
c3RhdGVtZW50IHdpdGggYW4gRXhjZXB0aW9uIGZyb20gYSBuZXdlciBBUEksIGV2ZW4gaWYgdGhl
IGNvZGUgaXMgbmV2ZXIgZXhlY3V0ZWQuCi0gICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNv
bS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0yMDkxMjkKLSAgICB9IGNhdGNoICgvKiBDYW1l
cmFBY2Nlc3NFeGNlcHRpb24gKi8gQW5kcm9pZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAiQ2FtZXJhIGFjY2VzcyBleGNlcHRpb246ICIgKyBlKTsKLSAgICAgIHJldHVybiBu
ZXcgU3RyaW5nW10ge307Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29s
ZWFuIGlzRnJvbnRGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzID0gZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGRldmlj
ZU5hbWUpOwotCi0gICAgcmV0dXJuIGNoYXJhY3RlcmlzdGljcyAhPSBudWxsCi0gICAgICAgICYm
IGNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFDSU5HKQot
ICAgICAgICA9PSBDYW1lcmFNZXRhZGF0YS5MRU5TX0ZBQ0lOR19GUk9OVDsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc0JhY2tGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUp
IHsKLSAgICBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzID0gZ2V0Q2FtZXJh
Q2hhcmFjdGVyaXN0aWNzKGRldmljZU5hbWUpOwotCi0gICAgcmV0dXJuIGNoYXJhY3RlcmlzdGlj
cyAhPSBudWxsCi0gICAgICAgICYmIGNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVy
aXN0aWNzLkxFTlNfRkFDSU5HKQotICAgICAgICA9PSBDYW1lcmFNZXRhZGF0YS5MRU5TX0ZBQ0lO
R19CQUNLOwotICB9Ci0KLSAgQE51bGxhYmxlCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTGlzdDxD
YXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0g
ICAgcmV0dXJuIGdldFN1cHBvcnRlZEZvcm1hdHMoY29udGV4dCwgZGV2aWNlTmFtZSk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FwdHVy
ZXIoCi0gICAgICBTdHJpbmcgZGV2aWNlTmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFF
dmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICByZXR1cm4gbmV3IENhbWVyYTJDYXB0
dXJlcihjb250ZXh0LCBkZXZpY2VOYW1lLCBldmVudHNIYW5kbGVyKTsKLSAgfQotCi0gIHByaXZh
dGUgQE51bGxhYmxlIENhbWVyYUNoYXJhY3RlcmlzdGljcyBnZXRDYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3MoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIGNhbWVyYU1h
bmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGRldmljZU5hbWUpOwotICAgICAgLy8gT24g
QW5kcm9pZCBPUyBwcmUgNC40LjIsIGEgY2xhc3Mgd2lsbCBub3QgbG9hZCBiZWNhdXNlIG9mIFZl
cmlmeUVycm9yIGlmIGl0IGNvbnRhaW5zIGEKLSAgICAgIC8vIGNhdGNoIHN0YXRlbWVudCB3aXRo
IGFuIEV4Y2VwdGlvbiBmcm9tIGEgbmV3ZXIgQVBJLCBldmVuIGlmIHRoZSBjb2RlIGlzIG5ldmVy
IGV4ZWN1dGVkLgotICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lz
c3Vlcy9kZXRhaWw/aWQ9MjA5MTI5Ci0gICAgfSBjYXRjaCAoLyogQ2FtZXJhQWNjZXNzRXhjZXB0
aW9uICovIEFuZHJvaWRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVy
YSBhY2Nlc3MgZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0g
IH0KLQotICAvKioKLSAgICogQ2hlY2tzIGlmIEFQSSBpcyBzdXBwb3J0ZWQgYW5kIGFsbCBjYW1l
cmFzIGhhdmUgYmV0dGVyIHRoYW4gbGVnYWN5IHN1cHBvcnQuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgaWYgKEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXIg
PSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJB
X1NFUlZJQ0UpOwotICAgIHRyeSB7Ci0gICAgICBTdHJpbmdbXSBjYW1lcmFJZHMgPSBjYW1lcmFN
YW5hZ2VyLmdldENhbWVyYUlkTGlzdCgpOwotICAgICAgZm9yIChTdHJpbmcgaWQgOiBjYW1lcmFJ
ZHMpIHsKLSAgICAgICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcyA9IGNh
bWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGlkKTsKLSAgICAgICAgaWYgKGNo
YXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hB
UkRXQVJFX0xFVkVMKQotICAgICAgICAgICAgPT0gQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9f
U1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0xFR0FDWSkgewotICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gT24gQW5kcm9pZCBPUyBwcmUgNC40LjIs
IGEgY2xhc3Mgd2lsbCBub3QgbG9hZCBiZWNhdXNlIG9mIFZlcmlmeUVycm9yIGlmIGl0IGNvbnRh
aW5zIGEKLSAgICAgIC8vIGNhdGNoIHN0YXRlbWVudCB3aXRoIGFuIEV4Y2VwdGlvbiBmcm9tIGEg
bmV3ZXIgQVBJLCBldmVuIGlmIHRoZSBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkLgotICAgICAgLy8g
aHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA5MTI5
Ci0gICAgfSBjYXRjaCAoLyogQ2FtZXJhQWNjZXNzRXhjZXB0aW9uICovIEFuZHJvaWRFeGNlcHRp
b24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBhY2Nlc3MgZXhjZXB0aW9uOiAi
ICsgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9
Ci0KLSAgc3RhdGljIGludCBnZXRGcHNVbml0RmFjdG9yKFJhbmdlPEludGVnZXI+W10gZnBzUmFu
Z2VzKSB7Ci0gICAgaWYgKGZwc1Jhbmdlcy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuIDEw
MDA7Ci0gICAgfQotICAgIHJldHVybiBmcHNSYW5nZXNbMF0uZ2V0VXBwZXIoKSA8IDEwMDAgPyAx
MDAwIDogMTsKLSAgfQotCi0gIHN0YXRpYyBMaXN0PFNpemU+IGdldFN1cHBvcnRlZFNpemVzKENh
bWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBmaW5hbCBT
dHJlYW1Db25maWd1cmF0aW9uTWFwIHN0cmVhbU1hcCA9Ci0gICAgICAgIGNhbWVyYUNoYXJhY3Rl
cmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9TVFJFQU1fQ09ORklHVVJB
VElPTl9NQVApOwotICAgIGZpbmFsIGludCBzdXBwb3J0TGV2ZWwgPQotICAgICAgICBjYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5JTkZPX1NVUFBPUlRFRF9I
QVJEV0FSRV9MRVZFTCk7Ci0KLSAgICBmaW5hbCBhbmRyb2lkLnV0aWwuU2l6ZVtdIG5hdGl2ZVNp
emVzID0gc3RyZWFtTWFwLmdldE91dHB1dFNpemVzKFN1cmZhY2VUZXh0dXJlLmNsYXNzKTsKLSAg
ICBmaW5hbCBMaXN0PFNpemU+IHNpemVzID0gY29udmVydFNpemVzKG5hdGl2ZVNpemVzKTsKLQot
ICAgIC8vIFZpZGVvIG1heSBiZSBzdHJldGNoZWQgcHJlIExNUjEgb24gbGVnYWN5IGltcGxlbWVu
dGF0aW9ucy4KLSAgICAvLyBGaWx0ZXIgb3V0IGZvcm1hdHMgdGhhdCBoYXZlIGRpZmZlcmVudCBh
c3BlY3QgcmF0aW8gdGhhbiB0aGUgc2Vuc29yIGFycmF5LgotICAgIGlmIChCdWlsZC5WRVJTSU9O
LlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QX01SMQotICAgICAgICAmJiBz
dXBwb3J0TGV2ZWwgPT0gQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hBUkRX
QVJFX0xFVkVMX0xFR0FDWSkgewotICAgICAgZmluYWwgUmVjdCBhY3RpdmVBcnJheVNpemUgPQot
ICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNz
LlNFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFKTsKLSAgICAgIGZpbmFsIEFycmF5TGlzdDxT
aXplPiBmaWx0ZXJlZFNpemVzID0gbmV3IEFycmF5TGlzdDxTaXplPigpOwotCi0gICAgICBmb3Ig
KFNpemUgc2l6ZSA6IHNpemVzKSB7Ci0gICAgICAgIGlmIChhY3RpdmVBcnJheVNpemUud2lkdGgo
KSAqIHNpemUuaGVpZ2h0ID09IGFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQoKSAqIHNpemUud2lkdGgp
IHsKLSAgICAgICAgICBmaWx0ZXJlZFNpemVzLmFkZChzaXplKTsKLSAgICAgICAgfQotICAgICAg
fQotCi0gICAgICByZXR1cm4gZmlsdGVyZWRTaXplczsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIHNpemVzOwotICAgIH0KLSAgfQotCi0gIEBOdWxsYWJsZQotICBzdGF0aWMgTGlzdDxDYXB0
dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGNh
bWVyYUlkKSB7Ci0gICAgcmV0dXJuIGdldFN1cHBvcnRlZEZvcm1hdHMoCi0gICAgICAgIChDYW1l
cmFNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklD
RSksIGNhbWVyYUlkKTsKLSAgfQotCi0gIEBOdWxsYWJsZQotICBzdGF0aWMgTGlzdDxDYXB0dXJl
Rm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlciwg
U3RyaW5nIGNhbWVyYUlkKSB7Ci0gICAgc3luY2hyb25pemVkIChjYWNoZWRTdXBwb3J0ZWRGb3Jt
YXRzKSB7Ci0gICAgICBpZiAoY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5jb250YWluc0tleShjYW1l
cmFJZCkpIHsKLSAgICAgICAgcmV0dXJuIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuZ2V0KGNhbWVy
YUlkKTsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9y
bWF0cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIuIik7Ci0gICAgICBmaW5hbCBs
b25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0KLSAgICAg
IGZpbmFsIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFDaGFyYWN0ZXJpc3RpY3M7Ci0gICAg
ICB0cnkgewotICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MgPSBjYW1lcmFNYW5hZ2VyLmdl
dENhbWVyYUNoYXJhY3RlcmlzdGljcyhjYW1lcmFJZCk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRp
b24gZXgpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgImdldENhbWVyYUNoYXJhY3RlcmlzdGlj
cygpOiAiICsgZXgpOwotICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0
PigpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBTdHJlYW1Db25maWd1cmF0aW9uTWFwIHN0cmVh
bU1hcCA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuU0NBTEVSX1NUUkVBTV9DT05GSUdVUkFUSU9OX01BUCk7Ci0KLSAgICAgIFJhbmdl
PEludGVnZXI+W10gZnBzUmFuZ2VzID0KLSAgICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3Mu
Z2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJHRVRfRlBT
X1JBTkdFUyk7Ci0gICAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IGZyYW1l
cmF0ZVJhbmdlcyA9Ci0gICAgICAgICAgY29udmVydEZyYW1lcmF0ZXMoZnBzUmFuZ2VzLCBnZXRG
cHNVbml0RmFjdG9yKGZwc1JhbmdlcykpOwotICAgICAgTGlzdDxTaXplPiBzaXplcyA9IGdldFN1
cHBvcnRlZFNpemVzKGNhbWVyYUNoYXJhY3RlcmlzdGljcyk7Ci0KLSAgICAgIGludCBkZWZhdWx0
TWF4RnBzID0gMDsKLSAgICAgIGZvciAoQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBmcmFt
ZXJhdGVSYW5nZSA6IGZyYW1lcmF0ZVJhbmdlcykgewotICAgICAgICBkZWZhdWx0TWF4RnBzID0g
TWF0aC5tYXgoZGVmYXVsdE1heEZwcywgZnJhbWVyYXRlUmFuZ2UubWF4KTsKLSAgICAgIH0KLQot
ICAgICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRMaXN0ID0gbmV3IEFycmF5TGlz
dDxDYXB0dXJlRm9ybWF0PigpOwotICAgICAgZm9yIChTaXplIHNpemUgOiBzaXplcykgewotICAg
ICAgICBsb25nIG1pbkZyYW1lRHVyYXRpb25OcyA9IDA7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgbWluRnJhbWVEdXJhdGlvbk5zID0gc3RyZWFtTWFwLmdldE91dHB1dE1pbkZyYW1lRHVyYXRp
b24oCi0gICAgICAgICAgICAgIFN1cmZhY2VUZXh0dXJlLmNsYXNzLCBuZXcgYW5kcm9pZC51dGls
LlNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgICAvLyBnZXRPdXRwdXRNaW5GcmFtZUR1cmF0aW9uKCkgaXMgbm90
IHN1cHBvcnRlZCBvbiBhbGwgZGV2aWNlcy4gSWdub3JlIHNpbGVudGx5LgotICAgICAgICB9Ci0g
ICAgICAgIGZpbmFsIGludCBtYXhGcHMgPSAobWluRnJhbWVEdXJhdGlvbk5zID09IDApCi0gICAg
ICAgICAgICA/IGRlZmF1bHRNYXhGcHMKLSAgICAgICAgICAgIDogKGludCkgTWF0aC5yb3VuZChO
QU5PX1NFQ09ORFNfUEVSX1NFQ09ORCAvIG1pbkZyYW1lRHVyYXRpb25OcykgKiAxMDAwOwotICAg
ICAgICBmb3JtYXRMaXN0LmFkZChuZXcgQ2FwdHVyZUZvcm1hdChzaXplLndpZHRoLCBzaXplLmhl
aWdodCwgMCwgbWF4RnBzKSk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3JtYXQ6ICIgKyBz
aXplLndpZHRoICsgIngiICsgc2l6ZS5oZWlnaHQgKyAiQCIgKyBtYXhGcHMpOwotICAgICAgfQot
Ci0gICAgICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLnB1dChjYW1lcmFJZCwgZm9ybWF0TGlzdCk7
Ci0gICAgICBmaW5hbCBsb25nIGVuZFRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGlt
ZSgpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY2Ft
ZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIgZG9uZS4iCi0gICAgICAgICAgICAgICsgIiBUaW1l
IHNwZW50OiAiICsgKGVuZFRpbWVNcyAtIHN0YXJ0VGltZU1zKSArICIgbXMuIik7Ci0gICAgICBy
ZXR1cm4gZm9ybWF0TGlzdDsKLSAgICB9Ci0gIH0KLQotICAvLyBDb252ZXJ0IGZyb20gYW5kcm9p
ZC51dGlsLlNpemUgdG8gU2l6ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxTaXplPiBjb252ZXJ0
U2l6ZXMoYW5kcm9pZC51dGlsLlNpemVbXSBjYW1lcmFTaXplcykgewotICAgIGZpbmFsIExpc3Q8
U2l6ZT4gc2l6ZXMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KCk7Ci0gICAgZm9yIChhbmRyb2lkLnV0
aWwuU2l6ZSBzaXplIDogY2FtZXJhU2l6ZXMpIHsKLSAgICAgIHNpemVzLmFkZChuZXcgU2l6ZShz
aXplLmdldFdpZHRoKCksIHNpemUuZ2V0SGVpZ2h0KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNp
emVzOwotICB9Ci0KLSAgLy8gQ29udmVydCBmcm9tIGFuZHJvaWQudXRpbC5SYW5nZTxJbnRlZ2Vy
PiB0byBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlLgotICBzdGF0aWMgTGlzdDxDYXB0dXJl
Rm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBjb252ZXJ0RnJhbWVyYXRlcygKLSAgICAgIFJhbmdlPElu
dGVnZXI+W10gYXJyYXlSYW5nZXMsIGludCB1bml0RmFjdG9yKSB7Ci0gICAgZmluYWwgTGlzdDxD
YXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiByYW5nZXMgPSBuZXcgQXJyYXlMaXN0PENhcHR1
cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+KCk7Ci0gICAgZm9yIChSYW5nZTxJbnRlZ2VyPiByYW5n
ZSA6IGFycmF5UmFuZ2VzKSB7Ci0gICAgICByYW5nZXMuYWRkKG5ldyBDYXB0dXJlRm9ybWF0LkZy
YW1lcmF0ZVJhbmdlKAotICAgICAgICAgIHJhbmdlLmdldExvd2VyKCkgKiB1bml0RmFjdG9yLCBy
YW5nZS5nZXRVcHBlcigpICogdW5pdEZhY3RvcikpOwotICAgIH0KLSAgICByZXR1cm4gcmFuZ2Vz
OwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlvbkFuZHJv
aWQuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL2FwaS9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTJiOTE5OWI0NGEzOGRiZGIyMDc0Njk0ZDRjYzk1
MDEzMmNhZTJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2Fw
aS9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhCisrKyAvZGV2L251bGwK
QEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5hYnM7Ci0KLWltcG9ydCBhbmRyb2lk
LmdyYXBoaWNzLkltYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBv
cnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBv
cnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBTdXBw
cmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkIHsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDYW1lcmFF
bnVtZXJhdGlvbkFuZHJvaWQiOwotCi0gIHN0YXRpYyBmaW5hbCBBcnJheUxpc3Q8U2l6ZT4gQ09N
TU9OX1JFU09MVVRJT05TID0gbmV3IEFycmF5TGlzdDxTaXplPihBcnJheXMuYXNMaXN0KAotICAg
ICAgLy8gMCwgVW5rbm93biByZXNvbHV0aW9uCi0gICAgICBuZXcgU2l6ZSgxNjAsIDEyMCksIC8v
IDEsIFFRVkdBCi0gICAgICBuZXcgU2l6ZSgyNDAsIDE2MCksIC8vIDIsIEhRVkdBCi0gICAgICBu
ZXcgU2l6ZSgzMjAsIDI0MCksIC8vIDMsIFFWR0EKLSAgICAgIG5ldyBTaXplKDQwMCwgMjQwKSwg
Ly8gNCwgV1FWR0EKLSAgICAgIG5ldyBTaXplKDQ4MCwgMzIwKSwgLy8gNSwgSFZHQQotICAgICAg
bmV3IFNpemUoNjQwLCAzNjApLCAvLyA2LCBuSEQKLSAgICAgIG5ldyBTaXplKDY0MCwgNDgwKSwg
Ly8gNywgVkdBCi0gICAgICBuZXcgU2l6ZSg3NjgsIDQ4MCksIC8vIDgsIFdWR0EKLSAgICAgIG5l
dyBTaXplKDg1NCwgNDgwKSwgLy8gOSwgRldWR0EKLSAgICAgIG5ldyBTaXplKDgwMCwgNjAwKSwg
Ly8gMTAsIFNWR0EKLSAgICAgIG5ldyBTaXplKDk2MCwgNTQwKSwgLy8gMTEsIHFIRAotICAgICAg
bmV3IFNpemUoOTYwLCA2NDApLCAvLyAxMiwgRFZHQQotICAgICAgbmV3IFNpemUoMTAyNCwgNTc2
KSwgLy8gMTMsIFdTVkdBCi0gICAgICBuZXcgU2l6ZSgxMDI0LCA2MDApLCAvLyAxNCwgV1ZTR0EK
LSAgICAgIG5ldyBTaXplKDEyODAsIDcyMCksIC8vIDE1LCBIRAotICAgICAgbmV3IFNpemUoMTI4
MCwgMTAyNCksIC8vIDE2LCBTWEdBCi0gICAgICBuZXcgU2l6ZSgxOTIwLCAxMDgwKSwgLy8gMTcs
IEZ1bGwgSEQKLSAgICAgIG5ldyBTaXplKDE5MjAsIDE0NDApLCAvLyAxOCwgRnVsbCBIRCA0OjMK
LSAgICAgIG5ldyBTaXplKDI1NjAsIDE0NDApLCAvLyAxOSwgUUhECi0gICAgICBuZXcgU2l6ZSgz
ODQwLCAyMTYwKSAvLyAyMCwgVUhECi0gICAgICApKTsKLQotICBwdWJsaWMgc3RhdGljIGNsYXNz
IENhcHR1cmVGb3JtYXQgewotICAgIC8vIENsYXNzIHRvIHJlcHJlc2VudCBhIGZyYW1lcmF0ZSBy
YW5nZS4gVGhlIGZyYW1lcmF0ZSB2YXJpZXMgYmVjYXVzZSBvZiBsaWdodG5pbmcgY29uZGl0aW9u
cy4KLSAgICAvLyBUaGUgdmFsdWVzIGFyZSBtdWx0aXBsaWVkIGJ5IDEwMDAsIHNvIDEwMDAgcmVw
cmVzZW50cyBvbmUgZnJhbWUgcGVyIHNlY29uZC4KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZy
YW1lcmF0ZVJhbmdlIHsKLSAgICAgIHB1YmxpYyBpbnQgbWluOwotICAgICAgcHVibGljIGludCBt
YXg7Ci0KLSAgICAgIHB1YmxpYyBGcmFtZXJhdGVSYW5nZShpbnQgbWluLCBpbnQgbWF4KSB7Ci0g
ICAgICAgIHRoaXMubWluID0gbWluOwotICAgICAgICB0aGlzLm1heCA9IG1heDsKLSAgICAgIH0K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAg
ICAgICByZXR1cm4gIlsiICsgKG1pbiAvIDEwMDAuMGYpICsgIjoiICsgKG1heCAvIDEwMDAuMGYp
ICsgIl0iOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFu
IGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBG
cmFtZXJhdGVSYW5nZSkpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgZmluYWwgRnJhbWVyYXRlUmFuZ2Ugb3RoZXJGcmFtZXJhdGUgPSAoRnJhbWVyYXRlUmFu
Z2UpIG90aGVyOwotICAgICAgICByZXR1cm4gbWluID09IG90aGVyRnJhbWVyYXRlLm1pbiAmJiBt
YXggPT0gb3RoZXJGcmFtZXJhdGUubWF4OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIC8vIFVzZSBwcmltZSBjbG9zZSB0
byAyXjE2IHRvIGF2b2lkIGNvbGxpc2lvbnMgZm9yIG5vcm1hbCB2YWx1ZXMgbGVzcyB0aGFuIDJe
MTYuCi0gICAgICAgIHJldHVybiAxICsgNjU1MzcgKiBtaW4gKyBtYXg7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcHVibGljIGZpbmFsIGludCB3aWR0aDsKLSAgICBwdWJsaWMgZmluYWwgaW50IGhl
aWdodDsKLSAgICBwdWJsaWMgZmluYWwgRnJhbWVyYXRlUmFuZ2UgZnJhbWVyYXRlOwotCi0gICAg
Ly8gVE9ETyhoYm9zKTogSWYgVmlkZW9DYXB0dXJlci5zdGFydENhcHR1cmUgaXMgdXBkYXRlZCB0
byBzdXBwb3J0IG90aGVyIGltYWdlIGZvcm1hdHMgdGhlbiB0aGlzCi0gICAgLy8gbmVlZHMgdG8g
YmUgdXBkYXRlZCBhbmQgVmlkZW9DYXB0dXJlci5nZXRTdXBwb3J0ZWRGb3JtYXRzIG5lZWQgdG8g
cmV0dXJuIENhcHR1cmVGb3JtYXRzIG9mCi0gICAgLy8gYWxsIGltYWdlRm9ybWF0cy4KLSAgICBw
dWJsaWMgZmluYWwgaW50IGltYWdlRm9ybWF0ID0gSW1hZ2VGb3JtYXQuTlYyMTsKLQotICAgIHB1
YmxpYyBDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1pbkZyYW1lcmF0
ZSwgaW50IG1heEZyYW1lcmF0ZSkgewotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAg
dGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLmZyYW1lcmF0ZSA9IG5ldyBGcmFtZXJh
dGVSYW5nZShtaW5GcmFtZXJhdGUsIG1heEZyYW1lcmF0ZSk7Ci0gICAgfQotCi0gICAgcHVibGlj
IENhcHR1cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGcmFtZXJhdGVSYW5nZSBmcmFt
ZXJhdGUpIHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsY3VsYXRlcyB0aGUgZnJhbWUgc2l6ZSBvZiB0aGlzIGNhcHR1cmUgZm9ybWF0LgotICAg
IHB1YmxpYyBpbnQgZnJhbWVTaXplKCkgewotICAgICAgcmV0dXJuIGZyYW1lU2l6ZSh3aWR0aCwg
aGVpZ2h0LCBpbWFnZUZvcm1hdCk7Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlcyB0aGUgZnJh
bWUgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkIGltYWdlIGZvcm1hdC4gQ3VycmVudGx5IG9ubHkKLSAg
ICAvLyBzdXBwb3J0aW5nIEltYWdlRm9ybWF0Lk5WMjEuCi0gICAgLy8gVGhlIHNpemUgaXMgd2lk
dGggKiBoZWlnaHQgKiBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsLgotICAgIC8vIGh0dHA6Ly9k
ZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0
bWwjYWRkQ2FsbGJhY2tCdWZmZXIoYnl0ZVtdKQotICAgIHB1YmxpYyBzdGF0aWMgaW50IGZyYW1l
U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpbWFnZUZvcm1hdCkgewotICAgICAgaWYg
KGltYWdlRm9ybWF0ICE9IEltYWdlRm9ybWF0Lk5WMjEpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJEb24ndCBrbm93IGhvdyB0byBjYWxjdWxhdGUg
IgotICAgICAgICAgICAgKyAidGhlIGZyYW1lIHNpemUgb2Ygbm9uLU5WMjEgaW1hZ2UgZm9ybWF0
cy4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAod2lkdGggKiBoZWlnaHQgKiBJbWFnZUZvcm1h
dC5nZXRCaXRzUGVyUGl4ZWwoaW1hZ2VGb3JtYXQpKSAvIDg7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiB3aWR0aCAr
ICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7Ci0gICAgICBpZiAoIShv
dGhlciBpbnN0YW5jZW9mIENhcHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICAgIGZpbmFsIENhcHR1cmVGb3JtYXQgb3RoZXJGb3JtYXQgPSAoQ2FwdHVy
ZUZvcm1hdCkgb3RoZXI7Ci0gICAgICByZXR1cm4gd2lkdGggPT0gb3RoZXJGb3JtYXQud2lkdGgg
JiYgaGVpZ2h0ID09IG90aGVyRm9ybWF0LmhlaWdodAotICAgICAgICAgICYmIGZyYW1lcmF0ZS5l
cXVhbHMob3RoZXJGb3JtYXQuZnJhbWVyYXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIDEgKyAod2lkdGggKiA2NTQ5
NyArIGhlaWdodCkgKiAyNTEgKyBmcmFtZXJhdGUuaGFzaENvZGUoKTsKLSAgICB9Ci0gIH0KLQot
ICAvLyBIZWxwZXIgY2xhc3MgZm9yIGZpbmRpbmcgdGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIGZvcm1h
dCBmb3IgdGhlIHR3byBmdW5jdGlvbnMgYmVsb3cuIEl0IGNyZWF0ZXMgYQotICAvLyBjb21wYXJh
dG9yIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIHRvIHNvbWUgcmVxdWVzdGVkIHBhcmFtZXRlcnMs
IHdoZXJlIHRoZSBlbGVtZW50IHdpdGggdGhlCi0gIC8vIG1pbmltdW0gZGlmZmVyZW5jZSBpcyB0
aGUgZWxlbWVudCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXJzLgot
ICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDbG9zZXN0Q29tcGFyYXRvcjxUPiBpbXBs
ZW1lbnRzIENvbXBhcmF0b3I8VD4gewotICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiBzdXBwb3J0
ZWQgYW5kIHJlcXVlc3RlZCBwYXJhbWV0ZXIuCi0gICAgYWJzdHJhY3QgaW50IGRpZmYoVCBzdXBw
b3J0ZWRQYXJhbWV0ZXIpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjb21wYXJl
KFQgdDEsIFQgdDIpIHsKLSAgICAgIHJldHVybiBkaWZmKHQxKSAtIGRpZmYodDIpOwotICAgIH0K
LSAgfQotCi0gIC8vIFByZWZlciBhIGZwcyByYW5nZSB3aXRoIGFuIHVwcGVyIGJvdW5kIGNsb3Nl
IHRvIHxmcmFtZXJhdGV8LiBBbHNvIHByZWZlciBhIGZwcyByYW5nZSB3aXRoIGEgbG93Ci0gIC8v
IGxvd2VyIGJvdW5kLCB0byBhbGxvdyB0aGUgZnJhbWVyYXRlIHRvIGZsdWN0dWF0ZSBiYXNlZCBv
biBsaWdodG5pbmcgY29uZGl0aW9ucy4KLSAgcHVibGljIHN0YXRpYyBDYXB0dXJlRm9ybWF0LkZy
YW1lcmF0ZVJhbmdlIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgKLSAgICAgIExp
c3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVyYXRlcywgZmlu
YWwgaW50IHJlcXVlc3RlZEZwcykgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy5taW4oCi0gICAg
ICAgIHN1cHBvcnRlZEZyYW1lcmF0ZXMsIG5ldyBDbG9zZXN0Q29tcGFyYXRvcjxDYXB0dXJlRm9y
bWF0LkZyYW1lcmF0ZVJhbmdlPigpIHsKLSAgICAgICAgICAvLyBQcm9ncmVzc2l2ZSBwZW5hbHR5
IGlmIHRoZSB1cHBlciBib3VuZCBpcyBmdXJ0aGVyIGF3YXkgdGhhbiB8TUFYX0ZQU19ESUZGX1RI
UkVTSE9MRHwKLSAgICAgICAgICAvLyBmcm9tIHJlcXVlc3RlZC4KLSAgICAgICAgICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZQU19ESUZGX1RIUkVTSE9MRCA9IDUwMDA7Ci0gICAgICAg
ICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9GUFNfTE9XX0RJRkZfV0VJR0hUID0gMTsK
LSAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZQU19ISUdIX0RJRkZfV0VJ
R0hUID0gMzsKLQotICAgICAgICAgIC8vIFByb2dyZXNzaXZlIHBlbmFsdHkgaWYgdGhlIGxvd2Vy
IGJvdW5kIGlzIGJpZ2dlciB0aGFuIHxNSU5fRlBTX1RIUkVTSE9MRHwuCi0gICAgICAgICAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9GUFNfVEhSRVNIT0xEID0gODAwMDsKLSAgICAgICAg
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0ZQU19MT1dfVkFMVUVfV0VJR0hUID0gMTsK
LSAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0ZQU19ISUdIX1ZBTFVFX1dF
SUdIVCA9IDQ7Ci0KLSAgICAgICAgICAvLyBVc2Ugb25lIHdlaWdodCBmb3Igc21hbGwgfHZhbHVl
fCBsZXNzIHRoYW4gfHRocmVzaG9sZHwsIGFuZCBhbm90aGVyIHdlaWdodCBhYm92ZS4KLSAgICAg
ICAgICBwcml2YXRlIGludCBwcm9ncmVzc2l2ZVBlbmFsdHkoaW50IHZhbHVlLCBpbnQgdGhyZXNo
b2xkLCBpbnQgbG93V2VpZ2h0LCBpbnQgaGlnaFdlaWdodCkgewotICAgICAgICAgICAgcmV0dXJu
ICh2YWx1ZSA8IHRocmVzaG9sZCkgPyB2YWx1ZSAqIGxvd1dlaWdodAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiB0aHJlc2hvbGQgKiBsb3dXZWlnaHQgKyAodmFsdWUg
LSB0aHJlc2hvbGQpICogaGlnaFdlaWdodDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgICBpbnQgZGlmZihDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIHJh
bmdlKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbWluRnBzRXJyb3IgPSBwcm9ncmVzc2l2ZVBl
bmFsdHkoCi0gICAgICAgICAgICAgICAgcmFuZ2UubWluLCBNSU5fRlBTX1RIUkVTSE9MRCwgTUlO
X0ZQU19MT1dfVkFMVUVfV0VJR0hULCBNSU5fRlBTX0hJR0hfVkFMVUVfV0VJR0hUKTsKLSAgICAg
ICAgICAgIGZpbmFsIGludCBtYXhGcHNFcnJvciA9IHByb2dyZXNzaXZlUGVuYWx0eShNYXRoLmFi
cyhyZXF1ZXN0ZWRGcHMgKiAxMDAwIC0gcmFuZ2UubWF4KSwKLSAgICAgICAgICAgICAgICBNQVhf
RlBTX0RJRkZfVEhSRVNIT0xELCBNQVhfRlBTX0xPV19ESUZGX1dFSUdIVCwgTUFYX0ZQU19ISUdI
X0RJRkZfV0VJR0hUKTsKLSAgICAgICAgICAgIHJldHVybiBtaW5GcHNFcnJvciArIG1heEZwc0Vy
cm9yOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFNp
emUgZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICBMaXN0PFNpemU+IHN1cHBvcnRlZFNp
emVzLCBmaW5hbCBpbnQgcmVxdWVzdGVkV2lkdGgsIGZpbmFsIGludCByZXF1ZXN0ZWRIZWlnaHQp
IHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMubWluKHN1cHBvcnRlZFNpemVzLCBuZXcgQ2xvc2Vz
dENvbXBhcmF0b3I8U2l6ZT4oKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIGludCBkaWZmKFNp
emUgc2l6ZSkgewotICAgICAgICByZXR1cm4gYWJzKHJlcXVlc3RlZFdpZHRoIC0gc2l6ZS53aWR0
aCkgKyBhYnMocmVxdWVzdGVkSGVpZ2h0IC0gc2l6ZS5oZWlnaHQpOwotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgY2FtZXJhIGNsYXNzZXMuCi0gIHN0YXRp
YyB2b2lkIHJlcG9ydENhbWVyYVJlc29sdXRpb24oSGlzdG9ncmFtIGhpc3RvZ3JhbSwgU2l6ZSBy
ZXNvbHV0aW9uKSB7Ci0gICAgaW50IGluZGV4ID0gQ09NTU9OX1JFU09MVVRJT05TLmluZGV4T2Yo
cmVzb2x1dGlvbik7Ci0gICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgdW5rbm93biByZXNvbHV0aW9u
LCBzbyBhZGQgMS4KLSAgICAvLyBpbmRleE9mIHJldHVybnMgLTEgZm9yIHVua25vd24gcmVzb2x1
dGlvbnMgc28gaXQgYmVjb21lcyAwIGF1dG9tYXRpY2FsbHkuCi0gICAgaGlzdG9ncmFtLmFkZFNh
bXBsZShpbmRleCArIDEpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYW1lcmFF
bnVtZXJhdG9yLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9yLmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTU0YjYyZTAwMTVkYTdhZjRhODkzYjU0OGRkNTli
MzhlZmUzZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLQot
aW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIENhbWVyYUVudW1lcmF0
b3IgewotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2aWNlTmFtZXMoKTsKLSAgcHVibGljIGJvb2xl
YW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0gIHB1YmxpYyBib29sZWFuIGlz
QmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0gIHB1YmxpYyBMaXN0PENhcHR1cmVGb3Jt
YXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoU3RyaW5nIGRldmljZU5hbWUpOwotCi0gIHB1YmxpYyBD
YW1lcmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGRldmljZU5h
bWUsIENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVy
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YSBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2Fw
aS9vcmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggODgyMjhhYjU3ZmNjMTIzZTFlMjgxM2NmZGU3YWFiMGEyMDdmYjA2YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9D
YW1lcmFWaWRlb0NhcHR1cmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5NZWRpYVJlY29yZGVyOwotCi0vKioKLSAqIEJhc2UgaW50ZXJmYWNlIGZvciBjYW1l
cmExIGFuZCBjYW1lcmEyIGltcGxlbWVudGF0aW9ucy4gRXh0ZW5kcyBWaWRlb0NhcHR1cmVyIHdp
dGggYQotICogc3dpdGNoQ2FtZXJhKCkgZnVuY3Rpb24uIEFsc28gcHJvdmlkZXMgc3ViaW50ZXJm
YWNlcyBmb3IgaGFuZGxpbmcgY2FtZXJhIGV2ZW50cywgYW5kIGEgaGVscGVyCi0gKiBjbGFzcyBm
b3IgZGV0ZWN0aW5nIGNhbWVyYSBmcmVlemVzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENhbWVy
YVZpZGVvQ2FwdHVyZXIgZXh0ZW5kcyBWaWRlb0NhcHR1cmVyIHsKLSAgLyoqCi0gICAqIENhbWVy
YSBldmVudHMgaGFuZGxlciAtIGNhbiBiZSB1c2VkIHRvIGJlIG5vdGlmZWQgYWJvdXQgY2FtZXJh
IGV2ZW50cy4gVGhlIGNhbGxiYWNrcyBhcmUKLSAgICogZXhlY3V0ZWQgZnJvbSBhbiBhcmJpdHJh
cnkgdGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBDYW1lcmFFdmVudHNIYW5kbGVy
IHsKLSAgICAvLyBDYW1lcmEgZXJyb3IgaGFuZGxlciAtIGludm9rZWQgd2hlbiBjYW1lcmEgY2Fu
IG5vdCBiZSBvcGVuZWQKLSAgICAvLyBvciBhbnkgY2FtZXJhIGV4Y2VwdGlvbiBoYXBwZW5zIG9u
IGNhbWVyYSB0aHJlYWQuCi0gICAgdm9pZCBvbkNhbWVyYUVycm9yKFN0cmluZyBlcnJvckRlc2Ny
aXB0aW9uKTsKLQotICAgIC8vIENhbGxlZCB3aGVuIGNhbWVyYSBpcyBkaXNjb25uZWN0ZWQuCi0g
ICAgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZCgpOwotCi0gICAgLy8gSW52b2tlZCB3aGVuIGNh
bWVyYSBzdG9wcyByZWNlaXZpbmcgZnJhbWVzLgotICAgIHZvaWQgb25DYW1lcmFGcmVlemVkKFN0
cmluZyBlcnJvckRlc2NyaXB0aW9uKTsKLQotICAgIC8vIENhbGxiYWNrIGludm9rZWQgd2hlbiBj
YW1lcmEgaXMgb3BlbmluZy4KLSAgICB2b2lkIG9uQ2FtZXJhT3BlbmluZyhTdHJpbmcgY2FtZXJh
TmFtZSk7Ci0KLSAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gZmlyc3QgY2FtZXJhIGZyYW1l
IGlzIGF2YWlsYWJsZSBhZnRlciBjYW1lcmEgaXMgc3RhcnRlZC4KLSAgICB2b2lkIG9uRmlyc3RG
cmFtZUF2YWlsYWJsZSgpOwotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGNhbWVyYSBp
cyBjbG9zZWQuCi0gICAgdm9pZCBvbkNhbWVyYUNsb3NlZCgpOwotICB9Ci0KLSAgLyoqCi0gICAq
IENhbWVyYSBzd2l0Y2ggaGFuZGxlciAtIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9r
ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHN3aXRjaENhbWVyYSgpLgotICAgKiBUaGUgY2FsbGJhY2sg
bWF5IGJlIGNhbGxlZCBvbiBhbiBhcmJpdHJhcnkgdGhyZWFkLgotICAgKi8KLSAgcHVibGljIGlu
dGVyZmFjZSBDYW1lcmFTd2l0Y2hIYW5kbGVyIHsKLSAgICAvLyBJbnZva2VkIG9uIHN1Y2Nlc3Mu
IHxpc0Zyb250Q2FtZXJhfCBpcyB0cnVlIGlmIHRoZSBuZXcgY2FtZXJhIGlzIGZyb250IGZhY2lu
Zy4KLSAgICB2b2lkIG9uQ2FtZXJhU3dpdGNoRG9uZShib29sZWFuIGlzRnJvbnRDYW1lcmEpOwot
Ci0gICAgLy8gSW52b2tlZCBvbiBmYWlsdXJlLCBlLmcuIGNhbWVyYSBpcyBzdG9wcGVkIG9yIG9u
bHkgb25lIGNhbWVyYSBhdmFpbGFibGUuCi0gICAgdm9pZCBvbkNhbWVyYVN3aXRjaEVycm9yKFN0
cmluZyBlcnJvckRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIC8qKgotICAgKiBTd2l0Y2ggY2FtZXJh
IHRvIHRoZSBuZXh0IHZhbGlkIGNhbWVyYSBpZC4gVGhpcyBjYW4gb25seSBiZSBjYWxsZWQgd2hp
bGUgdGhlIGNhbWVyYSBpcyBydW5uaW5nLgotICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxs
ZWQgZnJvbSBhbnkgdGhyZWFkLgotICAgKi8KLSAgdm9pZCBzd2l0Y2hDYW1lcmEoQ2FtZXJhU3dp
dGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyKTsKLQotICAvKioKLSAgICogU3dpdGNoIGNh
bWVyYSB0byB0aGUgc3BlY2lmaWVkIGNhbWVyYSBpZC4gVGhpcyBjYW4gb25seSBiZSBjYWxsZWQg
d2hpbGUgdGhlIGNhbWVyYSBpcyBydW5uaW5nLgotICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBj
YWxsZWQgZnJvbSBhbnkgdGhyZWFkLgotICAgKi8KLSAgdm9pZCBzd2l0Y2hDYW1lcmEoQ2FtZXJh
U3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyLCBTdHJpbmcgY2FtZXJhTmFtZSk7Ci0K
LSAgLyoqCi0gICAqIE1lZGlhUmVjb3JkZXIgYWRkL3JlbW92ZSBoYW5kbGVyIC0gb25lIG9mIHRo
ZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aXRoIHRoZSByZXN1bHQgb2YKLSAgICogYWRkTWVk
aWFSZWNvcmRlclRvQ2FtZXJhKCkgb3IgcmVtb3ZlTWVkaWFSZWNvcmRlckZyb21DYW1lcmEgY2Fs
bHMuCi0gICAqIFRoZSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIG9uIGFuIGFyYml0cmFyeSB0aHJl
YWQuCi0gICAqLwotICBARGVwcmVjYXRlZAotICBwdWJsaWMgaW50ZXJmYWNlIE1lZGlhUmVjb3Jk
ZXJIYW5kbGVyIHsKLSAgICAvLyBJbnZva2VkIG9uIHN1Y2Nlc3MuCi0gICAgdm9pZCBvbk1lZGlh
UmVjb3JkZXJTdWNjZXNzKCk7Ci0KLSAgICAvLyBJbnZva2VkIG9uIGZhaWx1cmUsIGUuZy4gY2Ft
ZXJhIGlzIHN0b3BwZWQgb3IgYW55IGV4Y2VwdGlvbiBoYXBwZW5zLgotICAgIHZvaWQgb25NZWRp
YVJlY29yZGVyRXJyb3IoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEFkZCBNZWRpYVJlY29yZGVyIHRvIGNhbWVyYSBwaXBlbGluZS4gVGhpcyBjYW4gb25seSBi
ZSBjYWxsZWQgd2hpbGUgdGhlIGNhbWVyYSBpcyBydW5uaW5nLgotICAgKiBPbmNlIE1lZGlhUmVj
b3JkZXIgaXMgYWRkZWQgdG8gY2FtZXJhIHBpcGVsaW5lIGNhbWVyYSBzd2l0Y2ggaXMgbm90IGFs
bG93ZWQuCi0gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQu
Ci0gICAqLwotICBARGVwcmVjYXRlZAotICBkZWZhdWx0IHZvaWQgYWRkTWVkaWFSZWNvcmRlclRv
Q2FtZXJhKAotICAgICAgTWVkaWFSZWNvcmRlciBtZWRpYVJlY29yZGVyLCBNZWRpYVJlY29yZGVy
SGFuZGxlciByZXN1bHRIYW5kbGVyKSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0
aW9uRXhjZXB0aW9uKCJEZXByZWNhdGVkIGFuZCBub3QgaW1wbGVtZW50ZWQuIik7Ci0gIH0KLQot
ICAvKioKLSAgICogUmVtb3ZlIE1lZGlhUmVjb3JkZXIgZnJvbSBjYW1lcmEgcGlwZWxpbmUuIFRo
aXMgY2FuIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBjYW1lcmEgaXMgcnVubmluZy4KLSAgICog
VGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICovCi0gIEBE
ZXByZWNhdGVkCi0gIGRlZmF1bHQgdm9pZCByZW1vdmVNZWRpYVJlY29yZGVyRnJvbUNhbWVyYShN
ZWRpYVJlY29yZGVySGFuZGxlciByZXN1bHRIYW5kbGVyKSB7Ci0gICAgdGhyb3cgbmV3IFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJEZXByZWNhdGVkIGFuZCBub3QgaW1wbGVtZW50ZWQu
Iik7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIGNsYXNzIHRvIGxvZyBmcmFtZXJhdGUgYW5k
IGRldGVjdCBpZiB0aGUgY2FtZXJhIGZyZWV6ZXMuIEl0IHdpbGwgcnVuIHBlcmlvZGljIGNhbGxi
YWNrcwotICAgKiBvbiB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgdGhyZWFkIHBhc3NlZCBpbiB0
aGUgY3RvciwgYW5kIHNob3VsZCBvbmx5IGJlIG9wZXJhdGVkIGZyb20gdGhhdAotICAgKiB0aHJl
YWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIENhbWVyYVN0YXRpc3RpY3MgewotICAg
IHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiQ2FtZXJhU3RhdGlzdGljcyI7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMgPSAy
MDAwOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBDQU1FUkFfRlJFRVpFX1JFUE9SVF9U
SU1PVVRfTVMgPSA0MDAwOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBl
ciBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICBwcml2YXRlIGZpbmFsIENhbWVyYUV2ZW50c0hh
bmRsZXIgZXZlbnRzSGFuZGxlcjsKLSAgICBwcml2YXRlIGludCBmcmFtZUNvdW50OwotICAgIHBy
aXZhdGUgaW50IGZyZWV6ZVBlcmlvZENvdW50OwotICAgIC8vIENhbWVyYSBvYnNlcnZlciAtIG1v
bml0b3JzIGNhbWVyYSBmcmFtZXJhdGUuIE9ic2VydmVyIGlzIGV4ZWN1dGVkIG9uIGNhbWVyYSB0
aHJlYWQuCi0gICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBjYW1lcmFPYnNlcnZlciA9IG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBmaW5hbCBpbnQgY2FtZXJhRnBzID0gTWF0aC5yb3VuZChmcmFtZUNvdW50ICogMTAw
MC4wZiAvIENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMpOwotICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiQ2FtZXJhIGZwczogIiArIGNhbWVyYUZwcyArICIuIik7Ci0gICAgICAgIGlmIChmcmFtZUNv
dW50ID09IDApIHsKLSAgICAgICAgICArK2ZyZWV6ZVBlcmlvZENvdW50OwotICAgICAgICAgIGlm
IChDQU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TICogZnJlZXplUGVyaW9kQ291bnQgPj0gQ0FNRVJB
X0ZSRUVaRV9SRVBPUlRfVElNT1VUX01TCi0gICAgICAgICAgICAgICYmIGV2ZW50c0hhbmRsZXIg
IT0gbnVsbCkgewotICAgICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBmcmVlemVkLiIp
OwotICAgICAgICAgICAgaWYgKHN1cmZhY2VUZXh0dXJlSGVscGVyLmlzVGV4dHVyZUluVXNlKCkp
IHsKLSAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgd2UgYXJlIGNhcHR1
cmluZyB0byB0ZXh0dXJlcy4KLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUZy
ZWV6ZWQoIkNhbWVyYSBmYWlsdXJlLiBDbGllbnQgbXVzdCByZXR1cm4gdmlkZW8gYnVmZmVycy4i
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25D
YW1lcmFGcmVlemVkKCJDYW1lcmEgZmFpbHVyZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJl
ZXplUGVyaW9kQ291bnQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGZyYW1lQ291bnQgPSAwOwot
ICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdERlbGF5ZWQodGhp
cywgQ0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIHB1
YmxpYyBDYW1lcmFTdGF0aXN0aWNzKAotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlVGV4dHVyZUhlbHBlciwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7Ci0g
ICAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBu
ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdXJmYWNlVGV4dHVyZUhlbHBlciBpcyBudWxs
Iik7Ci0gICAgICB9Ci0gICAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRl
eHR1cmVIZWxwZXI7Ci0gICAgICB0aGlzLmV2ZW50c0hhbmRsZXIgPSBldmVudHNIYW5kbGVyOwot
ICAgICAgdGhpcy5mcmFtZUNvdW50ID0gMDsKLSAgICAgIHRoaXMuZnJlZXplUGVyaW9kQ291bnQg
PSAwOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBvc3REZWxheWVk
KGNhbWVyYU9ic2VydmVyLCBDQU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TKTsKLSAgICB9Ci0KLSAg
ICBwcml2YXRlIHZvaWQgY2hlY2tUaHJlYWQoKSB7Ci0gICAgICBpZiAoVGhyZWFkLmN1cnJlbnRU
aHJlYWQoKSAhPSBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkuZ2V0TG9vcGVyKCku
Z2V0VGhyZWFkKCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigi
V3JvbmcgdGhyZWFkIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkRnJh
bWUoKSB7Ci0gICAgICBjaGVja1RocmVhZCgpOwotICAgICAgKytmcmFtZUNvdW50OwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5nZXRIYW5kbGVyKCkucmVtb3ZlQ2FsbGJhY2tzKGNhbWVyYU9ic2VydmVyKTsKLSAgICB9Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0NhbmRpZGF0ZVBhaXJDaGFuZ2VFdmVudC5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvQ2FuZGlkYXRlUGFpckNoYW5nZUV2ZW50LmphdmEKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NWI2MjljNTRlMDZjMDA0NTNkN2FmMDIwYzdlNmY0MzM2
YWUxYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvQ2FuZGlkYXRlUGFpckNoYW5nZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAt
MSwzMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LS8qKgotICogUmVwcmVzZW50YXRpb24gb2YgYSBjaGFuZ2UgaW4gc2VsZWN0ZWQgSUNFIGNhbmRp
ZGF0ZSBwYWlyLgotICoge0Bjb2RlIENhbmRpZGF0ZVBhaXJDaGFuZ2VFdmVudH0gaW4gdGhlIEMr
KyBBUEkuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBDYW5kaWRhdGVQYWlyQ2hhbmdlRXZlbnQg
ewotICBwdWJsaWMgZmluYWwgSWNlQ2FuZGlkYXRlIGxvY2FsOwotICBwdWJsaWMgZmluYWwgSWNl
Q2FuZGlkYXRlIHJlbW90ZTsKLSAgcHVibGljIGZpbmFsIGludCBsYXN0RGF0YVJlY2VpdmVkTXM7
Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgcmVhc29uOwotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBD
YW5kaWRhdGVQYWlyQ2hhbmdlRXZlbnQoCi0gICAgICBJY2VDYW5kaWRhdGUgbG9jYWwsIEljZUNh
bmRpZGF0ZSByZW1vdGUsIGludCBsYXN0RGF0YVJlY2VpdmVkTXMsIFN0cmluZyByZWFzb24pIHsK
LSAgICB0aGlzLmxvY2FsID0gbG9jYWw7Ci0gICAgdGhpcy5yZW1vdGUgPSByZW1vdGU7Ci0gICAg
dGhpcy5sYXN0RGF0YVJlY2VpdmVkTXMgPSBsYXN0RGF0YVJlY2VpdmVkTXM7Ci0gICAgdGhpcy5y
ZWFzb24gPSByZWFzb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0NhcHR1cmVy
T2JzZXJ2ZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0NhcHR1cmVyT2JzZXJ2ZXIuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyZGMxNWIzYTY5MzIyM2FjODk3OGUwNGEyM2I0ZTg4
NDQzNGFlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9DYXB0dXJlck9ic2VydmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgot
ICogSW50ZXJmYWNlIGZvciBvYnNlcnZlcmluZyBhIGNhcHR1cmVyLiBQYXNzZWQgdG8ge0BsaW5r
IFZpZGVvQ2FwdHVyZXIjaW5pdGlhbGl6ZX0uIFByb3ZpZGVkIGJ5Ci0gKiB7QGxpbmsgVmlkZW9T
b3VyY2UjZ2V0Q2FwdHVyZXJPYnNlcnZlcn0uCi0gKgotICogQWxsIGNhbGxiYWNrcyBtdXN0IGJl
IGV4ZWN1dGVkIG9uIGEgc2luZ2xlIHRocmVhZC4KLSAqLwotcHVibGljIGludGVyZmFjZSBDYXB0
dXJlck9ic2VydmVyIHsKLSAgLyoqIE5vdGlmeSBpZiB0aGUgY2FwdHVyZXIgaGF2ZSBiZWVuIHN0
YXJ0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdC4gKi8KLSAgdm9pZCBvbkNhcHR1cmVyU3RhcnRlZChi
b29sZWFuIHN1Y2Nlc3MpOwotICAvKiogTm90aWZ5IHRoYXQgdGhlIGNhcHR1cmVyIGhhcyBiZWVu
IHN0b3BwZWQuICovCi0gIHZvaWQgb25DYXB0dXJlclN0b3BwZWQoKTsKLQotICAvKiogRGVsaXZl
cnMgYSBjYXB0dXJlZCBmcmFtZS4gKi8KLSAgdm9pZCBvbkZyYW1lQ2FwdHVyZWQoVmlkZW9GcmFt
ZSBmcmFtZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9DcnlwdG9PcHRpb25zLmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9DcnlwdG9PcHRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc3Yjk1NTJhYWQ4N2E3MThkNjIxMjg4MTA4NjE4ZGRmODU2MzFlOTAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvQ3J5cHRv
T3B0aW9ucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBDcnlwdG9PcHRpb25zIGRl
ZmluZXMgYWR2YW5jZWQgY3J5cHRvZ3JhcGhpYyBzZXR0aW5ncyBmb3IgbmF0aXZlIFdlYlJUQy4K
LSAqIFRoZXNlIHNldHRpbmdzIG11c3QgYmUgcGFzc2VkIGludG8gUlRDQ29uZmlndXJhdGlvbi4g
V2ViUlRDIGlzIHNlY3VyIGJ5Ci0gKiBkZWZhdWx0IGFuZCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRv
IHNldCBhbnkgb2YgdGhlc2Ugb3B0aW9ucyB1bmxlc3MgeW91IGFyZQotICogc3BlY2lmaWNhbGx5
IGxvb2tpbmcgZm9yIGFuIGFkZGl0aW9uYWwgY3J5cHRvIGZlYXR1cmUgc3VjaCBhcyBBRVNfR0NN
Ci0gKiBzdXBwb3J0LiBUaGlzIGNsYXNzIGlzIHRoZSBKYXZhIGJpbmRpbmcgb2YgbmF0aXZlIGFw
aS9jcnlwdG8vY3J5cHRvb3B0aW9ucy5oCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBDcnlwdG9P
cHRpb25zIHsKLSAgLyoqCi0gICAqIFNSVFAgUmVsYXRlZCBQZWVyIENvbm5lY3Rpb24gT3B0aW9u
cy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBjbGFzcyBTcnRwIHsKLSAgICAvKioKLSAgICAgKiBF
bmFibGUgR0NNIGNyeXB0byBzdWl0ZXMgZnJvbSBSRkMgNzcxNCBmb3IgU1JUUC4gR0NNIHdpbGwg
b25seSBiZSB1c2VkCi0gICAgICogaWYgYm90aCBzaWRlcyBlbmFibGUgaXQKLSAgICAgKi8KLSAg
ICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZW5hYmxlR2NtQ3J5cHRvU3VpdGVzOwotICAgIC8qKgot
ICAgICAqIElmIHNldCB0byB0cnVlLCB0aGUgKHBvdGVudGlhbGx5IGluc2VjdXJlKSBjcnlwdG8g
Y2lwaGVyCi0gICAgICogU1JUUF9BRVMxMjhfQ01fU0hBMV8zMiB3aWxsIGJlIGluY2x1ZGVkIGlu
IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBjaXBoZXJzCi0gICAgICogZHVyaW5nIG5lZ290aWF0aW9u
LiBJdCB3aWxsIG9ubHkgYmUgdXNlZCBpZiBib3RoIHBlZXJzIHN1cHBvcnQgaXQgYW5kIG5vCi0g
ICAgICogb3RoZXIgY2lwaGVycyBnZXQgcHJlZmVycmVkLgotICAgICAqLwotICAgIHByaXZhdGUg
ZmluYWwgYm9vbGVhbiBlbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRvQ2lwaGVyOwotICAgIC8qKgot
ICAgICAqIElmIHNldCB0byB0cnVlLCBlbmNyeXB0ZWQgUlRQIGhlYWRlciBleHRlbnNpb25zIGFz
IGRlZmluZWQgaW4gUkZDIDY5MDQKLSAgICAgKiB3aWxsIGJlIG5lZ290aWF0ZWQuIFRoZXkgd2ls
bCBvbmx5IGJlIHVzZWQgaWYgYm90aCBwZWVycyBzdXBwb3J0IHRoZW0uCi0gICAgICovCi0gICAg
cHJpdmF0ZSBmaW5hbCBib29sZWFuIGVuYWJsZUVuY3J5cHRlZFJ0cEhlYWRlckV4dGVuc2lvbnM7
Ci0KLSAgICBwcml2YXRlIFNydHAoYm9vbGVhbiBlbmFibGVHY21DcnlwdG9TdWl0ZXMsIGJvb2xl
YW4gZW5hYmxlQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhlciwKLSAgICAgICAgYm9vbGVhbiBlbmFi
bGVFbmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25zKSB7Ci0gICAgICB0aGlzLmVuYWJsZUdjbUNy
eXB0b1N1aXRlcyA9IGVuYWJsZUdjbUNyeXB0b1N1aXRlczsKLSAgICAgIHRoaXMuZW5hYmxlQWVz
MTI4U2hhMV8zMkNyeXB0b0NpcGhlciA9IGVuYWJsZUFlczEyOFNoYTFfMzJDcnlwdG9DaXBoZXI7
Ci0gICAgICB0aGlzLmVuYWJsZUVuY3J5cHRlZFJ0cEhlYWRlckV4dGVuc2lvbnMgPSBlbmFibGVF
bmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25zOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2
ZSgiU3J0cCIpCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0RW5hYmxlR2NtQ3J5cHRvU3VpdGVzKCkg
ewotICAgICAgcmV0dXJuIGVuYWJsZUdjbUNyeXB0b1N1aXRlczsKLSAgICB9Ci0KLSAgICBAQ2Fs
bGVkQnlOYXRpdmUoIlNydHAiKQotICAgIHB1YmxpYyBib29sZWFuIGdldEVuYWJsZUFlczEyOFNo
YTFfMzJDcnlwdG9DaXBoZXIoKSB7Ci0gICAgICByZXR1cm4gZW5hYmxlQWVzMTI4U2hhMV8zMkNy
eXB0b0NpcGhlcjsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlNydHAiKQotICAgIHB1
YmxpYyBib29sZWFuIGdldEVuYWJsZUVuY3J5cHRlZFJ0cEhlYWRlckV4dGVuc2lvbnMoKSB7Ci0g
ICAgICByZXR1cm4gZW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9uczsKLSAgICB9Ci0g
IH0KLQotICAvKioKLSAgICogT3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gdGhlIEZyYW1lRW5jcnlw
dG9yIC8gRnJhbWVEZWNyeXB0b3IgQVBJcyBhcmUgdXNlZC4KLSAgICovCi0gIHB1YmxpYyBmaW5h
bCBjbGFzcyBTRnJhbWUgewotICAgIC8qKgotICAgICAqIElmIHNldCBhbGwgUnRwU2VuZGVycyBt
dXN0IGhhdmUgYW4gRnJhbWVFbmNyeXB0b3IgYXR0YWNoZWQgdG8gdGhlbSBiZWZvcmUKLSAgICAg
KiB0aGV5IGFyZSBhbGxvd2VkIHRvIHNlbmQgcGFja2V0cy4gQWxsIFJ0cFJlY2VpdmVycyBtdXN0
IGhhdmUgYQotICAgICAqIEZyYW1lRGVjcnlwdG9yIGF0dGFjaGVkIHRvIHRoZW0gYmVmb3JlIHRo
ZXkgYXJlIGFibGUgdG8gcmVjZWl2ZSBwYWNrZXRzLgotICAgICAqLwotICAgIHByaXZhdGUgZmlu
YWwgYm9vbGVhbiByZXF1aXJlRnJhbWVFbmNyeXB0aW9uOwotCi0gICAgcHJpdmF0ZSBTRnJhbWUo
Ym9vbGVhbiByZXF1aXJlRnJhbWVFbmNyeXB0aW9uKSB7Ci0gICAgICB0aGlzLnJlcXVpcmVGcmFt
ZUVuY3J5cHRpb24gPSByZXF1aXJlRnJhbWVFbmNyeXB0aW9uOwotICAgIH0KLQotICAgIEBDYWxs
ZWRCeU5hdGl2ZSgiU0ZyYW1lIikKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXF1aXJlRnJhbWVF
bmNyeXB0aW9uKCkgewotICAgICAgcmV0dXJuIHJlcXVpcmVGcmFtZUVuY3J5cHRpb247Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTcnRwIHNydHA7Ci0gIHByaXZhdGUgZmluYWwgU0Zy
YW1lIHNmcmFtZTsKLQotICBwcml2YXRlIENyeXB0b09wdGlvbnMoYm9vbGVhbiBlbmFibGVHY21D
cnlwdG9TdWl0ZXMsIGJvb2xlYW4gZW5hYmxlQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhlciwKLSAg
ICAgIGJvb2xlYW4gZW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9ucywgYm9vbGVhbiBy
ZXF1aXJlRnJhbWVFbmNyeXB0aW9uKSB7Ci0gICAgdGhpcy5zcnRwID0gbmV3IFNydHAoCi0gICAg
ICAgIGVuYWJsZUdjbUNyeXB0b1N1aXRlcywgZW5hYmxlQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhl
ciwgZW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9ucyk7Ci0gICAgdGhpcy5zZnJhbWUg
PSBuZXcgU0ZyYW1lKHJlcXVpcmVGcmFtZUVuY3J5cHRpb24pOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBCdWlsZGVyIGJ1aWxkZXIoKSB7Ci0gICAgcmV0dXJuIG5ldyBCdWlsZGVyKCk7Ci0gIH0K
LQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIFNydHAgZ2V0U3J0cCgpIHsKLSAgICByZXR1
cm4gc3J0cDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgU0ZyYW1lIGdldFNG
cmFtZSgpIHsKLSAgICByZXR1cm4gc2ZyYW1lOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFz
cyBCdWlsZGVyIHsKLSAgICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlR2NtQ3J5cHRvU3VpdGVzOwot
ICAgIHByaXZhdGUgYm9vbGVhbiBlbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRvQ2lwaGVyOwotICAg
IHByaXZhdGUgYm9vbGVhbiBlbmFibGVFbmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25zOwotICAg
IHByaXZhdGUgYm9vbGVhbiByZXF1aXJlRnJhbWVFbmNyeXB0aW9uOwotCi0gICAgcHJpdmF0ZSBC
dWlsZGVyKCkge30KLQotICAgIHB1YmxpYyBCdWlsZGVyIHNldEVuYWJsZUdjbUNyeXB0b1N1aXRl
cyhib29sZWFuIGVuYWJsZUdjbUNyeXB0b1N1aXRlcykgewotICAgICAgdGhpcy5lbmFibGVHY21D
cnlwdG9TdWl0ZXMgPSBlbmFibGVHY21DcnlwdG9TdWl0ZXM7Ci0gICAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRFbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRv
Q2lwaGVyKGJvb2xlYW4gZW5hYmxlQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhlcikgewotICAgICAg
dGhpcy5lbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRvQ2lwaGVyID0gZW5hYmxlQWVzMTI4U2hhMV8z
MkNyeXB0b0NpcGhlcjsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHB1YmxpYyBC
dWlsZGVyIHNldEVuYWJsZUVuY3J5cHRlZFJ0cEhlYWRlckV4dGVuc2lvbnMoCi0gICAgICAgIGJv
b2xlYW4gZW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9ucykgewotICAgICAgdGhpcy5l
bmFibGVFbmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25zID0gZW5hYmxlRW5jcnlwdGVkUnRwSGVh
ZGVyRXh0ZW5zaW9uczsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHB1YmxpYyBC
dWlsZGVyIHNldFJlcXVpcmVGcmFtZUVuY3J5cHRpb24oYm9vbGVhbiByZXF1aXJlRnJhbWVFbmNy
eXB0aW9uKSB7Ci0gICAgICB0aGlzLnJlcXVpcmVGcmFtZUVuY3J5cHRpb24gPSByZXF1aXJlRnJh
bWVFbmNyeXB0aW9uOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgcHVibGljIENy
eXB0b09wdGlvbnMgY3JlYXRlQ3J5cHRvT3B0aW9ucygpIHsKLSAgICAgIHJldHVybiBuZXcgQ3J5
cHRvT3B0aW9ucyhlbmFibGVHY21DcnlwdG9TdWl0ZXMsIGVuYWJsZUFlczEyOFNoYTFfMzJDcnlw
dG9DaXBoZXIsCi0gICAgICAgICAgZW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9ucywg
cmVxdWlyZUZyYW1lRW5jcnlwdGlvbik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRGF0YUNoYW5uZWwuamF2YQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxZGFiOTdhZmYwNGE4OGNjZWFlNTFkZjcx
MjlmNDBiNzA5ZmFkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk1
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIERh
dGFDaGFubmVsSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIERhdGFDaGFubmVsIHsKLSAgLyoq
IEphdmEgd3JhcHBlciBmb3IgV2ViSURMIFJUQ0RhdGFDaGFubmVsLiAqLwotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIEluaXQgewotICAgIHB1YmxpYyBib29sZWFuIG9yZGVyZWQgPSB0cnVlOwotICAg
IC8vIE9wdGlvbmFsIHVuc2lnbmVkIHNob3J0IGluIFdlYklETCwgLTEgbWVhbnMgdW5zcGVjaWZp
ZWQuCi0gICAgcHVibGljIGludCBtYXhSZXRyYW5zbWl0VGltZU1zID0gLTE7Ci0gICAgLy8gT3B0
aW9uYWwgdW5zaWduZWQgc2hvcnQgaW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAg
ICBwdWJsaWMgaW50IG1heFJldHJhbnNtaXRzID0gLTE7Ci0gICAgcHVibGljIFN0cmluZyBwcm90
b2NvbCA9ICIiOwotICAgIHB1YmxpYyBib29sZWFuIG5lZ290aWF0ZWQ7Ci0gICAgLy8gT3B0aW9u
YWwgdW5zaWduZWQgc2hvcnQgaW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAgICBw
dWJsaWMgaW50IGlkID0gLTE7Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkluaXQiKQotICAgIGJv
b2xlYW4gZ2V0T3JkZXJlZCgpIHsKLSAgICAgIHJldHVybiBvcmRlcmVkOwotICAgIH0KLQotICAg
IEBDYWxsZWRCeU5hdGl2ZSgiSW5pdCIpCi0gICAgaW50IGdldE1heFJldHJhbnNtaXRUaW1lTXMo
KSB7Ci0gICAgICByZXR1cm4gbWF4UmV0cmFuc21pdFRpbWVNczsKLSAgICB9Ci0KLSAgICBAQ2Fs
bGVkQnlOYXRpdmUoIkluaXQiKQotICAgIGludCBnZXRNYXhSZXRyYW5zbWl0cygpIHsKLSAgICAg
IHJldHVybiBtYXhSZXRyYW5zbWl0czsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIklu
aXQiKQotICAgIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKLSAgICAgIHJldHVybiBwcm90b2NvbDsK
LSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkluaXQiKQotICAgIGJvb2xlYW4gZ2V0TmVn
b3RpYXRlZCgpIHsKLSAgICAgIHJldHVybiBuZWdvdGlhdGVkOwotICAgIH0KLQotICAgIEBDYWxs
ZWRCeU5hdGl2ZSgiSW5pdCIpCi0gICAgaW50IGdldElkKCkgewotICAgICAgcmV0dXJuIGlkOwot
ICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgQysrIERhdGFCdWZmZXIuICBUaGUg
YXRvbSBvZiBkYXRhIGluIGEgRGF0YUNoYW5uZWwuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3Mg
QnVmZmVyIHsKLSAgICAvKiogVGhlIHVuZGVybHlpbmcgZGF0YS4gKi8KLSAgICBwdWJsaWMgZmlu
YWwgQnl0ZUJ1ZmZlciBkYXRhOwotCi0gICAgLyoqCi0gICAgICogSW5kaWNhdGVzIHdoZXRoZXIg
fGRhdGF8IGNvbnRhaW5zIFVURi04IHRleHQgb3IgImJpbmFyeSBkYXRhIgotICAgICAqIChpLmUu
IGFueXRoaW5nIGVsc2UpLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGJpbmFy
eTsKLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiQnVmZmVyIikKLSAgICBwdWJsaWMgQnVmZmVyKEJ5
dGVCdWZmZXIgZGF0YSwgYm9vbGVhbiBiaW5hcnkpIHsKLSAgICAgIHRoaXMuZGF0YSA9IGRhdGE7
Ci0gICAgICB0aGlzLmJpbmFyeSA9IGJpbmFyeTsKLSAgICB9Ci0gIH0KLQotICAvKiogSmF2YSB2
ZXJzaW9uIG9mIEMrKyBEYXRhQ2hhbm5lbE9ic2VydmVyLiAqLwotICBwdWJsaWMgaW50ZXJmYWNl
IE9ic2VydmVyIHsKLSAgICAvKiogVGhlIGRhdGEgY2hhbm5lbCdzIGJ1ZmZlcmVkQW1vdW50IGhh
cyBjaGFuZ2VkLiAqLwotICAgIEBDYWxsZWRCeU5hdGl2ZSgiT2JzZXJ2ZXIiKSBwdWJsaWMgdm9p
ZCBvbkJ1ZmZlcmVkQW1vdW50Q2hhbmdlKGxvbmcgcHJldmlvdXNBbW91bnQpOwotICAgIC8qKiBU
aGUgZGF0YSBjaGFubmVsIHN0YXRlIGhhcyBjaGFuZ2VkLiAqLwotICAgIEBDYWxsZWRCeU5hdGl2
ZSgiT2JzZXJ2ZXIiKSBwdWJsaWMgdm9pZCBvblN0YXRlQ2hhbmdlKCk7Ci0gICAgLyoqCi0gICAg
ICogQSBkYXRhIGJ1ZmZlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLiAgTk9URTogfGJ1ZmZl
ci5kYXRhfCB3aWxsIGJlCi0gICAgICogZnJlZWQgb25jZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMg
c28gY2FsbGVycyB3aG8gd2FudCB0byB1c2UgdGhlIGRhdGEKLSAgICAgKiBhc3luY2hyb25vdXNs
eSBtdXN0IG1ha2Ugc3VyZSB0byBjb3B5IGl0IGZpcnN0LgotICAgICAqLwotICAgIEBDYWxsZWRC
eU5hdGl2ZSgiT2JzZXJ2ZXIiKSBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoQnVmZmVyIGJ1ZmZlcik7
Ci0gIH0KLQotICAvKiogS2VlcCBpbiBzeW5jIHdpdGggRGF0YUNoYW5uZWxJbnRlcmZhY2U6OkRh
dGFTdGF0ZS4gKi8KLSAgcHVibGljIGVudW0gU3RhdGUgewotICAgIENPTk5FQ1RJTkcsCi0gICAg
T1BFTiwKLSAgICBDTE9TSU5HLAotICAgIENMT1NFRDsKLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgi
U3RhdGUiKQotICAgIHN0YXRpYyBTdGF0ZSBmcm9tTmF0aXZlSW5kZXgoaW50IG5hdGl2ZUluZGV4
KSB7Ci0gICAgICByZXR1cm4gdmFsdWVzKClbbmF0aXZlSW5kZXhdOwotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgbG9uZyBuYXRpdmVEYXRhQ2hhbm5lbDsKLSAgcHJpdmF0ZSBsb25nIG5hdGl2ZU9i
c2VydmVyOwotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgRGF0YUNoYW5uZWwobG9uZyBu
YXRpdmVEYXRhQ2hhbm5lbCkgewotICAgIHRoaXMubmF0aXZlRGF0YUNoYW5uZWwgPSBuYXRpdmVE
YXRhQ2hhbm5lbDsKLSAgfQotCi0gIC8qKiBSZWdpc3RlciB8b2JzZXJ2ZXJ8LCByZXBsYWNpbmcg
YW55IHByZXZpb3VzbHktcmVnaXN0ZXJlZCBvYnNlcnZlci4gKi8KLSAgcHVibGljIHZvaWQgcmVn
aXN0ZXJPYnNlcnZlcihPYnNlcnZlciBvYnNlcnZlcikgewotICAgIGNoZWNrRGF0YUNoYW5uZWxF
eGlzdHMoKTsKLSAgICBpZiAobmF0aXZlT2JzZXJ2ZXIgIT0gMCkgewotICAgICAgbmF0aXZlVW5y
ZWdpc3Rlck9ic2VydmVyKG5hdGl2ZU9ic2VydmVyKTsKLSAgICB9Ci0gICAgbmF0aXZlT2JzZXJ2
ZXIgPSBuYXRpdmVSZWdpc3Rlck9ic2VydmVyKG9ic2VydmVyKTsKLSAgfQotCi0gIC8qKiBVbnJl
Z2lzdGVyIHRoZSAob25seSkgb2JzZXJ2ZXIuICovCi0gIHB1YmxpYyB2b2lkIHVucmVnaXN0ZXJP
YnNlcnZlcigpIHsKLSAgICBjaGVja0RhdGFDaGFubmVsRXhpc3RzKCk7Ci0gICAgbmF0aXZlVW5y
ZWdpc3Rlck9ic2VydmVyKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcg
bGFiZWwoKSB7Ci0gICAgY2hlY2tEYXRhQ2hhbm5lbEV4aXN0cygpOwotICAgIHJldHVybiBuYXRp
dmVMYWJlbCgpOwotICB9Ci0KLSAgcHVibGljIGludCBpZCgpIHsKLSAgICBjaGVja0RhdGFDaGFu
bmVsRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZUlkKCk7Ci0gIH0KLQotICBwdWJsaWMgU3Rh
dGUgc3RhdGUoKSB7Ci0gICAgY2hlY2tEYXRhQ2hhbm5lbEV4aXN0cygpOwotICAgIHJldHVybiBu
YXRpdmVTdGF0ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5
dGVzIG9mIGFwcGxpY2F0aW9uIGRhdGEgKFVURi04IHRleHQgYW5kIGJpbmFyeSBkYXRhKQotICAg
KiB0aGF0IGhhdmUgYmVlbiBxdWV1ZWQgdXNpbmcgU2VuZEJ1ZmZlciBidXQgaGF2ZSBub3QgeWV0
IGJlZW4gdHJhbnNtaXR0ZWQKLSAgICogdG8gdGhlIG5ldHdvcmsuCi0gICAqLwotICBwdWJsaWMg
bG9uZyBidWZmZXJlZEFtb3VudCgpIHsKLSAgICBjaGVja0RhdGFDaGFubmVsRXhpc3RzKCk7Ci0g
ICAgcmV0dXJuIG5hdGl2ZUJ1ZmZlcmVkQW1vdW50KCk7Ci0gIH0KLQotICAvKiogQ2xvc2UgdGhl
IGNoYW5uZWwuICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgIGNoZWNrRGF0YUNoYW5u
ZWxFeGlzdHMoKTsKLSAgICBuYXRpdmVDbG9zZSgpOwotICB9Ci0KLSAgLyoqIFNlbmQgfGRhdGF8
IHRvIHRoZSByZW1vdGUgcGVlcjsgcmV0dXJuIHN1Y2Nlc3MuICovCi0gIHB1YmxpYyBib29sZWFu
IHNlbmQoQnVmZmVyIGJ1ZmZlcikgewotICAgIGNoZWNrRGF0YUNoYW5uZWxFeGlzdHMoKTsKLSAg
ICAvLyBUT0RPKGZpc2NobWFuKTogdGhpcyBjb3VsZCBiZSBjbGV2ZXJlciBhYm91dCBhdm9pZGlu
ZyBjb3BpZXMgaWYgdGhlCi0gICAgLy8gQnl0ZUJ1ZmZlciBpcyBkaXJlY3QgYW5kL29yIGlzIGJh
Y2tlZCBieSBhbiBhcnJheS4KLSAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2J1ZmZlci5kYXRh
LnJlbWFpbmluZygpXTsKLSAgICBidWZmZXIuZGF0YS5nZXQoZGF0YSk7Ci0gICAgcmV0dXJuIG5h
dGl2ZVNlbmQoZGF0YSwgYnVmZmVyLmJpbmFyeSk7Ci0gIH0KLQotICAvKiogRGlzcG9zZSBvZiBu
YXRpdmUgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIHRoaXMgY2hhbm5lbC4gKi8KLSAgcHVibGljIHZv
aWQgZGlzcG9zZSgpIHsKLSAgICBjaGVja0RhdGFDaGFubmVsRXhpc3RzKCk7Ci0gICAgSm5pQ29t
bW9uLm5hdGl2ZVJlbGVhc2VSZWYobmF0aXZlRGF0YUNoYW5uZWwpOwotICAgIG5hdGl2ZURhdGFD
aGFubmVsID0gMDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBsb25nIGdldE5hdGl2ZURh
dGFDaGFubmVsKCkgewotICAgIHJldHVybiBuYXRpdmVEYXRhQ2hhbm5lbDsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBjaGVja0RhdGFDaGFubmVsRXhpc3RzKCkgewotICAgIGlmIChuYXRpdmVEYXRh
Q2hhbm5lbCA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJE
YXRhQ2hhbm5lbCBoYXMgYmVlbiBkaXNwb3NlZC4iKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IG5hdGl2ZSBsb25nIG5hdGl2ZVJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIgb2JzZXJ2ZXIpOwot
ICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVVucmVnaXN0ZXJPYnNlcnZlcihsb25nIG9ic2Vy
dmVyKTsKLSAgcHJpdmF0ZSBuYXRpdmUgU3RyaW5nIG5hdGl2ZUxhYmVsKCk7Ci0gIHByaXZhdGUg
bmF0aXZlIGludCBuYXRpdmVJZCgpOwotICBwcml2YXRlIG5hdGl2ZSBTdGF0ZSBuYXRpdmVTdGF0
ZSgpOwotICBwcml2YXRlIG5hdGl2ZSBsb25nIG5hdGl2ZUJ1ZmZlcmVkQW1vdW50KCk7Ci0gIHBy
aXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2xvc2UoKTsKLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVh
biBuYXRpdmVTZW5kKGJ5dGVbXSBkYXRhLCBib29sZWFuIGJpbmFyeSk7Ci19OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvRGVmYXVsdFZpZGVvRGVjb2RlckZhY3RvcnkuamF2YSBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2Vi
cnRjL0RlZmF1bHRWaWRlb0RlY29kZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDVmYjk4MTliNmU0YTNmMjEzMmUxZjc4YTkwMjM3NTY3NmMzZWJjYTAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRGVm
YXVsdFZpZGVvRGVjb2RlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFu
ZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7Ci0KLS8qKgotICogSGVscGVyIGNs
YXNzIHRoYXQgY29tYmluZXMgSFcgYW5kIFNXIGRlY29kZXJzLgotICovCi1wdWJsaWMgY2xhc3Mg
RGVmYXVsdFZpZGVvRGVjb2RlckZhY3RvcnkgaW1wbGVtZW50cyBWaWRlb0RlY29kZXJGYWN0b3J5
IHsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb0RlY29kZXJGYWN0b3J5IGhhcmR3YXJlVmlkZW9EZWNv
ZGVyRmFjdG9yeTsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb0RlY29kZXJGYWN0b3J5IHNvZnR3YXJl
VmlkZW9EZWNvZGVyRmFjdG9yeSA9IG5ldyBTb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkoKTsK
LSAgcHJpdmF0ZSBmaW5hbCBATnVsbGFibGUgVmlkZW9EZWNvZGVyRmFjdG9yeSBwbGF0Zm9ybVNv
ZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeTsKLQotICAvKioKLSAgICogQ3JlYXRlIGRlY29kZXIg
ZmFjdG9yeSB1c2luZyBkZWZhdWx0IGhhcmR3YXJlIGRlY29kZXIgZmFjdG9yeS4KLSAgICovCi0g
IHB1YmxpYyBEZWZhdWx0VmlkZW9EZWNvZGVyRmFjdG9yeShATnVsbGFibGUgRWdsQmFzZS5Db250
ZXh0IGVnbENvbnRleHQpIHsKLSAgICB0aGlzLmhhcmR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeSA9
IG5ldyBIYXJkd2FyZVZpZGVvRGVjb2RlckZhY3RvcnkoZWdsQ29udGV4dCk7Ci0gICAgdGhpcy5w
bGF0Zm9ybVNvZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeSA9IG5ldyBQbGF0Zm9ybVNvZnR3YXJl
VmlkZW9EZWNvZGVyRmFjdG9yeShlZ2xDb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVh
dGUgZGVjb2RlciBmYWN0b3J5IHVzaW5nIGV4cGxpY2l0IGhhcmR3YXJlIGRlY29kZXIgZmFjdG9y
eS4KLSAgICovCi0gIERlZmF1bHRWaWRlb0RlY29kZXJGYWN0b3J5KFZpZGVvRGVjb2RlckZhY3Rv
cnkgaGFyZHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5KSB7Ci0gICAgdGhpcy5oYXJkd2FyZVZpZGVv
RGVjb2RlckZhY3RvcnkgPSBoYXJkd2FyZVZpZGVvRGVjb2RlckZhY3Rvcnk7Ci0gICAgdGhpcy5w
bGF0Zm9ybVNvZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeSA9IG51bGw7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIEBOdWxsYWJsZSBWaWRlb0RlY29kZXIgY3JlYXRlRGVjb2RlcihWaWRl
b0NvZGVjSW5mbyBjb2RlY1R5cGUpIHsKLSAgICBWaWRlb0RlY29kZXIgc29mdHdhcmVEZWNvZGVy
ID0gc29mdHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5LmNyZWF0ZURlY29kZXIoY29kZWNUeXBlKTsK
LSAgICBmaW5hbCBWaWRlb0RlY29kZXIgaGFyZHdhcmVEZWNvZGVyID0gaGFyZHdhcmVWaWRlb0Rl
Y29kZXJGYWN0b3J5LmNyZWF0ZURlY29kZXIoY29kZWNUeXBlKTsKLSAgICBpZiAoc29mdHdhcmVE
ZWNvZGVyID09IG51bGwgJiYgcGxhdGZvcm1Tb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkgIT0g
bnVsbCkgewotICAgICAgc29mdHdhcmVEZWNvZGVyID0gcGxhdGZvcm1Tb2Z0d2FyZVZpZGVvRGVj
b2RlckZhY3RvcnkuY3JlYXRlRGVjb2Rlcihjb2RlY1R5cGUpOwotICAgIH0KLSAgICBpZiAoaGFy
ZHdhcmVEZWNvZGVyICE9IG51bGwgJiYgc29mdHdhcmVEZWNvZGVyICE9IG51bGwpIHsKLSAgICAg
IC8vIEJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHN1cHBvcnRlZCwgd3JhcCBpdCBpbiBhIHNv
ZnR3YXJlIGZhbGxiYWNrCi0gICAgICByZXR1cm4gbmV3IFZpZGVvRGVjb2RlckZhbGxiYWNrKAot
ICAgICAgICAgIC8qIGZhbGxiYWNrPSAqLyBzb2Z0d2FyZURlY29kZXIsIC8qIHByaW1hcnk9ICov
IGhhcmR3YXJlRGVjb2Rlcik7Ci0gICAgfQotICAgIHJldHVybiBoYXJkd2FyZURlY29kZXIgIT0g
bnVsbCA/IGhhcmR3YXJlRGVjb2RlciA6IHNvZnR3YXJlRGVjb2RlcjsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgVmlkZW9Db2RlY0luZm9bXSBnZXRTdXBwb3J0ZWRDb2RlY3MoKSB7Ci0g
ICAgTGlua2VkSGFzaFNldDxWaWRlb0NvZGVjSW5mbz4gc3VwcG9ydGVkQ29kZWNJbmZvcyA9IG5l
dyBMaW5rZWRIYXNoU2V0PFZpZGVvQ29kZWNJbmZvPigpOwotCi0gICAgc3VwcG9ydGVkQ29kZWNJ
bmZvcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkuZ2V0
U3VwcG9ydGVkQ29kZWNzKCkpKTsKLSAgICBzdXBwb3J0ZWRDb2RlY0luZm9zLmFkZEFsbChBcnJh
eXMuYXNMaXN0KGhhcmR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeS5nZXRTdXBwb3J0ZWRDb2RlY3Mo
KSkpOwotICAgIGlmIChwbGF0Zm9ybVNvZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeSAhPSBudWxs
KSB7Ci0gICAgICBzdXBwb3J0ZWRDb2RlY0luZm9zLmFkZEFsbCgKLSAgICAgICAgICBBcnJheXMu
YXNMaXN0KHBsYXRmb3JtU29mdHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5LmdldFN1cHBvcnRlZENv
ZGVjcygpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cHBvcnRlZENvZGVjSW5mb3MudG9BcnJh
eShuZXcgVmlkZW9Db2RlY0luZm9bc3VwcG9ydGVkQ29kZWNJbmZvcy5zaXplKCldKTsKLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRGVmYXVsdFZpZGVvRW5jb2RlckZhY3RvcnkuamF2
YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L2FwaS9vcmcvd2VicnRjL0RlZmF1bHRWaWRlb0VuY29kZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOWI0MTU3ZTVmNTA5YzVmMTBjOGZhOWU5MGU4NDRiMTZl
NmM1MDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvRGVmYXVsdFZpZGVvRW5jb2RlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDU2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGph
dmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7Ci0KLS8qKiBI
ZWxwZXIgY2xhc3MgdGhhdCBjb21iaW5lcyBIVyBhbmQgU1cgZW5jb2RlcnMuICovCi1wdWJsaWMg
Y2xhc3MgRGVmYXVsdFZpZGVvRW5jb2RlckZhY3RvcnkgaW1wbGVtZW50cyBWaWRlb0VuY29kZXJG
YWN0b3J5IHsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb0VuY29kZXJGYWN0b3J5IGhhcmR3YXJlVmlk
ZW9FbmNvZGVyRmFjdG9yeTsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb0VuY29kZXJGYWN0b3J5IHNv
ZnR3YXJlVmlkZW9FbmNvZGVyRmFjdG9yeSA9IG5ldyBTb2Z0d2FyZVZpZGVvRW5jb2RlckZhY3Rv
cnkoKTsKLQotICAvKiogQ3JlYXRlIGVuY29kZXIgZmFjdG9yeSB1c2luZyBkZWZhdWx0IGhhcmR3
YXJlIGVuY29kZXIgZmFjdG9yeS4gKi8KLSAgcHVibGljIERlZmF1bHRWaWRlb0VuY29kZXJGYWN0
b3J5KAotICAgICAgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQsIGJvb2xlYW4gZW5hYmxlSW50
ZWxWcDhFbmNvZGVyLCBib29sZWFuIGVuYWJsZUgyNjRIaWdoUHJvZmlsZSkgewotICAgIHRoaXMu
aGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5ID0KLSAgICAgICAgbmV3IEhhcmR3YXJlVmlkZW9F
bmNvZGVyRmFjdG9yeShlZ2xDb250ZXh0LCBlbmFibGVJbnRlbFZwOEVuY29kZXIsIGVuYWJsZUgy
NjRIaWdoUHJvZmlsZSk7Ci0gIH0KLQotICAvKiogQ3JlYXRlIGVuY29kZXIgZmFjdG9yeSB1c2lu
ZyBleHBsaWNpdCBoYXJkd2FyZSBlbmNvZGVyIGZhY3RvcnkuICovCi0gIERlZmF1bHRWaWRlb0Vu
Y29kZXJGYWN0b3J5KFZpZGVvRW5jb2RlckZhY3RvcnkgaGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0
b3J5KSB7Ci0gICAgdGhpcy5oYXJkd2FyZVZpZGVvRW5jb2RlckZhY3RvcnkgPSBoYXJkd2FyZVZp
ZGVvRW5jb2RlckZhY3Rvcnk7Ci0gIH0KLQotICBATnVsbGFibGUKLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBWaWRlb0VuY29kZXIgY3JlYXRlRW5jb2RlcihWaWRlb0NvZGVjSW5mbyBpbmZvKSB7Ci0g
ICAgZmluYWwgVmlkZW9FbmNvZGVyIHNvZnR3YXJlRW5jb2RlciA9IHNvZnR3YXJlVmlkZW9FbmNv
ZGVyRmFjdG9yeS5jcmVhdGVFbmNvZGVyKGluZm8pOwotICAgIGZpbmFsIFZpZGVvRW5jb2RlciBo
YXJkd2FyZUVuY29kZXIgPSBoYXJkd2FyZVZpZGVvRW5jb2RlckZhY3RvcnkuY3JlYXRlRW5jb2Rl
cihpbmZvKTsKLSAgICBpZiAoaGFyZHdhcmVFbmNvZGVyICE9IG51bGwgJiYgc29mdHdhcmVFbmNv
ZGVyICE9IG51bGwpIHsKLSAgICAgIC8vIEJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHN1cHBv
cnRlZCwgd3JhcCBpdCBpbiBhIHNvZnR3YXJlIGZhbGxiYWNrCi0gICAgICByZXR1cm4gbmV3IFZp
ZGVvRW5jb2RlckZhbGxiYWNrKAotICAgICAgICAgIC8qIGZhbGxiYWNrPSAqLyBzb2Z0d2FyZUVu
Y29kZXIsIC8qIHByaW1hcnk9ICovIGhhcmR3YXJlRW5jb2Rlcik7Ci0gICAgfQotICAgIHJldHVy
biBoYXJkd2FyZUVuY29kZXIgIT0gbnVsbCA/IGhhcmR3YXJlRW5jb2RlciA6IHNvZnR3YXJlRW5j
b2RlcjsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlkZW9Db2RlY0luZm9bXSBnZXRT
dXBwb3J0ZWRDb2RlY3MoKSB7Ci0gICAgTGlua2VkSGFzaFNldDxWaWRlb0NvZGVjSW5mbz4gc3Vw
cG9ydGVkQ29kZWNJbmZvcyA9IG5ldyBMaW5rZWRIYXNoU2V0PFZpZGVvQ29kZWNJbmZvPigpOwot
Ci0gICAgc3VwcG9ydGVkQ29kZWNJbmZvcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzb2Z0d2FyZVZp
ZGVvRW5jb2RlckZhY3RvcnkuZ2V0U3VwcG9ydGVkQ29kZWNzKCkpKTsKLSAgICBzdXBwb3J0ZWRD
b2RlY0luZm9zLmFkZEFsbChBcnJheXMuYXNMaXN0KGhhcmR3YXJlVmlkZW9FbmNvZGVyRmFjdG9y
eS5nZXRTdXBwb3J0ZWRDb2RlY3MoKSkpOwotCi0gICAgcmV0dXJuIHN1cHBvcnRlZENvZGVjSW5m
b3MudG9BcnJheShuZXcgVmlkZW9Db2RlY0luZm9bc3VwcG9ydGVkQ29kZWNJbmZvcy5zaXplKCld
KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRHRtZlNlbmRlci5qYXZhIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvRHRtZlNlbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NTQ5ODIzMDg5ZjU0MDNiMDY1OTA4NmQ2NDljN2Q3MDZkMjFmOTZlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0R0bWZTZW5kZXIuamF2
YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgRHRtZlNlbmRl
ckludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBEdG1mU2VuZGVyIHsKLSAgcHJpdmF0ZSBsb25n
IG5hdGl2ZUR0bWZTZW5kZXI7Ci0KLSAgcHVibGljIER0bWZTZW5kZXIobG9uZyBuYXRpdmVEdG1m
U2VuZGVyKSB7Ci0gICAgdGhpcy5uYXRpdmVEdG1mU2VuZGVyID0gbmF0aXZlRHRtZlNlbmRlcjsK
LSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBEdG1mU2VuZGVyIGlzIGNh
cGFibGUgb2Ygc2VuZGluZyBEVE1GLiBPdGhlcndpc2UgZmFsc2UuCi0gICAqLwotICBwdWJsaWMg
Ym9vbGVhbiBjYW5JbnNlcnREdG1mKCkgewotICAgIGNoZWNrRHRtZlNlbmRlckV4aXN0cygpOwot
ICAgIHJldHVybiBuYXRpdmVDYW5JbnNlcnREdG1mKG5hdGl2ZUR0bWZTZW5kZXIpOwotICB9Ci0K
LSAgLyoqCi0gICAqIFF1ZXVlcyBhIHRhc2sgdGhhdCBzZW5kcyB0aGUgcHJvdmlkZWQgRFRNRiB0
b25lcy4KLSAgICogPHA+Ci0gICAqIElmIGluc2VydER0bWYgaXMgY2FsbGVkIG9uIHRoZSBzYW1l
IG9iamVjdCB3aGlsZSBhbiBleGlzdGluZyB0YXNrIGZvciB0aGlzCi0gICAqIG9iamVjdCB0byBn
ZW5lcmF0ZSBEVE1GIGlzIHN0aWxsIHJ1bm5pbmcsIHRoZSBwcmV2aW91cyB0YXNrIGlzIGNhbmNl
bGVkLgotICAgKgotICAgKiBAcGFyYW0gdG9uZXMgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHRy
ZWF0ZWQgYXMgYSBzZXJpZXMgb2YgY2hhcmFjdGVycy4gVGhlIGNoYXJhY3RlcnMgMAotICAgKiAg
ICAgICAgICAgICAgICAgICAgIHRocm91Z2ggOSwgQSB0aHJvdWdoIEQsICMsIGFuZCAqIGdlbmVy
YXRlIHRoZSBhc3NvY2lhdGVkIERUTUYgdG9uZXMuIFRoZQotICAgKiAgICAgICAgICAgICAgICAg
ICAgIGNoYXJhY3RlcnMgYSB0byBkIGFyZSBlcXVpdmFsZW50IHRvIEEgdG8gRC4gVGhlIGNoYXJh
Y3RlciAnLCcgaW5kaWNhdGVzIGEKLSAgICogICAgICAgICAgICAgICAgICAgICBkZWxheSBvZiAy
IHNlY29uZHMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB0b25l
cwotICAgKiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gVW5yZWNvZ25pemVkIGNoYXJh
Y3RlcnMgYXJlIGlnbm9yZWQuCi0gICAqIEBwYXJhbSBkdXJhdGlvbiAgICAgSW5kaWNhdGVzIHRo
ZSBkdXJhdGlvbiBpbiBtcyB0byB1c2UgZm9yIGVhY2ggY2hhcmFjdGVyIHBhc3NlZCBpbiB0aGUg
dG9uZXMKLSAgICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuIFRoZSBkdXJhdGlvbiBj
YW5ub3QgYmUgbW9yZSB0aGFuIDYwMDAgb3IgbGVzcyB0aGFuIDcwLgotICAgKiBAcGFyYW0gaW50
ZXJUb25lR2FwIEluZGljYXRlcyB0aGUgZ2FwIGJldHdlZW4gdG9uZXMgaW4gbXMuIE11c3QgYmUg
YXQgbGVhc3QgNTAgbXMgYnV0IHNob3VsZCBiZQotICAgKiAgICAgICAgICAgICAgICAgICAgIGFz
IHNob3J0IGFzIHBvc3NpYmxlLgotICAgKiBAcmV0dXJuICAgICAgICAgICAgIHRydWUgb24gc3Vj
Y2VzcyBhbmQgZmFsc2Ugb24gZmFpbHVyZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGluc2Vy
dER0bWYoU3RyaW5nIHRvbmVzLCBpbnQgZHVyYXRpb24sIGludCBpbnRlclRvbmVHYXApIHsKLSAg
ICBjaGVja0R0bWZTZW5kZXJFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0aXZlSW5zZXJ0RHRtZihu
YXRpdmVEdG1mU2VuZGVyLCB0b25lcywgZHVyYXRpb24sIGludGVyVG9uZUdhcCk7Ci0gIH0KLQot
ICAvKioKLSAgICogQHJldHVybiBUaGUgdG9uZXMgcmVtYWluaW5nIHRvIGJlIHBsYXllZCBvdXQK
LSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9uZXMoKSB7Ci0gICAgY2hlY2tEdG1mU2VuZGVyRXhp
c3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZVRvbmVzKG5hdGl2ZUR0bWZTZW5kZXIpOwotICB9Ci0K
LSAgLyoqCi0gICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgdG9uZSBkdXJhdGlvbiB2YWx1ZSBpbiBt
cy4gVGhpcyB2YWx1ZSB3aWxsIGJlIHRoZSB2YWx1ZSBsYXN0IHNldCB2aWEgdGhlCi0gICAqICAg
ICAgICAgaW5zZXJ0RHRtZigpIG1ldGhvZCwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgMTAwIG1z
IGlmIGluc2VydER0bWYoKSB3YXMgbmV2ZXIgY2FsbGVkLgotICAgKi8KLSAgcHVibGljIGludCBk
dXJhdGlvbigpIHsKLSAgICBjaGVja0R0bWZTZW5kZXJFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0
aXZlRHVyYXRpb24obmF0aXZlRHRtZlNlbmRlcik7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVy
biBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYmV0d2Vlbi10b25lIGdhcCBpbiBtcy4gVGhpcyB2
YWx1ZSB3aWxsIGJlIHRoZSB2YWx1ZSBsYXN0IHNldAotICAgKiAgICAgICAgIHZpYSB0aGUgaW5z
ZXJ0RHRtZigpIG1ldGhvZCwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgNTAgbXMgaWYgaW5zZXJ0
RHRtZigpIHdhcyBuZXZlcgotICAgKiAgICAgICAgIGNhbGxlZC4KLSAgICovCi0gIHB1YmxpYyBp
bnQgaW50ZXJUb25lR2FwKCkgewotICAgIGNoZWNrRHRtZlNlbmRlckV4aXN0cygpOwotICAgIHJl
dHVybiBuYXRpdmVJbnRlclRvbmVHYXAobmF0aXZlRHRtZlNlbmRlcik7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNoZWNrRHRtZlNlbmRlckV4aXN0cygpOwotICAgIEpu
aUNvbW1vbi5uYXRpdmVSZWxlYXNlUmVmKG5hdGl2ZUR0bWZTZW5kZXIpOwotICAgIG5hdGl2ZUR0
bWZTZW5kZXIgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrRHRtZlNlbmRlckV4aXN0
cygpIHsKLSAgICBpZiAobmF0aXZlRHRtZlNlbmRlciA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJEdG1mU2VuZGVyIGhhcyBiZWVuIGRpc3Bvc2VkLiIpOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUNhbklu
c2VydER0bWYobG9uZyBkdG1mU2VuZGVyKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xl
YW4gbmF0aXZlSW5zZXJ0RHRtZigKLSAgICAgIGxvbmcgZHRtZlNlbmRlciwgU3RyaW5nIHRvbmVz
LCBpbnQgZHVyYXRpb24sIGludCBpbnRlclRvbmVHYXApOwotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgU3RyaW5nIG5hdGl2ZVRvbmVzKGxvbmcgZHRtZlNlbmRlcik7Ci0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBpbnQgbmF0aXZlRHVyYXRpb24obG9uZyBkdG1mU2VuZGVyKTsKLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIGludCBuYXRpdmVJbnRlclRvbmVHYXAobG9uZyBkdG1mU2VuZGVyKTsKLX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9FZ2xCYXNlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9FZ2xC
YXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxY2I5MDZjNWQ4MzRjYjM3
OTc0YmE2YTA4ZDYzYzg1ZmQxNTVlZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRWdsQmFzZS5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsMjU3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9p
ZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZh
Y2U7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRp
b24ua2hyb25vcy5lZ2wuRUdMMTA7Ci0KLS8qKgotICogSG9sZHMgRUdMIHN0YXRlIGFuZCB1dGls
aXR5IG1ldGhvZHMgZm9yIGhhbmRsaW5nIGFuIGVnbCAxLjAgRUdMQ29udGV4dCwgYW4gRUdMRGlz
cGxheSwKLSAqIGFuZCBhbiBFR0xTdXJmYWNlLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVnbEJh
c2UgewotICAvLyBFR0wgd3JhcHBlciBmb3IgYW4gYWN0dWFsIEVHTENvbnRleHQuCi0gIHB1Ymxp
YyBpbnRlcmZhY2UgQ29udGV4dCB7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBsb25nIE5PX0NP
TlRFWFQgPSAwOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBFR0wgY29udGV4dCB0aGF0
IGNhbiBiZSB1c2VkIGJ5IG5hdGl2ZSBjb2RlLiBSZXR1cm5zIE5PX0NPTlRFWFQgaWYgdGhlIG1l
dGhvZCBpcwotICAgICAqIHVuc3VwcG9ydGVkLgotICAgICAqCi0gICAgICogQG5vdGUgVGhpcyBp
cyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgZm9yIEVHTCAxLjQgYW5kIG5vdCBmb3IgRUdMIDEu
MC4KLSAgICAgKi8KLSAgICBsb25nIGdldE5hdGl2ZUVnbENvbnRleHQoKTsKLSAgfQotCi0gIC8v
IEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgRUdMIGNhbiBiZSB1c2VkIGZyb20gbXVs
dGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lIGlmIGVhY2gKLSAgLy8gdGhyZWFkIGhhcyBp
dHMgb3duIEVHTENvbnRleHQsIGJ1dCBpbiBwcmFjdGljZSBpdCBkZWFkbG9ja3Mgb24gc29tZSBk
ZXZpY2VzIHdoZW4gZG9pbmcgdGhpcy4KLSAgLy8gVGhlcmVmb3JlLCBzeW5jaHJvbml6ZSBvbiB0
aGlzIGdsb2JhbCBsb2NrIGJlZm9yZSBjYWxsaW5nIGRhbmdlcm91cyBFR0wgZnVuY3Rpb25zIHRo
YXQgbWlnaHQKLSAgLy8gZGVhZGxvY2suIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Av
d2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTcwMiBmb3IgbW9yZSBpbmZvLgotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgpOwotCi0gIC8vIFRoZXNlIGNvbnN0
YW50cyBhcmUgdGFrZW4gZnJvbSBFR0wxNC5FR0xfT1BFTkdMX0VTMl9CSVQgYW5kIEVHTDE0LkVH
TF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLgotICAvLyBodHRwczovL2FuZHJvaWQuZ29vZ2xlc291
cmNlLmNvbS9wbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UvKy9tYXN0ZXIvb3BlbmdsL2phdmEvYW5k
cm9pZC9vcGVuZ2wvRUdMMTQuamF2YQotICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEdsU3Vy
ZmFjZVZpZXcgZG9lczoKLSAgLy8gaHR0cDovL2dyZXBjb2RlLmNvbS9maWxlL3JlcG9zaXRvcnku
Z3JlcGNvZGUuY29tL2phdmEvZXh0L2NvbS5nb29nbGUuYW5kcm9pZC9hbmRyb2lkLzUuMS4xX3Ix
L2FuZHJvaWQvb3BlbmdsL0dMU3VyZmFjZVZpZXcuamF2YSM3NjAKLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgRUdMX09QRU5HTF9FUzJfQklUID0gNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBp
bnQgRUdMX09QRU5HTF9FUzNfQklUID0gMHg0MDsKLSAgLy8gQW5kcm9pZC1zcGVjaWZpYyBleHRl
bnNpb24uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVHTF9SRUNPUkRBQkxFX0FORFJPSUQg
PSAweDMxNDI7Ci0KLSAgcHVibGljIHN0YXRpYyBDb25maWdCdWlsZGVyIGNvbmZpZ0J1aWxkZXIo
KSB7Ci0gICAgcmV0dXJuIG5ldyBDb25maWdCdWlsZGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIENvbmZpZ0J1aWxkZXIgewotICAgIHByaXZhdGUgaW50IG9wZW5HbGVzVmVyc2lv
biA9IDI7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGhhc0FscGhhQ2hhbm5lbDsKLSAgICBwcml2YXRl
IGJvb2xlYW4gc3VwcG9ydHNQaXhlbEJ1ZmZlcjsKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNSZWNv
cmRhYmxlOwotCi0gICAgcHVibGljIENvbmZpZ0J1aWxkZXIgc2V0T3BlbkdsZXNWZXJzaW9uKGlu
dCB2ZXJzaW9uKSB7Ci0gICAgICBpZiAodmVyc2lvbiA8IDEgfHwgdmVyc2lvbiA+IDMpIHsKLSAg
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT3BlbkdMIEVTIHZlcnNp
b24gIiArIHZlcnNpb24gKyAiIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgIH0KLSAgICAgIHRoaXMu
b3BlbkdsZXNWZXJzaW9uID0gdmVyc2lvbjsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQot
ICAgIHB1YmxpYyBDb25maWdCdWlsZGVyIHNldEhhc0FscGhhQ2hhbm5lbChib29sZWFuIGhhc0Fs
cGhhQ2hhbm5lbCkgewotICAgICAgdGhpcy5oYXNBbHBoYUNoYW5uZWwgPSBoYXNBbHBoYUNoYW5u
ZWw7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29uZmlnQnVpbGRl
ciBzZXRTdXBwb3J0c1BpeGVsQnVmZmVyKGJvb2xlYW4gc3VwcG9ydHNQaXhlbEJ1ZmZlcikgewot
ICAgICAgdGhpcy5zdXBwb3J0c1BpeGVsQnVmZmVyID0gc3VwcG9ydHNQaXhlbEJ1ZmZlcjsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHB1YmxpYyBDb25maWdCdWlsZGVyIHNldElz
UmVjb3JkYWJsZShib29sZWFuIGlzUmVjb3JkYWJsZSkgewotICAgICAgdGhpcy5pc1JlY29yZGFi
bGUgPSBpc1JlY29yZGFibGU7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50W10gY3JlYXRlQ29uZmlnQXR0cmlidXRlcygpIHsKLSAgICAgIEFycmF5TGlzdDxJbnRl
Z2VyPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICBsaXN0LmFkZChFR0wxMC5FR0xf
UkVEX1NJWkUpOwotICAgICAgbGlzdC5hZGQoOCk7Ci0gICAgICBsaXN0LmFkZChFR0wxMC5FR0xf
R1JFRU5fU0laRSk7Ci0gICAgICBsaXN0LmFkZCg4KTsKLSAgICAgIGxpc3QuYWRkKEVHTDEwLkVH
TF9CTFVFX1NJWkUpOwotICAgICAgbGlzdC5hZGQoOCk7Ci0gICAgICBpZiAoaGFzQWxwaGFDaGFu
bmVsKSB7Ci0gICAgICAgIGxpc3QuYWRkKEVHTDEwLkVHTF9BTFBIQV9TSVpFKTsKLSAgICAgICAg
bGlzdC5hZGQoOCk7Ci0gICAgICB9Ci0gICAgICBpZiAob3BlbkdsZXNWZXJzaW9uID09IDIgfHwg
b3BlbkdsZXNWZXJzaW9uID09IDMpIHsKLSAgICAgICAgbGlzdC5hZGQoRUdMMTAuRUdMX1JFTkRF
UkFCTEVfVFlQRSk7Ci0gICAgICAgIGxpc3QuYWRkKG9wZW5HbGVzVmVyc2lvbiA9PSAzID8gRUdM
X09QRU5HTF9FUzNfQklUIDogRUdMX09QRU5HTF9FUzJfQklUKTsKLSAgICAgIH0KLSAgICAgIGlm
IChzdXBwb3J0c1BpeGVsQnVmZmVyKSB7Ci0gICAgICAgIGxpc3QuYWRkKEVHTDEwLkVHTF9TVVJG
QUNFX1RZUEUpOwotICAgICAgICBsaXN0LmFkZChFR0wxMC5FR0xfUEJVRkZFUl9CSVQpOwotICAg
ICAgfQotICAgICAgaWYgKGlzUmVjb3JkYWJsZSkgewotICAgICAgICBsaXN0LmFkZChFR0xfUkVD
T1JEQUJMRV9BTkRST0lEKTsKLSAgICAgICAgbGlzdC5hZGQoMSk7Ci0gICAgICB9Ci0gICAgICBs
aXN0LmFkZChFR0wxMC5FR0xfTk9ORSk7Ci0KLSAgICAgIGZpbmFsIGludFtdIHJlcyA9IG5ldyBp
bnRbbGlzdC5zaXplKCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJlc1tpXSA9IGxpc3QuZ2V0KGkpOwotICAgICAgfQotICAgICAgcmV0
dXJuIHJlczsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludFtdIENPTkZJ
R19QTEFJTiA9IGNvbmZpZ0J1aWxkZXIoKS5jcmVhdGVDb25maWdBdHRyaWJ1dGVzKCk7Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1JHQkEgPQotICAgICAgY29uZmlnQnVpbGRl
cigpLnNldEhhc0FscGhhQ2hhbm5lbCh0cnVlKS5jcmVhdGVDb25maWdBdHRyaWJ1dGVzKCk7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1BJWEVMX0JVRkZFUiA9Ci0gICAgICBj
b25maWdCdWlsZGVyKCkuc2V0U3VwcG9ydHNQaXhlbEJ1ZmZlcih0cnVlKS5jcmVhdGVDb25maWdB
dHRyaWJ1dGVzKCk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1BJWEVMX1JH
QkFfQlVGRkVSID0gY29uZmlnQnVpbGRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRIYXNBbHBoYUNoYW5uZWwodHJ1ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLnNldFN1cHBvcnRzUGl4ZWxCdWZmZXIodHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUNvbmZpZ0F0dHJpYnV0
ZXMoKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBDT05GSUdfUkVDT1JEQUJMRSA9Ci0g
ICAgICBjb25maWdCdWlsZGVyKCkuc2V0SXNSZWNvcmRhYmxlKHRydWUpLmNyZWF0ZUNvbmZpZ0F0
dHJpYnV0ZXMoKTsKLQotICBzdGF0aWMgaW50IGdldE9wZW5HbGVzVmVyc2lvbkZyb21Db25maWco
aW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmln
QXR0cmlidXRlcy5sZW5ndGggLSAxOyArK2kpIHsKLSAgICAgIGlmIChjb25maWdBdHRyaWJ1dGVz
W2ldID09IEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUpIHsKLSAgICAgICAgc3dpdGNoIChjb25m
aWdBdHRyaWJ1dGVzW2kgKyAxXSkgewotICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9FUzJfQklU
OgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0VTM19C
SVQ6Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gRGVmYXVsdCB0
byBWMSBpZiBubyByZW5kZXJhYmxlIHR5cGUgaXMgc3BlY2lmaWVkLgotICAgIHJldHVybiAxOwot
ICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmll
ZCBjb25maWcgYXR0cmlidXRlcywgc2hhcmluZyBkYXRhIHdpdGggfHNoYXJlZENvbnRleHR8Lgot
ICAgKiBJZiB8c2hhcmVkQ29udGV4dHwgaXMgbnVsbCwgYSByb290IGNvbnRleHQgaXMgY3JlYXRl
ZC4gVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBjcmVhdGUgYW4gRUdMCi0gICAqIDEuNCBjb250
ZXh0IGlmIHBvc3NpYmxlLCBhbmQgYW4gRUdMIDEuMCBjb250ZXh0IG90aGVyd2lzZS4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgRWdsQmFzZSBjcmVhdGUoQE51bGxhYmxlIENvbnRleHQgc2hhcmVk
Q29udGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIGlmIChzaGFyZWRDb250ZXh0
ID09IG51bGwpIHsKLSAgICAgIHJldHVybiBFZ2xCYXNlMTRJbXBsLmlzRUdMMTRTdXBwb3J0ZWQo
KSA/IGNyZWF0ZUVnbDE0KGNvbmZpZ0F0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVFZ2wxMChjb25maWdBdHRyaWJ1dGVzKTsK
LSAgICB9IGVsc2UgaWYgKHNoYXJlZENvbnRleHQgaW5zdGFuY2VvZiBFZ2xCYXNlMTQuQ29udGV4
dCkgewotICAgICAgcmV0dXJuIGNyZWF0ZUVnbDE0KChFZ2xCYXNlMTQuQ29udGV4dCkgc2hhcmVk
Q29udGV4dCwgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIGlmIChzaGFyZWRDb250ZXh0
IGluc3RhbmNlb2YgRWdsQmFzZTEwLkNvbnRleHQpIHsKLSAgICAgIHJldHVybiBjcmVhdGVFZ2wx
MCgoRWdsQmFzZTEwLkNvbnRleHQpIHNoYXJlZENvbnRleHQsIGNvbmZpZ0F0dHJpYnV0ZXMpOwot
ICAgIH0KLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnJlY29nbml6
ZWQgQ29udGV4dCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3Jl
YXRpbmcgYSBwbGFpbiByb290IGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gY3Jl
YXRlIGFuIEVHTCAxLjQKLSAgICogY29udGV4dCBpZiBwb3NzaWJsZSwgYW5kIGFuIEVHTCAxLjAg
Y29udGV4dCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UgY3JlYXRl
KCkgewotICAgIHJldHVybiBjcmVhdGUobnVsbCAvKiBzaGFkZXJDb250ZXh0ICovLCBDT05GSUdf
UExBSU4pOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcg
YSBwbGFpbiBjb250ZXh0LCBzaGFyaW5nIGRhdGEgd2l0aCB8c2hhcmVkQ29udGV4dHwuIFRoaXMg
ZnVuY3Rpb24KLSAgICogd2lsbCB0cnkgdG8gY3JlYXRlIGFuIEVHTCAxLjQgY29udGV4dCBpZiBw
b3NzaWJsZSwgYW5kIGFuIEVHTCAxLjAgY29udGV4dCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIEVnbEJhc2UgY3JlYXRlKENvbnRleHQgc2hhcmVkQ29udGV4dCkgewotICAgIHJl
dHVybiBjcmVhdGUoc2hhcmVkQ29udGV4dCwgQ09ORklHX1BMQUlOKTsKLSAgfQotCi0gIC8qKiBF
eHBsaWNpdGx5IGNyZWF0ZSBhIHJvb3QgRUdsIDEuMCBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmll
ZCBjb25maWcgYXR0cmlidXRlcy4gKi8KLSAgcHVibGljIHN0YXRpYyBFZ2xCYXNlMTAgY3JlYXRl
RWdsMTAoaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIHJldHVybiBuZXcgRWdsQmFzZTEw
SW1wbCgvKiBzaGFyZWRDb250ZXh0PSAqLyBudWxsLCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBFeHBsaWNpdGx5IGNyZWF0ZSBhIHJvb3QgRUdsIDEuMCBjb250ZXh0IHdp
dGggdGhlIHNwZWNpZmllZCBjb25maWcgYXR0cmlidXRlcyBhbmQgc2hhcmVkCi0gICAqIGNvbnRl
eHQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UxMCBjcmVhdGVFZ2wxMChFZ2xCYXNl
MTAuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0gICAg
cmV0dXJuIG5ldyBFZ2xCYXNlMTBJbXBsKAotICAgICAgICBzaGFyZWRDb250ZXh0ID09IG51bGwg
PyBudWxsIDogc2hhcmVkQ29udGV4dC5nZXRSYXdDb250ZXh0KCksIGNvbmZpZ0F0dHJpYnV0ZXMp
OwotICB9Ci0KLSAgLyoqCi0gICAqIEV4cGxpY2l0bHkgY3JlYXRlIGEgcm9vdCBFR2wgMS4wIGNv
bnRleHQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyBhdHRyaWJ1dGVzCi0gICAqIGFuZCBzaGFy
ZWQgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRWdsQmFzZTEwIGNyZWF0ZUVnbDEw
KAotICAgICAgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbnRleHQgc2hhcmVk
Q29udGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIHJldHVybiBuZXcgRWdsQmFz
ZTEwSW1wbChzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgfQotCi0gIC8qKiBF
eHBsaWNpdGx5IGNyZWF0ZSBhIHJvb3QgRUdsIDEuNCBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmll
ZCBjb25maWcgYXR0cmlidXRlcy4gKi8KLSAgcHVibGljIHN0YXRpYyBFZ2xCYXNlMTQgY3JlYXRl
RWdsMTQoaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIHJldHVybiBuZXcgRWdsQmFzZTE0
SW1wbCgvKiBzaGFyZWRDb250ZXh0PSAqLyBudWxsLCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBFeHBsaWNpdGx5IGNyZWF0ZSBhIHJvb3QgRUdsIDEuNCBjb250ZXh0IHdp
dGggdGhlIHNwZWNpZmllZCBjb25maWcgYXR0cmlidXRlcyBhbmQgc2hhcmVkCi0gICAqIGNvbnRl
eHQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UxNCBjcmVhdGVFZ2wxNChFZ2xCYXNl
MTQuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0gICAg
cmV0dXJuIG5ldyBFZ2xCYXNlMTRJbXBsKAotICAgICAgICBzaGFyZWRDb250ZXh0ID09IG51bGwg
PyBudWxsIDogc2hhcmVkQ29udGV4dC5nZXRSYXdDb250ZXh0KCksIGNvbmZpZ0F0dHJpYnV0ZXMp
OwotICB9Ci0KLSAgLyoqCi0gICAqIEV4cGxpY2l0bHkgY3JlYXRlIGEgcm9vdCBFR2wgMS40IGNv
bnRleHQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyBhdHRyaWJ1dGVzCi0gICAqIGFuZCBzaGFy
ZWQgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRWdsQmFzZTE0IGNyZWF0ZUVnbDE0
KAotICAgICAgYW5kcm9pZC5vcGVuZ2wuRUdMQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBj
b25maWdBdHRyaWJ1dGVzKSB7Ci0gICAgcmV0dXJuIG5ldyBFZ2xCYXNlMTRJbXBsKHNoYXJlZENv
bnRleHQsIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICB9Ci0KLSAgdm9pZCBjcmVhdGVTdXJmYWNlKFN1
cmZhY2Ugc3VyZmFjZSk7Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9p
ZCBTdXJmYWNlVGV4dHVyZS4KLSAgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZhY2VUZXh0dXJlIHN1
cmZhY2VUZXh0dXJlKTsKLQotICAvLyBDcmVhdGUgZHVtbXkgMXgxIHBpeGVsIGJ1ZmZlciBzdXJm
YWNlIHNvIHRoZSBjb250ZXh0IGNhbiBiZSBtYWRlIGN1cnJlbnQuCi0gIHZvaWQgY3JlYXRlRHVt
bXlQYnVmZmVyU3VyZmFjZSgpOwotCi0gIHZvaWQgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KTsKLQotICBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCk7Ci0KLSAg
Ym9vbGVhbiBoYXNTdXJmYWNlKCk7Ci0KLSAgaW50IHN1cmZhY2VXaWR0aCgpOwotCi0gIGludCBz
dXJmYWNlSGVpZ2h0KCk7Ci0KLSAgdm9pZCByZWxlYXNlU3VyZmFjZSgpOwotCi0gIHZvaWQgcmVs
ZWFzZSgpOwotCi0gIHZvaWQgbWFrZUN1cnJlbnQoKTsKLQotICAvLyBEZXRhY2ggdGhlIGN1cnJl
bnQgRUdMIGNvbnRleHQsIHNvIHRoYXQgaXQgY2FuIGJlIG1hZGUgY3VycmVudCBvbiBhbm90aGVy
IHRocmVhZC4KLSAgdm9pZCBkZXRhY2hDdXJyZW50KCk7Ci0KLSAgdm9pZCBzd2FwQnVmZmVycygp
OwotCi0gIHZvaWQgc3dhcEJ1ZmZlcnMobG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbXBOcyk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTAuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0Vn
bEJhc2UxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGIwYTNjMGQwM2M3
ZTQ3YjEzYWI2MTQyMmVlODFjZTdhODg5Y2Q0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0VnbEJhc2UxMC5qYXZhCisrKyAvZGV2L251
bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbnRleHQ7
Ci0KLS8qKiBFR0wgMS4wIGltcGxlbWVudGF0aW9uIG9mIEVnbEJhc2UuICovCi1wdWJsaWMgaW50
ZXJmYWNlIEVnbEJhc2UxMCBleHRlbmRzIEVnbEJhc2UgewotICBpbnRlcmZhY2UgQ29udGV4dCBl
eHRlbmRzIEVnbEJhc2UuQ29udGV4dCB7Ci0gICAgRUdMQ29udGV4dCBnZXRSYXdDb250ZXh0KCk7
Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0VnbEJhc2UxNC5qYXZhIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93
ZWJydGMvRWdsQmFzZTE0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Yzg5
YzQ0ZGMwNDNmYjJkMWY5ZjZjYmE1ODdjYTYzYzFkOWU0N2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRWdsQmFzZTE0LmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE5IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0xDb250ZXh0OwotCi0vKiog
RUdMIDEuNCBpbXBsZW1lbnRhdGlvbiBvZiBFZ2xCYXNlLiAqLwotcHVibGljIGludGVyZmFjZSBF
Z2xCYXNlMTQgZXh0ZW5kcyBFZ2xCYXNlIHsKLSAgaW50ZXJmYWNlIENvbnRleHQgZXh0ZW5kcyBF
Z2xCYXNlLkNvbnRleHQgewotICAgIEVHTENvbnRleHQgZ2V0UmF3Q29udGV4dCgpOwotICB9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
RWdsUmVuZGVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwNGU3YzFk
YTZkNGNjN2Q0NTQyYWFiYWMxODc2NjU1NzA2OTE1Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsNzg1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFu
ZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRl
eHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3Mu
SGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9p
ZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQu
c3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNl
OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxG
b3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRl
cmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBv
cnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKgotICogSW1wbGVtZW50cyBW
aWRlb1NpbmsgYnkgZGlzcGxheWluZyB0aGUgdmlkZW8gc3RyZWFtIG9uIGFuIEVHTCBTdXJmYWNl
LiBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvCi0gKiBiZSB1c2VkIGFzIGEgaGVscGVyIGNsYXNz
IGZvciByZW5kZXJpbmcgb24gU3VyZmFjZVZpZXdzIGFuZCBUZXh0dXJlVmlld3MuCi0gKi8KLXB1
YmxpYyBjbGFzcyBFZ2xSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvU2luayB7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRWdsUmVuZGVyZXIiOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBsb25nIExPR19JTlRFUlZBTF9TRUMgPSA0OwotCi0gIHB1YmxpYyBpbnRlcmZhY2Ug
RnJhbWVMaXN0ZW5lciB7IHZvaWQgb25GcmFtZShCaXRtYXAgZnJhbWUpOyB9Ci0KLSAgLyoqIENh
bGxiYWNrIGZvciBjbGllbnRzIHRvIGJlIG5vdGlmaWVkIGFib3V0IGVycm9ycyBlbmNvdW50ZXJl
ZCBkdXJpbmcgcmVuZGVyaW5nLiAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBFcnJvckNh
bGxiYWNrIHsKLSAgICAvKiogQ2FsbGVkIGlmIEdMRVMyMC5HTF9PVVRfT0ZfTUVNT1JZIGlzIGVu
Y291bnRlcmVkIGR1cmluZyByZW5kZXJpbmcuICovCi0gICAgdm9pZCBvbkdsT3V0T2ZNZW1vcnko
KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEZyYW1lTGlzdGVuZXJBbmRQYXJhbXMg
ewotICAgIHB1YmxpYyBmaW5hbCBGcmFtZUxpc3RlbmVyIGxpc3RlbmVyOwotICAgIHB1YmxpYyBm
aW5hbCBmbG9hdCBzY2FsZTsKLSAgICBwdWJsaWMgZmluYWwgUmVuZGVyZXJDb21tb24uR2xEcmF3
ZXIgZHJhd2VyOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGFwcGx5RnBzUmVkdWN0aW9uOwot
Ci0gICAgcHVibGljIEZyYW1lTGlzdGVuZXJBbmRQYXJhbXMoRnJhbWVMaXN0ZW5lciBsaXN0ZW5l
ciwgZmxvYXQgc2NhbGUsCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlciwg
Ym9vbGVhbiBhcHBseUZwc1JlZHVjdGlvbikgewotICAgICAgdGhpcy5saXN0ZW5lciA9IGxpc3Rl
bmVyOwotICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlOwotICAgICAgdGhpcy5kcmF3ZXIgPSBkcmF3
ZXI7Ci0gICAgICB0aGlzLmFwcGx5RnBzUmVkdWN0aW9uID0gYXBwbHlGcHNSZWR1Y3Rpb247Ci0g
ICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBFZ2xTdXJmYWNlQ3JlYXRpb24gaW1wbGVtZW50
cyBSdW5uYWJsZSB7Ci0gICAgcHJpdmF0ZSBPYmplY3Qgc3VyZmFjZTsKLQotICAgIC8vIFRPRE8o
YnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBz
dXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RD
aGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFN1cmZhY2UoT2JqZWN0IHN1
cmZhY2UpIHsKLSAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNo
cm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJO
b1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
cnVuKCkgewotICAgICAgaWYgKHN1cmZhY2UgIT0gbnVsbCAmJiBlZ2xCYXNlICE9IG51bGwgJiYg
IWVnbEJhc2UuaGFzU3VyZmFjZSgpKSB7Ci0gICAgICAgIGlmIChzdXJmYWNlIGluc3RhbmNlb2Yg
U3VyZmFjZSkgewotICAgICAgICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZSgoU3VyZmFjZSkgc3Vy
ZmFjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3VyZmFjZSBpbnN0YW5jZW9mIFN1cmZhY2VUZXh0
dXJlKSB7Ci0gICAgICAgICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKChTdXJmYWNlVGV4dHVyZSkg
c3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiSW52YWxpZCBzdXJmYWNlOiAiICsgc3VyZmFjZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgICAvLyBOZWNlc3NhcnkgZm9y
IFlVViBmcmFtZXMgd2l0aCBvZGQgd2lkdGguCi0gICAgICAgIEdMRVMyMC5nbFBpeGVsU3RvcmVp
KEdMRVMyMC5HTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICAvKioKLSAgICogSGFuZGxlciB0aGF0IHRyaWdnZXJzIGEgY2FsbGJhY2sgd2hlbiBhbiB1bmNh
dWdodCBleGNlcHRpb24gaGFwcGVucyB3aGVuIGhhbmRsaW5nIGEgbWVzc2FnZS4KLSAgICovCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIEhhbmRsZXJXaXRoRXhjZXB0aW9uQ2FsbGJhY2sgZXh0ZW5k
cyBIYW5kbGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIGV4Y2VwdGlvbkNhbGxiYWNr
OwotCi0gICAgcHVibGljIEhhbmRsZXJXaXRoRXhjZXB0aW9uQ2FsbGJhY2soTG9vcGVyIGxvb3Bl
ciwgUnVubmFibGUgZXhjZXB0aW9uQ2FsbGJhY2spIHsKLSAgICAgIHN1cGVyKGxvb3Blcik7Ci0g
ICAgICB0aGlzLmV4Y2VwdGlvbkNhbGxiYWNrID0gZXhjZXB0aW9uQ2FsbGJhY2s7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hNZXNzYWdlKE1lc3NhZ2Ug
bXNnKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzdXBlci5kaXNwYXRjaE1lc3NhZ2UobXNnKTsK
LSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJF
eGNlcHRpb24gb24gRWdsUmVuZGVyZXIgdGhyZWFkIiwgZSk7Ci0gICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrLnJ1bigpOwotICAgICAgICB0aHJvdyBlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgbmFtZTsKLQotICAvLyB8cmVuZGVyVGhyZWFkSGFuZGxl
cnwgaXMgYSBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggfHJlbmRlclRocmVhZHwsIGFu
ZCBpcyBzeW5jaHJvbml6ZWQKLSAgLy8gb24gfGhhbmRsZXJMb2NrfC4KLSAgcHJpdmF0ZSBmaW5h
bCBPYmplY3QgaGFuZGxlckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIEBOdWxsYWJsZSBwcml2YXRl
IEhhbmRsZXIgcmVuZGVyVGhyZWFkSGFuZGxlcjsKLQotICBwcml2YXRlIGZpbmFsIEFycmF5TGlz
dDxGcmFtZUxpc3RlbmVyQW5kUGFyYW1zPiBmcmFtZUxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8
PigpOwotCi0gIHByaXZhdGUgdm9sYXRpbGUgRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrOwot
Ci0gIC8vIFZhcmlhYmxlcyBmb3IgZnBzIHJlZHVjdGlvbi4KLSAgcHJpdmF0ZSBmaW5hbCBPYmpl
Y3QgZnBzUmVkdWN0aW9uTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgLy8gVGltZSBmb3Igd2hlbiBu
ZXh0IGZyYW1lIHNob3VsZCBiZSByZW5kZXJlZC4KLSAgcHJpdmF0ZSBsb25nIG5leHRGcmFtZVRp
bWVOczsKLSAgLy8gTWluaW11bSBkdXJhdGlvbiBiZXR3ZWVuIGZyYW1lcyB3aGVuIGZwcyByZWR1
Y3Rpb24gaXMgYWN0aXZlLCBvciAtMSBpZiB2aWRlbyBpcyBjb21wbGV0ZWx5Ci0gIC8vIHBhdXNl
ZC4KLSAgcHJpdmF0ZSBsb25nIG1pblJlbmRlclBlcmlvZE5zOwotCi0gIC8vIEVHTCBhbmQgR0wg
cmVzb3VyY2VzIGZvciBkcmF3aW5nIFlVVi9PRVMgdGV4dHVyZXMuIEFmdGVyIGluaXRpYWxpemF0
aW9uLCB0aGVzZSBhcmUgb25seQotICAvLyBhY2Nlc3NlZCBmcm9tIHRoZSByZW5kZXIgdGhyZWFk
LgotICBATnVsbGFibGUgcHJpdmF0ZSBFZ2xCYXNlIGVnbEJhc2U7Ci0gIHByaXZhdGUgZmluYWwg
VmlkZW9GcmFtZURyYXdlciBmcmFtZURyYXdlcjsKLSAgQE51bGxhYmxlIHByaXZhdGUgUmVuZGVy
ZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyOwotICBwcml2YXRlIGJvb2xlYW4gdXNlUHJlc2VudGF0
aW9uVGltZVN0YW1wOwotICBwcml2YXRlIGZpbmFsIE1hdHJpeCBkcmF3TWF0cml4ID0gbmV3IE1h
dHJpeCgpOwotCi0gIC8vIFBlbmRpbmcgZnJhbWUgdG8gcmVuZGVyLiBTZXJ2ZXMgYXMgYSBxdWV1
ZSB3aXRoIHNpemUgMS4gU3luY2hyb25pemVkIG9uIHxmcmFtZUxvY2t8LgotICBwcml2YXRlIGZp
bmFsIE9iamVjdCBmcmFtZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIEBOdWxsYWJsZSBwcml2YXRl
IFZpZGVvRnJhbWUgcGVuZGluZ0ZyYW1lOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3lu
Y2hyb25pemVkIG9uIHxsYXlvdXRMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbGF5b3V0
TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmbG9hdCBsYXlvdXRBc3BlY3RSYXRpbzsK
LSAgLy8gSWYgdHJ1ZSwgbWlycm9ycyB0aGUgdmlkZW8gc3RyZWFtIGhvcml6b250YWxseS4KLSAg
cHJpdmF0ZSBib29sZWFuIG1pcnJvckhvcml6b250YWxseTsKLSAgLy8gSWYgdHJ1ZSwgbWlycm9y
cyB0aGUgdmlkZW8gc3RyZWFtIHZlcnRpY2FsbHkuCi0gIHByaXZhdGUgYm9vbGVhbiBtaXJyb3JW
ZXJ0aWNhbGx5OwotCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3luY2hyb25pemVkIG9uIHxz
dGF0aXN0aWNzTG9ja3wuCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IHN0YXRpc3RpY3NMb2NrID0g
bmV3IE9iamVjdCgpOwotICAvLyBUb3RhbCBudW1iZXIgb2YgdmlkZW8gZnJhbWVzIHJlY2VpdmVk
IGluIHJlbmRlckZyYW1lKCkgY2FsbC4KLSAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVjZWl2ZWQ7Ci0g
IC8vIE51bWJlciBvZiB2aWRlbyBmcmFtZXMgZHJvcHBlZCBieSByZW5kZXJGcmFtZSgpIGJlY2F1
c2UgcHJldmlvdXMgZnJhbWUgaGFzIG5vdCBiZWVuIHJlbmRlcmVkCi0gIC8vIHlldC4KLSAgcHJp
dmF0ZSBpbnQgZnJhbWVzRHJvcHBlZDsKLSAgLy8gTnVtYmVyIG9mIHJlbmRlcmVkIHZpZGVvIGZy
YW1lcy4KLSAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVuZGVyZWQ7Ci0gIC8vIFN0YXJ0IHRpbWUgZm9y
IGNvdW50aW5nIHRoZXNlIHN0YXRpc3RpY3MsIG9yIDAgaWYgd2UgaGF2ZW4ndCBzdGFydGVkIG1l
YXN1cmluZyB5ZXQuCi0gIHByaXZhdGUgbG9uZyBzdGF0aXN0aWNzU3RhcnRUaW1lTnM7Ci0gIC8v
IFRpbWUgaW4gbnMgc3BlbnQgaW4gcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZCgpIGZ1bmN0aW9u
LgotICBwcml2YXRlIGxvbmcgcmVuZGVyVGltZU5zOwotICAvLyBUaW1lIGluIG5zIHNwZW50IGJ5
IHRoZSByZW5kZXIgdGhyZWFkIGluIHRoZSBzd2FwQnVmZmVycygpIGZ1bmN0aW9uLgotICBwcml2
YXRlIGxvbmcgcmVuZGVyU3dhcEJ1ZmZlclRpbWVOczsKLQotICAvLyBVc2VkIGZvciBiaXRtYXAg
Y2FwdHVyaW5nLgotICBwcml2YXRlIGZpbmFsIEdsVGV4dHVyZUZyYW1lQnVmZmVyIGJpdG1hcFRl
eHR1cmVGcmFtZWJ1ZmZlciA9Ci0gICAgICBuZXcgR2xUZXh0dXJlRnJhbWVCdWZmZXIoR0xFUzIw
LkdMX1JHQkEpOwotCi0gIHByaXZhdGUgZmluYWwgUnVubmFibGUgbG9nU3RhdGlzdGljc1J1bm5h
YmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgIGxvZ1N0YXRpc3RpY3MoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoaGFuZGxl
ckxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgIT0gbnVsbCkgewotICAg
ICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKGxvZ1N0YXRpc3RpY3NS
dW5uYWJsZSk7Ci0gICAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZCgKLSAg
ICAgICAgICAgICAgbG9nU3RhdGlzdGljc1J1bm5hYmxlLCBUaW1lVW5pdC5TRUNPTkRTLnRvTWls
bGlzKExPR19JTlRFUlZBTF9TRUMpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsK
LQotICBwcml2YXRlIGZpbmFsIEVnbFN1cmZhY2VDcmVhdGlvbiBlZ2xTdXJmYWNlQ3JlYXRpb25S
dW5uYWJsZSA9IG5ldyBFZ2xTdXJmYWNlQ3JlYXRpb24oKTsKLQotICAvKioKLSAgICogU3RhbmRh
cmQgY29uc3RydWN0b3IuIFRoZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHJlbmRlciB0aHJl
YWQgbmFtZSBhbmQgaW5jbHVkZWQgd2hlbgotICAgKiBsb2dnaW5nLiBJbiBvcmRlciB0byByZW5k
ZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQoKSBhbmQgY3JlYXRlRWdsU3Vy
ZmFjZS4KLSAgICovCi0gIHB1YmxpYyBFZ2xSZW5kZXJlcihTdHJpbmcgbmFtZSkgewotICAgIHRo
aXMobmFtZSwgbmV3IFZpZGVvRnJhbWVEcmF3ZXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgRWdsUmVu
ZGVyZXIoU3RyaW5nIG5hbWUsIFZpZGVvRnJhbWVEcmF3ZXIgdmlkZW9GcmFtZURyYXdlcikgewot
ICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5mcmFtZURyYXdlciA9IHZpZGVvRnJhbWVE
cmF3ZXI7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5n
IHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gVGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxs
IGJlIHVzZWQKLSAgICogZm9yIGRyYXdpbmcgZnJhbWVzIG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlz
IGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHJlbGVhc2UoKSBvbgotICAgKiB8ZHJh
d2VyfC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGluaXQoKSB0byByZWluaXRpYWxpemUgdGhlIHJl
bmRlcmVyIGFmdGVyIGEgcHJldmlvdXMKLSAgICogaW5pdCgpL3JlbGVhc2UoKSBjeWNsZS4gSWYg
dXNlUHJlc2VudGF0aW9uVGltZVN0YW1wIGlzIHRydWUsIGVnbFByZXNlbnRhdGlvblRpbWVBTkRS
T0lEIHdpbGwgYmUKLSAgICogc2V0IHdpdGggdGhlIGZyYW1lIHRpbWVzdGFtcHMsIHdoaWNoIHNw
ZWNpZmllcyBkZXNpcmVkIHByZXNlbnRhdGlvbiB0aW1lIGFuZCBtaWdodCBiZSB1c2VmdWwKLSAg
ICogZm9yIGUuZy4gc3luY2luZyBhdWRpbyBhbmQgdmlkZW8uCi0gICAqLwotICBwdWJsaWMgdm9p
ZCBpbml0KEBOdWxsYWJsZSBmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgZmlu
YWwgaW50W10gY29uZmlnQXR0cmlidXRlcywKLSAgICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2Vy
IGRyYXdlciwgYm9vbGVhbiB1c2VQcmVzZW50YXRpb25UaW1lU3RhbXApIHsKLSAgICBzeW5jaHJv
bml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBu
dWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24obmFtZSArICJB
bHJlYWR5IGluaXRpYWxpemVkIik7Ci0gICAgICB9Ci0gICAgICBsb2dEKCJJbml0aWFsaXppbmcg
RWdsUmVuZGVyZXIiKTsKLSAgICAgIHRoaXMuZHJhd2VyID0gZHJhd2VyOwotICAgICAgdGhpcy51
c2VQcmVzZW50YXRpb25UaW1lU3RhbXAgPSB1c2VQcmVzZW50YXRpb25UaW1lU3RhbXA7Ci0KLSAg
ICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgcmVuZGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQo
bmFtZSArICJFZ2xSZW5kZXJlciIpOwotICAgICAgcmVuZGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAg
ICByZW5kZXJUaHJlYWRIYW5kbGVyID0KLSAgICAgICAgICBuZXcgSGFuZGxlcldpdGhFeGNlcHRp
b25DYWxsYmFjayhyZW5kZXJUaHJlYWQuZ2V0TG9vcGVyKCksIG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICAgICAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICAgICAgICAgICAg
cmVuZGVyVGhyZWFkSGFuZGxlciA9IG51bGw7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9KTsKLSAgICAgIC8vIENyZWF0ZSBFR0wgY29udGV4dCBvbiB0aGUgbmV3
bHkgY3JlYXRlZCByZW5kZXIgdGhyZWFkLiBJdCBzaG91bGQgYmUgcG9zc2libHkgdG8gY3JlYXRl
IHRoZQotICAgICAgLy8gY29udGV4dCBvbiB0aGlzIHRocmVhZCBhbmQgbWFrZSBpdCBjdXJyZW50
IG9uIHRoZSByZW5kZXIgdGhyZWFkLCBidXQgdGhpcyBjYXVzZXMgZmFpbHVyZSBvbgotICAgICAg
Ly8gc29tZSBNYXJ2ZWwgYmFzZWQgSkIgZGV2aWNlcy4gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9y
Zy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTYzNTAuCi0gICAgICBUaHJlYWRVdGlscy5pbnZv
a2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHJlbmRlclRocmVhZEhhbmRsZXIsICgpIC0+IHsKLSAg
ICAgICAgLy8gSWYgc2hhcmVkQ29udGV4dCBpcyBudWxsLCB0aGVuIHRleHR1cmUgZnJhbWVzIGFy
ZSBkaXNhYmxlZC4gVGhpcyBpcyB0eXBpY2FsbHkgZm9yIG9sZAotICAgICAgICAvLyBkZXZpY2Vz
IHRoYXQgbWlnaHQgbm90IGJlIGZ1bGx5IHNwZWMgY29tcGxpYW50LCBzbyBmb3JjZSBFR0wgMS4w
IHNpbmNlIEVHTCAxLjQgaGFzCi0gICAgICAgIC8vIGNhdXNlZCB0cm91YmxlIG9uIHNvbWUgd2Vp
cmQgZGV2aWNlcy4KLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHQgPT0gbnVsbCkgewotICAgICAg
ICAgIGxvZ0QoIkVnbEJhc2UxMC5jcmVhdGUgY29udGV4dCIpOwotICAgICAgICAgIGVnbEJhc2Ug
PSBFZ2xCYXNlLmNyZWF0ZUVnbDEwKGNvbmZpZ0F0dHJpYnV0ZXMpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIGxvZ0QoIkVnbEJhc2UuY3JlYXRlIHNoYXJlZCBjb250ZXh0Iik7Ci0gICAg
ICAgICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENvbnRleHQsIGNvbmZpZ0F0dHJp
YnV0ZXMpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIu
cG9zdChlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZSk7Ci0gICAgICBmaW5hbCBsb25nIGN1cnJl
bnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHJlc2V0U3RhdGlzdGljcyhjdXJy
ZW50VGltZU5zKTsKLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQoCi0gICAg
ICAgICAgbG9nU3RhdGlzdGljc1J1bm5hYmxlLCBUaW1lVW5pdC5TRUNPTkRTLnRvTWlsbGlzKExP
R19JTlRFUlZBTF9TRUMpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2FtZSBhcyBhYm92
ZSB3aXRoIHVzZVByZXNlbnRhdGlvblRpbWVTdGFtcCBzZXQgdG8gZmFsc2UuCi0gICAqCi0gICAq
IEBzZWUgI2luaXQoRWdsQmFzZS5Db250ZXh0LCBpbnRbXSwgUmVuZGVyZXJDb21tb24uR2xEcmF3
ZXIsIGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KEBOdWxsYWJsZSBmaW5hbCBF
Z2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgZmluYWwgaW50W10gY29uZmlnQXR0cmlidXRl
cywKLSAgICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgIGluaXQoc2hh
cmVkQ29udGV4dCwgY29uZmlnQXR0cmlidXRlcywgZHJhd2VyLCAvKiB1c2VQcmVzZW50YXRpb25U
aW1lU3RhbXA9ICovIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUVnbFN1cmZh
Y2UoU3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgY3JlYXRlRWdsU3VyZmFjZUludGVybmFsKHN1cmZh
Y2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlVGV4dHVy
ZSBzdXJmYWNlVGV4dHVyZSkgewotICAgIGNyZWF0ZUVnbFN1cmZhY2VJbnRlcm5hbChzdXJmYWNl
VGV4dHVyZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlRWdsU3VyZmFjZUludGVybmFs
KE9iamVjdCBzdXJmYWNlKSB7Ci0gICAgZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUuc2V0U3Vy
ZmFjZShzdXJmYWNlKTsKLSAgICBwb3N0VG9SZW5kZXJUaHJlYWQoZWdsU3VyZmFjZUNyZWF0aW9u
UnVubmFibGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJsb2NrIHVudGlsIGFueSBwZW5kaW5nIGZy
YW1lIGlzIHJldHVybmVkIGFuZCBhbGwgR0wgcmVzb3VyY2VzIHJlbGVhc2VkLCBldmVuIGlmIGFu
IGludGVycnVwdAotICAgKiBvY2N1cnMuIElmIGFuIGludGVycnVwdCBvY2N1cnMgZHVyaW5nIHJl
bGVhc2UoKSwgdGhlIGludGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0LiBUaGlzIGZ1bmN0aW9uCi0g
ICAqIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBBY3Rpdml0eSBpcyBkZXN0cm95ZWQgYW5k
IHRoZSBFR0xDb250ZXh0IGlzIHN0aWxsIHZhbGlkLiBJZiB5b3UKLSAgICogZG9uJ3QgY2FsbCB0
aGlzIGZ1bmN0aW9uLCB0aGUgR0wgcmVzb3VyY2VzIG1pZ2h0IGxlYWsuCi0gICAqLwotICBwdWJs
aWMgdm9pZCByZWxlYXNlKCkgewotICAgIGxvZ0QoIlJlbGVhc2luZy4iKTsKLSAgICBmaW5hbCBD
b3VudERvd25MYXRjaCBlZ2xDbGVhbnVwQmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsK
LSAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFk
SGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICAgIGxvZ0QoIkFscmVhZHkgcmVsZWFzZWQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5yZW1vdmVD
YWxsYmFja3MobG9nU3RhdGlzdGljc1J1bm5hYmxlKTsKLSAgICAgIC8vIFJlbGVhc2UgRUdMIGFu
ZCBHTCByZXNvdXJjZXMgb24gcmVuZGVyIHRocmVhZC4KLSAgICAgIHJlbmRlclRocmVhZEhhbmRs
ZXIucG9zdEF0RnJvbnRPZlF1ZXVlKCgpIC0+IHsKLSAgICAgICAgLy8gRGV0YWNoIGN1cnJlbnQg
c2hhZGVyIHByb2dyYW0uCi0gICAgICAgIEdMRVMyMC5nbFVzZVByb2dyYW0oLyogcHJvZ3JhbT0g
Ki8gMCk7Ci0gICAgICAgIGlmIChkcmF3ZXIgIT0gbnVsbCkgewotICAgICAgICAgIGRyYXdlci5y
ZWxlYXNlKCk7Ci0gICAgICAgICAgZHJhd2VyID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBm
cmFtZURyYXdlci5yZWxlYXNlKCk7Ci0gICAgICAgIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlci5y
ZWxlYXNlKCk7Ci0gICAgICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgICAgICBsb2dE
KCJlZ2xCYXNlIGRldGFjaCBhbmQgcmVsZWFzZS4iKTsKLSAgICAgICAgICBlZ2xCYXNlLmRldGFj
aEN1cnJlbnQoKTsKLSAgICAgICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICAgICAgICBlZ2xC
YXNlID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBmcmFtZUxpc3RlbmVycy5jbGVhcigpOwot
ICAgICAgICBlZ2xDbGVhbnVwQmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0pOwotICAgICAg
ZmluYWwgTG9vcGVyIHJlbmRlckxvb3BlciA9IHJlbmRlclRocmVhZEhhbmRsZXIuZ2V0TG9vcGVy
KCk7Ci0gICAgICAvLyBUT0RPKG1hZ2plZCk6IFJlcGxhY2UgdGhpcyBwb3N0KCkgd2l0aCByZW5k
ZXJMb29wZXIucXVpdFNhZmVseSgpIHdoZW4gQVBJIHN1cHBvcnQgPj0gMTguCi0gICAgICByZW5k
ZXJUaHJlYWRIYW5kbGVyLnBvc3QoKCkgLT4gewotICAgICAgICBsb2dEKCJRdWl0dGluZyByZW5k
ZXIgdGhyZWFkLiIpOwotICAgICAgICByZW5kZXJMb29wZXIucXVpdCgpOwotICAgICAgfSk7Ci0g
ICAgICAvLyBEb24ndCBhY2NlcHQgYW55IG1vcmUgZnJhbWVzIG9yIG1lc3NhZ2VzIHRvIHRoZSBy
ZW5kZXIgdGhyZWFkLgotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlciA9IG51bGw7Ci0gICAgfQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgRUdML0dMIGNsZWFudXAgcG9zdGVkIGFib3ZlIGlzIGV4ZWN1
dGVkLgotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KGVnbENsZWFudXBCYXJy
aWVyKTsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgaWYgKHBlbmRpbmdG
cmFtZSAhPSBudWxsKSB7Ci0gICAgICAgIHBlbmRpbmdGcmFtZS5yZWxlYXNlKCk7Ci0gICAgICAg
IHBlbmRpbmdGcmFtZSA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGxvZ0QoIlJlbGVhc2lu
ZyBkb25lLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0IHRoZSBzdGF0aXN0aWNzIGxvZ2dl
ZCBpbiBsb2dTdGF0aXN0aWNzKCkuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVzZXRTdGF0aXN0
aWNzKGxvbmcgY3VycmVudFRpbWVOcykgewotICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xv
Y2spIHsKLSAgICAgIHN0YXRpc3RpY3NTdGFydFRpbWVOcyA9IGN1cnJlbnRUaW1lTnM7Ci0gICAg
ICBmcmFtZXNSZWNlaXZlZCA9IDA7Ci0gICAgICBmcmFtZXNEcm9wcGVkID0gMDsKLSAgICAgIGZy
YW1lc1JlbmRlcmVkID0gMDsKLSAgICAgIHJlbmRlclRpbWVOcyA9IDA7Ci0gICAgICByZW5kZXJT
d2FwQnVmZmVyVGltZU5zID0gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFN0
YWNrVHJhY2UoKSB7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgZmlu
YWwgVGhyZWFkIHJlbmRlclRocmVhZCA9Ci0gICAgICAgICAgKHJlbmRlclRocmVhZEhhbmRsZXIg
PT0gbnVsbCkgPyBudWxsIDogcmVuZGVyVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJl
YWQoKTsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWQgIT0gbnVsbCkgewotICAgICAgICBmaW5hbCBT
dGFja1RyYWNlRWxlbWVudFtdIHJlbmRlclN0YWNrVHJhY2UgPSByZW5kZXJUaHJlYWQuZ2V0U3Rh
Y2tUcmFjZSgpOwotICAgICAgICBpZiAocmVuZGVyU3RhY2tUcmFjZS5sZW5ndGggPiAwKSB7Ci0g
ICAgICAgICAgbG9nVygiRWdsUmVuZGVyZXIgc3RhY2sgdHJhY2U6Iik7Ci0gICAgICAgICAgZm9y
IChTdGFja1RyYWNlRWxlbWVudCB0cmFjZUVsZW0gOiByZW5kZXJTdGFja1RyYWNlKSB7Ci0gICAg
ICAgICAgICBsb2dXKHRyYWNlRWxlbS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGlmIHRoZSB2aWRlbyBz
dHJlYW0gc2hvdWxkIGJlIG1pcnJvcmVkIGhvcml6b250YWxseSBvciBub3QuCi0gICAqLwotICBw
dWJsaWMgdm9pZCBzZXRNaXJyb3IoZmluYWwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBsb2dEKCJz
ZXRNaXJyb3JIb3Jpem9udGFsbHk6ICIgKyBtaXJyb3IpOwotICAgIHN5bmNocm9uaXplZCAobGF5
b3V0TG9jaykgewotICAgICAgdGhpcy5taXJyb3JIb3Jpem9udGFsbHkgPSBtaXJyb3I7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgdmlkZW8gc3RyZWFtIHNob3VsZCBiZSBt
aXJyb3JlZCB2ZXJ0aWNhbGx5IG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1pcnJv
clZlcnRpY2FsbHkoZmluYWwgYm9vbGVhbiBtaXJyb3JWZXJ0aWNhbGx5KSB7Ci0gICAgbG9nRCgi
c2V0TWlycm9yVmVydGljYWxseTogIiArIG1pcnJvclZlcnRpY2FsbHkpOwotICAgIHN5bmNocm9u
aXplZCAobGF5b3V0TG9jaykgewotICAgICAgdGhpcy5taXJyb3JWZXJ0aWNhbGx5ID0gbWlycm9y
VmVydGljYWxseTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGxheW91dCBhc3BlY3Qg
cmF0aW8uIFRoaXMgaXMgdXNlZCB0byBjcm9wIGZyYW1lcyB3aGVuIHJlbmRlcmluZyB0byBhdm9p
ZCBzdHJldGNoZWQgdmlkZW8uCi0gICAqIFNldCB0aGlzIHRvIDAgdG8gZGlzYWJsZSBjcm9wcGlu
Zy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExheW91dEFzcGVjdFJhdGlvKGZsb2F0IGxheW91
dEFzcGVjdFJhdGlvKSB7Ci0gICAgbG9nRCgic2V0TGF5b3V0QXNwZWN0UmF0aW86ICIgKyBsYXlv
dXRBc3BlY3RSYXRpbyk7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICB0
aGlzLmxheW91dEFzcGVjdFJhdGlvID0gbGF5b3V0QXNwZWN0UmF0aW87Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIExpbWl0IHJlbmRlciBmcmFtZXJhdGUuCi0gICAqCi0gICAqIEBwYXJhbSBm
cHMgTGltaXQgcmVuZGVyIGZyYW1lcmF0ZSB0byB0aGlzIHZhbHVlLCBvciB1c2UgRmxvYXQuUE9T
SVRJVkVfSU5GSU5JVFkgdG8gZGlzYWJsZSBmcHMKLSAgICogICAgICAgICAgICByZWR1Y3Rpb24u
Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGcHNSZWR1Y3Rpb24oZmxvYXQgZnBzKSB7Ci0gICAg
bG9nRCgic2V0RnBzUmVkdWN0aW9uOiAiICsgZnBzKTsKLSAgICBzeW5jaHJvbml6ZWQgKGZwc1Jl
ZHVjdGlvbkxvY2spIHsKLSAgICAgIGZpbmFsIGxvbmcgcHJldmlvdXNSZW5kZXJQZXJpb2ROcyA9
IG1pblJlbmRlclBlcmlvZE5zOwotICAgICAgaWYgKGZwcyA8PSAwKSB7Ci0gICAgICAgIG1pblJl
bmRlclBlcmlvZE5zID0gTG9uZy5NQVhfVkFMVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBt
aW5SZW5kZXJQZXJpb2ROcyA9IChsb25nKSAoVGltZVVuaXQuU0VDT05EUy50b05hbm9zKDEpIC8g
ZnBzKTsKLSAgICAgIH0KLSAgICAgIGlmIChtaW5SZW5kZXJQZXJpb2ROcyAhPSBwcmV2aW91c1Jl
bmRlclBlcmlvZE5zKSB7Ci0gICAgICAgIC8vIEZwcyByZWR1Y3Rpb24gY2hhbmdlZCAtIHJlc2V0
IGZyYW1lIHRpbWUuCi0gICAgICAgIG5leHRGcmFtZVRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgp
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVGcHNSZWR1Y3Rp
b24oKSB7Ci0gICAgc2V0RnBzUmVkdWN0aW9uKEZsb2F0LlBPU0lUSVZFX0lORklOSVRZIC8qIGZw
cyAqLyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXVzZVZpZGVvKCkgewotICAgIHNldEZwc1Jl
ZHVjdGlvbigwIC8qIGZwcyAqLyk7Ci0gIH0KLQotICAvKioKLSAgICogUmVnaXN0ZXIgYSBjYWxs
YmFjayB0byBiZSBpbnZva2VkIHdoZW4gYSBuZXcgdmlkZW8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2
ZWQuIFRoaXMgdmVyc2lvbiB1c2VzCi0gICAqIHRoZSBkcmF3ZXIgb2YgdGhlIEVnbFJlbmRlcmVy
IHRoYXQgd2FzIHBhc3NlZCBpbiBpbml0LgotICAgKgotICAgKiBAcGFyYW0gbGlzdGVuZXIgVGhl
IGNhbGxiYWNrIHRvIGJlIGludm9rZWQuIFRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgb24g
dGhlIHJlbmRlciB0aHJlYWQuCi0gICAqICAgICAgICAgICAgICAgICBJdCBzaG91bGQgYmUgbGln
aHR3ZWlnaHQgYW5kIG11c3Qgbm90IGNhbGwgcmVtb3ZlRnJhbWVMaXN0ZW5lci4KLSAgICogQHBh
cmFtIHNjYWxlICAgIFRoZSBzY2FsZSBvZiB0aGUgQml0bWFwIHBhc3NlZCB0byB0aGUgY2FsbGJh
Y2ssIG9yIDAgaWYgbm8gQml0bWFwIGlzCi0gICAqICAgICAgICAgICAgICAgICByZXF1aXJlZC4K
LSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEZyYW1lTGlzdGVuZXIoZmluYWwgRnJhbWVMaXN0ZW5l
ciBsaXN0ZW5lciwgZmluYWwgZmxvYXQgc2NhbGUpIHsKLSAgICBhZGRGcmFtZUxpc3RlbmVyKGxp
c3RlbmVyLCBzY2FsZSwgbnVsbCwgZmFsc2UgLyogYXBwbHlGcHNSZWR1Y3Rpb24gKi8pOwotICB9
Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGEg
bmV3IHZpZGVvIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkLgotICAgKgotICAgKiBAcGFyYW0gbGlz
dGVuZXIgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQuIFRoZSBjYWxsYmFjayB3aWxsIGJlIGlu
dm9rZWQgb24gdGhlIHJlbmRlciB0aHJlYWQuCi0gICAqICAgICAgICAgICAgICAgICBJdCBzaG91
bGQgYmUgbGlnaHR3ZWlnaHQgYW5kIG11c3Qgbm90IGNhbGwgcmVtb3ZlRnJhbWVMaXN0ZW5lci4K
LSAgICogQHBhcmFtIHNjYWxlICAgIFRoZSBzY2FsZSBvZiB0aGUgQml0bWFwIHBhc3NlZCB0byB0
aGUgY2FsbGJhY2ssIG9yIDAgaWYgbm8gQml0bWFwIGlzCi0gICAqICAgICAgICAgICAgICAgICBy
ZXF1aXJlZC4KLSAgICogQHBhcmFtIGRyYXdlciAgIEN1c3RvbSBkcmF3ZXIgdG8gdXNlIGZvciB0
aGlzIGZyYW1lIGxpc3RlbmVyIG9yIG51bGwgdG8gdXNlIHRoZSBkZWZhdWx0IG9uZS4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIGFkZEZyYW1lTGlzdGVuZXIoCi0gICAgICBmaW5hbCBGcmFtZUxpc3Rl
bmVyIGxpc3RlbmVyLCBmaW5hbCBmbG9hdCBzY2FsZSwgZmluYWwgUmVuZGVyZXJDb21tb24uR2xE
cmF3ZXIgZHJhd2VyUGFyYW0pIHsKLSAgICBhZGRGcmFtZUxpc3RlbmVyKGxpc3RlbmVyLCBzY2Fs
ZSwgZHJhd2VyUGFyYW0sIGZhbHNlIC8qIGFwcGx5RnBzUmVkdWN0aW9uICovKTsKLSAgfQotCi0g
IC8qKgotICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhIG5ldyB2
aWRlbyBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZC4KLSAgICoKLSAgICogQHBhcmFtIGxpc3RlbmVy
IFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2Vk
IG9uIHRoZSByZW5kZXIgdGhyZWFkLgotICAgKiAgICAgICAgICAgICAgICAgSXQgc2hvdWxkIGJl
IGxpZ2h0d2VpZ2h0IGFuZCBtdXN0IG5vdCBjYWxsIHJlbW92ZUZyYW1lTGlzdGVuZXIuCi0gICAq
IEBwYXJhbSBzY2FsZSAgICBUaGUgc2NhbGUgb2YgdGhlIEJpdG1hcCBwYXNzZWQgdG8gdGhlIGNh
bGxiYWNrLCBvciAwIGlmIG5vIEJpdG1hcCBpcwotICAgKiAgICAgICAgICAgICAgICAgcmVxdWly
ZWQuCi0gICAqIEBwYXJhbSBkcmF3ZXIgICBDdXN0b20gZHJhd2VyIHRvIHVzZSBmb3IgdGhpcyBm
cmFtZSBsaXN0ZW5lciBvciBudWxsIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUuCi0gICAqIEBwYXJh
bSBhcHBseUZwc1JlZHVjdGlvbiBUaGlzIGNhbGxiYWNrIHdpbGwgbm90IGJlIGNhbGxlZCBmb3Ig
ZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgYnkKLSAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgIEZQUyByZWR1Y3Rpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRGcmFtZUxpc3Rl
bmVyKGZpbmFsIEZyYW1lTGlzdGVuZXIgbGlzdGVuZXIsIGZpbmFsIGZsb2F0IHNjYWxlLAotICAg
ICAgQE51bGxhYmxlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlclBhcmFtLCBm
aW5hbCBib29sZWFuIGFwcGx5RnBzUmVkdWN0aW9uKSB7Ci0gICAgcG9zdFRvUmVuZGVyVGhyZWFk
KCgpIC0+IHsKLSAgICAgIGZpbmFsIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGxpc3RlbmVyRHJh
d2VyID0gZHJhd2VyUGFyYW0gPT0gbnVsbCA/IGRyYXdlciA6IGRyYXdlclBhcmFtOwotICAgICAg
ZnJhbWVMaXN0ZW5lcnMuYWRkKAotICAgICAgICAgIG5ldyBGcmFtZUxpc3RlbmVyQW5kUGFyYW1z
KGxpc3RlbmVyLCBzY2FsZSwgbGlzdGVuZXJEcmF3ZXIsIGFwcGx5RnBzUmVkdWN0aW9uKSk7Ci0g
ICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBwZW5kaW5nIGNhbGxiYWNrIHRo
YXQgd2FzIGFkZGVkIHdpdGggYWRkRnJhbWVMaXN0ZW5lci4gSWYgdGhlIGNhbGxiYWNrIGlzIG5v
dCBpbgotICAgKiB0aGUgcXVldWUsIG5vdGhpbmcgaGFwcGVucy4gSXQgaXMgZW5zdXJlZCB0aGF0
IGNhbGxiYWNrIHdvbid0IGJlIGNhbGxlZCBhZnRlciB0aGlzIG1ldGhvZAotICAgKiByZXR1cm5z
LgotICAgKgotICAgKiBAcGFyYW0gcnVubmFibGUgVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS4KLSAg
ICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZyYW1lTGlzdGVuZXIoZmluYWwgRnJhbWVMaXN0ZW5l
ciBsaXN0ZW5lcikgewotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50
RG93bkxhdGNoKDEpOwotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlm
IChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgPT0gcmVuZGVyVGhyZWFkSGFuZGxl
ci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigicmVtb3ZlRnJhbWVMaXN0ZW5lciBtdXN0IG5vdCBiZSBjYWxsZWQgb24gdGhlIHJl
bmRlciB0aHJlYWQuIik7Ci0gICAgICB9Ci0gICAgICBwb3N0VG9SZW5kZXJUaHJlYWQoKCkgLT4g
ewotICAgICAgICBsYXRjaC5jb3VudERvd24oKTsKLSAgICAgICAgZmluYWwgSXRlcmF0b3I8RnJh
bWVMaXN0ZW5lckFuZFBhcmFtcz4gaXRlciA9IGZyYW1lTGlzdGVuZXJzLml0ZXJhdG9yKCk7Ci0g
ICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgICAgICAgIGlmIChpdGVyLm5leHQo
KS5saXN0ZW5lciA9PSBsaXN0ZW5lcikgewotICAgICAgICAgICAgaXRlci5yZW1vdmUoKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLSAgICBUaHJlYWRVdGlscy5h
d2FpdFVuaW50ZXJydXB0aWJseShsYXRjaCk7Ci0gIH0KLQotICAvKiogQ2FuIGJlIHNldCBpbiBv
cmRlciB0byBiZSBub3RpZmllZCBhYm91dCBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHJlbmRl
cmluZy4gKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JDYWxsYmFjayhFcnJvckNhbGxiYWNrIGVy
cm9yQ2FsbGJhY2spIHsKLSAgICB0aGlzLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOwot
ICB9Ci0KLSAgLy8gVmlkZW9TaW5rIGludGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgIHN5bmNocm9uaXplZCAoc3RhdGlz
dGljc0xvY2spIHsKLSAgICAgICsrZnJhbWVzUmVjZWl2ZWQ7Ci0gICAgfQotICAgIGZpbmFsIGJv
b2xlYW4gZHJvcE9sZEZyYW1lOwotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAg
ICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAgICAgICAgbG9nRCgiRHJv
cHBpbmcgZnJhbWUgLSBOb3QgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSByZWxlYXNlZC4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsK
LSAgICAgICAgZHJvcE9sZEZyYW1lID0gKHBlbmRpbmdGcmFtZSAhPSBudWxsKTsKLSAgICAgICAg
aWYgKGRyb3BPbGRGcmFtZSkgewotICAgICAgICAgIHBlbmRpbmdGcmFtZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcGVuZGluZ0ZyYW1lID0gZnJhbWU7Ci0gICAgICAgIHBlbmRpbmdG
cmFtZS5yZXRhaW4oKTsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KHRoaXMgOjpy
ZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGRyb3BP
bGRGcmFtZSkgewotICAgICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAg
ICArK2ZyYW1lc0Ryb3BwZWQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJl
bGVhc2UgRUdMIHN1cmZhY2UuIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgRUdM
IHN1cmZhY2UgaXMgcmVsZWFzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxlYXNlRWdsU3Vy
ZmFjZShmaW5hbCBSdW5uYWJsZSBjb21wbGV0aW9uQ2FsbGJhY2spIHsKLSAgICAvLyBFbnN1cmUg
dGhhdCB0aGUgcmVuZGVyIHRocmVhZCBpcyBubyBsb25nZXIgdG91Y2hpbmcgdGhlIFN1cmZhY2Ug
YmVmb3JlIHJldHVybmluZyBmcm9tIHRoaXMKLSAgICAvLyBmdW5jdGlvbi4KLSAgICBlZ2xTdXJm
YWNlQ3JlYXRpb25SdW5uYWJsZS5zZXRTdXJmYWNlKG51bGwgLyogc3VyZmFjZSAqLyk7Ci0gICAg
c3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNr
cyhlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZSk7Ci0gICAgICAgIHJlbmRlclRocmVhZEhhbmRs
ZXIucG9zdEF0RnJvbnRPZlF1ZXVlKCgpIC0+IHsKLSAgICAgICAgICBpZiAoZWdsQmFzZSAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICBlZ2xCYXNlLmRldGFjaEN1cnJlbnQoKTsKLSAgICAgICAgICAg
IGVnbEJhc2UucmVsZWFzZVN1cmZhY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY29tcGxl
dGlvbkNhbGxiYWNrLnJ1bigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgIH0KLSAgICBjb21wbGV0aW9uQ2FsbGJhY2sucnVuKCk7Ci0gIH0KLQotICAvKioKLSAg
ICogUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb24gdG8gcG9zdCB0YXNrcyBzYWZlbHkuCi0gICAqLwot
ICBwcml2YXRlIHZvaWQgcG9zdFRvUmVuZGVyVGhyZWFkKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0g
ICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRocmVhZEhh
bmRsZXIgIT0gbnVsbCkgewotICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QocnVubmFi
bGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjbGVhclN1cmZhY2VP
blJlbmRlclRocmVhZChmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSB7Ci0gICAg
aWYgKGVnbEJhc2UgIT0gbnVsbCAmJiBlZ2xCYXNlLmhhc1N1cmZhY2UoKSkgewotICAgICAgbG9n
RCgiY2xlYXJTdXJmYWNlIik7Ci0gICAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEp
OwotICAgICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAg
ICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQb3N0
IGEgdGFzayB0byBjbGVhciB0aGUgc3VyZmFjZSB0byBhIHRyYW5zcGFyZW50IHVuaWZvcm0gY29s
b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhckltYWdlKCkgewotICAgIGNsZWFySW1hZ2Uo
MCAvKiByZWQgKi8sIDAgLyogZ3JlZW4gKi8sIDAgLyogYmx1ZSAqLywgMCAvKiBhbHBoYSAqLyk7
Ci0gIH0KLQotICAvKioKLSAgICogUG9zdCBhIHRhc2sgdG8gY2xlYXIgdGhlIHN1cmZhY2UgdG8g
YSBzcGVjaWZpYyBjb2xvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsZWFySW1hZ2UoZmluYWwg
ZmxvYXQgciwgZmluYWwgZmxvYXQgZywgZmluYWwgZmxvYXQgYiwgZmluYWwgZmxvYXQgYSkgewot
ICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRI
YW5kbGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcmVuZGVy
VGhyZWFkSGFuZGxlci5wb3N0QXRGcm9udE9mUXVldWUoKCkgLT4gY2xlYXJTdXJmYWNlT25SZW5k
ZXJUaHJlYWQociwgZywgYiwgYSkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZW5kZXJz
IGFuZCByZWxlYXNlcyB8cGVuZGluZ0ZyYW1lfC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCByZW5k
ZXJGcmFtZU9uUmVuZGVyVGhyZWFkKCkgewotICAgIC8vIEZldGNoIGFuZCByZW5kZXIgfHBlbmRp
bmdGcmFtZXwuCi0gICAgZmluYWwgVmlkZW9GcmFtZSBmcmFtZTsKLSAgICBzeW5jaHJvbml6ZWQg
KGZyYW1lTG9jaykgewotICAgICAgaWYgKHBlbmRpbmdGcmFtZSA9PSBudWxsKSB7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIGZyYW1lID0gcGVuZGluZ0ZyYW1lOwotICAgICAgcGVu
ZGluZ0ZyYW1lID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGVnbEJhc2UgPT0gbnVsbCB8fCAhZWds
QmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAgIGxvZ0QoIkRyb3BwaW5nIGZyYW1lIC0gTm8gc3Vy
ZmFjZSIpOwotICAgICAgZnJhbWUucmVsZWFzZSgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBDaGVjayBpZiBmcHMgcmVkdWN0aW9uIGlzIGFjdGl2ZS4KLSAgICBmaW5hbCBib29sZWFu
IHNob3VsZFJlbmRlckZyYW1lOwotICAgIHN5bmNocm9uaXplZCAoZnBzUmVkdWN0aW9uTG9jaykg
ewotICAgICAgaWYgKG1pblJlbmRlclBlcmlvZE5zID09IExvbmcuTUFYX1ZBTFVFKSB7Ci0gICAg
ICAgIC8vIFJlbmRlcmluZyBpcyBwYXVzZWQuCi0gICAgICAgIHNob3VsZFJlbmRlckZyYW1lID0g
ZmFsc2U7Ci0gICAgICB9IGVsc2UgaWYgKG1pblJlbmRlclBlcmlvZE5zIDw9IDApIHsKLSAgICAg
ICAgLy8gRlBTIHJlZHVjdGlvbiBpcyBkaXNhYmxlZC4KLSAgICAgICAgc2hvdWxkUmVuZGVyRnJh
bWUgPSB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGlt
ZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgIGlmIChjdXJyZW50VGltZU5zIDwgbmV4
dEZyYW1lVGltZU5zKSB7Ci0gICAgICAgICAgbG9nRCgiU2tpcHBpbmcgZnJhbWUgcmVuZGVyaW5n
IC0gZnBzIHJlZHVjdGlvbiBpcyBhY3RpdmUuIik7Ci0gICAgICAgICAgc2hvdWxkUmVuZGVyRnJh
bWUgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBuZXh0RnJhbWVUaW1lTnMg
Kz0gbWluUmVuZGVyUGVyaW9kTnM7Ci0gICAgICAgICAgLy8gVGhlIHRpbWUgZm9yIHRoZSBuZXh0
IGZyYW1lIHNob3VsZCBhbHdheXMgYmUgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICBuZXh0RnJh
bWVUaW1lTnMgPSBNYXRoLm1heChuZXh0RnJhbWVUaW1lTnMsIGN1cnJlbnRUaW1lTnMpOwotICAg
ICAgICAgIHNob3VsZFJlbmRlckZyYW1lID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICAgIGZpbmFsIGxvbmcgc3RhcnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLQot
ICAgIGZpbmFsIGZsb2F0IGZyYW1lQXNwZWN0UmF0aW8gPSBmcmFtZS5nZXRSb3RhdGVkV2lkdGgo
KSAvIChmbG9hdCkgZnJhbWUuZ2V0Um90YXRlZEhlaWdodCgpOwotICAgIGZpbmFsIGZsb2F0IGRy
YXduQXNwZWN0UmF0aW87Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICBk
cmF3bkFzcGVjdFJhdGlvID0gbGF5b3V0QXNwZWN0UmF0aW8gIT0gMGYgPyBsYXlvdXRBc3BlY3RS
YXRpbyA6IGZyYW1lQXNwZWN0UmF0aW87Ci0gICAgfQotCi0gICAgZmluYWwgZmxvYXQgc2NhbGVY
OwotICAgIGZpbmFsIGZsb2F0IHNjYWxlWTsKLQotICAgIGlmIChmcmFtZUFzcGVjdFJhdGlvID4g
ZHJhd25Bc3BlY3RSYXRpbykgewotICAgICAgc2NhbGVYID0gZHJhd25Bc3BlY3RSYXRpbyAvIGZy
YW1lQXNwZWN0UmF0aW87Ci0gICAgICBzY2FsZVkgPSAxZjsKLSAgICB9IGVsc2UgewotICAgICAg
c2NhbGVYID0gMWY7Ci0gICAgICBzY2FsZVkgPSBmcmFtZUFzcGVjdFJhdGlvIC8gZHJhd25Bc3Bl
Y3RSYXRpbzsKLSAgICB9Ci0KLSAgICBkcmF3TWF0cml4LnJlc2V0KCk7Ci0gICAgZHJhd01hdHJp
eC5wcmVUcmFuc2xhdGUoMC41ZiwgMC41Zik7Ci0gICAgZHJhd01hdHJpeC5wcmVTY2FsZShtaXJy
b3JIb3Jpem9udGFsbHkgPyAtMWYgOiAxZiwgbWlycm9yVmVydGljYWxseSA/IC0xZiA6IDFmKTsK
LSAgICBkcmF3TWF0cml4LnByZVNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKLSAgICBkcmF3TWF0cml4
LnByZVRyYW5zbGF0ZSgtMC41ZiwgLTAuNWYpOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChzaG91
bGRSZW5kZXJGcmFtZSkgewotICAgICAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKDAgLyogcmVkICov
LCAwIC8qIGdyZWVuICovLCAwIC8qIGJsdWUgKi8sIDAgLyogYWxwaGEgKi8pOwotICAgICAgICBH
TEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgICAgIGZyYW1l
RHJhd2VyLmRyYXdGcmFtZShmcmFtZSwgZHJhd2VyLCBkcmF3TWF0cml4LCAwIC8qIHZpZXdwb3J0
WCAqLywgMCAvKiB2aWV3cG9ydFkgKi8sCi0gICAgICAgICAgICBlZ2xCYXNlLnN1cmZhY2VXaWR0
aCgpLCBlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSk7Ci0KLSAgICAgICAgZmluYWwgbG9uZyBzd2Fw
QnVmZmVyc1N0YXJ0VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgIGlmICh1c2VQ
cmVzZW50YXRpb25UaW1lU3RhbXApIHsKLSAgICAgICAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKGZy
YW1lLmdldFRpbWVzdGFtcE5zKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGVnbEJh
c2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGxvbmcgY3VycmVu
dFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHN0YXRp
c3RpY3NMb2NrKSB7Ci0gICAgICAgICAgKytmcmFtZXNSZW5kZXJlZDsKLSAgICAgICAgICByZW5k
ZXJUaW1lTnMgKz0gKGN1cnJlbnRUaW1lTnMgLSBzdGFydFRpbWVOcyk7Ci0gICAgICAgICAgcmVu
ZGVyU3dhcEJ1ZmZlclRpbWVOcyArPSAoY3VycmVudFRpbWVOcyAtIHN3YXBCdWZmZXJzU3RhcnRU
aW1lTnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIG5vdGlmeUNhbGxiYWNrcyhmcmFt
ZSwgc2hvdWxkUmVuZGVyRnJhbWUpOwotICAgIH0gY2F0Y2ggKEdsVXRpbC5HbE91dE9mTWVtb3J5
RXhjZXB0aW9uIGUpIHsKLSAgICAgIGxvZ0UoIkVycm9yIHdoaWxlIGRyYXdpbmcgZnJhbWUiLCBl
KTsKLSAgICAgIGZpbmFsIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayA9IHRoaXMuZXJyb3JD
YWxsYmFjazsKLSAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgZXJy
b3JDYWxsYmFjay5vbkdsT3V0T2ZNZW1vcnkoKTsKLSAgICAgIH0KLSAgICAgIC8vIEF0dGVtcHQg
dG8gZnJlZSB1cCBzb21lIHJlc291cmNlcy4KLSAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAg
ICBmcmFtZURyYXdlci5yZWxlYXNlKCk7Ci0gICAgICBiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXIu
cmVsZWFzZSgpOwotICAgICAgLy8gQ29udGludWUgaGVyZSBvbiBwdXJwb3NlIGFuZCByZXRyeSBh
Z2FpbiBmb3IgbmV4dCBmcmFtZS4gSW4gd29yc3QgY2FzZSwgdGhpcyBpcyBhIGNvbnRpbm91cwot
ICAgICAgLy8gcHJvYmxlbSBhbmQgbm8gbW9yZSBmcmFtZXMgd2lsbCBiZSBkcmF3bi4KLSAgICB9
IGZpbmFsbHkgewotICAgICAgZnJhbWUucmVsZWFzZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBub3RpZnlDYWxsYmFja3MoVmlkZW9GcmFtZSBmcmFtZSwgYm9vbGVhbiB3YXNSZW5k
ZXJlZCkgewotICAgIGlmIChmcmFtZUxpc3RlbmVycy5pc0VtcHR5KCkpCi0gICAgICByZXR1cm47
Ci0KLSAgICBkcmF3TWF0cml4LnJlc2V0KCk7Ci0gICAgZHJhd01hdHJpeC5wcmVUcmFuc2xhdGUo
MC41ZiwgMC41Zik7Ci0gICAgZHJhd01hdHJpeC5wcmVTY2FsZShtaXJyb3JIb3Jpem9udGFsbHkg
PyAtMWYgOiAxZiwgbWlycm9yVmVydGljYWxseSA/IC0xZiA6IDFmKTsKLSAgICBkcmF3TWF0cml4
LnByZVNjYWxlKDFmLCAtMWYpOyAvLyBXZSB3YW50IHRoZSBvdXRwdXQgdG8gYmUgdXBzaWRlIGRv
d24gZm9yIEJpdG1hcC4KLSAgICBkcmF3TWF0cml4LnByZVRyYW5zbGF0ZSgtMC41ZiwgLTAuNWYp
OwotCi0gICAgSXRlcmF0b3I8RnJhbWVMaXN0ZW5lckFuZFBhcmFtcz4gaXQgPSBmcmFtZUxpc3Rl
bmVycy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIEZyYW1l
TGlzdGVuZXJBbmRQYXJhbXMgbGlzdGVuZXJBbmRQYXJhbXMgPSBpdC5uZXh0KCk7Ci0gICAgICBp
ZiAoIXdhc1JlbmRlcmVkICYmIGxpc3RlbmVyQW5kUGFyYW1zLmFwcGx5RnBzUmVkdWN0aW9uKSB7
Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgaXQucmVtb3ZlKCk7Ci0KLSAgICAg
IGZpbmFsIGludCBzY2FsZWRXaWR0aCA9IChpbnQpIChsaXN0ZW5lckFuZFBhcmFtcy5zY2FsZSAq
IGZyYW1lLmdldFJvdGF0ZWRXaWR0aCgpKTsKLSAgICAgIGZpbmFsIGludCBzY2FsZWRIZWlnaHQg
PSAoaW50KSAobGlzdGVuZXJBbmRQYXJhbXMuc2NhbGUgKiBmcmFtZS5nZXRSb3RhdGVkSGVpZ2h0
KCkpOwotCi0gICAgICBpZiAoc2NhbGVkV2lkdGggPT0gMCB8fCBzY2FsZWRIZWlnaHQgPT0gMCkg
ewotICAgICAgICBsaXN0ZW5lckFuZFBhcmFtcy5saXN0ZW5lci5vbkZyYW1lKG51bGwpOwotICAg
ICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVy
LnNldFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0KLSAgICAgIEdMRVMyMC5nbEJp
bmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIGJpdG1hcFRleHR1cmVGcmFtZWJ1
ZmZlci5nZXRGcmFtZUJ1ZmZlcklkKCkpOwotICAgICAgR0xFUzIwLmdsRnJhbWVidWZmZXJUZXh0
dXJlMkQoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09MT1JfQVRUQUNITUVOVDAs
Ci0gICAgICAgICAgR0xFUzIwLkdMX1RFWFRVUkVfMkQsIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZl
ci5nZXRUZXh0dXJlSWQoKSwgMCk7Ci0KLSAgICAgIEdMRVMyMC5nbENsZWFyQ29sb3IoMCAvKiBy
ZWQgKi8sIDAgLyogZ3JlZW4gKi8sIDAgLyogYmx1ZSAqLywgMCAvKiBhbHBoYSAqLyk7Ci0gICAg
ICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgICBmcmFt
ZURyYXdlci5kcmF3RnJhbWUoZnJhbWUsIGxpc3RlbmVyQW5kUGFyYW1zLmRyYXdlciwgZHJhd01h
dHJpeCwgMCAvKiB2aWV3cG9ydFggKi8sCi0gICAgICAgICAgMCAvKiB2aWV3cG9ydFkgKi8sIHNj
YWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotCi0gICAgICBmaW5hbCBCeXRlQnVmZmVyIGJpdG1h
cEJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qoc2NhbGVkV2lkdGggKiBzY2FsZWRI
ZWlnaHQgKiA0KTsKLSAgICAgIEdMRVMyMC5nbFZpZXdwb3J0KDAsIDAsIHNjYWxlZFdpZHRoLCBz
Y2FsZWRIZWlnaHQpOwotICAgICAgR0xFUzIwLmdsUmVhZFBpeGVscygKLSAgICAgICAgICAwLCAw
LCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VO
U0lHTkVEX0JZVEUsIGJpdG1hcEJ1ZmZlcik7Ci0KLSAgICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1
ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgR2xVdGlsLmNoZWNrTm9HTEVT
MkVycm9yKCJFZ2xSZW5kZXJlci5ub3RpZnlDYWxsYmFja3MiKTsKLQotICAgICAgZmluYWwgQml0
bWFwIGJpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdo
dCwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwotICAgICAgYml0bWFwLmNvcHlQaXhlbHNGcm9t
QnVmZmVyKGJpdG1hcEJ1ZmZlcik7Ci0gICAgICBsaXN0ZW5lckFuZFBhcmFtcy5saXN0ZW5lci5v
bkZyYW1lKGJpdG1hcCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgYXZlcmFnZVRp
bWVBc1N0cmluZyhsb25nIHN1bVRpbWVOcywgaW50IGNvdW50KSB7Ci0gICAgcmV0dXJuIChjb3Vu
dCA8PSAwKSA/ICJOQSIgOiBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pY3JvcyhzdW1UaW1lTnMg
LyBjb3VudCkgKyAiIHVzIjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dTdGF0aXN0aWNzKCkg
ewotICAgIGZpbmFsIERlY2ltYWxGb3JtYXQgZnBzRm9ybWF0ID0gbmV3IERlY2ltYWxGb3JtYXQo
IiMuMCIpOwotICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgp
OwotICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAgIGZpbmFsIGxvbmcg
ZWxhcHNlZFRpbWVOcyA9IGN1cnJlbnRUaW1lTnMgLSBzdGF0aXN0aWNzU3RhcnRUaW1lTnM7Ci0g
ICAgICBpZiAoZWxhcHNlZFRpbWVOcyA8PSAwIHx8IChtaW5SZW5kZXJQZXJpb2ROcyA9PSBMb25n
Lk1BWF9WQUxVRSAmJiBmcmFtZXNSZWNlaXZlZCA9PSAwKSkgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0gICAgICBmaW5hbCBmbG9hdCByZW5kZXJGcHMgPSBmcmFtZXNSZW5kZXJlZCAqIFRp
bWVVbml0LlNFQ09ORFMudG9OYW5vcygxKSAvIChmbG9hdCkgZWxhcHNlZFRpbWVOczsKLSAgICAg
IGxvZ0QoIkR1cmF0aW9uOiAiICsgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoZWxhcHNl
ZFRpbWVOcykgKyAiIG1zLiIKLSAgICAgICAgICArICIgRnJhbWVzIHJlY2VpdmVkOiAiICsgZnJh
bWVzUmVjZWl2ZWQgKyAiLiIKLSAgICAgICAgICArICIgRHJvcHBlZDogIiArIGZyYW1lc0Ryb3Bw
ZWQgKyAiLiIKLSAgICAgICAgICArICIgUmVuZGVyZWQ6ICIgKyBmcmFtZXNSZW5kZXJlZCArICIu
IgotICAgICAgICAgICsgIiBSZW5kZXIgZnBzOiAiICsgZnBzRm9ybWF0LmZvcm1hdChyZW5kZXJG
cHMpICsgIi4iCi0gICAgICAgICAgKyAiIEF2ZXJhZ2UgcmVuZGVyIHRpbWU6ICIgKyBhdmVyYWdl
VGltZUFzU3RyaW5nKHJlbmRlclRpbWVOcywgZnJhbWVzUmVuZGVyZWQpICsgIi4iCi0gICAgICAg
ICAgKyAiIEF2ZXJhZ2Ugc3dhcEJ1ZmZlciB0aW1lOiAiCi0gICAgICAgICAgKyBhdmVyYWdlVGlt
ZUFzU3RyaW5nKHJlbmRlclN3YXBCdWZmZXJUaW1lTnMsIGZyYW1lc1JlbmRlcmVkKSArICIuIik7
Ci0gICAgICByZXNldFN0YXRpc3RpY3MoY3VycmVudFRpbWVOcyk7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGxvZ0UoU3RyaW5nIHN0cmluZywgVGhyb3dhYmxlIGUpIHsKLSAgICBMb2dn
aW5nLmUoVEFHLCBuYW1lICsgc3RyaW5nLCBlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dE
KFN0cmluZyBzdHJpbmcpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCBuYW1lICsgc3RyaW5nKTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBsb2dXKFN0cmluZyBzdHJpbmcpIHsKLSAgICBMb2dnaW5nLnco
VEFHLCBuYW1lICsgc3RyaW5nKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRW5j
b2RlZEltYWdlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9FbmNvZGVkSW1hZ2UuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjUwMTM2YzM3MzliZmQwNGY5ZTIyOWRmZjQzOWY3NjU1OGIz
N2YxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9FbmNvZGVkSW1hZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRy
b2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVm
ZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vKioKLSAqIEFu
IGVuY29kZWQgZnJhbWUgZnJvbSBhIHZpZGVvIHN0cmVhbS4gVXNlZCBhcyBhbiBpbnB1dCBmb3Ig
ZGVjb2RlcnMgYW5kIGFzIGFuIG91dHB1dCBmb3IKLSAqIGVuY29kZXJzLgotICovCi1wdWJsaWMg
Y2xhc3MgRW5jb2RlZEltYWdlIGltcGxlbWVudHMgUmVmQ291bnRlZCB7Ci0gIC8vIE11c3QgYmUg
a2VwdCBpbiBzeW5jIHdpdGggY29tbW9uX3R5cGVzLmggRnJhbWVUeXBlLgotICBwdWJsaWMgZW51
bSBGcmFtZVR5cGUgewotICAgIEVtcHR5RnJhbWUoMCksCi0gICAgVmlkZW9GcmFtZUtleSgzKSwK
LSAgICBWaWRlb0ZyYW1lRGVsdGEoNCk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGludCBuYXRpdmVJ
bmRleDsKLQotICAgIHByaXZhdGUgRnJhbWVUeXBlKGludCBuYXRpdmVJbmRleCkgewotICAgICAg
dGhpcy5uYXRpdmVJbmRleCA9IG5hdGl2ZUluZGV4OwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQg
Z2V0TmF0aXZlKCkgewotICAgICAgcmV0dXJuIG5hdGl2ZUluZGV4OwotICAgIH0KLQotICAgIEBD
YWxsZWRCeU5hdGl2ZSgiRnJhbWVUeXBlIikKLSAgICBzdGF0aWMgRnJhbWVUeXBlIGZyb21OYXRp
dmVJbmRleChpbnQgbmF0aXZlSW5kZXgpIHsKLSAgICAgIGZvciAoRnJhbWVUeXBlIHR5cGUgOiBG
cmFtZVR5cGUudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0TmF0aXZlKCkgPT0gbmF0
aXZlSW5kZXgpIHsKLSAgICAgICAgICByZXR1cm4gdHlwZTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBuYXRpdmUg
ZnJhbWUgdHlwZTogIiArIG5hdGl2ZUluZGV4KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZp
bmFsIFJlZkNvdW50RGVsZWdhdGUgcmVmQ291bnREZWxlZ2F0ZTsKLSAgcHVibGljIGZpbmFsIEJ5
dGVCdWZmZXIgYnVmZmVyOwotICBwdWJsaWMgZmluYWwgaW50IGVuY29kZWRXaWR0aDsKLSAgcHVi
bGljIGZpbmFsIGludCBlbmNvZGVkSGVpZ2h0OwotICBwdWJsaWMgZmluYWwgbG9uZyBjYXB0dXJl
VGltZU1zOyAvLyBEZXByZWNhdGVkCi0gIHB1YmxpYyBmaW5hbCBsb25nIGNhcHR1cmVUaW1lTnM7
Ci0gIHB1YmxpYyBmaW5hbCBGcmFtZVR5cGUgZnJhbWVUeXBlOwotICBwdWJsaWMgZmluYWwgaW50
IHJvdGF0aW9uOwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBjb21wbGV0ZUZyYW1lOwotICBwdWJs
aWMgZmluYWwgQE51bGxhYmxlIEludGVnZXIgcXA7Ci0KLSAgLy8gVE9ETyhidWdzLndlYnJ0Yy5v
cmcvOTM3OCk6IFVzZSByZXRhaW4gYW5kIHJlbGVhc2UgZnJvbSBqbmkgY29kZS4KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHJldGFpbigpIHsKLSAgICByZWZDb3VudERlbGVnYXRlLnJldGFp
bigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAg
cmVmQ291bnREZWxlZ2F0ZS5yZWxlYXNlKCk7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAg
cHJpdmF0ZSBFbmNvZGVkSW1hZ2UoQnl0ZUJ1ZmZlciBidWZmZXIsIEBOdWxsYWJsZSBSdW5uYWJs
ZSByZWxlYXNlQ2FsbGJhY2ssIGludCBlbmNvZGVkV2lkdGgsCi0gICAgICBpbnQgZW5jb2RlZEhl
aWdodCwgbG9uZyBjYXB0dXJlVGltZU5zLCBGcmFtZVR5cGUgZnJhbWVUeXBlLCBpbnQgcm90YXRp
b24sCi0gICAgICBib29sZWFuIGNvbXBsZXRlRnJhbWUsIEBOdWxsYWJsZSBJbnRlZ2VyIHFwKSB7
Ci0gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0gICAgdGhpcy5lbmNvZGVkV2lkdGggPSBlbmNv
ZGVkV2lkdGg7Ci0gICAgdGhpcy5lbmNvZGVkSGVpZ2h0ID0gZW5jb2RlZEhlaWdodDsKLSAgICB0
aGlzLmNhcHR1cmVUaW1lTXMgPSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhjYXB0dXJl
VGltZU5zKTsKLSAgICB0aGlzLmNhcHR1cmVUaW1lTnMgPSBjYXB0dXJlVGltZU5zOwotICAgIHRo
aXMuZnJhbWVUeXBlID0gZnJhbWVUeXBlOwotICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjsK
LSAgICB0aGlzLmNvbXBsZXRlRnJhbWUgPSBjb21wbGV0ZUZyYW1lOwotICAgIHRoaXMucXAgPSBx
cDsKLSAgICB0aGlzLnJlZkNvdW50RGVsZWdhdGUgPSBuZXcgUmVmQ291bnREZWxlZ2F0ZShyZWxl
YXNlQ2FsbGJhY2spOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgQnl0ZUJ1
ZmZlciBnZXRCdWZmZXIoKSB7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfQotCi0gIEBDYWxsZWRC
eU5hdGl2ZQotICBwcml2YXRlIGludCBnZXRFbmNvZGVkV2lkdGgoKSB7Ci0gICAgcmV0dXJuIGVu
Y29kZWRXaWR0aDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIGludCBnZXRF
bmNvZGVkSGVpZ2h0KCkgewotICAgIHJldHVybiBlbmNvZGVkSGVpZ2h0OwotICB9Ci0KLSAgQENh
bGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgbG9uZyBnZXRDYXB0dXJlVGltZU5zKCkgewotICAgIHJl
dHVybiBjYXB0dXJlVGltZU5zOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUg
aW50IGdldEZyYW1lVHlwZSgpIHsKLSAgICByZXR1cm4gZnJhbWVUeXBlLmdldE5hdGl2ZSgpOwot
ICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgaW50IGdldFJvdGF0aW9uKCkgewot
ICAgIHJldHVybiByb3RhdGlvbjsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRl
IGJvb2xlYW4gZ2V0Q29tcGxldGVGcmFtZSgpIHsKLSAgICByZXR1cm4gY29tcGxldGVGcmFtZTsK
LSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIEBOdWxsYWJsZSBJbnRlZ2VyIGdl
dFFwKCkgewotICAgIHJldHVybiBxcDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBi
dWlsZGVyKCkgewotICAgIHJldHVybiBuZXcgQnVpbGRlcigpOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlIEJ5dGVCdWZmZXIgYnVmZmVyOwotICAg
IHByaXZhdGUgQE51bGxhYmxlIFJ1bm5hYmxlIHJlbGVhc2VDYWxsYmFjazsKLSAgICBwcml2YXRl
IGludCBlbmNvZGVkV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgZW5jb2RlZEhlaWdodDsKLSAgICBw
cml2YXRlIGxvbmcgY2FwdHVyZVRpbWVOczsKLSAgICBwcml2YXRlIEVuY29kZWRJbWFnZS5GcmFt
ZVR5cGUgZnJhbWVUeXBlOwotICAgIHByaXZhdGUgaW50IHJvdGF0aW9uOwotICAgIHByaXZhdGUg
Ym9vbGVhbiBjb21wbGV0ZUZyYW1lOwotICAgIHByaXZhdGUgQE51bGxhYmxlIEludGVnZXIgcXA7
Ci0KLSAgICBwcml2YXRlIEJ1aWxkZXIoKSB7fQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0QnVm
ZmVyKEJ5dGVCdWZmZXIgYnVmZmVyLCBATnVsbGFibGUgUnVubmFibGUgcmVsZWFzZUNhbGxiYWNr
KSB7Ci0gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgIHRoaXMucmVsZWFzZUNhbGxi
YWNrID0gcmVsZWFzZUNhbGxiYWNrOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAg
cHVibGljIEJ1aWxkZXIgc2V0RW5jb2RlZFdpZHRoKGludCBlbmNvZGVkV2lkdGgpIHsKLSAgICAg
IHRoaXMuZW5jb2RlZFdpZHRoID0gZW5jb2RlZFdpZHRoOwotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0RW5jb2RlZEhlaWdodChpbnQgZW5jb2RlZEhl
aWdodCkgewotICAgICAgdGhpcy5lbmNvZGVkSGVpZ2h0ID0gZW5jb2RlZEhlaWdodDsKLSAgICAg
IHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIEJ1aWxk
ZXIgc2V0Q2FwdHVyZVRpbWVNcyhsb25nIGNhcHR1cmVUaW1lTXMpIHsKLSAgICAgIHRoaXMuY2Fw
dHVyZVRpbWVOcyA9IFRpbWVVbml0Lk1JTExJU0VDT05EUy50b05hbm9zKGNhcHR1cmVUaW1lTXMp
OwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0Q2Fw
dHVyZVRpbWVOcyhsb25nIGNhcHR1cmVUaW1lTnMpIHsKLSAgICAgIHRoaXMuY2FwdHVyZVRpbWVO
cyA9IGNhcHR1cmVUaW1lTnM7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgQnVpbGRlciBzZXRGcmFtZVR5cGUoRW5jb2RlZEltYWdlLkZyYW1lVHlwZSBmcmFtZVR5cGUp
IHsKLSAgICAgIHRoaXMuZnJhbWVUeXBlID0gZnJhbWVUeXBlOwotICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0Um90YXRpb24oaW50IHJvdGF0aW9uKSB7
Ci0gICAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb247Ci0gICAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRDb21wbGV0ZUZyYW1lKGJvb2xlYW4gY29tcGxl
dGVGcmFtZSkgewotICAgICAgdGhpcy5jb21wbGV0ZUZyYW1lID0gY29tcGxldGVGcmFtZTsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHB1YmxpYyBCdWlsZGVyIHNldFFwKEBOdWxs
YWJsZSBJbnRlZ2VyIHFwKSB7Ci0gICAgICB0aGlzLnFwID0gcXA7Ci0gICAgICByZXR1cm4gdGhp
czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRW5jb2RlZEltYWdlIGNyZWF0ZUVuY29kZWRJbWFnZSgp
IHsKLSAgICAgIHJldHVybiBuZXcgRW5jb2RlZEltYWdlKGJ1ZmZlciwgcmVsZWFzZUNhbGxiYWNr
LCBlbmNvZGVkV2lkdGgsIGVuY29kZWRIZWlnaHQsIGNhcHR1cmVUaW1lTnMsCi0gICAgICAgICAg
ZnJhbWVUeXBlLCByb3RhdGlvbiwgY29tcGxldGVGcmFtZSwgcXApOwotICAgIH0KLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvRmVjQ29udHJvbGxlckZhY3RvcnlGYWN0b3J5SW50ZXJm
YWNlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9GZWNDb250cm9sbGVyRmFjdG9yeUZhY3RvcnlJbnRlcmZh
Y2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQzOTM5MGY3MmRiNjU0OGQ2
OTc1NGQ1ZDZhNTQ1NGU1NmQ3YTU4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9GZWNDb250cm9sbGVyRmFjdG9yeUZhY3RvcnlJbnRl
cmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBGYWN0b3J5IGZvciBjcmVhdGlu
ZyB3ZWJydGM6OkZlY0NvbnRyb2xsZXJGYWN0b3J5IGluc3RhbmNlcy4KLSAqLwotcHVibGljIGlu
dGVyZmFjZSBGZWNDb250cm9sbGVyRmFjdG9yeUZhY3RvcnlJbnRlcmZhY2UgewotICAvKioKLSAg
ICogRHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgd2VicnRjOjpGZWNDb250cm9sbGVyRmFjdG9yeSBp
bnN0YW5jZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuCi0gICAqIFRoZSBjYWxsZXIgdGFr
ZXMgb3duZXJzaGlwIG9mIHRoZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgbG9uZyBjcmVhdGVO
YXRpdmUoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0ZpbGVWaWRlb0NhcHR1cmVyLmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9GaWxlVmlkZW9DYXB0dXJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4MjcwMzY3OTcwZjNlYzQ3OTBlMDZkODQ2ZTc0OWJhY2ZiYjhkYWYzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRj
L0ZpbGVWaWRlb0NhcHR1cmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9y
dCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmFuZG9tQWNjZXNzRmlsZTsK
LWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkZp
bGVDaGFubmVsOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZh
LnV0aWwuVGltZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotcHVibGljIGNsYXNzIEZpbGVWaWRlb0NhcHR1cmVy
IGltcGxlbWVudHMgVmlkZW9DYXB0dXJlciB7Ci0gIHByaXZhdGUgaW50ZXJmYWNlIFZpZGVvUmVh
ZGVyIHsKLSAgICBWaWRlb0ZyYW1lIGdldE5leHRGcmFtZSgpOwotICAgIHZvaWQgY2xvc2UoKTsK
LSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHZpZGVvIGRhdGEgZnJvbSBmaWxlIGZvciB0aGUgLnk0
bSBjb250YWluZXIuCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygiU3RyaW5nU3BsaXR0ZXIi
KQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWaWRlb1JlYWRlclk0TSBpbXBsZW1lbnRzIFZpZGVv
UmVhZGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZpZGVvUmVh
ZGVyWTRNIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWTRNX0ZSQU1FX0RFTElN
RVRFUiA9ICJGUkFNRSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZSQU1FX0RFTElN
RVRFUl9MRU5HVEggPSBZNE1fRlJBTUVfREVMSU1FVEVSLmxlbmd0aCgpICsgMTsKLQotICAgIHBy
aXZhdGUgZmluYWwgaW50IGZyYW1lV2lkdGg7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVI
ZWlnaHQ7Ci0gICAgLy8gRmlyc3QgY2hhciBhZnRlciBoZWFkZXIKLSAgICBwcml2YXRlIGZpbmFs
IGxvbmcgdmlkZW9TdGFydDsKLSAgICBwcml2YXRlIGZpbmFsIFJhbmRvbUFjY2Vzc0ZpbGUgbWVk
aWFGaWxlOwotICAgIHByaXZhdGUgZmluYWwgRmlsZUNoYW5uZWwgbWVkaWFGaWxlQ2hhbm5lbDsK
LQotICAgIHB1YmxpYyBWaWRlb1JlYWRlclk0TShTdHJpbmcgZmlsZSkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgIG1lZGlhRmlsZSA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKGZpbGUsICJyIik7
Ci0gICAgICBtZWRpYUZpbGVDaGFubmVsID0gbWVkaWFGaWxlLmdldENoYW5uZWwoKTsKLSAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgIGludCBjID0gbWVkaWFGaWxlLnJlYWQoKTsKLSAgICAgICAgaWYgKGMg
PT0gLTEpIHsKLSAgICAgICAgICAvLyBFbmQgb2YgZmlsZSByZWFjaGVkLgotICAgICAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb3VuZCBlbmQgb2YgZmlsZSBiZWZvcmUgZW5kIG9m
IGhlYWRlciBmb3IgZmlsZTogIiArIGZpbGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjID09
ICdcbicpIHsKLSAgICAgICAgICAvLyBFbmQgb2YgaGVhZGVyIGZvdW5kLgotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKChjaGFyKSBjKTsKLSAgICAg
IH0KLSAgICAgIHZpZGVvU3RhcnQgPSBtZWRpYUZpbGVDaGFubmVsLnBvc2l0aW9uKCk7Ci0gICAg
ICBTdHJpbmcgaGVhZGVyID0gYnVpbGRlci50b1N0cmluZygpOwotICAgICAgU3RyaW5nW10gaGVh
ZGVyVG9rZW5zID0gaGVhZGVyLnNwbGl0KCJbIF0iKTsKLSAgICAgIGludCB3ID0gMDsKLSAgICAg
IGludCBoID0gMDsKLSAgICAgIFN0cmluZyBjb2xvclNwYWNlID0gIiI7Ci0gICAgICBmb3IgKFN0
cmluZyB0b2sgOiBoZWFkZXJUb2tlbnMpIHsKLSAgICAgICAgY2hhciBjID0gdG9rLmNoYXJBdCgw
KTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAnVyc6Ci0gICAgICAgICAg
ICB3ID0gSW50ZWdlci5wYXJzZUludCh0b2suc3Vic3RyaW5nKDEpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgaCA9IEludGVnZXIucGFyc2VJ
bnQodG9rLnN1YnN0cmluZygxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
ICdDJzoKLSAgICAgICAgICAgIGNvbG9yU3BhY2UgPSB0b2suc3Vic3RyaW5nKDEpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
b2xvciBzcGFjZTogIiArIGNvbG9yU3BhY2UpOwotICAgICAgaWYgKCFjb2xvclNwYWNlLmVxdWFs
cygiNDIwIikgJiYgIWNvbG9yU3BhY2UuZXF1YWxzKCI0MjBtcGVnMiIpKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAiRG9lcyBub3Qg
c3VwcG9ydCBhbnkgb3RoZXIgY29sb3Igc3BhY2UgdGhhbiBJNDIwIG9yIEk0MjBtcGVnMiIpOwot
ICAgICAgfQotICAgICAgaWYgKCh3ICUgMikgPT0gMSB8fCAoaCAlIDIpID09IDEpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRG9lcyBub3Qgc3VwcG9ydCBv
ZGQgd2lkdGggb3IgaGVpZ2h0Iik7Ci0gICAgICB9Ci0gICAgICBmcmFtZVdpZHRoID0gdzsKLSAg
ICAgIGZyYW1lSGVpZ2h0ID0gaDsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJmcmFtZSBkaW06ICgi
ICsgdyArICIsICIgKyBoICsgIikiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgVmlkZW9GcmFtZSBnZXROZXh0RnJhbWUoKSB7Ci0gICAgICBmaW5hbCBsb25nIGNhcHR1cmVU
aW1lTnMgPSBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0ZW1DbG9jay5lbGFwc2Vk
UmVhbHRpbWUoKSk7Ci0gICAgICBmaW5hbCBKYXZhSTQyMEJ1ZmZlciBidWZmZXIgPSBKYXZhSTQy
MEJ1ZmZlci5hbGxvY2F0ZShmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCk7Ci0gICAgICBmaW5hbCBC
eXRlQnVmZmVyIGRhdGFZID0gYnVmZmVyLmdldERhdGFZKCk7Ci0gICAgICBmaW5hbCBCeXRlQnVm
ZmVyIGRhdGFVID0gYnVmZmVyLmdldERhdGFVKCk7Ci0gICAgICBmaW5hbCBCeXRlQnVmZmVyIGRh
dGFWID0gYnVmZmVyLmdldERhdGFWKCk7Ci0gICAgICBmaW5hbCBpbnQgY2hyb21hSGVpZ2h0ID0g
KGZyYW1lSGVpZ2h0ICsgMSkgLyAyOwotICAgICAgZmluYWwgaW50IHNpemVZID0gZnJhbWVIZWln
aHQgKiBidWZmZXIuZ2V0U3RyaWRlWSgpOwotICAgICAgZmluYWwgaW50IHNpemVVID0gY2hyb21h
SGVpZ2h0ICogYnVmZmVyLmdldFN0cmlkZVUoKTsKLSAgICAgIGZpbmFsIGludCBzaXplViA9IGNo
cm9tYUhlaWdodCAqIGJ1ZmZlci5nZXRTdHJpZGVWKCk7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAg
IEJ5dGVCdWZmZXIgZnJhbWVEZWxpbSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoRlJBTUVfREVMSU1F
VEVSX0xFTkdUSCk7Ci0gICAgICAgIGlmIChtZWRpYUZpbGVDaGFubmVsLnJlYWQoZnJhbWVEZWxp
bSkgPCBGUkFNRV9ERUxJTUVURVJfTEVOR1RIKSB7Ci0gICAgICAgICAgLy8gV2UgcmVhY2ggZW5k
IG9mIGZpbGUsIGxvb3AKLSAgICAgICAgICBtZWRpYUZpbGVDaGFubmVsLnBvc2l0aW9uKHZpZGVv
U3RhcnQpOwotICAgICAgICAgIGlmIChtZWRpYUZpbGVDaGFubmVsLnJlYWQoZnJhbWVEZWxpbSkg
PCBGUkFNRV9ERUxJTUVURVJfTEVOR1RIKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigiRXJyb3IgbG9vcGluZyB2aWRlbyIpOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBTdHJpbmcgZnJhbWVEZWxpbVN0ciA9IG5ldyBTdHJpbmcoZnJhbWVEZWxpbS5h
cnJheSgpLCBDaGFyc2V0LmZvck5hbWUoIlVTLUFTQ0lJIikpOwotICAgICAgICBpZiAoIWZyYW1l
RGVsaW1TdHIuZXF1YWxzKFk0TV9GUkFNRV9ERUxJTUVURVIgKyAiXG4iKSkgewotICAgICAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiRnJhbWVzIHNob3Vs
ZCBiZSBkZWxpbWl0ZWQgYnkgRlJBTUUgcGx1cyBuZXdsaW5lLCBmb3VuZCBkZWxpbXRlciB3YXM6
ICciCi0gICAgICAgICAgICAgICsgZnJhbWVEZWxpbVN0ciArICInIik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtZWRpYUZpbGVDaGFubmVsLnJlYWQoZGF0YVkpOwotICAgICAgICBtZWRpYUZpbGVD
aGFubmVsLnJlYWQoZGF0YVUpOwotICAgICAgICBtZWRpYUZpbGVDaGFubmVsLnJlYWQoZGF0YVYp
OwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG5ldyBWaWRlb0ZyYW1l
KGJ1ZmZlciwgMCAvKiByb3RhdGlvbiAqLywgY2FwdHVyZVRpbWVOcyk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgICB0cnkgewotICAgICAg
ICAvLyBDbG9zaW5nIGEgZmlsZSBhbHNvIGNsb3NlcyB0aGUgY2hhbm5lbC4KLSAgICAgICAgbWVk
aWFGaWxlLmNsb3NlKCk7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
IExvZ2dpbmcuZShUQUcsICJQcm9ibGVtIGNsb3NpbmcgZmlsZSIsIGUpOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiRmlsZVZpZGVv
Q2FwdHVyZXIiOwotICBwcml2YXRlIGZpbmFsIFZpZGVvUmVhZGVyIHZpZGVvUmVhZGVyOwotICBw
cml2YXRlIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJpdmF0ZSBmaW5h
bCBUaW1lciB0aW1lciA9IG5ldyBUaW1lcigpOwotCi0gIHByaXZhdGUgZmluYWwgVGltZXJUYXNr
IHRpY2tUYXNrID0gbmV3IFRpbWVyVGFzaygpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICB0aWNrKCk7Ci0gICAgfQotICB9OwotCi0gIHB1YmxpYyBGaWxl
VmlkZW9DYXB0dXJlcihTdHJpbmcgaW5wdXRGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAg
IHRyeSB7Ci0gICAgICB2aWRlb1JlYWRlciA9IG5ldyBWaWRlb1JlYWRlclk0TShpbnB1dEZpbGUp
OwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
b3VsZCBub3Qgb3BlbiB2aWRlbyBmaWxlOiAiICsgaW5wdXRGaWxlKTsKLSAgICAgIHRocm93IGU7
Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGljaygpIHsKLSAgICBWaWRlb0ZyYW1lIHZp
ZGVvRnJhbWUgPSB2aWRlb1JlYWRlci5nZXROZXh0RnJhbWUoKTsKLSAgICBjYXB0dXJlck9ic2Vy
dmVyLm9uRnJhbWVDYXB0dXJlZCh2aWRlb0ZyYW1lKTsKLSAgICB2aWRlb0ZyYW1lLnJlbGVhc2Uo
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29u
dGV4dCwKLSAgICAgIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikgewotICAgIHRo
aXMuY2FwdHVyZXJPYnNlcnZlciA9IGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgc3RhcnRDYXB0dXJlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IGZyYW1lcmF0ZSkgewotICAgIHRpbWVyLnNjaGVkdWxlKHRpY2tUYXNrLCAwLCAxMDAwIC8gZnJh
bWVyYXRlKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgdGltZXIuY2FuY2VsKCk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICAvLyBFbXB0eSBvbiBwdXJwb3Nl
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB2aWRl
b1JlYWRlci5jbG9zZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlz
U2NyZWVuY2FzdCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9v
cmcvd2VicnRjL0ZyYW1lRGVjcnlwdG9yLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9GcmFtZURlY3J5cHRv
ci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTMyZjNkOTRhNWVlOWQxODBl
YjhmZmJjYTIxYjdjM2RkZGM0YWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0ZyYW1lRGVjcnlwdG9yLmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSwyNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLS8qKgotICogVGhlIEZyYW1lRGVjcnlwdG9yIGludGVyZmFjZSBhbGxvd3MgSmF2YSBB
UEkgdXNlcnMgdG8gcHJvdmlkZSBhCi0gKiBwb2ludGVyIHRvIHRoZWlyIG5hdGl2ZSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgRnJhbWVEZWNyeXB0b3JJbnRlcmZhY2UuCi0gKiBGcmFtZURlY3J5cHRv
cnMgYXJlIGV4dHJlbWVseSBwZXJmb3JtYW5jZSBzZW5zaXRpdmUgYXMgdGhleSBtdXN0IHByb2Nl
c3MgYWxsCi0gKiBpbmNvbWluZyB2aWRlbyBhbmQgYXVkaW8gZnJhbWVzLiBEdWUgdG8gdGhpcyBy
ZWFzb24gdGhleSBzaG91bGQgYWx3YXlzIGJlCi0gKiBiYWNrZWQgYnkgYSBuYXRpdmUgaW1wbGVt
ZW50YXRpb24KLSAqIEBub3RlIE5vdCByZWFkeSBmb3IgcHJvZHVjdGlvbiB1c2UuCi0gKi8KLXB1
YmxpYyBpbnRlcmZhY2UgRnJhbWVEZWNyeXB0b3IgewotICAvKioKLSAgICogQHJldHVybiBBIEZy
YW1lRGVjcnlwdG9ySW50ZXJmYWNlIHBvaW50ZXIuCi0gICAqLwotICBsb25nIGdldE5hdGl2ZUZy
YW1lRGVjcnlwdG9yKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9GcmFtZUVuY3J5cHRv
ci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvRnJhbWVFbmNyeXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmM4MTIyM2YyMTQyNmU1ODYxNjQxZTQ1ZjEyNDk0NzM4NjE5Yjk4Ni4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0
Yy9GcmFtZUVuY3J5cHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIFRoZSBGcmFt
ZUVuY3J5cHRvciBpbnRlcmZhY2UgYWxsb3dzIEphdmEgQVBJIHVzZXJzIHRvIHByb3ZpZGUgYSBw
b2ludGVyIHRvCi0gKiB0aGVpciBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEZyYW1lRW5j
cnlwdG9ySW50ZXJmYWNlLgotICogRnJhbWVFbmN5cHRvcnMgYXJlIGV4dHJlbWVseSBwZXJmb3Jt
YW5jZSBzZW5zaXRpdmUgYXMgdGhleSBtdXN0IHByb2Nlc3MgYWxsCi0gKiBvdXRnb2luZyB2aWRl
byBhbmQgYXVkaW8gZnJhbWVzLiBEdWUgdG8gdGhpcyByZWFzb24gdGhleSBzaG91bGQgYWx3YXlz
IGJlCi0gKiBiYWNrZWQgYnkgYSBuYXRpdmUgaW1wbGVtZW50YXRpb24uCi0gKiBAbm90ZSBOb3Qg
cmVhZHkgZm9yIHByb2R1Y3Rpb24gdXNlLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEZyYW1lRW5j
cnlwdG9yIHsKLSAgLyoqCi0gICAqIEByZXR1cm4gQSBGcmFtZUVuY3J5cHRvckludGVyZmFjZSBw
b2ludGVyLgotICAgKi8KLSAgbG9uZyBnZXROYXRpdmVGcmFtZUVuY3J5cHRvcigpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvR2xSZWN0RHJhd2VyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9HbFJl
Y3REcmF3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmYmQxYjdiY2Ux
ZjA0ZjQyNDI5MGE2ZDUzNzJiOGVlYTM0ZDU0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIuamF2YQorKysgL2Rl
di9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotLyoqIFNpbXBsZXN0IHBvc3NpYmxlIEdMIHNoYWRlciB0aGF0IGp1c3QgZHJh
d3MgZnJhbWVzIGFzIG9wYXF1ZSBxdWFkcy4gKi8KLXB1YmxpYyBjbGFzcyBHbFJlY3REcmF3ZXIg
ZXh0ZW5kcyBHbEdlbmVyaWNEcmF3ZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RlJBR01FTlRfU0hBREVSID0gInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0Nv
bG9yID0gc2FtcGxlKHRjKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
Y2xhc3MgU2hhZGVyQ2FsbGJhY2tzIGltcGxlbWVudHMgR2xHZW5lcmljRHJhd2VyLlNoYWRlckNh
bGxiYWNrcyB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25OZXdTaGFkZXIoR2xT
aGFkZXIgc2hhZGVyKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25QcmVw
YXJlU2hhZGVyKEdsU2hhZGVyIHNoYWRlciwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdp
ZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAgICAgIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmll
d3BvcnRIZWlnaHQpIHt9Ci0gIH0KLQotICBwdWJsaWMgR2xSZWN0RHJhd2VyKCkgewotICAgIHN1
cGVyKEZSQUdNRU5UX1NIQURFUiwgbmV3IFNoYWRlckNhbGxiYWNrcygpKTsKLSAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvR2xTaGFkZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0dsU2hhZGVy
LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNWM2MzA2NjNhODkyNjkzOTdj
MzdkNzJhNTY3OGQ1YjYxMzEwNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvR2xTaGFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0x
LDEyOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci0KLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1
ZmZlcjsKLQotLy8gSGVscGVyIGNsYXNzIGZvciBoYW5kbGluZyBPcGVuR0wgc2hhZGVycyBhbmQg
c2hhZGVyIHByb2dyYW1zLgotcHVibGljIGNsYXNzIEdsU2hhZGVyIHsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJHbFNoYWRlciI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50
IGNvbXBpbGVTaGFkZXIoaW50IHNoYWRlclR5cGUsIFN0cmluZyBzb3VyY2UpIHsKLSAgICBmaW5h
bCBpbnQgc2hhZGVyID0gR0xFUzIwLmdsQ3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpOwotICAgIGlm
IChzaGFkZXIgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdsQ3Jl
YXRlU2hhZGVyKCkgZmFpbGVkLiBHTEVTMjAgZXJyb3I6ICIgKyBHTEVTMjAuZ2xHZXRFcnJvcigp
KTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsU2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlKTsKLSAg
ICBHTEVTMjAuZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgaW50W10gY29tcGlsZVN0YXR1
cyA9IG5ldyBpbnRbXSB7R0xFUzIwLkdMX0ZBTFNFfTsKLSAgICBHTEVTMjAuZ2xHZXRTaGFkZXJp
dihzaGFkZXIsIEdMRVMyMC5HTF9DT01QSUxFX1NUQVRVUywgY29tcGlsZVN0YXR1cywgMCk7Ci0g
ICAgaWYgKGNvbXBpbGVTdGF0dXNbMF0gIT0gR0xFUzIwLkdMX1RSVUUpIHsKLSAgICAgIExvZ2dp
bmcuZSgKLSAgICAgICAgICBUQUcsICJDb21waWxlIGVycm9yICIgKyBHTEVTMjAuZ2xHZXRTaGFk
ZXJJbmZvTG9nKHNoYWRlcikgKyAiIGluIHNoYWRlcjpcbiIgKyBzb3VyY2UpOwotICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oR0xFUzIwLmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIp
KTsKLSAgICB9Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJjb21waWxlU2hhZGVyIik7
Ci0gICAgcmV0dXJuIHNoYWRlcjsKLSAgfQotCi0gIHByaXZhdGUgaW50IHByb2dyYW07Ci0KLSAg
cHVibGljIEdsU2hhZGVyKFN0cmluZyB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyBmcmFnbWVudFNvdXJj
ZSkgewotICAgIGZpbmFsIGludCB2ZXJ0ZXhTaGFkZXIgPSBjb21waWxlU2hhZGVyKEdMRVMyMC5H
TF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTb3VyY2UpOwotICAgIGZpbmFsIGludCBmcmFnbWVudFNo
YWRlciA9IGNvbXBpbGVTaGFkZXIoR0xFUzIwLkdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRT
b3VyY2UpOwotICAgIHByb2dyYW0gPSBHTEVTMjAuZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgaWYg
KHByb2dyYW0gPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdsQ3Jl
YXRlUHJvZ3JhbSgpIGZhaWxlZC4gR0xFUzIwIGVycm9yOiAiICsgR0xFUzIwLmdsR2V0RXJyb3Io
KSk7Ci0gICAgfQotICAgIEdMRVMyMC5nbEF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFk
ZXIpOwotICAgIEdMRVMyMC5nbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgR0xFUzIwLmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci0gICAgaW50W10gbGlua1N0YXR1
cyA9IG5ldyBpbnRbXSB7R0xFUzIwLkdMX0ZBTFNFfTsKLSAgICBHTEVTMjAuZ2xHZXRQcm9ncmFt
aXYocHJvZ3JhbSwgR0xFUzIwLkdMX0xJTktfU1RBVFVTLCBsaW5rU3RhdHVzLCAwKTsKLSAgICBp
ZiAobGlua1N0YXR1c1swXSAhPSBHTEVTMjAuR0xfVFJVRSkgewotICAgICAgTG9nZ2luZy5lKFRB
RywgIkNvdWxkIG5vdCBsaW5rIHByb2dyYW06ICIgKyBHTEVTMjAuZ2xHZXRQcm9ncmFtSW5mb0xv
Zyhwcm9ncmFtKSk7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihHTEVTMjAuZ2xH
ZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7Ci0gICAgfQotICAgIC8vIEFjY29yZGluZyB0byB0
aGUgZG9jdW1lbnRhdGlvbiBvZiBnbExpbmtQcm9ncmFtKCk6Ci0gICAgLy8gIkFmdGVyIHRoZSBs
aW5rIG9wZXJhdGlvbiwgYXBwbGljYXRpb25zIGFyZSBmcmVlIHRvIG1vZGlmeSBhdHRhY2hlZCBz
aGFkZXIgb2JqZWN0cywgY29tcGlsZQotICAgIC8vIGF0dGFjaGVkIHNoYWRlciBvYmplY3RzLCBk
ZXRhY2ggc2hhZGVyIG9iamVjdHMsIGRlbGV0ZSBzaGFkZXIgb2JqZWN0cywgYW5kIGF0dGFjaCBh
ZGRpdGlvbmFsCi0gICAgLy8gc2hhZGVyIG9iamVjdHMuIE5vbmUgb2YgdGhlc2Ugb3BlcmF0aW9u
cyBhZmZlY3RzIHRoZSBpbmZvcm1hdGlvbiBsb2cgb3IgdGhlIHByb2dyYW0gdGhhdCBpcwotICAg
IC8vIHBhcnQgb2YgdGhlIHByb2dyYW0gb2JqZWN0LiIKLSAgICAvLyBCdXQgaW4gcHJhY3RpY2Us
IGRldGFjaGluZyBzaGFkZXJzIGZyb20gdGhlIHByb2dyYW0gc2VlbXMgdG8gYnJlYWsgc29tZSBk
ZXZpY2VzLiBEZWxldGluZyB0aGUKLSAgICAvLyBzaGFkZXJzIGFyZSBmaW5lIGhvd2V2ZXIgLSBp
dCB3aWxsIGRlbGV0ZSB0aGVtIHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEg
cHJvZ3JhbS4KLSAgICBHTEVTMjAuZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBH
TEVTMjAuZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIEdsVXRpbC5jaGVja05v
R0xFUzJFcnJvcigiQ3JlYXRpbmcgR2xTaGFkZXIiKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0
QXR0cmliTG9jYXRpb24oU3RyaW5nIGxhYmVsKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsK
LSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiBy
ZWxlYXNlZCIpOwotICAgIH0KLSAgICBpbnQgbG9jYXRpb24gPSBHTEVTMjAuZ2xHZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBsYWJlbCk7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgJyIgKyBsYWJlbCAr
ICInIGluIHByb2dyYW0iKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAg
LyoqCi0gICAqIEVuYWJsZSBhbmQgdXBsb2FkIGEgdmVydGV4IGFycmF5IGZvciBhdHRyaWJ1dGUg
fGxhYmVsfC4gVGhlIHZlcnRleCBkYXRhIGlzIHNwZWNpZmllZCBpbgotICAgKiB8YnVmZmVyfCB3
aXRoIHxkaW1lbnNpb258IG51bWJlciBvZiBjb21wb25lbnRzIHBlciB2ZXJ0ZXguCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJBcnJheShTdHJpbmcgbGFiZWwsIGludCBkaW1l
bnNpb24sIEZsb2F0QnVmZmVyIGJ1ZmZlcikgewotICAgIHNldFZlcnRleEF0dHJpYkFycmF5KGxh
YmVsLCBkaW1lbnNpb24sIDAgLyogc3RyaWRlICovLCBidWZmZXIpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEVuYWJsZSBhbmQgdXBsb2FkIGEgdmVydGV4IGFycmF5IGZvciBhdHRyaWJ1dGUgfGxhYmVs
fC4gVGhlIHZlcnRleCBkYXRhIGlzIHNwZWNpZmllZCBpbgotICAgKiB8YnVmZmVyfCB3aXRoIHxk
aW1lbnNpb258IG51bWJlciBvZiBjb21wb25lbnRzIHBlciB2ZXJ0ZXggYW5kIHNwZWNpZmllZCB8
c3RyaWRlfC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcnRleEF0dHJpYkFycmF5KFN0cmlu
ZyBsYWJlbCwgaW50IGRpbWVuc2lvbiwgaW50IHN0cmlkZSwgRmxvYXRCdWZmZXIgYnVmZmVyKSB7
Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgICBpbnQgbG9j
YXRpb24gPSBnZXRBdHRyaWJMb2NhdGlvbihsYWJlbCk7Ci0gICAgR0xFUzIwLmdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobG9jYXRpb24pOwotICAgIEdMRVMyMC5nbFZlcnRleEF0dHJpYlBvaW50
ZXIobG9jYXRpb24sIGRpbWVuc2lvbiwgR0xFUzIwLkdMX0ZMT0FULCBmYWxzZSwgc3RyaWRlLCBi
dWZmZXIpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigic2V0VmVydGV4QXR0cmliQXJy
YXkiKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFN0cmluZyBsYWJl
bCkgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9Ci0gICAgaW50
IGxvY2F0aW9uID0gR0xFUzIwLmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIGxhYmVsKTsK
LSAgICBpZiAobG9jYXRpb24gPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiQ291bGQgbm90IGxvY2F0ZSB1bmlmb3JtICciICsgbGFiZWwgKyAiJyBpbiBwcm9ncmFtIik7
Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVzZVBy
b2dyYW0oKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50
aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAg
ICBHTEVTMjAuZ2xVc2VQcm9ncmFtKHByb2dyYW0pOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJF
cnJvcigiZ2xVc2VQcm9ncmFtIik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJEZWxldGluZyBzaGFkZXIuIik7Ci0gICAgLy8gRGVsZXRlIHBy
b2dyYW0sIGF1dG9tYXRpY2FsbHkgZGV0YWNoaW5nIGFueSBzaGFkZXJzIGZyb20gaXQuCi0gICAg
aWYgKHByb2dyYW0gIT0gLTEpIHsKLSAgICAgIEdMRVMyMC5nbERlbGV0ZVByb2dyYW0ocHJvZ3Jh
bSk7Ci0gICAgICBwcm9ncmFtID0gLTE7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvR2xUZXh0dXJl
RnJhbWVCdWZmZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwNmZlNTZl
MDNiYzczOTZmY2I2MDUxZWQyOGM2ZjY1ZWY4ZjdjMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZlci5q
YXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQot
LyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIGhhbmRsaW5nIE9wZW5HTCBmcmFtZWJ1ZmZlciB3aXRo
IG9ubHkgY29sb3IgYXR0YWNobWVudCBhbmQgbm8gZGVwdGggb3Igc3RlbmNpbAotICogYnVmZmVy
LiBJbnRlbmRlZCBmb3Igc2ltcGxlIHRhc2tzIHN1Y2ggYXMgdGV4dHVyZSBjb3B5LCB0ZXh0dXJl
IGRvd25zY2FsaW5nLCBhbmQgdGV4dHVyZSBjb2xvcgotICogY29udmVyc2lvbi4gVGhpcyBjbGFz
cyBpcyBub3QgdGhyZWFkIHNhZmUgYW5kIG11c3QgYmUgdXNlZCBieSBhIHRocmVhZCB3aXRoIGFu
IGFjdGl2ZSBHTCBjb250ZXh0LgotICovCi0vLyBUT0RPKG1hZ2plZCk6IEFkZCB1bml0dGVzdHMg
Zm9yIHRoaXMgY2xhc3MuCi1wdWJsaWMgY2xhc3MgR2xUZXh0dXJlRnJhbWVCdWZmZXIgewotICBw
cml2YXRlIGZpbmFsIGludCBwaXhlbEZvcm1hdDsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVCdWZmZXJJ
ZDsKLSAgcHJpdmF0ZSBpbnQgdGV4dHVyZUlkOwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJp
dmF0ZSBpbnQgaGVpZ2h0OwotCi0gIC8qKgotICAgKiBHZW5lcmF0ZSB0ZXh0dXJlIGFuZCBmcmFt
ZWJ1ZmZlciByZXNvdXJjZXMuIEFuIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3Vy
cmVudCB0aHJlYWQKLSAgICogd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZSBmcmFtZWJ1
ZmZlciBpcyBub3QgY29tcGxldGUgdW50aWwgc2V0U2l6ZSgpIGlzIGNhbGxlZC4KLSAgICovCi0g
IHB1YmxpYyBHbFRleHR1cmVGcmFtZUJ1ZmZlcihpbnQgcGl4ZWxGb3JtYXQpIHsKLSAgICBzd2l0
Y2ggKHBpeGVsRm9ybWF0KSB7Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9MVU1JTkFOQ0U6Ci0gICAg
ICBjYXNlIEdMRVMyMC5HTF9SR0I6Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9SR0JBOgotICAgICAg
ICB0aGlzLnBpeGVsRm9ybWF0ID0gcGl4ZWxGb3JtYXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52
YWxpZCBwaXhlbCBmb3JtYXQ6ICIgKyBwaXhlbEZvcm1hdCk7Ci0gICAgfQotICAgIHRoaXMud2lk
dGggPSAwOwotICAgIHRoaXMuaGVpZ2h0ID0gMDsKLSAgfQotCi0gIC8qKgotICAgKiAoUmUpYWxs
b2NhdGUgdGV4dHVyZS4gV2lsbCBkbyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBlcXVh
bHMgdGhlIGN1cnJlbnQgc2l6ZS4gQW4KLSAgICogRUdMQ29udGV4dCBtdXN0IGJlIGJvdW5kIG9u
IHRoZSBjdXJyZW50IHRocmVhZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gTXVzdCBiZSBj
YWxsZWQgYXQKLSAgICogbGVhc3Qgb25jZSBiZWZvcmUgdXNpbmcgdGhlIGZyYW1lYnVmZmVyLiBN
YXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGNoYW5nZSBzaXplLgotICAgKi8KLSAgcHVi
bGljIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBpZiAod2lkdGgg
PD0gMCB8fCBoZWlnaHQgPD0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiSW52YWxpZCBzaXplOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOwotICAgIH0K
LSAgICBpZiAod2lkdGggPT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT0gdGhpcy5oZWlnaHQpIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMu
aGVpZ2h0ID0gaGVpZ2h0OwotICAgIC8vIExhenkgYWxsb2NhdGlvbiB0aGUgZmlyc3QgdGltZSBz
ZXRTaXplKCkgaXMgY2FsbGVkLgotICAgIGlmICh0ZXh0dXJlSWQgPT0gMCkgewotICAgICAgdGV4
dHVyZUlkID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0g
ICAgfQotICAgIGlmIChmcmFtZUJ1ZmZlcklkID09IDApIHsKLSAgICAgIGZpbmFsIGludCBmcmFt
ZUJ1ZmZlcnNbXSA9IG5ldyBpbnRbMV07Ci0gICAgICBHTEVTMjAuZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgZnJhbWVCdWZmZXJzLCAwKTsKLSAgICAgIGZyYW1lQnVmZmVySWQgPSBmcmFtZUJ1ZmZlcnNb
MF07Ci0gICAgfQotCi0gICAgLy8gQWxsb2NhdGUgdGV4dHVyZS4KLSAgICBHTEVTMjAuZ2xBY3Rp
dmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUo
R0xFUzIwLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgR0xFUzIwLmdsVGV4SW1hZ2Uy
RChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgcGl4ZWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAs
IHBpeGVsRm9ybWF0LAotICAgICAgICBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgbnVsbCk7Ci0g
ICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICAgIEds
VXRpbC5jaGVja05vR0xFUzJFcnJvcigiR2xUZXh0dXJlRnJhbWVCdWZmZXIgc2V0U2l6ZSIpOwot
Ci0gICAgLy8gQXR0YWNoIHRoZSB0ZXh0dXJlIHRvIHRoZSBmcmFtZWJ1ZmZlciBhcyBjb2xvciBh
dHRhY2htZW50LgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVC
VUZGRVIsIGZyYW1lQnVmZmVySWQpOwotICAgIEdMRVMyMC5nbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KAotICAgICAgICBHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9BVFRBQ0hN
RU5UMCwgR0xFUzIwLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCwgMCk7Ci0KLSAgICAvLyBDaGVj
ayB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyBpbiBhIGdvb2Qgc3RhdGUuCi0gICAgZmluYWwgaW50
IHN0YXR1cyA9IEdMRVMyMC5nbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xFUzIwLkdMX0ZSQU1F
QlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMRVMyMC5HTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRnJhbWVidWZmZXIg
bm90IGNvbXBsZXRlLCBzdGF0dXM6ICIgKyBzdGF0dXMpOwotICAgIH0KLQotICAgIEdMRVMyMC5n
bEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICB9Ci0KLSAgcHVi
bGljIGludCBnZXRXaWR0aCgpIHsKLSAgICByZXR1cm4gd2lkdGg7Ci0gIH0KLQotICBwdWJsaWMg
aW50IGdldEhlaWdodCgpIHsKLSAgICByZXR1cm4gaGVpZ2h0OwotICB9Ci0KLSAgLyoqIEdldHMg
dGhlIE9wZW5HTCBmcmFtZSBidWZmZXIgaWQuIFRoaXMgdmFsdWUgaXMgb25seSB2YWxpZCBhZnRl
ciBzZXRTaXplKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwotICBwdWJsaWMgaW50IGdldEZyYW1lQnVm
ZmVySWQoKSB7Ci0gICAgcmV0dXJuIGZyYW1lQnVmZmVySWQ7Ci0gIH0KLQotICAvKiogR2V0cyB0
aGUgT3BlbkdMIHRleHR1cmUgaWQuIFRoaXMgdmFsdWUgaXMgb25seSB2YWxpZCBhZnRlciBzZXRT
aXplKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwotICBwdWJsaWMgaW50IGdldFRleHR1cmVJZCgpIHsK
LSAgICByZXR1cm4gdGV4dHVyZUlkOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgdGV4dHVy
ZSBhbmQgZnJhbWVidWZmZXIuIEFuIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3Vy
cmVudCB0aHJlYWQgd2hlbiBjYWxsaW5nCi0gICAqIHRoaXMgZnVuY3Rpb24uIFRoaXMgb2JqZWN0
IHNob3VsZCBub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCByZWxlYXNlKCkgewotICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7
dGV4dHVyZUlkfSwgMCk7Ci0gICAgdGV4dHVyZUlkID0gMDsKLSAgICBHTEVTMjAuZ2xEZWxldGVG
cmFtZWJ1ZmZlcnMoMSwgbmV3IGludFtdIHtmcmFtZUJ1ZmZlcklkfSwgMCk7Ci0gICAgZnJhbWVC
dWZmZXJJZCA9IDA7Ci0gICAgd2lkdGggPSAwOwotICAgIGhlaWdodCA9IDA7Ci0gIH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL2FwaS9vcmcvd2VicnRjL0dsVXRpbC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvR2xVdGlsLmph
dmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWZlODFmZDg4YWJjODdiMTJjMDBm
MjY5YjM1ODZlMTViZDA4ZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvR2xVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwot
aW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsK
LQotLyoqCi0gKiBTb21lIE9wZW5HTCBzdGF0aWMgdXRpbGl0eSBmdW5jdGlvbnMuCi0gKi8KLXB1
YmxpYyBjbGFzcyBHbFV0aWwgewotICBwcml2YXRlIEdsVXRpbCgpIHt9Ci0KLSAgcHVibGljIHN0
YXRpYyBjbGFzcyBHbE91dE9mTWVtb3J5RXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlv
biB7Ci0gICAgcHVibGljIEdsT3V0T2ZNZW1vcnlFeGNlcHRpb24oU3RyaW5nIG1zZykgewotICAg
ICAgc3VwZXIobXNnKTsKLSAgICB9Ci0gIH0KLQotICAvLyBBc3NlcnQgdGhhdCBubyBPcGVuR0wg
RVMgMi4wIGVycm9yIGhhcyBiZWVuIHJhaXNlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNr
Tm9HTEVTMkVycm9yKFN0cmluZyBtc2cpIHsKLSAgICBpbnQgZXJyb3IgPSBHTEVTMjAuZ2xHZXRF
cnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTEVTMjAuR0xfTk9fRVJST1IpIHsKLSAgICAgIHRo
cm93IGVycm9yID09IEdMRVMyMC5HTF9PVVRfT0ZfTUVNT1JZCi0gICAgICAgICAgPyBuZXcgR2xP
dXRPZk1lbW9yeUV4Y2VwdGlvbihtc2cpCi0gICAgICAgICAgOiBuZXcgUnVudGltZUV4Y2VwdGlv
bihtc2cgKyAiOiBHTEVTMjAgZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAgfQotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBGbG9hdEJ1ZmZlciBjcmVhdGVGbG9hdEJ1ZmZlcihmbG9hdFtdIGNvb3Jkcykg
ewotICAgIC8vIEFsbG9jYXRlIGEgZGlyZWN0IEJ5dGVCdWZmZXIsIHVzaW5nIDQgYnl0ZXMgcGVy
IGZsb2F0LCBhbmQgY29weSBjb29yZHMgaW50byBpdC4KLSAgICBCeXRlQnVmZmVyIGJiID0gQnl0
ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChjb29yZHMubGVuZ3RoICogNCk7Ci0gICAgYmIub3JkZXIo
Qnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCkpOwotICAgIEZsb2F0QnVmZmVyIGZiID0gYmIuYXNGbG9h
dEJ1ZmZlcigpOwotICAgIGZiLnB1dChjb29yZHMpOwotICAgIGZiLnBvc2l0aW9uKDApOwotICAg
IHJldHVybiBmYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZSB0ZXh0dXJlIHdpdGggc3Rh
bmRhcmQgcGFyYW1ldGVycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdlbmVyYXRlVGV4
dHVyZShpbnQgdGFyZ2V0KSB7Ci0gICAgZmluYWwgaW50IHRleHR1cmVBcnJheVtdID0gbmV3IGlu
dFsxXTsKLSAgICBHTEVTMjAuZ2xHZW5UZXh0dXJlcygxLCB0ZXh0dXJlQXJyYXksIDApOwotICAg
IGZpbmFsIGludCB0ZXh0dXJlSWQgPSB0ZXh0dXJlQXJyYXlbMF07Ci0gICAgR0xFUzIwLmdsQmlu
ZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlSWQpOwotICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYo
dGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTEVTMjAuR0xfTElORUFSKTsK
LSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIwLkdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xFUzIwLkdMX0xJTkVBUik7Ci0gICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyZih0
YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX1dSQVBfUywgR0xFUzIwLkdMX0NMQU1QX1RPX0VER0Up
OwotICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9X
UkFQX1QsIEdMRVMyMC5HTF9DTEFNUF9UT19FREdFKTsKLSAgICBjaGVja05vR0xFUzJFcnJvcigi
Z2VuZXJhdGVUZXh0dXJlIik7Ci0gICAgcmV0dXJuIHRleHR1cmVJZDsKLSAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvSGFyZHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5LmphdmEgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9IYXJkd2FyZVZpZGVvRGVjb2RlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWMzYjFiOTdjMWFmMWE3MjViZWUyYzFhYTFhNmRkZGZkNTk1ODc3Zi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0
Yy9IYXJkd2FyZVZpZGVvRGVjb2RlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm87Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0
LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqIEZh
Y3RvcnkgZm9yIEFuZHJvaWQgaGFyZHdhcmUgVmlkZW9EZWNvZGVycy4gKi8KLXB1YmxpYyBjbGFz
cyBIYXJkd2FyZVZpZGVvRGVjb2RlckZhY3RvcnkgZXh0ZW5kcyBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyRmFjdG9yeSB7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFByZWRpY2F0ZTxNZWRpYUNvZGVj
SW5mbz4gZGVmYXVsdEFsbG93ZWRQcmVkaWNhdGUgPQotICAgICAgbmV3IFByZWRpY2F0ZTxNZWRp
YUNvZGVjSW5mbz4oKSB7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nW10gcHJlZml4QmxhY2tsaXN0
ID0KLSAgICAgICAgICAgIEFycmF5cy5jb3B5T2YoTWVkaWFDb2RlY1V0aWxzLlNPRlRXQVJFX0lN
UExFTUVOVEFUSU9OX1BSRUZJWEVTLAotICAgICAgICAgICAgICAgIE1lZGlhQ29kZWNVdGlscy5T
T0ZUV0FSRV9JTVBMRU1FTlRBVElPTl9QUkVGSVhFUy5sZW5ndGgpOwotICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChNZWRpYUNvZGVjSW5mbyBhcmcpIHsKLSAg
ICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGFyZy5nZXROYW1lKCk7Ci0gICAgICAgICAgZm9y
IChTdHJpbmcgcHJlZml4IDogcHJlZml4QmxhY2tsaXN0KSB7Ci0gICAgICAgICAgICBpZiAobmFt
ZS5zdGFydHNXaXRoKHByZWZpeCkpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgfTsKLQotICAvKiogQ3JlYXRlcyBhIEhhcmR3YXJlVmlkZW9EZWNvZGVyRmFjdG9y
eSB0aGF0IGRvZXMgbm90IHVzZSBzdXJmYWNlIHRleHR1cmVzLiAqLwotICBARGVwcmVjYXRlZCAv
LyBOb3QgcmVtb3ZlZCB5ZXQgdG8gYXZvaWQgYnJlYWtpbmcgY2FsbGVycy4KLSAgcHVibGljIEhh
cmR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeSgpIHsKLSAgICB0aGlzKG51bGwpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENyZWF0ZXMgYSBIYXJkd2FyZVZpZGVvRGVjb2RlckZhY3RvcnkgdGhhdCBzdXBw
b3J0cyBzdXJmYWNlIHRleHR1cmUgcmVuZGVyaW5nLgotICAgKgotICAgKiBAcGFyYW0gc2hhcmVk
Q29udGV4dCBUaGUgdGV4dHVyZXMgZ2VuZXJhdGVkIHdpbGwgYmUgYWNjZXNzaWJsZSBmcm9tIHRo
aXMgY29udGV4dC4gTWF5IGJlIG51bGwsCi0gICAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMg
ZGlzYWJsZXMgdGV4dHVyZSBzdXBwb3J0LgotICAgKi8KLSAgcHVibGljIEhhcmR3YXJlVmlkZW9E
ZWNvZGVyRmFjdG9yeShATnVsbGFibGUgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQpIHsK
LSAgICB0aGlzKHNoYXJlZENvbnRleHQsIC8qIGNvZGVjQWxsb3dlZFByZWRpY2F0ZT0gKi8gbnVs
bCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIEhhcmR3YXJlVmlkZW9EZWNvZGVyRmFj
dG9yeSB0aGF0IHN1cHBvcnRzIHN1cmZhY2UgdGV4dHVyZSByZW5kZXJpbmcuCi0gICAqCi0gICAq
IEBwYXJhbSBzaGFyZWRDb250ZXh0IFRoZSB0ZXh0dXJlcyBnZW5lcmF0ZWQgd2lsbCBiZSBhY2Nl
c3NpYmxlIGZyb20gdGhpcyBjb250ZXh0LiBNYXkgYmUgbnVsbCwKLSAgICogICAgICAgICAgICAg
ICAgICAgICAgdGhpcyBkaXNhYmxlcyB0ZXh0dXJlIHN1cHBvcnQuCi0gICAqIEBwYXJhbSBjb2Rl
Y0FsbG93ZWRQcmVkaWNhdGUgcHJlZGljYXRlIHRvIGZpbHRlciBjb2RlY3MuIEl0IGlzIGNvbWJp
bmVkIHdpdGggdGhlIGRlZmF1bHQKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVkaWNhdGUgdGhhdCBvbmx5IGFsbG93cyBoYXJkd2FyZSBjb2RlY3MuCi0gICAqLwotICBwdWJs
aWMgSGFyZHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5KEBOdWxsYWJsZSBFZ2xCYXNlLkNvbnRleHQg
c2hhcmVkQ29udGV4dCwKLSAgICAgIEBOdWxsYWJsZSBQcmVkaWNhdGU8TWVkaWFDb2RlY0luZm8+
IGNvZGVjQWxsb3dlZFByZWRpY2F0ZSkgewotICAgIHN1cGVyKHNoYXJlZENvbnRleHQsCi0gICAg
ICAgIChjb2RlY0FsbG93ZWRQcmVkaWNhdGUgPT0gbnVsbCA/IGRlZmF1bHRBbGxvd2VkUHJlZGlj
YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvZGVjQWxsb3dl
ZFByZWRpY2F0ZS5hbmQoZGVmYXVsdEFsbG93ZWRQcmVkaWNhdGUpKSk7Ci0gIH0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL2FwaS9vcmcvd2VicnRjL0hhcmR3YXJlVmlkZW9FbmNvZGVyRmFjdG9yeS5qYXZhIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhmZThiMzY5MDk3ZWY4NDZlY2U3ZThjMGFlNmU5ZjhhZmFlOTA2YTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJy
dGMvSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwy
OTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1p
bXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTWVkaWFDb2RlY1V0aWxzLkVYWU5PU19QUkVGSVg7Ci1p
bXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTWVkaWFDb2RlY1V0aWxzLklOVEVMX1BSRUZJWDsKLWlt
cG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5NZWRpYUNvZGVjVXRpbHMuUUNPTV9QUkVGSVg7Ci0KLWlt
cG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEu
TWVkaWFDb2RlY0xpc3Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lk
LnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0
OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8q
KiBGYWN0b3J5IGZvciBhbmRyb2lkIGhhcmR3YXJlIHZpZGVvIGVuY29kZXJzLiAqLwotQFN1cHBy
ZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikgLy8gQVBJIDE2IHJlcXVpcmVzIHRoZSB1c2Ugb2Yg
ZGVwcmVjYXRlZCBtZXRob2RzLgotcHVibGljIGNsYXNzIEhhcmR3YXJlVmlkZW9FbmNvZGVyRmFj
dG9yeSBpbXBsZW1lbnRzIFZpZGVvRW5jb2RlckZhY3RvcnkgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIkhhcmR3YXJlVmlkZW9FbmNvZGVyRmFjdG9yeSI7Ci0KLSAgLy8g
Rm9yY2VkIGtleSBmcmFtZSBpbnRlcnZhbCAtIHVzZWQgdG8gcmVkdWNlIGNvbG9yIGRpc3RvcnRp
b25zIG9uIFF1YWxjb21tIHBsYXRmb3Jtcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFFD
T01fVlA4X0tFWV9GUkFNRV9JTlRFUlZBTF9BTkRST0lEX0xfTVMgPSAxNTAwMDsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IFFDT01fVlA4X0tFWV9GUkFNRV9JTlRFUlZBTF9BTkRST0lEX01f
TVMgPSAyMDAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFFDT01fVlA4X0tFWV9GUkFN
RV9JTlRFUlZBTF9BTkRST0lEX05fTVMgPSAxNTAwMDsKLQotICAvLyBMaXN0IG9mIGRldmljZXMg
d2l0aCBwb29yIEguMjY0IGVuY29kZXIgcXVhbGl0eS4KLSAgLy8gSFcgSC4yNjQgZW5jb2RlciBv
biBiZWxvdyBkZXZpY2VzIGhhcyBwb29yIGJpdHJhdGUgY29udHJvbCAtIGFjdHVhbAotICAvLyBi
aXRyYXRlcyBkZXZpYXRlcyBhIGxvdCBmcm9tIHRoZSB0YXJnZXQgdmFsdWUuCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBIMjY0X0hXX0VYQ0VQVElPTl9NT0RFTFMgPQotICAg
ICAgQXJyYXlzLmFzTGlzdCgiU0FNU1VORy1TR0gtSTMzNyIsICJOZXh1cyA3IiwgIk5leHVzIDQi
KTsKLQotICBATnVsbGFibGUgcHJpdmF0ZSBmaW5hbCBFZ2xCYXNlMTQuQ29udGV4dCBzaGFyZWRD
b250ZXh0OwotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZW5hYmxlSW50ZWxWcDhFbmNvZGVyOwot
ICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZW5hYmxlSDI2NEhpZ2hQcm9maWxlOwotICBATnVsbGFi
bGUgcHJpdmF0ZSBmaW5hbCBQcmVkaWNhdGU8TWVkaWFDb2RlY0luZm8+IGNvZGVjQWxsb3dlZFBy
ZWRpY2F0ZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhIEhhcmR3YXJlVmlkZW9FbmNvZGVyRmFj
dG9yeSB0aGF0IHN1cHBvcnRzIHN1cmZhY2UgdGV4dHVyZSBlbmNvZGluZy4KLSAgICoKLSAgICog
QHBhcmFtIHNoYXJlZENvbnRleHQgVGhlIHRleHR1cmVzIGdlbmVyYXRlZCB3aWxsIGJlIGFjY2Vz
c2libGUgZnJvbSB0aGlzIGNvbnRleHQuIE1heSBiZSBudWxsLAotICAgKiAgICAgICAgICAgICAg
ICAgICAgICB0aGlzIGRpc2FibGVzIHRleHR1cmUgc3VwcG9ydC4KLSAgICogQHBhcmFtIGVuYWJs
ZUludGVsVnA4RW5jb2RlciB0cnVlIGlmIEludGVsJ3MgVlA4IGVuY29kZXIgZW5hYmxlZC4KLSAg
ICogQHBhcmFtIGVuYWJsZUgyNjRIaWdoUHJvZmlsZSB0cnVlIGlmIEgyNjQgSGlnaCBQcm9maWxl
IGVuYWJsZWQuCi0gICAqLwotICBwdWJsaWMgSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KAot
ICAgICAgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsIGJvb2xlYW4gZW5hYmxlSW50ZWxW
cDhFbmNvZGVyLCBib29sZWFuIGVuYWJsZUgyNjRIaWdoUHJvZmlsZSkgewotICAgIHRoaXMoc2hh
cmVkQ29udGV4dCwgZW5hYmxlSW50ZWxWcDhFbmNvZGVyLCBlbmFibGVIMjY0SGlnaFByb2ZpbGUs
Ci0gICAgICAgIC8qIGNvZGVjQWxsb3dlZFByZWRpY2F0ZT0gKi8gbnVsbCk7Ci0gIH0KLQotICAv
KioKLSAgICogQ3JlYXRlcyBhIEhhcmR3YXJlVmlkZW9FbmNvZGVyRmFjdG9yeSB0aGF0IHN1cHBv
cnRzIHN1cmZhY2UgdGV4dHVyZSBlbmNvZGluZy4KLSAgICoKLSAgICogQHBhcmFtIHNoYXJlZENv
bnRleHQgVGhlIHRleHR1cmVzIGdlbmVyYXRlZCB3aWxsIGJlIGFjY2Vzc2libGUgZnJvbSB0aGlz
IGNvbnRleHQuIE1heSBiZSBudWxsLAotICAgKiAgICAgICAgICAgICAgICAgICAgICB0aGlzIGRp
c2FibGVzIHRleHR1cmUgc3VwcG9ydC4KLSAgICogQHBhcmFtIGVuYWJsZUludGVsVnA4RW5jb2Rl
ciB0cnVlIGlmIEludGVsJ3MgVlA4IGVuY29kZXIgZW5hYmxlZC4KLSAgICogQHBhcmFtIGVuYWJs
ZUgyNjRIaWdoUHJvZmlsZSB0cnVlIGlmIEgyNjQgSGlnaCBQcm9maWxlIGVuYWJsZWQuCi0gICAq
IEBwYXJhbSBjb2RlY0FsbG93ZWRQcmVkaWNhdGUgb3B0aW9uYWwgcHJlZGljYXRlIHRvIGZpbHRl
ciBjb2RlY3MuIEFsbCBjb2RlY3MgYXJlIGFsbG93ZWQKLSAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGVuIHByZWRpY2F0ZSBpcyBub3QgcHJvdmlkZWQuCi0gICAqLwotICBwdWJs
aWMgSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250
ZXh0LCBib29sZWFuIGVuYWJsZUludGVsVnA4RW5jb2RlciwKLSAgICAgIGJvb2xlYW4gZW5hYmxl
SDI2NEhpZ2hQcm9maWxlLCBATnVsbGFibGUgUHJlZGljYXRlPE1lZGlhQ29kZWNJbmZvPiBjb2Rl
Y0FsbG93ZWRQcmVkaWNhdGUpIHsKLSAgICAvLyBUZXh0dXJlIG1vZGUgcmVxdWlyZXMgRWdsQmFz
ZTE0LgotICAgIGlmIChzaGFyZWRDb250ZXh0IGluc3RhbmNlb2YgRWdsQmFzZTE0LkNvbnRleHQp
IHsKLSAgICAgIHRoaXMuc2hhcmVkQ29udGV4dCA9IChFZ2xCYXNlMTQuQ29udGV4dCkgc2hhcmVk
Q29udGV4dDsKLSAgICB9IGVsc2UgewotICAgICAgTG9nZ2luZy53KFRBRywgIk5vIHNoYXJlZCBF
Z2xCYXNlLkNvbnRleHQuICBFbmNvZGVycyB3aWxsIG5vdCB1c2UgdGV4dHVyZSBtb2RlLiIpOwot
ICAgICAgdGhpcy5zaGFyZWRDb250ZXh0ID0gbnVsbDsKLSAgICB9Ci0gICAgdGhpcy5lbmFibGVJ
bnRlbFZwOEVuY29kZXIgPSBlbmFibGVJbnRlbFZwOEVuY29kZXI7Ci0gICAgdGhpcy5lbmFibGVI
MjY0SGlnaFByb2ZpbGUgPSBlbmFibGVIMjY0SGlnaFByb2ZpbGU7Ci0gICAgdGhpcy5jb2RlY0Fs
bG93ZWRQcmVkaWNhdGUgPSBjb2RlY0FsbG93ZWRQcmVkaWNhdGU7Ci0gIH0KLQotICBARGVwcmVj
YXRlZAotICBwdWJsaWMgSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KGJvb2xlYW4gZW5hYmxl
SW50ZWxWcDhFbmNvZGVyLCBib29sZWFuIGVuYWJsZUgyNjRIaWdoUHJvZmlsZSkgewotICAgIHRo
aXMobnVsbCwgZW5hYmxlSW50ZWxWcDhFbmNvZGVyLCBlbmFibGVIMjY0SGlnaFByb2ZpbGUpOwot
ICB9Ci0KLSAgQE51bGxhYmxlCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlkZW9FbmNvZGVyIGNy
ZWF0ZUVuY29kZXIoVmlkZW9Db2RlY0luZm8gaW5wdXQpIHsKLSAgICAvLyBIVyBlbmNvZGluZyBp
cyBub3Qgc3VwcG9ydGVkIGJlbG93IEFuZHJvaWQgS2l0a2F0LgotICAgIGlmIChCdWlsZC5WRVJT
SU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotCi0gICAgVmlkZW9Db2RlY01pbWVUeXBlIHR5cGUgPSBWaWRlb0NvZGVj
TWltZVR5cGUudmFsdWVPZihpbnB1dC5uYW1lKTsKLSAgICBNZWRpYUNvZGVjSW5mbyBpbmZvID0g
ZmluZENvZGVjRm9yVHlwZSh0eXBlKTsKLQotICAgIGlmIChpbmZvID09IG51bGwpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLQotICAgIFN0cmluZyBjb2RlY05hbWUgPSBpbmZvLmdldE5h
bWUoKTsKLSAgICBTdHJpbmcgbWltZSA9IHR5cGUubWltZVR5cGUoKTsKLSAgICBJbnRlZ2VyIHN1
cmZhY2VDb2xvckZvcm1hdCA9IE1lZGlhQ29kZWNVdGlscy5zZWxlY3RDb2xvckZvcm1hdCgKLSAg
ICAgICAgTWVkaWFDb2RlY1V0aWxzLlRFWFRVUkVfQ09MT1JfRk9STUFUUywgaW5mby5nZXRDYXBh
YmlsaXRpZXNGb3JUeXBlKG1pbWUpKTsKLSAgICBJbnRlZ2VyIHl1dkNvbG9yRm9ybWF0ID0gTWVk
aWFDb2RlY1V0aWxzLnNlbGVjdENvbG9yRm9ybWF0KAotICAgICAgICBNZWRpYUNvZGVjVXRpbHMu
RU5DT0RFUl9DT0xPUl9GT1JNQVRTLCBpbmZvLmdldENhcGFiaWxpdGllc0ZvclR5cGUobWltZSkp
OwotCi0gICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY01pbWVUeXBlLkgyNjQpIHsKLSAgICAgIGJv
b2xlYW4gaXNIaWdoUHJvZmlsZSA9IEgyNjRVdGlscy5pc1NhbWVIMjY0UHJvZmlsZSgKLSAgICAg
ICAgICBpbnB1dC5wYXJhbXMsIE1lZGlhQ29kZWNVdGlscy5nZXRDb2RlY1Byb3BlcnRpZXModHlw
ZSwgLyogaGlnaFByb2ZpbGU9ICovIHRydWUpKTsKLSAgICAgIGJvb2xlYW4gaXNCYXNlbGluZVBy
b2ZpbGUgPSBIMjY0VXRpbHMuaXNTYW1lSDI2NFByb2ZpbGUoCi0gICAgICAgICAgaW5wdXQucGFy
YW1zLCBNZWRpYUNvZGVjVXRpbHMuZ2V0Q29kZWNQcm9wZXJ0aWVzKHR5cGUsIC8qIGhpZ2hQcm9m
aWxlPSAqLyBmYWxzZSkpOwotCi0gICAgICBpZiAoIWlzSGlnaFByb2ZpbGUgJiYgIWlzQmFzZWxp
bmVQcm9maWxlKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgaWYgKGlz
SGlnaFByb2ZpbGUgJiYgIWlzSDI2NEhpZ2hQcm9maWxlU3VwcG9ydGVkKGluZm8pKSB7Ci0gICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuZXcgSGFyZHdh
cmVWaWRlb0VuY29kZXIobmV3IE1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeUltcGwoKSwgY29kZWNO
YW1lLCB0eXBlLAotICAgICAgICBzdXJmYWNlQ29sb3JGb3JtYXQsIHl1dkNvbG9yRm9ybWF0LCBp
bnB1dC5wYXJhbXMsIGdldEtleUZyYW1lSW50ZXJ2YWxTZWModHlwZSksCi0gICAgICAgIGdldEZv
cmNlZEtleUZyYW1lSW50ZXJ2YWxNcyh0eXBlLCBjb2RlY05hbWUpLCBjcmVhdGVCaXRyYXRlQWRq
dXN0ZXIodHlwZSwgY29kZWNOYW1lKSwKLSAgICAgICAgc2hhcmVkQ29udGV4dCk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZGVvQ29kZWNJbmZvW10gZ2V0U3VwcG9ydGVkQ29kZWNz
KCkgewotICAgIC8vIEhXIGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYmVsb3cgQW5kcm9pZCBL
aXRrYXQuCi0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09E
RVMuS0lUS0FUKSB7Ci0gICAgICByZXR1cm4gbmV3IFZpZGVvQ29kZWNJbmZvWzBdOwotICAgIH0K
LQotICAgIExpc3Q8VmlkZW9Db2RlY0luZm8+IHN1cHBvcnRlZENvZGVjSW5mb3MgPSBuZXcgQXJy
YXlMaXN0PFZpZGVvQ29kZWNJbmZvPigpOwotICAgIC8vIEdlbmVyYXRlIGEgbGlzdCBvZiBzdXBw
b3J0ZWQgY29kZWNzIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6Ci0gICAgLy8gVlA4LCBWUDksIEgy
NjQgKGhpZ2ggcHJvZmlsZSksIGFuZCBIMjY0IChiYXNlbGluZSBwcm9maWxlKS4KLSAgICBmb3Ig
KFZpZGVvQ29kZWNNaW1lVHlwZSB0eXBlIDogbmV3IFZpZGVvQ29kZWNNaW1lVHlwZVtdIHsKLSAg
ICAgICAgICAgICBWaWRlb0NvZGVjTWltZVR5cGUuVlA4LCBWaWRlb0NvZGVjTWltZVR5cGUuVlA5
LCBWaWRlb0NvZGVjTWltZVR5cGUuSDI2NH0pIHsKLSAgICAgIE1lZGlhQ29kZWNJbmZvIGNvZGVj
ID0gZmluZENvZGVjRm9yVHlwZSh0eXBlKTsKLSAgICAgIGlmIChjb2RlYyAhPSBudWxsKSB7Ci0g
ICAgICAgIFN0cmluZyBuYW1lID0gdHlwZS5uYW1lKCk7Ci0gICAgICAgIC8vIFRPRE8oc2FrYWwp
OiBBbHdheXMgYWRkIEgyNjQgSFAgb25jZSBXZWJSVEMgY29ycmVjdGx5IHJlbW92ZXMgY29kZWNz
IHRoYXQgYXJlIG5vdAotICAgICAgICAvLyBzdXBwb3J0ZWQgYnkgdGhlIGRlY29kZXIuCi0gICAg
ICAgIGlmICh0eXBlID09IFZpZGVvQ29kZWNNaW1lVHlwZS5IMjY0ICYmIGlzSDI2NEhpZ2hQcm9m
aWxlU3VwcG9ydGVkKGNvZGVjKSkgewotICAgICAgICAgIHN1cHBvcnRlZENvZGVjSW5mb3MuYWRk
KG5ldyBWaWRlb0NvZGVjSW5mbygKLSAgICAgICAgICAgICAgbmFtZSwgTWVkaWFDb2RlY1V0aWxz
LmdldENvZGVjUHJvcGVydGllcyh0eXBlLCAvKiBoaWdoUHJvZmlsZT0gKi8gdHJ1ZSkpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHN1cHBvcnRlZENvZGVjSW5mb3MuYWRkKG5ldyBWaWRlb0NvZGVj
SW5mbygKLSAgICAgICAgICAgIG5hbWUsIE1lZGlhQ29kZWNVdGlscy5nZXRDb2RlY1Byb3BlcnRp
ZXModHlwZSwgLyogaGlnaFByb2ZpbGU9ICovIGZhbHNlKSkpOwotICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBzdXBwb3J0ZWRDb2RlY0luZm9zLnRvQXJyYXkobmV3IFZpZGVvQ29kZWNJbmZv
W3N1cHBvcnRlZENvZGVjSW5mb3Muc2l6ZSgpXSk7Ci0gIH0KLQotICBwcml2YXRlIEBOdWxsYWJs
ZSBNZWRpYUNvZGVjSW5mbyBmaW5kQ29kZWNGb3JUeXBlKFZpZGVvQ29kZWNNaW1lVHlwZSB0eXBl
KSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50
KCk7ICsraSkgewotICAgICAgTWVkaWFDb2RlY0luZm8gaW5mbyA9IG51bGw7Ci0gICAgICB0cnkg
ewotICAgICAgICBpbmZvID0gTWVkaWFDb2RlY0xpc3QuZ2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAg
ICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5n
LmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVuY29kZXIgY29kZWMgaW5mbyIsIGUpOwotICAgICAg
fQotCi0gICAgICBpZiAoaW5mbyA9PSBudWxsIHx8ICFpbmZvLmlzRW5jb2RlcigpKSB7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBpZiAoaXNTdXBwb3J0ZWRDb2RlYyhpbmZv
LCB0eXBlKSkgewotICAgICAgICByZXR1cm4gaW5mbzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIG51bGw7IC8vIE5vIHN1cHBvcnQgZm9yIHRoaXMgdHlwZS4KLSAgfQotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVkaWFDb2RlY0luZm8gaW5kaWNhdGVzIGEgc3VwcG9ydGVk
IGVuY29kZXIgZm9yIHRoZSBnaXZlbiB0eXBlLgotICBwcml2YXRlIGJvb2xlYW4gaXNTdXBwb3J0
ZWRDb2RlYyhNZWRpYUNvZGVjSW5mbyBpbmZvLCBWaWRlb0NvZGVjTWltZVR5cGUgdHlwZSkgewot
ICAgIGlmICghTWVkaWFDb2RlY1V0aWxzLmNvZGVjU3VwcG9ydHNUeXBlKGluZm8sIHR5cGUpKSB7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIENoZWNrIGZvciBhIHN1cHBvcnRl
ZCBjb2xvciBmb3JtYXQuCi0gICAgaWYgKE1lZGlhQ29kZWNVdGlscy5zZWxlY3RDb2xvckZvcm1h
dCgKLSAgICAgICAgICAgIE1lZGlhQ29kZWNVdGlscy5FTkNPREVSX0NPTE9SX0ZPUk1BVFMsIGlu
Zm8uZ2V0Q2FwYWJpbGl0aWVzRm9yVHlwZSh0eXBlLm1pbWVUeXBlKCkpKQotICAgICAgICA9PSBu
dWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpc0hhcmR3YXJl
U3VwcG9ydGVkSW5DdXJyZW50U2RrKGluZm8sIHR5cGUpICYmIGlzTWVkaWFDb2RlY0FsbG93ZWQo
aW5mbyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIE1lZGlhQ29kZWNJ
bmZvIGluZGljYXRlcyBhIGhhcmR3YXJlIG1vZHVsZSB0aGF0IGlzIHN1cHBvcnRlZCBvbiB0aGUK
LSAgLy8gY3VycmVudCBTREsuCi0gIHByaXZhdGUgYm9vbGVhbiBpc0hhcmR3YXJlU3VwcG9ydGVk
SW5DdXJyZW50U2RrKE1lZGlhQ29kZWNJbmZvIGluZm8sIFZpZGVvQ29kZWNNaW1lVHlwZSB0eXBl
KSB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlIFZQODoKLSAgICAgICAgcmV0dXJu
IGlzSGFyZHdhcmVTdXBwb3J0ZWRJbkN1cnJlbnRTZGtWcDgoaW5mbyk7Ci0gICAgICBjYXNlIFZQ
OToKLSAgICAgICAgcmV0dXJuIGlzSGFyZHdhcmVTdXBwb3J0ZWRJbkN1cnJlbnRTZGtWcDkoaW5m
byk7Ci0gICAgICBjYXNlIEgyNjQ6Ci0gICAgICAgIHJldHVybiBpc0hhcmR3YXJlU3VwcG9ydGVk
SW5DdXJyZW50U2RrSDI2NChpbmZvKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgcHJpdmF0ZSBib29sZWFuIGlzSGFyZHdhcmVTdXBwb3J0ZWRJbkN1cnJlbnRTZGtWcDgoTWVk
aWFDb2RlY0luZm8gaW5mbykgewotICAgIFN0cmluZyBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0g
ICAgLy8gUUNPTSBWcDggZW5jb2RlciBpcyBzdXBwb3J0ZWQgaW4gS0lUS0FUIG9yIGxhdGVyLgot
ICAgIHJldHVybiAobmFtZS5zdGFydHNXaXRoKFFDT01fUFJFRklYKSAmJiBCdWlsZC5WRVJTSU9O
LlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpCi0gICAgICAgIC8vIEV4eW5v
cyBWUDggZW5jb2RlciBpcyBzdXBwb3J0ZWQgaW4gTSBvciBsYXRlci4KLSAgICAgICAgfHwgKG5h
bWUuc3RhcnRzV2l0aChFWFlOT1NfUFJFRklYKSAmJiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0g
QnVpbGQuVkVSU0lPTl9DT0RFUy5NKQotICAgICAgICAvLyBJbnRlbCBWcDggZW5jb2RlciBpcyBz
dXBwb3J0ZWQgaW4gTE9MTElQT1Agb3IgbGF0ZXIsIHdpdGggdGhlIGludGVsIGVuY29kZXIgZW5h
YmxlZC4KLSAgICAgICAgfHwgKG5hbWUuc3RhcnRzV2l0aChJTlRFTF9QUkVGSVgpICYmIEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QCi0gICAgICAg
ICAgICAgICAmJiBlbmFibGVJbnRlbFZwOEVuY29kZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29s
ZWFuIGlzSGFyZHdhcmVTdXBwb3J0ZWRJbkN1cnJlbnRTZGtWcDkoTWVkaWFDb2RlY0luZm8gaW5m
bykgewotICAgIFN0cmluZyBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0gICAgcmV0dXJuIChuYW1l
LnN0YXJ0c1dpdGgoUUNPTV9QUkVGSVgpIHx8IG5hbWUuc3RhcnRzV2l0aChFWFlOT1NfUFJFRklY
KSkKLSAgICAgICAgLy8gQm90aCBRQ09NIGFuZCBFeHlub3MgVlA5IGVuY29kZXJzIGFyZSBzdXBw
b3J0ZWQgaW4gTiBvciBsYXRlci4KLSAgICAgICAgJiYgQnVpbGQuVkVSU0lPTi5TREtfSU5UID49
IEJ1aWxkLlZFUlNJT05fQ09ERVMuTjsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0hhcmR3
YXJlU3VwcG9ydGVkSW5DdXJyZW50U2RrSDI2NChNZWRpYUNvZGVjSW5mbyBpbmZvKSB7Ci0gICAg
Ly8gRmlyc3QsIEgyNjQgaGFyZHdhcmUgbWlnaHQgcGVyZm9ybSBwb29ybHkgb24gdGhpcyBtb2Rl
bC4KLSAgICBpZiAoSDI2NF9IV19FWENFUFRJT05fTU9ERUxTLmNvbnRhaW5zKEJ1aWxkLk1PREVM
KSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBTdHJpbmcgbmFtZSA9IGluZm8u
Z2V0TmFtZSgpOwotICAgIC8vIFFDT00gSDI2NCBlbmNvZGVyIGlzIHN1cHBvcnRlZCBpbiBLSVRL
QVQgb3IgbGF0ZXIuCi0gICAgcmV0dXJuIChuYW1lLnN0YXJ0c1dpdGgoUUNPTV9QUkVGSVgpICYm
IEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkKLSAg
ICAgICAgLy8gRXh5bm9zIEgyNjQgZW5jb2RlciBpcyBzdXBwb3J0ZWQgaW4gTE9MTElQT1Agb3Ig
bGF0ZXIuCi0gICAgICAgIHx8IChuYW1lLnN0YXJ0c1dpdGgoRVhZTk9TX1BSRUZJWCkKLSAgICAg
ICAgICAgICAgICYmIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVT
LkxPTExJUE9QKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc01lZGlhQ29kZWNBbGxvd2Vk
KE1lZGlhQ29kZWNJbmZvIGluZm8pIHsKLSAgICBpZiAoY29kZWNBbGxvd2VkUHJlZGljYXRlID09
IG51bGwpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gY29kZWNBbGxv
d2VkUHJlZGljYXRlLnRlc3QoaW5mbyk7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRLZXlGcmFt
ZUludGVydmFsU2VjKFZpZGVvQ29kZWNNaW1lVHlwZSB0eXBlKSB7Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICBjYXNlIFZQODogLy8gRmFsbHRocm91Z2ggaW50ZW5kZWQuCi0gICAgICBjYXNl
IFZQOToKLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgIGNhc2UgSDI2NDoKLSAgICAgICAgcmV0
dXJuIDIwOwotICAgIH0KLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJV
bnN1cHBvcnRlZCBWaWRlb0NvZGVjTWltZVR5cGUgIiArIHR5cGUpOwotICB9Ci0KLSAgcHJpdmF0
ZSBpbnQgZ2V0Rm9yY2VkS2V5RnJhbWVJbnRlcnZhbE1zKFZpZGVvQ29kZWNNaW1lVHlwZSB0eXBl
LCBTdHJpbmcgY29kZWNOYW1lKSB7Ci0gICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY01pbWVUeXBl
LlZQOCAmJiBjb2RlY05hbWUuc3RhcnRzV2l0aChRQ09NX1BSRUZJWCkpIHsKLSAgICAgIGlmIChC
dWlsZC5WRVJTSU9OLlNES19JTlQgPT0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUAotICAg
ICAgICAgIHx8IEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA9PSBCdWlsZC5WRVJTSU9OX0NPREVTLkxP
TExJUE9QX01SMSkgewotICAgICAgICByZXR1cm4gUUNPTV9WUDhfS0VZX0ZSQU1FX0lOVEVSVkFM
X0FORFJPSURfTF9NUzsKLSAgICAgIH0gZWxzZSBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID09
IEJ1aWxkLlZFUlNJT05fQ09ERVMuTSkgewotICAgICAgICByZXR1cm4gUUNPTV9WUDhfS0VZX0ZS
QU1FX0lOVEVSVkFMX0FORFJPSURfTV9NUzsKLSAgICAgIH0gZWxzZSBpZiAoQnVpbGQuVkVSU0lP
Ti5TREtfSU5UID4gQnVpbGQuVkVSU0lPTl9DT0RFUy5NKSB7Ci0gICAgICAgIHJldHVybiBRQ09N
X1ZQOF9LRVlfRlJBTUVfSU5URVJWQUxfQU5EUk9JRF9OX01TOwotICAgICAgfQotICAgIH0KLSAg
ICAvLyBPdGhlciBjb2RlY3MgZG9uJ3QgbmVlZCBrZXkgZnJhbWUgZm9yY2luZy4KLSAgICByZXR1
cm4gMDsKLSAgfQotCi0gIHByaXZhdGUgQml0cmF0ZUFkanVzdGVyIGNyZWF0ZUJpdHJhdGVBZGp1
c3RlcihWaWRlb0NvZGVjTWltZVR5cGUgdHlwZSwgU3RyaW5nIGNvZGVjTmFtZSkgewotICAgIGlm
IChjb2RlY05hbWUuc3RhcnRzV2l0aChFWFlOT1NfUFJFRklYKSkgewotICAgICAgaWYgKHR5cGUg
PT0gVmlkZW9Db2RlY01pbWVUeXBlLlZQOCkgewotICAgICAgICAvLyBFeHlub3MgVlA4IGVuY29k
ZXJzIG5lZWQgZHluYW1pYyBiaXRyYXRlIGFkanVzdG1lbnQuCi0gICAgICAgIHJldHVybiBuZXcg
RHluYW1pY0JpdHJhdGVBZGp1c3RlcigpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRXh5
bm9zIFZQOSBhbmQgSDI2NCBlbmNvZGVycyBuZWVkIGZyYW1lcmF0ZS1iYXNlZCBiaXRyYXRlIGFk
anVzdG1lbnQuCi0gICAgICAgIHJldHVybiBuZXcgRnJhbWVyYXRlQml0cmF0ZUFkanVzdGVyKCk7
Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIE90aGVyIGNvZGVjcyBkb24ndCBuZWVkIGJpdHJhdGUg
YWRqdXN0bWVudC4KLSAgICByZXR1cm4gbmV3IEJhc2VCaXRyYXRlQWRqdXN0ZXIoKTsKLSAgfQot
Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0gyNjRIaWdoUHJvZmlsZVN1cHBvcnRlZChNZWRpYUNvZGVj
SW5mbyBpbmZvKSB7Ci0gICAgcmV0dXJuIGVuYWJsZUgyNjRIaWdoUHJvZmlsZSAmJiBCdWlsZC5W
RVJTSU9OLlNES19JTlQgPiBCdWlsZC5WRVJTSU9OX0NPREVTLk0KLSAgICAgICAgJiYgaW5mby5n
ZXROYW1lKCkuc3RhcnRzV2l0aChFWFlOT1NfUFJFRklYKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvSWNlQ2FuZGlkYXRlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUu
amF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM3MjVjYzAxNDMyNDQyYTViY2Q0
MzgwMjgwN2VmNDM1YTNiOGYxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDg2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGph
dmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLQotLyoq
Ci0gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBJQ0UgQ2FuZGlkYXRlLCBtaXJyb3JpbmcK
LSAqIHtAY29kZSBJY2VDYW5kaWRhdGVJbnRlcmZhY2V9IGluIHRoZSBDKysgQVBJLgotICovCi1w
dWJsaWMgY2xhc3MgSWNlQ2FuZGlkYXRlIHsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBzZHBNaWQ7
Ci0gIHB1YmxpYyBmaW5hbCBpbnQgc2RwTUxpbmVJbmRleDsKLSAgcHVibGljIGZpbmFsIFN0cmlu
ZyBzZHA7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgc2VydmVyVXJsOwotICBwdWJsaWMgZmluYWwg
UGVlckNvbm5lY3Rpb24uQWRhcHRlclR5cGUgYWRhcHRlclR5cGU7Ci0KLSAgcHVibGljIEljZUNh
bmRpZGF0ZShTdHJpbmcgc2RwTWlkLCBpbnQgc2RwTUxpbmVJbmRleCwgU3RyaW5nIHNkcCkgewot
ICAgIHRoaXMuc2RwTWlkID0gc2RwTWlkOwotICAgIHRoaXMuc2RwTUxpbmVJbmRleCA9IHNkcE1M
aW5lSW5kZXg7Ci0gICAgdGhpcy5zZHAgPSBzZHA7Ci0gICAgdGhpcy5zZXJ2ZXJVcmwgPSAiIjsK
LSAgICB0aGlzLmFkYXB0ZXJUeXBlID0gUGVlckNvbm5lY3Rpb24uQWRhcHRlclR5cGUuVU5LTk9X
TjsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBJY2VDYW5kaWRhdGUoU3RyaW5nIHNkcE1p
ZCwgaW50IHNkcE1MaW5lSW5kZXgsIFN0cmluZyBzZHAsIFN0cmluZyBzZXJ2ZXJVcmwsCi0gICAg
ICBQZWVyQ29ubmVjdGlvbi5BZGFwdGVyVHlwZSBhZGFwdGVyVHlwZSkgewotICAgIHRoaXMuc2Rw
TWlkID0gc2RwTWlkOwotICAgIHRoaXMuc2RwTUxpbmVJbmRleCA9IHNkcE1MaW5lSW5kZXg7Ci0g
ICAgdGhpcy5zZHAgPSBzZHA7Ci0gICAgdGhpcy5zZXJ2ZXJVcmwgPSBzZXJ2ZXJVcmw7Ci0gICAg
dGhpcy5hZGFwdGVyVHlwZSA9IGFkYXB0ZXJUeXBlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIHNkcE1pZCArICI6IiArIHNkcE1M
aW5lSW5kZXggKyAiOiIgKyBzZHAgKyAiOiIgKyBzZXJ2ZXJVcmwgKyAiOiIKLSAgICAgICAgKyBh
ZGFwdGVyVHlwZS50b1N0cmluZygpOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIFN0cmlu
ZyBnZXRTZHBNaWQoKSB7Ci0gICAgcmV0dXJuIHNkcE1pZDsKLSAgfQotCi0gIEBDYWxsZWRCeU5h
dGl2ZQotICBTdHJpbmcgZ2V0U2RwKCkgewotICAgIHJldHVybiBzZHA7Ci0gIH0KLQotICAvKiog
ZXF1YWxzKCkgY2hlY2tzIHNkcE1pZCwgc2RwTUxpbmVJbmRleCwgYW5kIHNkcCBmb3IgZXF1YWxp
dHkuICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoQE51bGxhYmxlIE9i
amVjdCBvYmplY3QpIHsKLSAgICBpZiAoIShvYmplY3QgaW5zdGFuY2VvZiBJY2VDYW5kaWRhdGUp
KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSWNlQ2FuZGlkYXRlIHRoYXQg
PSAoSWNlQ2FuZGlkYXRlKSBvYmplY3Q7Ci0gICAgcmV0dXJuIG9iamVjdEVxdWFscyh0aGlzLnNk
cE1pZCwgdGhhdC5zZHBNaWQpICYmIHRoaXMuc2RwTUxpbmVJbmRleCA9PSB0aGF0LnNkcE1MaW5l
SW5kZXgKLSAgICAgICAgJiYgb2JqZWN0RXF1YWxzKHRoaXMuc2RwLCB0aGF0LnNkcCk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICBPYmplY3RbXSB2
YWx1ZXMgPSB7c2RwTWlkLCBzZHBNTGluZUluZGV4LCBzZHB9OwotICAgIHJldHVybiBBcnJheXMu
aGFzaENvZGUodmFsdWVzKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gb2JqZWN0
RXF1YWxzKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0gICAgaWYgKG8xID09IG51bGwpIHsKLSAg
ICAgIHJldHVybiBvMiA9PSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbzEuZXF1YWxzKG8yKTsK
LSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvSmF2YUk0MjBCdWZmZXIuamF2YSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9v
cmcvd2VicnRjL0phdmFJNDIwQnVmZmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBkZWIzOGYxODcxN2E5NTBhMjg2NmNiYmU0ZWU2MTQ0NjMxYWVlMzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvSmF2YUk0MjBC
dWZmZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5u
b3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IG9y
Zy53ZWJydGMuVmlkZW9GcmFtZS5JNDIwQnVmZmVyOwotCi0vKiogSW1wbGVtZW50YXRpb24gb2Yg
VmlkZW9GcmFtZS5JNDIwQnVmZmVyIGJhY2tlZCBieSBKYXZhIGRpcmVjdCBieXRlIGJ1ZmZlcnMu
ICovCi1wdWJsaWMgY2xhc3MgSmF2YUk0MjBCdWZmZXIgaW1wbGVtZW50cyBWaWRlb0ZyYW1lLkk0
MjBCdWZmZXIgewotICBwcml2YXRlIGZpbmFsIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBmaW5hbCBp
bnQgaGVpZ2h0OwotICBwcml2YXRlIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVk7Ci0gIHByaXZhdGUg
ZmluYWwgQnl0ZUJ1ZmZlciBkYXRhVTsKLSAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGRhdGFW
OwotICBwcml2YXRlIGZpbmFsIGludCBzdHJpZGVZOwotICBwcml2YXRlIGZpbmFsIGludCBzdHJp
ZGVVOwotICBwcml2YXRlIGZpbmFsIGludCBzdHJpZGVWOwotICBwcml2YXRlIGZpbmFsIFJlZkNv
dW50RGVsZWdhdGUgcmVmQ291bnREZWxlZ2F0ZTsKLQotICBwcml2YXRlIEphdmFJNDIwQnVmZmVy
KGludCB3aWR0aCwgaW50IGhlaWdodCwgQnl0ZUJ1ZmZlciBkYXRhWSwgaW50IHN0cmlkZVksIEJ5
dGVCdWZmZXIgZGF0YVUsCi0gICAgICBpbnQgc3RyaWRlVSwgQnl0ZUJ1ZmZlciBkYXRhViwgaW50
IHN0cmlkZVYsIEBOdWxsYWJsZSBSdW5uYWJsZSByZWxlYXNlQ2FsbGJhY2spIHsKLSAgICB0aGlz
LndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGhpcy5kYXRh
WSA9IGRhdGFZOwotICAgIHRoaXMuZGF0YVUgPSBkYXRhVTsKLSAgICB0aGlzLmRhdGFWID0gZGF0
YVY7Ci0gICAgdGhpcy5zdHJpZGVZID0gc3RyaWRlWTsKLSAgICB0aGlzLnN0cmlkZVUgPSBzdHJp
ZGVVOwotICAgIHRoaXMuc3RyaWRlViA9IHN0cmlkZVY7Ci0gICAgdGhpcy5yZWZDb3VudERlbGVn
YXRlID0gbmV3IFJlZkNvdW50RGVsZWdhdGUocmVsZWFzZUNhbGxiYWNrKTsKLSAgfQotCi0gIHBy
aXZhdGUgc3RhdGljIHZvaWQgY2hlY2tDYXBhY2l0eShCeXRlQnVmZmVyIGRhdGEsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSkgewotICAgIC8vIFRoZSBsYXN0IHJvdyBkb2VzIG5v
dCBuZWNlc3NhcmlseSBuZWVkIHBhZGRpbmcuCi0gICAgZmluYWwgaW50IG1pbkNhcGFjaXR5ID0g
c3RyaWRlICogKGhlaWdodCAtIDEpICsgd2lkdGg7Ci0gICAgaWYgKGRhdGEuY2FwYWNpdHkoKSA8
IG1pbkNhcGFjaXR5KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
KAotICAgICAgICAgICJCdWZmZXIgbXVzdCBiZSBhdCBsZWFzdCAiICsgbWluQ2FwYWNpdHkgKyAi
IGJ5dGVzLCBidXQgd2FzICIgKyBkYXRhLmNhcGFjaXR5KCkpOwotICAgIH0KLSAgfQotCi0gIC8q
KiBXcmFwcyBleGlzdGluZyBCeXRlQnVmZmVycyBpbnRvIEphdmFJNDIwQnVmZmVyIG9iamVjdCB3
aXRob3V0IGNvcHlpbmcgdGhlIGNvbnRlbnRzLiAqLwotICBwdWJsaWMgc3RhdGljIEphdmFJNDIw
QnVmZmVyIHdyYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBCeXRlQnVmZmVyIGRhdGFZLCBpbnQg
c3RyaWRlWSwKLSAgICAgIEJ5dGVCdWZmZXIgZGF0YVUsIGludCBzdHJpZGVVLCBCeXRlQnVmZmVy
IGRhdGFWLCBpbnQgc3RyaWRlViwKLSAgICAgIEBOdWxsYWJsZSBSdW5uYWJsZSByZWxlYXNlQ2Fs
bGJhY2spIHsKLSAgICBpZiAoZGF0YVkgPT0gbnVsbCB8fCBkYXRhVSA9PSBudWxsIHx8IGRhdGFW
ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkRh
dGEgYnVmZmVycyBjYW5ub3QgYmUgbnVsbC4iKTsKLSAgICB9Ci0gICAgaWYgKCFkYXRhWS5pc0Rp
cmVjdCgpIHx8ICFkYXRhVS5pc0RpcmVjdCgpIHx8ICFkYXRhVi5pc0RpcmVjdCgpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEYXRhIGJ1ZmZlcnMgbXVzdCBi
ZSBkaXJlY3QgYnl0ZSBidWZmZXJzLiIpOwotICAgIH0KLQotICAgIC8vIFNsaWNlIHRoZSBidWZm
ZXJzIHRvIHByZXZlbnQgZXh0ZXJuYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgcG9zaXRpb24gLyBs
aW1pdCBvZiB0aGUgYnVmZmVyLgotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgcHJvdGVj
dCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlcnMgZnJvbSBtb2RpZmljYXRpb25zLgotICAgIGRh
dGFZID0gZGF0YVkuc2xpY2UoKTsKLSAgICBkYXRhVSA9IGRhdGFVLnNsaWNlKCk7Ci0gICAgZGF0
YVYgPSBkYXRhVi5zbGljZSgpOwotCi0gICAgZmluYWwgaW50IGNocm9tYVdpZHRoID0gKHdpZHRo
ICsgMSkgLyAyOwotICAgIGZpbmFsIGludCBjaHJvbWFIZWlnaHQgPSAoaGVpZ2h0ICsgMSkgLyAy
OwotICAgIGNoZWNrQ2FwYWNpdHkoZGF0YVksIHdpZHRoLCBoZWlnaHQsIHN0cmlkZVkpOwotICAg
IGNoZWNrQ2FwYWNpdHkoZGF0YVUsIGNocm9tYVdpZHRoLCBjaHJvbWFIZWlnaHQsIHN0cmlkZVUp
OwotICAgIGNoZWNrQ2FwYWNpdHkoZGF0YVYsIGNocm9tYVdpZHRoLCBjaHJvbWFIZWlnaHQsIHN0
cmlkZVYpOwotCi0gICAgcmV0dXJuIG5ldyBKYXZhSTQyMEJ1ZmZlcigKLSAgICAgICAgd2lkdGgs
IGhlaWdodCwgZGF0YVksIHN0cmlkZVksIGRhdGFVLCBzdHJpZGVVLCBkYXRhViwgc3RyaWRlViwg
cmVsZWFzZUNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKiBBbGxvY2F0ZXMgYW4gZW1wdHkgSTQyMEJ1
ZmZlciBzdWl0YWJsZSBmb3IgYW4gaW1hZ2Ugb2YgdGhlIGdpdmVuIGRpbWVuc2lvbnMuICovCi0g
IHB1YmxpYyBzdGF0aWMgSmF2YUk0MjBCdWZmZXIgYWxsb2NhdGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KSB7Ci0gICAgaW50IGNocm9tYUhlaWdodCA9IChoZWlnaHQgKyAxKSAvIDI7Ci0gICAgaW50
IHN0cmlkZVVWID0gKHdpZHRoICsgMSkgLyAyOwotICAgIGludCB5UG9zID0gMDsKLSAgICBpbnQg
dVBvcyA9IHlQb3MgKyB3aWR0aCAqIGhlaWdodDsKLSAgICBpbnQgdlBvcyA9IHVQb3MgKyBzdHJp
ZGVVViAqIGNocm9tYUhlaWdodDsKLQotICAgIEJ5dGVCdWZmZXIgYnVmZmVyID0KLSAgICAgICAg
Sm5pQ29tbW9uLm5hdGl2ZUFsbG9jYXRlQnl0ZUJ1ZmZlcih3aWR0aCAqIGhlaWdodCArIDIgKiBz
dHJpZGVVViAqIGNocm9tYUhlaWdodCk7Ci0KLSAgICBidWZmZXIucG9zaXRpb24oeVBvcyk7Ci0g
ICAgYnVmZmVyLmxpbWl0KHVQb3MpOwotICAgIEJ5dGVCdWZmZXIgZGF0YVkgPSBidWZmZXIuc2xp
Y2UoKTsKLQotICAgIGJ1ZmZlci5wb3NpdGlvbih1UG9zKTsKLSAgICBidWZmZXIubGltaXQodlBv
cyk7Ci0gICAgQnl0ZUJ1ZmZlciBkYXRhVSA9IGJ1ZmZlci5zbGljZSgpOwotCi0gICAgYnVmZmVy
LnBvc2l0aW9uKHZQb3MpOwotICAgIGJ1ZmZlci5saW1pdCh2UG9zICsgc3RyaWRlVVYgKiBjaHJv
bWFIZWlnaHQpOwotICAgIEJ5dGVCdWZmZXIgZGF0YVYgPSBidWZmZXIuc2xpY2UoKTsKLQotICAg
IHJldHVybiBuZXcgSmF2YUk0MjBCdWZmZXIod2lkdGgsIGhlaWdodCwgZGF0YVksIHdpZHRoLCBk
YXRhVSwgc3RyaWRlVVYsIGRhdGFWLCBzdHJpZGVVViwKLSAgICAgICAgKCkgLT4geyBKbmlDb21t
b24ubmF0aXZlRnJlZUJ5dGVCdWZmZXIoYnVmZmVyKTsgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGludCBnZXRXaWR0aCgpIHsKLSAgICByZXR1cm4gd2lkdGg7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIGludCBnZXRIZWlnaHQoKSB7Ci0gICAgcmV0dXJuIGhlaWdodDsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQnl0ZUJ1ZmZlciBnZXREYXRhWSgpIHsKLSAg
ICAvLyBSZXR1cm4gYSBzbGljZSB0byBwcmV2ZW50IHJlbGF0aXZlIHJlYWRzIGZyb20gY2hhbmdp
bmcgdGhlIHBvc2l0aW9uLgotICAgIHJldHVybiBkYXRhWS5zbGljZSgpOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBCeXRlQnVmZmVyIGdldERhdGFVKCkgewotICAgIC8vIFJldHVybiBh
IHNsaWNlIHRvIHByZXZlbnQgcmVsYXRpdmUgcmVhZHMgZnJvbSBjaGFuZ2luZyB0aGUgcG9zaXRp
b24uCi0gICAgcmV0dXJuIGRhdGFVLnNsaWNlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIEJ5dGVCdWZmZXIgZ2V0RGF0YVYoKSB7Ci0gICAgLy8gUmV0dXJuIGEgc2xpY2UgdG8gcHJl
dmVudCByZWxhdGl2ZSByZWFkcyBmcm9tIGNoYW5naW5nIHRoZSBwb3NpdGlvbi4KLSAgICByZXR1
cm4gZGF0YVYuc2xpY2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFN0
cmlkZVkoKSB7Ci0gICAgcmV0dXJuIHN0cmlkZVk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIGludCBnZXRTdHJpZGVVKCkgewotICAgIHJldHVybiBzdHJpZGVVOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0U3RyaWRlVigpIHsKLSAgICByZXR1cm4gc3RyaWRlVjsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgSTQyMEJ1ZmZlciB0b0k0MjAoKSB7Ci0gICAg
cmV0YWluKCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgcmV0YWluKCkgewotICAgIHJlZkNvdW50RGVsZWdhdGUucmV0YWluKCk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICByZWZDb3VudERlbGVn
YXRlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlkZW9GcmFtZS5C
dWZmZXIgY3JvcEFuZFNjYWxlKAotICAgICAgaW50IGNyb3BYLCBpbnQgY3JvcFksIGludCBjcm9w
V2lkdGgsIGludCBjcm9wSGVpZ2h0LCBpbnQgc2NhbGVXaWR0aCwgaW50IHNjYWxlSGVpZ2h0KSB7
Ci0gICAgcmV0dXJuIGNyb3BBbmRTY2FsZUk0MjAodGhpcywgY3JvcFgsIGNyb3BZLCBjcm9wV2lk
dGgsIGNyb3BIZWlnaHQsIHNjYWxlV2lkdGgsIHNjYWxlSGVpZ2h0KTsKLSAgfQotCi0gIHB1Ymxp
YyBzdGF0aWMgVmlkZW9GcmFtZS5CdWZmZXIgY3JvcEFuZFNjYWxlSTQyMChmaW5hbCBJNDIwQnVm
ZmVyIGJ1ZmZlciwgaW50IGNyb3BYLCBpbnQgY3JvcFksCi0gICAgICBpbnQgY3JvcFdpZHRoLCBp
bnQgY3JvcEhlaWdodCwgaW50IHNjYWxlV2lkdGgsIGludCBzY2FsZUhlaWdodCkgewotICAgIGlm
IChjcm9wV2lkdGggPT0gc2NhbGVXaWR0aCAmJiBjcm9wSGVpZ2h0ID09IHNjYWxlSGVpZ2h0KSB7
Ci0gICAgICAvLyBObyBzY2FsaW5nLgotICAgICAgQnl0ZUJ1ZmZlciBkYXRhWSA9IGJ1ZmZlci5n
ZXREYXRhWSgpOwotICAgICAgQnl0ZUJ1ZmZlciBkYXRhVSA9IGJ1ZmZlci5nZXREYXRhVSgpOwot
ICAgICAgQnl0ZUJ1ZmZlciBkYXRhViA9IGJ1ZmZlci5nZXREYXRhVigpOwotCi0gICAgICBkYXRh
WS5wb3NpdGlvbihjcm9wWCArIGNyb3BZICogYnVmZmVyLmdldFN0cmlkZVkoKSk7Ci0gICAgICBk
YXRhVS5wb3NpdGlvbihjcm9wWCAvIDIgKyBjcm9wWSAvIDIgKiBidWZmZXIuZ2V0U3RyaWRlVSgp
KTsKLSAgICAgIGRhdGFWLnBvc2l0aW9uKGNyb3BYIC8gMiArIGNyb3BZIC8gMiAqIGJ1ZmZlci5n
ZXRTdHJpZGVWKCkpOwotCi0gICAgICBidWZmZXIucmV0YWluKCk7Ci0gICAgICByZXR1cm4gSmF2
YUk0MjBCdWZmZXIud3JhcChzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCwgZGF0YVkuc2xpY2UoKSwg
YnVmZmVyLmdldFN0cmlkZVkoKSwKLSAgICAgICAgICBkYXRhVS5zbGljZSgpLCBidWZmZXIuZ2V0
U3RyaWRlVSgpLCBkYXRhVi5zbGljZSgpLCBidWZmZXIuZ2V0U3RyaWRlVigpLCBidWZmZXI6OnJl
bGVhc2UpOwotICAgIH0KLQotICAgIEphdmFJNDIwQnVmZmVyIG5ld0J1ZmZlciA9IEphdmFJNDIw
QnVmZmVyLmFsbG9jYXRlKHNjYWxlV2lkdGgsIHNjYWxlSGVpZ2h0KTsKLSAgICBuYXRpdmVDcm9w
QW5kU2NhbGVJNDIwKGJ1ZmZlci5nZXREYXRhWSgpLCBidWZmZXIuZ2V0U3RyaWRlWSgpLCBidWZm
ZXIuZ2V0RGF0YVUoKSwKLSAgICAgICAgYnVmZmVyLmdldFN0cmlkZVUoKSwgYnVmZmVyLmdldERh
dGFWKCksIGJ1ZmZlci5nZXRTdHJpZGVWKCksIGNyb3BYLCBjcm9wWSwgY3JvcFdpZHRoLAotICAg
ICAgICBjcm9wSGVpZ2h0LCBuZXdCdWZmZXIuZ2V0RGF0YVkoKSwgbmV3QnVmZmVyLmdldFN0cmlk
ZVkoKSwgbmV3QnVmZmVyLmdldERhdGFVKCksCi0gICAgICAgIG5ld0J1ZmZlci5nZXRTdHJpZGVV
KCksIG5ld0J1ZmZlci5nZXREYXRhVigpLCBuZXdCdWZmZXIuZ2V0U3RyaWRlVigpLCBzY2FsZVdp
ZHRoLAotICAgICAgICBzY2FsZUhlaWdodCk7Ci0gICAgcmV0dXJuIG5ld0J1ZmZlcjsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUNyb3BBbmRTY2FsZUk0MjAoQnl0
ZUJ1ZmZlciBzcmNZLCBpbnQgc3JjU3RyaWRlWSwKLSAgICAgIEJ5dGVCdWZmZXIgc3JjVSwgaW50
IHNyY1N0cmlkZVUsIEJ5dGVCdWZmZXIgc3JjViwgaW50IHNyY1N0cmlkZVYsIGludCBjcm9wWCwg
aW50IGNyb3BZLAotICAgICAgaW50IGNyb3BXaWR0aCwgaW50IGNyb3BIZWlnaHQsIEJ5dGVCdWZm
ZXIgZHN0WSwgaW50IGRzdFN0cmlkZVksIEJ5dGVCdWZmZXIgZHN0VSwKLSAgICAgIGludCBkc3RT
dHJpZGVVLCBCeXRlQnVmZmVyIGRzdFYsIGludCBkc3RTdHJpZGVWLCBpbnQgc2NhbGVXaWR0aCwg
aW50IHNjYWxlSGVpZ2h0KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0xpYnZweFZwOERl
Y29kZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0xpYnZweFZwOERlY29kZXIuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhZDBhYTEzN2M3NTIwZWJiNTkwOWUwZWUzNGFiMmRhNWNm
NWRlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9MaWJ2cHhWcDhEZWNvZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1wdWJs
aWMgY2xhc3MgTGlidnB4VnA4RGVjb2RlciBleHRlbmRzIFdyYXBwZWROYXRpdmVWaWRlb0RlY29k
ZXIgewotICBAT3ZlcnJpZGUKLSAgcHVibGljIGxvbmcgY3JlYXRlTmF0aXZlVmlkZW9EZWNvZGVy
KCkgewotICAgIHJldHVybiBuYXRpdmVDcmVhdGVEZWNvZGVyKCk7Ci0gIH0KLQotICBzdGF0aWMg
bmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlRGVjb2RlcigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93
ZWJydGMvTGlidnB4VnA4RW5jb2Rlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTGlidnB4VnA4RW5jb2Rl
ci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmU5ZTUyYzE0MjFmMjQxYzRj
Y2M5MTg5OWJlMTU5MjAzZTNhNjgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL0xpYnZweFZwOEVuY29kZXIuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLXB1YmxpYyBjbGFzcyBMaWJ2cHhWcDhFbmNvZGVyIGV4dGVuZHMgV3JhcHBl
ZE5hdGl2ZVZpZGVvRW5jb2RlciB7Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgbG9uZyBjcmVhdGVO
YXRpdmVWaWRlb0VuY29kZXIoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZUVuY29kZXIoKTsK
LSAgfQotCi0gIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVFbmNvZGVyKCk7Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzSGFyZHdhcmVFbmNvZGVyKCkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTGlidnB4VnA5RGVj
b2Rlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTGlidnB4VnA5RGVjb2Rlci5qYXZhCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5MGEyNDQzM2EzZWY3NDFjYzliODFkNDVlMDc2ZWMyMjhiYzRk
YjZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcv
d2VicnRjL0xpYnZweFZwOURlY29kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLXB1Ymxp
YyBjbGFzcyBMaWJ2cHhWcDlEZWNvZGVyIGV4dGVuZHMgV3JhcHBlZE5hdGl2ZVZpZGVvRGVjb2Rl
ciB7Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgbG9uZyBjcmVhdGVOYXRpdmVWaWRlb0RlY29kZXIo
KSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZURlY29kZXIoKTsKLSAgfQotCi0gIHN0YXRpYyBu
YXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVEZWNvZGVyKCk7Ci0KLSAgc3RhdGljIG5hdGl2ZSBib29s
ZWFuIG5hdGl2ZUlzU3VwcG9ydGVkKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9MaWJ2
cHhWcDlFbmNvZGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9MaWJ2cHhWcDlFbmNvZGVyLmphdmEKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMTFhZTkzZmI4YWM1YTE3OWQzZjc3ZGFiZjdl
M2M5ZjI2ODVmMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvTGlidnB4VnA5RW5jb2Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
MjcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotcHVibGljIGNsYXNzIExpYnZweFZwOUVuY29kZXIgZXh0ZW5kcyBXcmFwcGVkTmF0aXZlVmlk
ZW9FbmNvZGVyIHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBsb25nIGNyZWF0ZU5hdGl2ZVZpZGVv
RW5jb2RlcigpIHsKLSAgICByZXR1cm4gbmF0aXZlQ3JlYXRlRW5jb2RlcigpOwotICB9Ci0KLSAg
c3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUVuY29kZXIoKTsKLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGJvb2xlYW4gaXNIYXJkd2FyZUVuY29kZXIoKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUlzU3VwcG9ydGVkKCk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDViNTFkZjI2Y2JhYzNjZTAzMDFkMWZjNjMzM2ZkMWI4YmYwNWY4ODcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
TWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwOSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLm1lZGlhLk1lZGlhQ29kZWM7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVj
SW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0
aWVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0xpc3Q7Ci1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFu
ZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24u
TnVsbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgamF2YS5uaW8u
Qnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlEZXF1ZTsKLWltcG9ydCBqYXZhLnV0
aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGls
Lkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxp
c3Q7Ci1pbXBvcnQgamF2YS51dGlsLlF1ZXVlOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBv
cnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGls
LmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FZ2xCYXNlOwotaW1wb3J0
IG9yZy53ZWJydGMuVmlkZW9GcmFtZTsKLQotLy8gSmF2YS1zaWRlIG9mIHBlZXJjb25uZWN0aW9u
LmNjOk1lZGlhQ29kZWNWaWRlb0RlY29kZXIuCi0vLyBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVu
dGF0aW9uIGRldGFpbCBvZiB0aGUgSmF2YSBQZWVyQ29ubmVjdGlvbiBBUEkuCi1AU3VwcHJlc3NX
YXJuaW5ncygiZGVwcmVjYXRpb24iKQotQERlcHJlY2F0ZWQKLXB1YmxpYyBjbGFzcyBNZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyIHsKLSAgLy8gVGhpcyBjbGFzcyBpcyBjb25zdHJ1Y3RlZCwgb3BlcmF0
ZWQsIGFuZCBkZXN0cm95ZWQgYnkgaXRzIEMrKyBpbmNhcm5hdGlvbiwKLSAgLy8gc28gdGhlIGNs
YXNzIGFuZCBpdHMgbWV0aG9kcyBoYXZlIG5vbi1wdWJsaWMgdmlzaWJpbGl0eS4gIFRoZSBBUEkg
dGhpcwotICAvLyBjbGFzcyBleHBvc2VzIGFpbXMgdG8gbWltaWMgdGhlIHdlYnJ0Yzo6VmlkZW9E
ZWNvZGVyIEFQSSBhcyBjbG9zZWx5IGFzCi0gIC8vIHBvc3NpYmx5IHRvIG1pbmltaXplIHRoZSBh
bW91bnQgb2YgdHJhbnNsYXRpb24gd29yayBuZWNlc3NhcnkuCi0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIjsKLQotICAvKioKLSAg
ICogQ3JlYXRlIGEgVmlkZW9EZWNvZGVyRmFjdG9yeSB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbiB0
aGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGFuZCByZXBsaWNhdGUKLSAgICogdGhlIG9sZCBiZWhh
dmlvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9EZWNvZGVyRmFjdG9yeSBjcmVhdGVG
YWN0b3J5KCkgewotICAgIHJldHVybiBuZXcgRGVmYXVsdFZpZGVvRGVjb2RlckZhY3RvcnkobmV3
IEh3RGVjb2RlckZhY3RvcnkoKSk7Ci0gIH0KLQotICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBI
VyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIGluc3RhbmNlcy4KLSAgc3RhdGljIGNsYXNzIEh3RGVj
b2RlckZhY3RvcnkgaW1wbGVtZW50cyBWaWRlb0RlY29kZXJGYWN0b3J5IHsKLSAgICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGlzU2FtZUNvZGVjKFZpZGVvQ29kZWNJbmZvIGNvZGVjQSwgVmlkZW9D
b2RlY0luZm8gY29kZWNCKSB7Ci0gICAgICBpZiAoIWNvZGVjQS5uYW1lLmVxdWFsc0lnbm9yZUNh
c2UoY29kZWNCLm5hbWUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAg
IHJldHVybiBjb2RlY0EubmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJIMjY0IikKLSAgICAgICAgICA/
IEgyNjRVdGlscy5pc1NhbWVIMjY0UHJvZmlsZShjb2RlY0EucGFyYW1zLCBjb2RlY0IucGFyYW1z
KQotICAgICAgICAgIDogdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFu
IGlzQ29kZWNTdXBwb3J0ZWQoCi0gICAgICAgIFZpZGVvQ29kZWNJbmZvW10gc3VwcG9ydGVkQ29k
ZWNzLCBWaWRlb0NvZGVjSW5mbyBjb2RlYykgewotICAgICAgZm9yIChWaWRlb0NvZGVjSW5mbyBz
dXBwb3J0ZWRDb2RlYyA6IHN1cHBvcnRlZENvZGVjcykgewotICAgICAgICBpZiAoaXNTYW1lQ29k
ZWMoc3VwcG9ydGVkQ29kZWMsIGNvZGVjKSkgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0
ZSBzdGF0aWMgVmlkZW9Db2RlY0luZm9bXSBnZXRTdXBwb3J0ZWRIYXJkd2FyZUNvZGVjcygpIHsK
LSAgICAgIGZpbmFsIExpc3Q8VmlkZW9Db2RlY0luZm8+IGNvZGVjcyA9IG5ldyBBcnJheUxpc3Q8
VmlkZW9Db2RlY0luZm8+KCk7Ci0KLSAgICAgIGlmIChpc1ZwOEh3U3VwcG9ydGVkKCkpIHsKLSAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIlZQOCBIVyBEZWNvZGVyIHN1cHBvcnRlZC4iKTsKLSAgICAg
ICAgY29kZWNzLmFkZChuZXcgVmlkZW9Db2RlY0luZm8oIlZQOCIsIG5ldyBIYXNoTWFwPD4oKSkp
OwotICAgICAgfQotCi0gICAgICBpZiAoaXNWcDlId1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJWUDkgSFcgRGVjb2RlciBzdXBwb3J0ZWQuIik7Ci0gICAgICAgIGNvZGVj
cy5hZGQobmV3IFZpZGVvQ29kZWNJbmZvKCJWUDkiLCBuZXcgSGFzaE1hcDw+KCkpKTsKLSAgICAg
IH0KLQotICAgICAgaWYgKGlzSDI2NEhpZ2hQcm9maWxlSHdTdXBwb3J0ZWQoKSkgewotICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiSC4yNjQgSGlnaCBQcm9maWxlIEhXIERlY29kZXIgc3VwcG9ydGVk
LiIpOwotICAgICAgICBjb2RlY3MuYWRkKEgyNjRVdGlscy5ERUZBVUxUX0gyNjRfSElHSF9QUk9G
SUxFX0NPREVDKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGlzSDI2NEh3U3VwcG9ydGVkKCkpIHsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkguMjY0IEhXIERlY29kZXIgc3VwcG9ydGVkLiIpOwot
ICAgICAgICBjb2RlY3MuYWRkKEgyNjRVdGlscy5ERUZBVUxUX0gyNjRfQkFTRUxJTkVfUFJPRklM
RV9DT0RFQyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBjb2RlY3MudG9BcnJheShuZXcgVmlk
ZW9Db2RlY0luZm9bY29kZWNzLnNpemUoKV0pOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwg
VmlkZW9Db2RlY0luZm9bXSBzdXBwb3J0ZWRIYXJkd2FyZUNvZGVjcyA9IGdldFN1cHBvcnRlZEhh
cmR3YXJlQ29kZWNzKCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlkZW9Db2RlY0lu
Zm9bXSBnZXRTdXBwb3J0ZWRDb2RlY3MoKSB7Ci0gICAgICByZXR1cm4gc3VwcG9ydGVkSGFyZHdh
cmVDb2RlY3M7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIFZpZGVvRGVjb2RlciBjcmVhdGVEZWNvZGVyKFZpZGVvQ29kZWNJbmZvIGNvZGVjKSB7Ci0g
ICAgICBpZiAoIWlzQ29kZWNTdXBwb3J0ZWQoc3VwcG9ydGVkSGFyZHdhcmVDb2RlY3MsIGNvZGVj
KSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTm8gSFcgdmlkZW8gZGVjb2RlciBmb3IgY29k
ZWMgIiArIGNvZGVjLm5hbWUpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAg
IExvZ2dpbmcuZChUQUcsICJDcmVhdGUgSFcgdmlkZW8gZGVjb2RlciBmb3IgIiArIGNvZGVjLm5h
bWUpOwotICAgICAgcmV0dXJuIG5ldyBXcmFwcGVkTmF0aXZlVmlkZW9EZWNvZGVyKCkgewotICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGxvbmcgY3JlYXRlTmF0aXZlVmlkZW9EZWNv
ZGVyKCkgewotICAgICAgICAgIHJldHVybiBuYXRpdmVDcmVhdGVEZWNvZGVyKGNvZGVjLm5hbWUs
IHVzZVN1cmZhY2UoKSk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNQVhfREVDT0RFX1RJTUVfTVMgPSAyMDA7Ci0KLSAgLy8g
VE9ETyhtYWdqZWQpOiBVc2UgTWVkaWFGb3JtYXQgY29uc3RhbnRzIHdoZW4gcGFydCBvZiB0aGUg
cHVibGljIEFQSS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVF9LRVlfU1RS
SURFID0gInN0cmlkZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRfS0VZ
X1NMSUNFX0hFSUdIVCA9ICJzbGljZS1oZWlnaHQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgRk9STUFUX0tFWV9DUk9QX0xFRlQgPSAiY3JvcC1sZWZ0IjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIEZPUk1BVF9LRVlfQ1JPUF9SSUdIVCA9ICJjcm9wLXJpZ2h0IjsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVF9LRVlfQ1JPUF9UT1AgPSAiY3JvcC10
b3AiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUX0tFWV9DUk9QX0JPVFRP
TSA9ICJjcm9wLWJvdHRvbSI7Ci0KLSAgLy8gVGltZW91dCBmb3IgaW5wdXQgYnVmZmVyIGRlcXVl
dWUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVFVRVVFX0lOUFVUX1RJTUVPVVQgPSA1
MDAwMDA7Ci0gIC8vIFRpbWVvdXQgZm9yIGNvZGVjIHJlbGVhc2luZy4KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IE1FRElBX0NPREVDX1JFTEVBU0VfVElNRU9VVF9NUyA9IDUwMDA7Ci0gIC8v
IE1heCBudW1iZXIgb2Ygb3V0cHV0IGJ1ZmZlcnMgcXVldWVkIGJlZm9yZSBzdGFydGluZyB0byBk
cm9wIGRlY29kZWQgZnJhbWVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1FVRVVF
RF9PVVRQVVRCVUZGRVJTID0gMzsKLSAgLy8gQWN0aXZlIHJ1bm5pbmcgZGVjb2RlciBpbnN0YW5j
ZS4gU2V0IGluIGluaXREZWNvZGUoKSAoY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUpCi0gIC8vIGFu
ZCByZXNldCB0byBudWxsIGluIHJlbGVhc2UoKSBjYWxsLgotICBATnVsbGFibGUgcHJpdmF0ZSBz
dGF0aWMgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciBydW5uaW5nSW5zdGFuY2U7Ci0gIEBOdWxsYWJs
ZSBwcml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRXJyb3JDYWxsYmFjayBlcnJv
ckNhbGxiYWNrOwotICBwcml2YXRlIHN0YXRpYyBpbnQgY29kZWNFcnJvcnM7Ci0gIC8vIExpc3Qg
b2YgZGlzYWJsZWQgY29kZWMgdHlwZXMgLSBjYW4gYmUgc2V0IGZyb20gYXBwbGljYXRpb24uCi0g
IHByaXZhdGUgc3RhdGljIFNldDxTdHJpbmc+IGh3RGVjb2RlckRpc2FibGVkVHlwZXMgPSBuZXcg
SGFzaFNldDxTdHJpbmc+KCk7Ci0gIEBOdWxsYWJsZSBwcml2YXRlIHN0YXRpYyBFZ2xCYXNlIGVn
bEJhc2U7Ci0KLSAgQE51bGxhYmxlIHByaXZhdGUgVGhyZWFkIG1lZGlhQ29kZWNUaHJlYWQ7Ci0g
IEBOdWxsYWJsZSBwcml2YXRlIE1lZGlhQ29kZWMgbWVkaWFDb2RlYzsKLSAgcHJpdmF0ZSBCeXRl
QnVmZmVyW10gaW5wdXRCdWZmZXJzOwotICBwcml2YXRlIEJ5dGVCdWZmZXJbXSBvdXRwdXRCdWZm
ZXJzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVlA4X01JTUVfVFlQRSA9ICJ2aWRl
by94LXZuZC5vbjIudnA4IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOV9NSU1F
X1RZUEUgPSAidmlkZW8veC12bmQub24yLnZwOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBIMjY0X01JTUVfVFlQRSA9ICJ2aWRlby9hdmMiOwotICAvLyBMaXN0IG9mIHN1cHBvcnRl
ZCBIVyBWUDggZGVjb2RlcnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1cHBv
cnRlZFZwOEh3Q29kZWNQcmVmaXhlcygpIHsKLSAgICBBcnJheUxpc3Q8U3RyaW5nPiBzdXBwb3J0
ZWRQcmVmaXhlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIHN1cHBvcnRlZFByZWZp
eGVzLmFkZCgiT01YLnFjb20uIik7Ci0gICAgc3VwcG9ydGVkUHJlZml4ZXMuYWRkKCJPTVguTnZp
ZGlhLiIpOwotICAgIHN1cHBvcnRlZFByZWZpeGVzLmFkZCgiT01YLkV4eW5vcy4iKTsKLSAgICBz
dXBwb3J0ZWRQcmVmaXhlcy5hZGQoIk9NWC5JbnRlbC4iKTsKLSAgICBpZiAoUGVlckNvbm5lY3Rp
b25GYWN0b3J5LmZpZWxkVHJpYWxzRmluZEZ1bGxOYW1lKCJXZWJSVEMtTWVkaWFUZWtWUDgiKS5l
cXVhbHMoIkVuYWJsZWQiKQotICAgICAgICAmJiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVp
bGQuVkVSU0lPTl9DT0RFUy5OKSB7Ci0gICAgICBzdXBwb3J0ZWRQcmVmaXhlcy5hZGQoIk9NWC5N
VEsuIik7Ci0gICAgfQotICAgIHJldHVybiBzdXBwb3J0ZWRQcmVmaXhlcy50b0FycmF5KG5ldyBT
dHJpbmdbc3VwcG9ydGVkUHJlZml4ZXMuc2l6ZSgpXSk7Ci0gIH0KLSAgLy8gTGlzdCBvZiBzdXBw
b3J0ZWQgSFcgVlA5IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBz
dXBwb3J0ZWRWcDlId0NvZGVjUHJlZml4ZXMgPSB7Ik9NWC5xY29tLiIsICJPTVguRXh5bm9zLiJ9
OwotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBILjI2NCBkZWNvZGVycy4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nW10gc3VwcG9ydGVkSDI2NEh3Q29kZWNQcmVmaXhlcygpIHsKLSAg
ICBBcnJheUxpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcmVmaXhlcyA9IG5ldyBBcnJheUxpc3Q8U3Ry
aW5nPigpOwotICAgIHN1cHBvcnRlZFByZWZpeGVzLmFkZCgiT01YLnFjb20uIik7Ci0gICAgc3Vw
cG9ydGVkUHJlZml4ZXMuYWRkKCJPTVguSW50ZWwuIik7Ci0gICAgc3VwcG9ydGVkUHJlZml4ZXMu
YWRkKCJPTVguRXh5bm9zLiIpOwotICAgIGlmIChQZWVyQ29ubmVjdGlvbkZhY3RvcnkuZmllbGRU
cmlhbHNGaW5kRnVsbE5hbWUoIldlYlJUQy1NZWRpYVRla0gyNjQiKS5lcXVhbHMoIkVuYWJsZWQi
KQotICAgICAgICAmJiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RF
Uy5PX01SMSkgewotICAgICAgc3VwcG9ydGVkUHJlZml4ZXMuYWRkKCJPTVguTVRLLiIpOwotICAg
IH0KLSAgICByZXR1cm4gc3VwcG9ydGVkUHJlZml4ZXMudG9BcnJheShuZXcgU3RyaW5nW3N1cHBv
cnRlZFByZWZpeGVzLnNpemUoKV0pOwotICB9Ci0KLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcg
SC4yNjQgaGlnaCBwcm9maWxlIGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp
bmcgc3VwcG9ydGVkUWNvbUgyNjRIaWdoUHJvZmlsZUh3Q29kZWNQcmVmaXggPSAiT01YLnFjb20u
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHN1cHBvcnRlZEV4eW5vc0gyNjRIaWdo
UHJvZmlsZUh3Q29kZWNQcmVmaXggPSAiT01YLkV4eW5vcy4iOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgc3VwcG9ydGVkTWVkaWFUZWtIMjY0SGlnaFByb2ZpbGVId0NvZGVjUHJlZml4
ID0gIk9NWC5NVEsuIjsKLQotICAvLyBOVjEyIGNvbG9yIGZvcm1hdCBzdXBwb3J0ZWQgYnkgUUNP
TSBjb2RlYywgYnV0IG5vdCBkZWNsYXJlZCBpbiBNZWRpYUNvZGVjIC0KLSAgLy8gc2VlIC9oYXJk
d2FyZS9xY29tL21lZGlhL21tLWNvcmUvaW5jL09NWF9RQ09NRXh0bnMuaAotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMzJt
NGthID0gMHg3RkEzMEMwMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01f
Rk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjE2bTRrYSA9IDB4N0ZBMzBDMDI7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFu
YXI2NHgzMlRpbGUybThrYSA9IDB4N0ZBMzBDMDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0gPSAweDdGQTMwQzA0
OwotICAvLyBBbGxvd2FibGUgY29sb3IgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgY29kZWMgLSBpbiBv
cmRlciBvZiBwcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PEludGVnZXI+
IHN1cHBvcnRlZENvbG9yTGlzdCA9IEFycmF5cy5hc0xpc3QoCi0gICAgICBDb2RlY0NhcGFiaWxp
dGllcy5DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIsIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zv
cm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9RQ09N
X0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBh
Y2tlZFNlbWlQbGFuYXIzMm00a2EsIENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBs
YW5hcjE2bTRrYSwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5h
cjY0eDMyVGlsZTJtOGthLAotICAgICAgQ09MT1JfUUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1p
UGxhbmFyMzJtKTsKLQotICBwcml2YXRlIGludCBjb2xvckZvcm1hdDsKLSAgcHJpdmF0ZSBpbnQg
d2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBpbnQgc3RyaWRlOwotICBw
cml2YXRlIGludCBzbGljZUhlaWdodDsKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0RlY29kZWRGaXJz
dEZyYW1lOwotICBwcml2YXRlIGZpbmFsIFF1ZXVlPFRpbWVTdGFtcHM+IGRlY29kZVN0YXJ0VGlt
ZU1zID0gbmV3IEFycmF5RGVxdWU8VGltZVN0YW1wcz4oKTsKLQotICAvLyBUaGUgYmVsb3cgdmFy
aWFibGVzIGFyZSBvbmx5IHVzZWQgd2hlbiBkZWNvZGluZyB0byBhIFN1cmZhY2UuCi0gIEBOdWxs
YWJsZSBwcml2YXRlIFRleHR1cmVMaXN0ZW5lciB0ZXh0dXJlTGlzdGVuZXI7Ci0gIHByaXZhdGUg
aW50IGRyb3BwZWRGcmFtZXM7Ci0gIEBOdWxsYWJsZSBwcml2YXRlIFN1cmZhY2Ugc3VyZmFjZTsK
LSAgcHJpdmF0ZSBmaW5hbCBRdWV1ZTxEZWNvZGVkT3V0cHV0QnVmZmVyPiBkZXF1ZXVlZFN1cmZh
Y2VPdXRwdXRCdWZmZXJzID0KLSAgICAgIG5ldyBBcnJheURlcXVlPERlY29kZWRPdXRwdXRCdWZm
ZXI+KCk7Ci0KLSAgLy8gTWVkaWFDb2RlYyBlcnJvciBoYW5kbGVyIC0gaW52b2tlZCB3aGVuIGNy
aXRpY2FsIGVycm9yIGhhcHBlbnMgd2hpY2ggbWF5IHByZXZlbnQKLSAgLy8gZnVydGhlciB1c2Ug
b2YgbWVkaWEgY29kZWMgQVBJLiBOb3cgaXQgbWVhbnMgdGhhdCBvbmUgb2YgbWVkaWEgY29kZWMg
aW5zdGFuY2VzCi0gIC8vIGlzIGhhbmdpbmcgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCBpbiB0
aGUgbmV4dCBjYWxsLgotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBNZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyRXJyb3JDYWxsYmFjayB7Ci0gICAgdm9pZCBvbk1lZGlhQ29kZWNWaWRlb0RlY29kZXJD
cml0aWNhbEVycm9yKGludCBjb2RlY0Vycm9ycyk7Ci0gIH0KLQotICAvKiogU2V0IEVHTCBjb250
ZXh0IHVzZWQgYnkgSFcgZGVjb2RpbmcuIFRoZSBFR0wgY29udGV4dCBtdXN0IGJlIHNoYXJlZCB3
aXRoIHRoZSByZW1vdGUgcmVuZGVyLiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RWdsQ29u
dGV4dChFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCkgewotICAgIGlmIChlZ2xCYXNlICE9IG51
bGwpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJFZ2wgY29udGV4dCBhbHJlYWR5IHNldC4iKTsK
LSAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgIH0KLSAgICBlZ2xCYXNlID0gRWdsQmFzZS5j
cmVhdGUoZWdsQ29udGV4dCk7Ci0gIH0KLQotICAvKiogRGlzcG9zZSB0aGUgRUdMIGNvbnRleHQg
dXNlZCBieSBIVyBkZWNvZGluZy4gKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc3Bvc2VFZ2xD
b250ZXh0KCkgewotICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgIGVnbEJhc2UucmVs
ZWFzZSgpOwotICAgICAgZWdsQmFzZSA9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIGJv
b2xlYW4gdXNlU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsQmFzZSAhPSBudWxsOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEVycm9yQ2FsbGJhY2soTWVkaWFDb2RlY1ZpZGVvRGVj
b2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJT
ZXQgZXJyb3IgY2FsbGJhY2siKTsKLSAgICBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmVycm9yQ2Fs
bGJhY2sgPSBlcnJvckNhbGxiYWNrOwotICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIGRpc2FibGUg
SFcgZGVjb2RpbmcgLSBjYW4gYmUgY2FsbGVkIGZyb20gYXBwbGljYXRpb25zIGZvciBwbGF0Zm9y
bXMKLSAgLy8gd2hpY2ggaGF2ZSBrbm93biBIVyBkZWNvZGluZyBwcm9ibGVtcy4KLSAgcHVibGlj
IHN0YXRpYyB2b2lkIGRpc2FibGVWcDhId0NvZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJW
UDggZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdEZWNvZGVy
RGlzYWJsZWRUeXBlcy5hZGQoVlA4X01JTUVfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGlj
IHZvaWQgZGlzYWJsZVZwOUh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOSBkZWNv
ZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0RlY29kZXJEaXNhYmxl
ZFR5cGVzLmFkZChWUDlfTUlNRV9UWVBFKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBk
aXNhYmxlSDI2NEh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIkguMjY0IGRlY29kaW5n
IGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RGVjb2RlckRpc2FibGVkVHlw
ZXMuYWRkKEgyNjRfTUlNRV9UWVBFKTsKLSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0byBxdWVyeSBp
ZiBIVyBkZWNvZGluZyBpcyBzdXBwb3J0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1Zw
OEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5jb250
YWlucyhWUDhfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZERlY29kZXIoVlA4X01JTUVfVFlQ
RSwgc3VwcG9ydGVkVnA4SHdDb2RlY1ByZWZpeGVzKCkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIGlzVnA5SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0Rl
Y29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5zKFZQOV9NSU1FX1RZUEUpCi0gICAgICAgICYmIChm
aW5kRGVjb2RlcihWUDlfTUlNRV9UWVBFLCBzdXBwb3J0ZWRWcDlId0NvZGVjUHJlZml4ZXMpICE9
IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSDI2NEh3U3VwcG9ydGVk
KCkgewotICAgIHJldHVybiAhaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhIMjY0X01J
TUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmREZWNvZGVyKEgyNjRfTUlNRV9UWVBFLCBzdXBwb3J0
ZWRIMjY0SHdDb2RlY1ByZWZpeGVzKCkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBib29sZWFuIGlzSDI2NEhpZ2hQcm9maWxlSHdTdXBwb3J0ZWQoKSB7Ci0gICAgaWYgKGh3RGVj
b2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoSDI2NF9NSU1FX1RZUEUpKSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFN1cHBvcnQgSC4yNjQgSFAgZGVjb2Rpbmcgb24gUUNP
TSBjaGlwcyBmb3IgQW5kcm9pZCBMIGFuZCBhYm92ZS4KLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5T
REtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1AKLSAgICAgICAgJiYgZmluZERl
Y29kZXIoSDI2NF9NSU1FX1RZUEUsIG5ldyBTdHJpbmdbXSB7c3VwcG9ydGVkUWNvbUgyNjRIaWdo
UHJvZmlsZUh3Q29kZWNQcmVmaXh9KQotICAgICAgICAgICAgIT0gbnVsbCkgewotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIFN1cHBvcnQgSC4yNjQgSFAgZGVjb2Rpbmcgb24gRXh5
bm9zIGNoaXBzIGZvciBBbmRyb2lkIE0gYW5kIGFib3ZlLgotICAgIGlmIChCdWlsZC5WRVJTSU9O
LlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5NCi0gICAgICAgICYmIGZpbmREZWNvZGVy
KEgyNjRfTUlNRV9UWVBFLCBuZXcgU3RyaW5nW10ge3N1cHBvcnRlZEV4eW5vc0gyNjRIaWdoUHJv
ZmlsZUh3Q29kZWNQcmVmaXh9KQotICAgICAgICAgICAgIT0gbnVsbCkgewotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIC8vIFN1cHBvcnQgSC4yNjQgSFAgZGVjb2Rpbmcgb24gTWVkaWFU
ZWsgY2hpcHMgZm9yIEFuZHJvaWQgT19NUjEgYW5kIGFib3ZlCi0gICAgaWYgKFBlZXJDb25uZWN0
aW9uRmFjdG9yeS5maWVsZFRyaWFsc0ZpbmRGdWxsTmFtZSgiV2ViUlRDLU1lZGlhVGVrSDI2NCIp
LmVxdWFscygiRW5hYmxlZCIpCi0gICAgICAgICYmIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBC
dWlsZC5WRVJTSU9OX0NPREVTLk9fTVIxCi0gICAgICAgICYmIGZpbmREZWNvZGVyKEgyNjRfTUlN
RV9UWVBFLCBuZXcgU3RyaW5nW10ge3N1cHBvcnRlZE1lZGlhVGVrSDI2NEhpZ2hQcm9maWxlSHdD
b2RlY1ByZWZpeH0pCi0gICAgICAgICAgICAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHBy
aW50U3RhY2tUcmFjZSgpIHsKLSAgICBpZiAocnVubmluZ0luc3RhbmNlICE9IG51bGwgJiYgcnVu
bmluZ0luc3RhbmNlLm1lZGlhQ29kZWNUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFj
ZUVsZW1lbnRbXSBtZWRpYUNvZGVjU3RhY2tUcmFjZXMgPSBydW5uaW5nSW5zdGFuY2UubWVkaWFD
b2RlY1RocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAobWVkaWFDb2RlY1N0YWNrVHJh
Y2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk1lZGlhQ29kZWNWaWRl
b0RlY29kZXIgc3RhY2tzIHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50
IHN0YWNrVHJhY2UgOiBtZWRpYUNvZGVjU3RhY2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5n
LmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBmb3IgZmluZERlY29kZXIoKSBiZWxvdy4KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVjb2RlclByb3BlcnRpZXMgewotICAgIHB1YmxpYyBEZWNv
ZGVyUHJvcGVydGllcyhTdHJpbmcgY29kZWNOYW1lLCBpbnQgY29sb3JGb3JtYXQpIHsKLSAgICAg
IHRoaXMuY29kZWNOYW1lID0gY29kZWNOYW1lOwotICAgICAgdGhpcy5jb2xvckZvcm1hdCA9IGNv
bG9yRm9ybWF0OwotICAgIH0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGNvZGVjTmFtZTsgLy8g
T3Blbk1heCBjb21wb25lbnQgbmFtZSBmb3IgVlA4IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBp
bnQgY29sb3JGb3JtYXQ7IC8vIENvbG9yIGZvcm1hdCBzdXBwb3J0ZWQgYnkgY29kZWMuCi0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyBATnVsbGFibGUgRGVjb2RlclByb3BlcnRpZXMgZmluZERlY29k
ZXIoCi0gICAgICBTdHJpbmcgbWltZSwgU3RyaW5nW10gc3VwcG9ydGVkQ29kZWNQcmVmaXhlcykg
ewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJ
VEtBVCkgewotICAgICAgcmV0dXJuIG51bGw7IC8vIE1lZGlhQ29kZWMuc2V0UGFyYW1ldGVycyBp
cyBtaXNzaW5nLgotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiVHJ5aW5nIHRvIGZpbmQgSFcg
ZGVjb2RlciBmb3IgbWltZSAiICsgbWltZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNZWRp
YUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50KCk7ICsraSkgewotICAgICAgTWVkaWFDb2RlY0luZm8g
aW5mbyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBpbmZvID0gTWVkaWFDb2RlY0xpc3Qu
Z2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGRlY29kZXIg
Y29kZWMgaW5mbyIsIGUpOwotICAgICAgfQotICAgICAgaWYgKGluZm8gPT0gbnVsbCB8fCBpbmZv
LmlzRW5jb2RlcigpKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgU3RyaW5n
IG5hbWUgPSBudWxsOwotICAgICAgZm9yIChTdHJpbmcgbWltZVR5cGUgOiBpbmZvLmdldFN1cHBv
cnRlZFR5cGVzKCkpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlLmVxdWFscyhtaW1lKSkgewotICAg
ICAgICAgIG5hbWUgPSBpbmZvLmdldE5hbWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewotICAgICAgICBjb250aW51ZTsg
Ly8gTm8gSFcgc3VwcG9ydCBpbiB0aGlzIGNvZGVjOyB0cnkgdGhlIG5leHQgb25lLgotICAgICAg
fQotICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIGNhbmRpZGF0ZSBkZWNvZGVyICIgKyBuYW1l
KTsKLQotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBzdXBwb3J0ZWQgZGVjb2Rlci4KLSAgICAg
IGJvb2xlYW4gc3VwcG9ydGVkQ29kZWMgPSBmYWxzZTsKLSAgICAgIGZvciAoU3RyaW5nIGNvZGVj
UHJlZml4IDogc3VwcG9ydGVkQ29kZWNQcmVmaXhlcykgewotICAgICAgICBpZiAobmFtZS5zdGFy
dHNXaXRoKGNvZGVjUHJlZml4KSkgewotICAgICAgICAgIHN1cHBvcnRlZENvZGVjID0gdHJ1ZTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFzdXBwb3J0
ZWRDb2RlYykgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gQ2hlY2sg
aWYgY29kZWMgc3VwcG9ydHMgZWl0aGVyIHl1djQyMCBvciBudjEyLgotICAgICAgQ29kZWNDYXBh
YmlsaXRpZXMgY2FwYWJpbGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2FwYWJpbGl0aWVz
ID0gaW5mby5nZXRDYXBhYmlsaXRpZXNGb3JUeXBlKG1pbWUpOwotICAgICAgfSBjYXRjaCAoSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbm5v
dCByZXRyaWV2ZSBkZWNvZGVyIGNhcGFiaWxpdGllcyIsIGUpOwotICAgICAgICBjb250aW51ZTsK
LSAgICAgIH0KLSAgICAgIGZvciAoaW50IGNvbG9yRm9ybWF0IDogY2FwYWJpbGl0aWVzLmNvbG9y
Rm9ybWF0cykgewotICAgICAgICBMb2dnaW5nLnYoVEFHLCAiICAgQ29sb3I6IDB4IiArIEludGVn
ZXIudG9IZXhTdHJpbmcoY29sb3JGb3JtYXQpKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IHN1
cHBvcnRlZENvbG9yRm9ybWF0IDogc3VwcG9ydGVkQ29sb3JMaXN0KSB7Ci0gICAgICAgIGZvciAo
aW50IGNvZGVjQ29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRzKSB7Ci0gICAg
ICAgICAgaWYgKGNvZGVjQ29sb3JGb3JtYXQgPT0gc3VwcG9ydGVkQ29sb3JGb3JtYXQpIHsKLSAg
ICAgICAgICAgIC8vIEZvdW5kIHN1cHBvcnRlZCBIVyBkZWNvZGVyLgotICAgICAgICAgICAgTG9n
Z2luZy5kKFRBRywgIkZvdW5kIHRhcmdldCBkZWNvZGVyICIgKyBuYW1lICsgIi4gQ29sb3I6IDB4
IgotICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoY29kZWNDb2xvckZv
cm1hdCkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNvZGVyUHJvcGVydGllcyhuYW1lLCBj
b2RlY0NvbG9yRm9ybWF0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgTG9nZ2luZy5kKFRBRywgIk5vIEhXIGRlY29kZXIgZm91bmQgZm9yIG1pbWUgIiArIG1p
bWUpOwotICAgIHJldHVybiBudWxsOyAvLyBObyBIVyBkZWNvZGVyLgotICB9Ci0KLSAgQENhbGxl
ZEJ5TmF0aXZlCi0gIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIoKSB7fQotCi0gIHByaXZhdGUgdm9p
ZCBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24g
ewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkLmdldElkKCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJl
YWQoKS5nZXRJZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJN
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyIHByZXZpb3VzbHkgb3BlcmF0ZWQgb24gIgotICAgICAgICAg
ICsgbWVkaWFDb2RlY1RocmVhZCArICIgYnV0IGlzIG5vdyBjYWxsZWQgb24gIiArIFRocmVhZC5j
dXJyZW50VGhyZWFkKCkpOwotICAgIH0KLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZVVuY2hlY2tl
ZAotICBwcml2YXRlIGJvb2xlYW4gaW5pdERlY29kZShAVmlkZW9Db2RlY1R5cGUgaW50IHR5cGUs
IGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkICE9IG51
bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbml0RGVjb2RlOiBGb3Jn
b3QgdG8gcmVsZWFzZSgpPyIpOwotICAgIH0KLQotICAgIFN0cmluZyBtaW1lID0gbnVsbDsKLSAg
ICBTdHJpbmdbXSBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gbnVsbDsKLSAgICBpZiAodHlwZSA9
PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgpIHsKLSAgICAgIG1pbWUgPSBWUDhfTUlN
RV9UWVBFOwotICAgICAgc3VwcG9ydGVkQ29kZWNQcmVmaXhlcyA9IHN1cHBvcnRlZFZwOEh3Q29k
ZWNQcmVmaXhlcygpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURF
T19DT0RFQ19WUDkpIHsKLSAgICAgIG1pbWUgPSBWUDlfTUlNRV9UWVBFOwotICAgICAgc3VwcG9y
dGVkQ29kZWNQcmVmaXhlcyA9IHN1cHBvcnRlZFZwOUh3Q29kZWNQcmVmaXhlczsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfSDI2NCkgewotICAgICAg
bWltZSA9IEgyNjRfTUlNRV9UWVBFOwotICAgICAgc3VwcG9ydGVkQ29kZWNQcmVmaXhlcyA9IHN1
cHBvcnRlZEgyNjRId0NvZGVjUHJlZml4ZXMoKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oImluaXREZWNvZGU6IE5vbi1zdXBwb3J0ZWQgY29kZWMgIiAr
IHR5cGUpOwotICAgIH0KLSAgICBEZWNvZGVyUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gZmluZERl
Y29kZXIobWltZSwgc3VwcG9ydGVkQ29kZWNQcmVmaXhlcyk7Ci0gICAgaWYgKHByb3BlcnRpZXMg
PT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbm5vdCBmaW5k
IEhXIGRlY29kZXIgZm9yICIgKyB0eXBlKTsKLSAgICB9Ci0KLSAgICBMb2dnaW5nLmQoVEFHLAot
ICAgICAgICAiSmF2YSBpbml0RGVjb2RlOiAiICsgdHlwZSArICIgOiAiICsgd2lkdGggKyAiIHgg
IiArIGhlaWdodCArICIuIENvbG9yOiAweCIKLSAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0
cmluZyhwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0KSArICIuIFVzZSBTdXJmYWNlOiAiICsgdXNlU3Vy
ZmFjZSgpKTsKLQotICAgIHJ1bm5pbmdJbnN0YW5jZSA9IHRoaXM7IC8vIERlY29kZXIgaXMgbm93
IHJ1bm5pbmcgYW5kIGNhbiBiZSBxdWVyaWVkIGZvciBzdGFjayB0cmFjZXMuCi0gICAgbWVkaWFD
b2RlY1RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIHRo
aXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgc3Ry
aWRlID0gd2lkdGg7Ci0gICAgICBzbGljZUhlaWdodCA9IGhlaWdodDsKLQotICAgICAgaWYgKHVz
ZVN1cmZhY2UoKSkgewotICAgICAgICBATnVsbGFibGUKLSAgICAgICAgZmluYWwgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5j
cmVhdGUoCi0gICAgICAgICAgICAiRGVjb2RlciBTdXJmYWNlVGV4dHVyZUhlbHBlciIsIGVnbEJh
c2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgICAgIGlmIChzdXJmYWNlVGV4dHVyZUhlbHBl
ciAhPSBudWxsKSB7Ci0gICAgICAgICAgdGV4dHVyZUxpc3RlbmVyID0gbmV3IFRleHR1cmVMaXN0
ZW5lcihzdXJmYWNlVGV4dHVyZUhlbHBlcik7Ci0gICAgICAgICAgdGV4dHVyZUxpc3RlbmVyLnNl
dFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1
cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0KLSAgICAgIE1lZGlhRm9ybWF0IGZvcm1hdCA9IE1lZGlhRm9ybWF0LmNyZWF0ZVZpZGVv
Rm9ybWF0KG1pbWUsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgaWYgKCF1c2VTdXJmYWNlKCkpIHsK
LSAgICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCwg
cHJvcGVydGllcy5jb2xvckZvcm1hdCk7Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAi
ICBGb3JtYXQ6ICIgKyBmb3JtYXQpOwotICAgICAgbWVkaWFDb2RlYyA9IE1lZGlhQ29kZWNWaWRl
b0VuY29kZXIuY3JlYXRlQnlDb2RlY05hbWUocHJvcGVydGllcy5jb2RlY05hbWUpOwotICAgICAg
aWYgKG1lZGlhQ29kZWMgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FuIG5v
dCBjcmVhdGUgbWVkaWEgZGVjb2RlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgICBtZWRpYUNvZGVjLmNvbmZpZ3VyZShmb3JtYXQsIHN1cmZhY2UsIG51bGwsIDApOwot
ICAgICAgbWVkaWFDb2RlYy5zdGFydCgpOwotCi0gICAgICBjb2xvckZvcm1hdCA9IHByb3BlcnRp
ZXMuY29sb3JGb3JtYXQ7Ci0gICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRPdXRw
dXRCdWZmZXJzKCk7Ci0gICAgICBpbnB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldElucHV0QnVm
ZmVycygpOwotICAgICAgZGVjb2RlU3RhcnRUaW1lTXMuY2xlYXIoKTsKLSAgICAgIGhhc0RlY29k
ZWRGaXJzdEZyYW1lID0gZmFsc2U7Ci0gICAgICBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJz
LmNsZWFyKCk7Ci0gICAgICBkcm9wcGVkRnJhbWVzID0gMDsKLSAgICAgIExvZ2dpbmcuZChUQUcs
Ci0gICAgICAgICAgIklucHV0IGJ1ZmZlcnM6ICIgKyBpbnB1dEJ1ZmZlcnMubGVuZ3RoICsgIi4g
T3V0cHV0IGJ1ZmZlcnM6ICIgKyBvdXRwdXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgImluaXREZWNvZGUgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVzZXRzIHRoZSBkZWNvZGVyIHNvIGl0IGNhbiBzdGFydCBk
ZWNvZGluZyBmcmFtZXMgd2l0aCBuZXcgcmVzb2x1dGlvbi4KLSAgLy8gRmx1c2hlcyBNZWRpYUNv
ZGVjIGFuZCBjbGVhcnMgZGVjb2RlciBvdXRwdXQgYnVmZmVycy4KLSAgQENhbGxlZEJ5TmF0aXZl
VW5jaGVja2VkCi0gIHByaXZhdGUgdm9pZCByZXNldChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsK
LSAgICBpZiAobWVkaWFDb2RlY1RocmVhZCA9PSBudWxsIHx8IG1lZGlhQ29kZWMgPT0gbnVsbCkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXNldCBjYWxs
IGZvciBub24taW5pdGlhbGl6ZWQgZGVjb2Rlci4iKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRB
RywgIkphdmEgcmVzZXQ6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0KTsKLQotICAgIG1lZGlh
Q29kZWMuZmx1c2goKTsKLQotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdo
dCA9IGhlaWdodDsKLSAgICBpZiAodGV4dHVyZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgIHRl
eHR1cmVMaXN0ZW5lci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLSAgICBkZWNvZGVT
dGFydFRpbWVNcy5jbGVhcigpOwotICAgIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuY2xl
YXIoKTsKLSAgICBoYXNEZWNvZGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgIGRyb3BwZWRGcmFt
ZXMgPSAwOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlVW5jaGVja2VkCi0gIHByaXZhdGUgdm9p
ZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyLiBU
b3RhbCBudW1iZXIgb2YgZHJvcHBlZCBmcmFtZXM6ICIgKyBkcm9wcGVkRnJhbWVzKTsKLSAgICBj
aGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotCi0gICAgLy8gUnVuIE1lZGlhY29kZWMgc3RvcCgp
IGFuZCByZWxlYXNlKCkgb24gc2VwYXJhdGUgdGhyZWFkIHNpbmNlIHNvbWV0aW1lCi0gICAgLy8g
TWVkaWFjb2RlYy5zdG9wKCkgbWF5IGhhbmcuCi0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggcmVs
ZWFzZURvbmUgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0KLSAgICBSdW5uYWJsZSBydW5NZWRp
YUNvZGVjUmVsZWFzZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIik7Ci0gICAgICAgICAg
bWVkaWFDb2RlYy5zdG9wKCk7Ci0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlKCk7Ci0gICAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIgb24gcmVsZWFzZSB0aHJl
YWQgZG9uZSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgIExv
Z2dpbmcuZShUQUcsICJNZWRpYSBkZWNvZGVyIHJlbGVhc2UgZmFpbGVkIiwgZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmVsZWFzZURvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAg
ICBuZXcgVGhyZWFkKHJ1bk1lZGlhQ29kZWNSZWxlYXNlKS5zdGFydCgpOwotCi0gICAgaWYgKCFU
aHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShyZWxlYXNlRG9uZSwgTUVESUFfQ09ERUNf
UkVMRUFTRV9USU1FT1VUX01TKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGRlY29k
ZXIgcmVsZWFzZSB0aW1lb3V0Iik7Ci0gICAgICBjb2RlY0Vycm9ycysrOwotICAgICAgaWYgKGVy
cm9yQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW52b2tlIGNv
ZGVjIGVycm9yIGNhbGxiYWNrLiBFcnJvcnM6ICIgKyBjb2RlY0Vycm9ycyk7Ci0gICAgICAgIGVy
cm9yQ2FsbGJhY2sub25NZWRpYUNvZGVjVmlkZW9EZWNvZGVyQ3JpdGljYWxFcnJvcihjb2RlY0Vy
cm9ycyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgbWVkaWFDb2RlYyA9IG51bGw7Ci0gICAgbWVk
aWFDb2RlY1RocmVhZCA9IG51bGw7Ci0gICAgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgICBp
ZiAodXNlU3VyZmFjZSgpKSB7Ci0gICAgICBzdXJmYWNlLnJlbGVhc2UoKTsKLSAgICAgIHN1cmZh
Y2UgPSBudWxsOwotICAgICAgdGV4dHVyZUxpc3RlbmVyLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAg
TG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIgZG9uZSIpOwotICB9Ci0KLSAgLy8g
RGVxdWV1ZSBhbiBpbnB1dCBidWZmZXIgYW5kIHJldHVybiBpdHMgaW5kZXgsIC0xIGlmIG5vIGlu
cHV0IGJ1ZmZlciBpcwotICAvLyBhdmFpbGFibGUsIG9yIC0yIGlmIHRoZSBjb2RlYyBpcyBubyBs
b25nZXIgb3BlcmF0aXZlLgotICBAQ2FsbGVkQnlOYXRpdmVVbmNoZWNrZWQKLSAgcHJpdmF0ZSBp
bnQgZGVxdWV1ZUlucHV0QnVmZmVyKCkgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7
Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBtZWRpYUNvZGVjLmRlcXVldWVJbnB1dEJ1ZmZlcihE
RVFVRVVFX0lOUFVUX1RJTUVPVVQpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlv
biBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVxdWV1ZUludHB1dEJ1ZmZlciBmYWlsZWQi
LCBlKTsKLSAgICAgIHJldHVybiAtMjsKLSAgICB9Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmVV
bmNoZWNrZWQKLSAgcHJpdmF0ZSBib29sZWFuIHF1ZXVlSW5wdXRCdWZmZXIoaW50IGlucHV0QnVm
ZmVySW5kZXgsIGludCBzaXplLCBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtVXMsCi0gICAgICBs
b25nIHRpbWVTdGFtcE1zLCBsb25nIG50cFRpbWVTdGFtcCkgewotICAgIGNoZWNrT25NZWRpYUNv
ZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGlucHV0QnVmZmVyc1tpbnB1dEJ1ZmZlcklu
ZGV4XS5wb3NpdGlvbigwKTsKLSAgICAgIGlucHV0QnVmZmVyc1tpbnB1dEJ1ZmZlckluZGV4XS5s
aW1pdChzaXplKTsKLSAgICAgIGRlY29kZVN0YXJ0VGltZU1zLmFkZCgKLSAgICAgICAgICBuZXcg
VGltZVN0YW1wcyhTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSwgdGltZVN0YW1wTXMsIG50
cFRpbWVTdGFtcCkpOwotICAgICAgbWVkaWFDb2RlYy5xdWV1ZUlucHV0QnVmZmVyKGlucHV0QnVm
ZmVySW5kZXgsIDAsIHNpemUsIHByZXNlbnRhdGlvblRpbWVTdGFtVXMsIDApOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJkZWNvZGUgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGltZVN0YW1wcyB7Ci0gICAg
cHVibGljIFRpbWVTdGFtcHMobG9uZyBkZWNvZGVTdGFydFRpbWVNcywgbG9uZyB0aW1lU3RhbXBN
cywgbG9uZyBudHBUaW1lU3RhbXBNcykgewotICAgICAgdGhpcy5kZWNvZGVTdGFydFRpbWVNcyA9
IGRlY29kZVN0YXJ0VGltZU1zOwotICAgICAgdGhpcy50aW1lU3RhbXBNcyA9IHRpbWVTdGFtcE1z
OwotICAgICAgdGhpcy5udHBUaW1lU3RhbXBNcyA9IG50cFRpbWVTdGFtcE1zOwotICAgIH0KLSAg
ICAvLyBUaW1lIHdoZW4gdGhpcyBmcmFtZSB3YXMgcXVldWVkIGZvciBkZWNvZGluZy4KLSAgICBw
cml2YXRlIGZpbmFsIGxvbmcgZGVjb2RlU3RhcnRUaW1lTXM7Ci0gICAgLy8gT25seSB1c2VkIGZv
ciBib29ra2VlcGluZyBpbiBKYXZhLiBTdG9yZXMgQysrIGlucHV0SW1hZ2UuX3RpbWVTdGFtcCB2
YWx1ZSBmb3IgaW5wdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIHRpbWVTdGFtcE1z
OwotICAgIC8vIE9ubHkgdXNlZCBmb3IgYm9va2tlZXBpbmcgaW4gSmF2YS4gU3RvcmVzIEMrKyBp
bnB1dEltYWdlLm50cF90aW1lX21zXyB2YWx1ZSBmb3IgaW5wdXQgZnJhbWUuCi0gICAgcHJpdmF0
ZSBmaW5hbCBsb25nIG50cFRpbWVTdGFtcE1zOwotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBm
b3IgZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIGJlbG93LgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBE
ZWNvZGVkT3V0cHV0QnVmZmVyIHsKLSAgICBwdWJsaWMgRGVjb2RlZE91dHB1dEJ1ZmZlcihpbnQg
aW5kZXgsIGludCBvZmZzZXQsIGludCBzaXplLCBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1z
LAotICAgICAgICBsb25nIHRpbWVTdGFtcE1zLCBsb25nIG50cFRpbWVTdGFtcE1zLCBsb25nIGRl
Y29kZVRpbWUsIGxvbmcgZW5kRGVjb2RlVGltZSkgewotICAgICAgdGhpcy5pbmRleCA9IGluZGV4
OwotICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICB0aGlzLnNpemUgPSBzaXplOwot
ICAgICAgdGhpcy5wcmVzZW50YXRpb25UaW1lU3RhbXBNcyA9IHByZXNlbnRhdGlvblRpbWVTdGFt
cE1zOwotICAgICAgdGhpcy50aW1lU3RhbXBNcyA9IHRpbWVTdGFtcE1zOwotICAgICAgdGhpcy5u
dHBUaW1lU3RhbXBNcyA9IG50cFRpbWVTdGFtcE1zOwotICAgICAgdGhpcy5kZWNvZGVUaW1lTXMg
PSBkZWNvZGVUaW1lOwotICAgICAgdGhpcy5lbmREZWNvZGVUaW1lTXMgPSBlbmREZWNvZGVUaW1l
OwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgaW50IGluZGV4OwotICAgIHByaXZhdGUgZmlu
YWwgaW50IG9mZnNldDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIC8vIFByZXNl
bnRhdGlvbiB0aW1lc3RhbXAgcmV0dXJuZWQgaW4gZGVxdWV1ZU91dHB1dEJ1ZmZlciBjYWxsLgot
ICAgIHByaXZhdGUgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbXBNczsKLSAgICAvLyBD
KysgaW5wdXRJbWFnZS5fdGltZVN0YW1wIHZhbHVlIGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJp
dmF0ZSBmaW5hbCBsb25nIHRpbWVTdGFtcE1zOwotICAgIC8vIEMrKyBpbnB1dEltYWdlLm50cF90
aW1lX21zXyB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBu
dHBUaW1lU3RhbXBNczsKLSAgICAvLyBOdW1iZXIgb2YgbXMgaXQgdG9vayB0byBkZWNvZGUgdGhp
cyBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgZGVjb2RlVGltZU1zOwotICAgIC8vIFN5
c3RlbSB0aW1lIHdoZW4gdGhpcyBmcmFtZSBkZWNvZGluZyBmaW5pc2hlZC4KLSAgICBwcml2YXRl
IGZpbmFsIGxvbmcgZW5kRGVjb2RlVGltZU1zOwotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJEZWNv
ZGVkT3V0cHV0QnVmZmVyIikKLSAgICBpbnQgZ2V0SW5kZXgoKSB7Ci0gICAgICByZXR1cm4gaW5k
ZXg7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJEZWNvZGVkT3V0cHV0QnVmZmVyIikK
LSAgICBpbnQgZ2V0T2Zmc2V0KCkgewotICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICB9Ci0KLSAg
ICBAQ2FsbGVkQnlOYXRpdmUoIkRlY29kZWRPdXRwdXRCdWZmZXIiKQotICAgIGludCBnZXRTaXpl
KCkgewotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJE
ZWNvZGVkT3V0cHV0QnVmZmVyIikKLSAgICBsb25nIGdldFByZXNlbnRhdGlvblRpbWVzdGFtcE1z
KCkgewotICAgICAgcmV0dXJuIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgIH0KLQotICAg
IEBDYWxsZWRCeU5hdGl2ZSgiRGVjb2RlZE91dHB1dEJ1ZmZlciIpCi0gICAgbG9uZyBnZXRUaW1l
c3RhbXBNcygpIHsKLSAgICAgIHJldHVybiB0aW1lU3RhbXBNczsKLSAgICB9Ci0KLSAgICBAQ2Fs
bGVkQnlOYXRpdmUoIkRlY29kZWRPdXRwdXRCdWZmZXIiKQotICAgIGxvbmcgZ2V0TnRwVGltZXN0
YW1wTXMoKSB7Ci0gICAgICByZXR1cm4gbnRwVGltZVN0YW1wTXM7Ci0gICAgfQotCi0gICAgQENh
bGxlZEJ5TmF0aXZlKCJEZWNvZGVkT3V0cHV0QnVmZmVyIikKLSAgICBsb25nIGdldERlY29kZVRp
bWVNcygpIHsKLSAgICAgIHJldHVybiBkZWNvZGVUaW1lTXM7Ci0gICAgfQotICB9Ci0KLSAgLy8g
SGVscGVyIHN0cnVjdCBmb3IgZGVxdWV1ZVRleHR1cmVCdWZmZXIoKSBiZWxvdy4KLSAgcHJpdmF0
ZSBzdGF0aWMgY2xhc3MgRGVjb2RlZFRleHR1cmVCdWZmZXIgewotICAgIHByaXZhdGUgZmluYWwg
VmlkZW9GcmFtZS5CdWZmZXIgdmlkZW9GcmFtZUJ1ZmZlcjsKLSAgICAvLyBQcmVzZW50YXRpb24g
dGltZXN0YW1wIHJldHVybmVkIGluIGRlcXVldWVPdXRwdXRCdWZmZXIgY2FsbC4KLSAgICBwcml2
YXRlIGZpbmFsIGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0
SW1hZ2UuX3RpbWVTdGFtcCB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmlu
YWwgbG9uZyB0aW1lU3RhbXBNczsKLSAgICAvLyBDKysgaW5wdXRJbWFnZS5udHBfdGltZV9tc18g
dmFsdWUgZm9yIG91dHB1dCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbnRwVGltZVN0
YW1wTXM7Ci0gICAgLy8gTnVtYmVyIG9mIG1zIGl0IHRvb2sgdG8gZGVjb2RlIHRoaXMgZnJhbWUu
Ci0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIGRlY29kZVRpbWVNczsKLSAgICAvLyBJbnRlcnZhbCBm
cm9tIHdoZW4gdGhlIGZyYW1lIGZpbmlzaGVkIGRlY29kaW5nIHVudGlsIHRoaXMgYnVmZmVyIGhh
cyBiZWVuIGNyZWF0ZWQuCi0gICAgLy8gU2luY2UgdGhlcmUgaXMgb25seSBvbmUgdGV4dHVyZSwg
dGhpcyBpbnRlcnZhbCBkZXBlbmQgb24gdGhlIHRpbWUgZnJvbSB3aGVuCi0gICAgLy8gYSBmcmFt
ZSBpcyBkZWNvZGVkIGFuZCBwcm92aWRlZCB0byBDKysgYW5kIHVudGlsIHRoYXQgZnJhbWUgaXMg
cmV0dXJuZWQgdG8gdGhlIE1lZGlhQ29kZWMKLSAgICAvLyBzbyB0aGF0IHRoZSB0ZXh0dXJlIGNh
biBiZSB1cGRhdGVkIHdpdGggdGhlIG5leHQgZGVjb2RlZCBmcmFtZS4KLSAgICBwcml2YXRlIGZp
bmFsIGxvbmcgZnJhbWVEZWxheU1zOwotCi0gICAgLy8gQSBEZWNvZGVkVGV4dHVyZUJ1ZmZlciB3
aXRoIHplcm8gfHRleHR1cmVJRHwgaGFzIHNwZWNpYWwgbWVhbmluZyBhbmQgcmVwcmVzZW50cyBh
IGZyYW1lCi0gICAgLy8gdGhhdCB3YXMgZHJvcHBlZC4KLSAgICBwdWJsaWMgRGVjb2RlZFRleHR1
cmVCdWZmZXIoVmlkZW9GcmFtZS5CdWZmZXIgdmlkZW9GcmFtZUJ1ZmZlciwgbG9uZyBwcmVzZW50
YXRpb25UaW1lU3RhbXBNcywKLSAgICAgICAgbG9uZyB0aW1lU3RhbXBNcywgbG9uZyBudHBUaW1l
U3RhbXBNcywgbG9uZyBkZWNvZGVUaW1lTXMsIGxvbmcgZnJhbWVEZWxheSkgewotICAgICAgdGhp
cy52aWRlb0ZyYW1lQnVmZmVyID0gdmlkZW9GcmFtZUJ1ZmZlcjsKLSAgICAgIHRoaXMucHJlc2Vu
dGF0aW9uVGltZVN0YW1wTXMgPSBwcmVzZW50YXRpb25UaW1lU3RhbXBNczsKLSAgICAgIHRoaXMu
dGltZVN0YW1wTXMgPSB0aW1lU3RhbXBNczsKLSAgICAgIHRoaXMubnRwVGltZVN0YW1wTXMgPSBu
dHBUaW1lU3RhbXBNczsKLSAgICAgIHRoaXMuZGVjb2RlVGltZU1zID0gZGVjb2RlVGltZU1zOwot
ICAgICAgdGhpcy5mcmFtZURlbGF5TXMgPSBmcmFtZURlbGF5OwotICAgIH0KLQotICAgIEBDYWxs
ZWRCeU5hdGl2ZSgiRGVjb2RlZFRleHR1cmVCdWZmZXIiKQotICAgIFZpZGVvRnJhbWUuQnVmZmVy
IGdldFZpZGVvRnJhbWVCdWZmZXIoKSB7Ci0gICAgICByZXR1cm4gdmlkZW9GcmFtZUJ1ZmZlcjsK
LSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkRlY29kZWRUZXh0dXJlQnVmZmVyIikKLSAg
ICBsb25nIGdldFByZXNlbnRhdGlvblRpbWVzdGFtcE1zKCkgewotICAgICAgcmV0dXJuIHByZXNl
bnRhdGlvblRpbWVTdGFtcE1zOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiRGVjb2Rl
ZFRleHR1cmVCdWZmZXIiKQotICAgIGxvbmcgZ2V0VGltZVN0YW1wTXMoKSB7Ci0gICAgICByZXR1
cm4gdGltZVN0YW1wTXM7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJEZWNvZGVkVGV4
dHVyZUJ1ZmZlciIpCi0gICAgbG9uZyBnZXROdHBUaW1lc3RhbXBNcygpIHsKLSAgICAgIHJldHVy
biBudHBUaW1lU3RhbXBNczsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkRlY29kZWRU
ZXh0dXJlQnVmZmVyIikKLSAgICBsb25nIGdldERlY29kZVRpbWVNcygpIHsKLSAgICAgIHJldHVy
biBkZWNvZGVUaW1lTXM7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJEZWNvZGVkVGV4
dHVyZUJ1ZmZlciIpCi0gICAgbG9uZyBnZXRGcmFtZURlbGF5TXMoKSB7Ci0gICAgICByZXR1cm4g
ZnJhbWVEZWxheU1zOwotICAgIH0KLSAgfQotCi0gIC8vIFBvbGwgYmFzZWQgdGV4dHVyZSBsaXN0
ZW5lci4KLSAgcHJpdmF0ZSBjbGFzcyBUZXh0dXJlTGlzdGVuZXIgaW1wbGVtZW50cyBWaWRlb1Np
bmsgewotICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1
cmVIZWxwZXI7Ci0gICAgLy8gfG5ld0ZyYW1lTG9ja3wgaXMgdXNlZCB0byBzeW5jaHJvbml6ZSBh
cnJpdmFsIG9mIG5ldyBmcmFtZXMgd2l0aCB3YWl0KCkvbm90aWZ5QWxsKCkuCi0gICAgcHJpdmF0
ZSBmaW5hbCBPYmplY3QgbmV3RnJhbWVMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIC8vIHxidWZm
ZXJUb1JlbmRlcnwgaXMgbm9uLW51bGwgd2hlbiB3YWl0aW5nIGZvciB0cmFuc2l0aW9uIGJldHdl
ZW4gYWRkQnVmZmVyVG9SZW5kZXIoKSB0bwotICAgIC8vIG9uRnJhbWUoKS4KLSAgICBATnVsbGFi
bGUgcHJpdmF0ZSBEZWNvZGVkT3V0cHV0QnVmZmVyIGJ1ZmZlclRvUmVuZGVyOwotICAgIEBOdWxs
YWJsZSBwcml2YXRlIERlY29kZWRUZXh0dXJlQnVmZmVyIHJlbmRlcmVkQnVmZmVyOwotCi0gICAg
cHVibGljIFRleHR1cmVMaXN0ZW5lcihTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVy
ZUhlbHBlcikgewotICAgICAgdGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0
dXJlSGVscGVyOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcodGhp
cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkQnVmZmVyVG9SZW5kZXIoRGVjb2RlZE91
dHB1dEJ1ZmZlciBidWZmZXIpIHsKLSAgICAgIGlmIChidWZmZXJUb1JlbmRlciAhPSBudWxsKSB7
Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJVbmV4cGVjdGVkIGFkZEJ1ZmZlclRvUmVuZGVyKCkg
Y2FsbGVkIHdoaWxlIHdhaXRpbmcgZm9yIGEgdGV4dHVyZS4iKTsKLSAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV2FpdGluZyBmb3IgYSB0ZXh0dXJlLiIpOwotICAgICAg
fQotICAgICAgYnVmZmVyVG9SZW5kZXIgPSBidWZmZXI7Ci0gICAgfQotCi0gICAgcHVibGljIGJv
b2xlYW4gaXNXYWl0aW5nRm9yVGV4dHVyZSgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJh
bWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiBidWZmZXJUb1JlbmRlciAhPSBudWxsOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSB7Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zZXRUZXh0dXJlU2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKLSAgICB9Ci0KLSAgICAvLyBDYWxsYmFjayBmcm9tIHxzdXJmYWNlVGV4dHVyZUhlbHBl
cnwuIE1heSBiZSBjYWxsZWQgb24gYW4gYXJiaXRyYXJ5IHRocmVhZC4KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvbkZyYW1lKFZpZGVvRnJhbWUgZnJhbWUpIHsKLSAgICAgIHN5bmNo
cm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlZEJ1ZmZlciAhPSBu
dWxsKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIlVuZXhwZWN0ZWQgb25GcmFtZSgpIGNh
bGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgYSB0ZXh0dXJlLiIpOwotICAgICAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFscmVhZHkgaG9sZGluZyBhIHRleHR1cmUuIik7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gfHRpbWVzdGFtcE5zfCBpcyBhbHdheXMgemVybyBvbiBz
b21lIEFuZHJvaWQgdmVyc2lvbnMuCi0gICAgICAgIGZpbmFsIFZpZGVvRnJhbWUuQnVmZmVyIGJ1
ZmZlciA9IGZyYW1lLmdldEJ1ZmZlcigpOwotICAgICAgICBidWZmZXIucmV0YWluKCk7Ci0gICAg
ICAgIHJlbmRlcmVkQnVmZmVyID0gbmV3IERlY29kZWRUZXh0dXJlQnVmZmVyKGJ1ZmZlciwgYnVm
ZmVyVG9SZW5kZXIucHJlc2VudGF0aW9uVGltZVN0YW1wTXMsCi0gICAgICAgICAgICBidWZmZXJU
b1JlbmRlci50aW1lU3RhbXBNcywgYnVmZmVyVG9SZW5kZXIubnRwVGltZVN0YW1wTXMsIGJ1ZmZl
clRvUmVuZGVyLmRlY29kZVRpbWVNcywKLSAgICAgICAgICAgIFN5c3RlbUNsb2NrLmVsYXBzZWRS
ZWFsdGltZSgpIC0gYnVmZmVyVG9SZW5kZXIuZW5kRGVjb2RlVGltZU1zKTsKLSAgICAgICAgYnVm
ZmVyVG9SZW5kZXIgPSBudWxsOwotICAgICAgICBuZXdGcmFtZUxvY2subm90aWZ5QWxsKCk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVxdWV1ZXMgYW5kIHJldHVybnMgYSBEZWNvZGVkVGV4
dHVyZUJ1ZmZlciBpZiBhdmFpbGFibGUsIG9yIG51bGwgb3RoZXJ3aXNlLgotICAgIEBOdWxsYWJs
ZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJXYWl0Tm90SW5Mb29wIikKLSAgICBwdWJsaWMgRGVj
b2RlZFRleHR1cmVCdWZmZXIgZGVxdWV1ZVRleHR1cmVCdWZmZXIoaW50IHRpbWVvdXRNcykgewot
ICAgICAgc3luY2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlcmVk
QnVmZmVyID09IG51bGwgJiYgdGltZW91dE1zID4gMCAmJiBpc1dhaXRpbmdGb3JUZXh0dXJlKCkp
IHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgbmV3RnJhbWVMb2NrLndhaXQodGltZW91
dE1zKTsKLSAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbnRlcnJ1cHRlZCBzdGF0dXMgYnkgcmVpbnRlcnJ1cHRp
bmcgdGhlIHRocmVhZC4KLSAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJy
dXB0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIERlY29kZWRUZXh0dXJlQnVm
ZmVyIHJldHVybmVkQnVmZmVyID0gcmVuZGVyZWRCdWZmZXI7Ci0gICAgICAgIHJlbmRlcmVkQnVm
ZmVyID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIHJldHVybmVkQnVmZmVyOwotICAgICAgfQotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICAvLyBTdXJmYWNlVGV4dHVy
ZUhlbHBlci5zdG9wTGlzdGVuaW5nKCkgd2lsbCBibG9jayB1bnRpbCBhbnkgb25GcmFtZSgpIGlu
IHByb2dyZXNzIGlzIGRvbmUuCi0gICAgICAvLyBUaGVyZWZvcmUsIHRoZSBjYWxsIG11c3QgYmUg
b3V0c2lkZSBhbnkgc3luY2hyb25pemVkIHN0YXRlbWVudCB0aGF0IGlzIGFsc28gdXNlZCBpbiB0
aGUKLSAgICAgIC8vIG9uRnJhbWUoKSBhYm92ZSB0byBhdm9pZCBkZWFkbG9ja3MuCi0gICAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KG5ld0ZyYW1lTG9jaykgewotICAgICAgICBpZiAocmVuZGVyZWRCdWZmZXIgIT0gbnVsbCkgewot
ICAgICAgICAgIHJlbmRlcmVkQnVmZmVyLmdldFZpZGVvRnJhbWVCdWZmZXIoKS5yZWxlYXNlKCk7
Ci0gICAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8g
UmV0dXJucyBudWxsIGlmIG5vIGRlY29kZWQgYnVmZmVyIGlzIGF2YWlsYWJsZSwgYW5kIG90aGVy
d2lzZSBhIERlY29kZWRCeXRlQnVmZmVyLgotICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0
aW9uIGlmIGNhbGwgaXMgbWFkZSBvbiB0aGUgd3JvbmcgdGhyZWFkLCBpZiBjb2xvciBmb3JtYXQg
Y2hhbmdlcyB0byBhbgotICAvLyB1bnN1cHBvcnRlZCBmb3JtYXQsIG9yIGlmIHxtZWRpYUNvZGVj
fCBpcyBub3QgaW4gdGhlIEV4ZWN1dGluZyBzdGF0ZS4gVGhyb3dzIENvZGVjRXhjZXB0aW9uCi0g
IC8vIHVwb24gY29kZWMgZXJyb3IuCi0gIEBDYWxsZWRCeU5hdGl2ZVVuY2hlY2tlZAotICBwcml2
YXRlIEBOdWxsYWJsZSBEZWNvZGVkT3V0cHV0QnVmZmVyIGRlcXVldWVPdXRwdXRCdWZmZXIoaW50
IGRlcXVldWVUaW1lb3V0TXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAg
IGlmIChkZWNvZGVTdGFydFRpbWVNcy5pc0VtcHR5KCkpIHsKLSAgICAgIHJldHVybiBudWxsOwot
ICAgIH0KLSAgICAvLyBEcmFpbiB0aGUgZGVjb2RlciB1bnRpbCByZWNlaXZpbmcgYSBkZWNvZGVk
IGJ1ZmZlciBvciBoaXR0aW5nCi0gICAgLy8gTWVkaWFDb2RlYy5JTkZPX1RSWV9BR0FJTl9MQVRF
Ui4KLSAgICBmaW5hbCBNZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9IG5ldyBNZWRpYUNvZGVj
LkJ1ZmZlckluZm8oKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgZmluYWwgaW50IHJlc3Vs
dCA9Ci0gICAgICAgICAgbWVkaWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIFRpbWVV
bml0Lk1JTExJU0VDT05EUy50b01pY3JvcyhkZXF1ZXVlVGltZW91dE1zKSk7Ci0gICAgICBzd2l0
Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfQlVGRkVS
U19DSEFOR0VEOgotICAgICAgICAgIG91dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1
dEJ1ZmZlcnMoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRGVjb2RlciBvdXRwdXQgYnVm
ZmVycyBjaGFuZ2VkOiAiICsgb3V0cHV0QnVmZmVycy5sZW5ndGgpOwotICAgICAgICAgIGlmICho
YXNEZWNvZGVkRmlyc3RGcmFtZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIlVuZXhwZWN0ZWQgb3V0cHV0IGJ1ZmZlciBjaGFuZ2UgZXZlbnQuIik7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5GT19PVVRQ
VVRfRk9STUFUX0NIQU5HRUQ6Ci0gICAgICAgICAgTWVkaWFGb3JtYXQgZm9ybWF0ID0gbWVkaWFD
b2RlYy5nZXRPdXRwdXRGb3JtYXQoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRGVjb2Rl
ciBmb3JtYXQgY2hhbmdlZDogIiArIGZvcm1hdC50b1N0cmluZygpKTsKLSAgICAgICAgICBmaW5h
bCBpbnQgbmV3V2lkdGg7Ci0gICAgICAgICAgZmluYWwgaW50IG5ld0hlaWdodDsKLSAgICAgICAg
ICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KEZPUk1BVF9LRVlfQ1JPUF9MRUZUKSAmJiBmb3JtYXQu
Y29udGFpbnNLZXkoRk9STUFUX0tFWV9DUk9QX1JJR0hUKQotICAgICAgICAgICAgICAmJiBmb3Jt
YXQuY29udGFpbnNLZXkoRk9STUFUX0tFWV9DUk9QX0JPVFRPTSkKLSAgICAgICAgICAgICAgJiYg
Zm9ybWF0LmNvbnRhaW5zS2V5KEZPUk1BVF9LRVlfQ1JPUF9UT1ApKSB7Ci0gICAgICAgICAgICBu
ZXdXaWR0aCA9IDEgKyBmb3JtYXQuZ2V0SW50ZWdlcihGT1JNQVRfS0VZX0NST1BfUklHSFQpCi0g
ICAgICAgICAgICAgICAgLSBmb3JtYXQuZ2V0SW50ZWdlcihGT1JNQVRfS0VZX0NST1BfTEVGVCk7
Ci0gICAgICAgICAgICBuZXdIZWlnaHQgPSAxICsgZm9ybWF0LmdldEludGVnZXIoRk9STUFUX0tF
WV9DUk9QX0JPVFRPTSkKLSAgICAgICAgICAgICAgICAtIGZvcm1hdC5nZXRJbnRlZ2VyKEZPUk1B
VF9LRVlfQ1JPUF9UT1ApOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdXaWR0
aCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9XSURUSCk7Ci0gICAgICAgICAg
ICBuZXdIZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSEVJR0hUKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGhhc0RlY29kZWRGaXJzdEZyYW1lICYmIChuZXdX
aWR0aCAhPSB3aWR0aCB8fCBuZXdIZWlnaHQgIT0gaGVpZ2h0KSkgewotICAgICAgICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2l6ZSBjaGFuZ2UuIENvbmZpZ3Vy
ZWQgIiArIHdpZHRoICsgIioiICsgaGVpZ2h0Ci0gICAgICAgICAgICAgICAgKyAiLiBOZXcgIiAr
IG5ld1dpZHRoICsgIioiICsgbmV3SGVpZ2h0KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgd2lk
dGggPSBuZXdXaWR0aDsKLSAgICAgICAgICBoZWlnaHQgPSBuZXdIZWlnaHQ7Ci0gICAgICAgICAg
aWYgKHRleHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlTGlzdGVu
ZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAo
IXVzZVN1cmZhY2UoKSAmJiBmb3JtYXQuY29udGFpbnNLZXkoTWVkaWFGb3JtYXQuS0VZX0NPTE9S
X0ZPUk1BVCkpIHsKLSAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gZm9ybWF0LmdldEludGVnZXIo
TWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCk7Ci0gICAgICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiQ29sb3I6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoY29sb3JGb3JtYXQpKTsKLSAgICAg
ICAgICAgIGlmICghc3VwcG9ydGVkQ29sb3JMaXN0LmNvbnRhaW5zKGNvbG9yRm9ybWF0KSkgewot
ICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJOb24gc3VwcG9y
dGVkIGNvbG9yIGZvcm1hdDogIiArIGNvbG9yRm9ybWF0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgICAgaWYgKGZvcm1hdC5jb250YWluc0tleShGT1JNQVRfS0VZX1NUUklE
RSkpIHsKLSAgICAgICAgICAgIHN0cmlkZSA9IGZvcm1hdC5nZXRJbnRlZ2VyKEZPUk1BVF9LRVlf
U1RSSURFKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZvcm1hdC5jb250YWluc0tleShG
T1JNQVRfS0VZX1NMSUNFX0hFSUdIVCkpIHsKLSAgICAgICAgICAgIHNsaWNlSGVpZ2h0ID0gZm9y
bWF0LmdldEludGVnZXIoRk9STUFUX0tFWV9TTElDRV9IRUlHSFQpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRnJhbWUgc3RyaWRlIGFuZCBzbGljZSBoZWlnaHQ6ICIg
KyBzdHJpZGUgKyAiIHggIiArIHNsaWNlSGVpZ2h0KTsKLSAgICAgICAgICBzdHJpZGUgPSBNYXRo
Lm1heCh3aWR0aCwgc3RyaWRlKTsKLSAgICAgICAgICBzbGljZUhlaWdodCA9IE1hdGgubWF4KGhl
aWdodCwgc2xpY2VIZWlnaHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlh
Q29kZWMuSU5GT19UUllfQUdBSU5fTEFURVI6Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgaGFzRGVjb2RlZEZpcnN0RnJhbWUgPSB0cnVlOwotICAg
ICAgICAgIFRpbWVTdGFtcHMgdGltZVN0YW1wcyA9IGRlY29kZVN0YXJ0VGltZU1zLnJlbW92ZSgp
OwotICAgICAgICAgIGxvbmcgZGVjb2RlVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0
aW1lKCkgLSB0aW1lU3RhbXBzLmRlY29kZVN0YXJ0VGltZU1zOwotICAgICAgICAgIGlmIChkZWNv
ZGVUaW1lTXMgPiBNQVhfREVDT0RFX1RJTUVfTVMpIHsKLSAgICAgICAgICAgIExvZ2dpbmcuZShU
QUcsICJWZXJ5IGhpZ2ggZGVjb2RlIHRpbWU6ICIgKyBkZWNvZGVUaW1lTXMgKyAibXMiCi0gICAg
ICAgICAgICAgICAgICAgICsgIi4gUSBzaXplOiAiICsgZGVjb2RlU3RhcnRUaW1lTXMuc2l6ZSgp
Ci0gICAgICAgICAgICAgICAgICAgICsgIi4gTWlnaHQgYmUgY2F1c2VkIGJ5IHJlc3VtaW5nIEgy
NjQgZGVjb2RpbmcgYWZ0ZXIgYSBwYXVzZS4iKTsKLSAgICAgICAgICAgIGRlY29kZVRpbWVNcyA9
IE1BWF9ERUNPREVfVElNRV9NUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG5ldyBE
ZWNvZGVkT3V0cHV0QnVmZmVyKHJlc3VsdCwgaW5mby5vZmZzZXQsIGluZm8uc2l6ZSwKLSAgICAg
ICAgICAgICAgVGltZVVuaXQuTUlDUk9TRUNPTkRTLnRvTWlsbGlzKGluZm8ucHJlc2VudGF0aW9u
VGltZVVzKSwgdGltZVN0YW1wcy50aW1lU3RhbXBNcywKLSAgICAgICAgICAgICAgdGltZVN0YW1w
cy5udHBUaW1lU3RhbXBNcywgZGVjb2RlVGltZU1zLCBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRp
bWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyBudWxsIGlmIG5vIGRl
Y29kZWQgYnVmZmVyIGlzIGF2YWlsYWJsZSwgYW5kIG90aGVyd2lzZSBhIERlY29kZWRUZXh0dXJl
QnVmZmVyLgotICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGNhbGwgaXMgbWFk
ZSBvbiB0aGUgd3JvbmcgdGhyZWFkLCBpZiBjb2xvciBmb3JtYXQgY2hhbmdlcyB0byBhbgotICAv
LyB1bnN1cHBvcnRlZCBmb3JtYXQsIG9yIGlmIHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4
ZWN1dGluZyBzdGF0ZS4gVGhyb3dzIENvZGVjRXhjZXB0aW9uCi0gIC8vIHVwb24gY29kZWMgZXJy
b3IuIElmIHxkZXF1ZXVlVGltZW91dE1zfCA+IDAsIHRoZSBvbGRlc3QgZGVjb2RlZCBmcmFtZSB3
aWxsIGJlIGRyb3BwZWQgaWYKLSAgLy8gYSBmcmFtZSBjYW4ndCBiZSByZXR1cm5lZC4KLSAgQENh
bGxlZEJ5TmF0aXZlVW5jaGVja2VkCi0gIHByaXZhdGUgQE51bGxhYmxlIERlY29kZWRUZXh0dXJl
QnVmZmVyIGRlcXVldWVUZXh0dXJlQnVmZmVyKGludCBkZXF1ZXVlVGltZW91dE1zKSB7Ci0gICAg
Y2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBpZiAoIXVzZVN1cmZhY2UoKSkgewotICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZGVxdWV1ZVRleHR1cmUoKSBjYWxs
ZWQgZm9yIGJ5dGUgYnVmZmVyIGRlY29kaW5nLiIpOwotICAgIH0KLSAgICBEZWNvZGVkT3V0cHV0
QnVmZmVyIG91dHB1dEJ1ZmZlciA9IGRlcXVldWVPdXRwdXRCdWZmZXIoZGVxdWV1ZVRpbWVvdXRN
cyk7Ci0gICAgaWYgKG91dHB1dEJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICBkZXF1ZXVlZFN1cmZh
Y2VPdXRwdXRCdWZmZXJzLmFkZChvdXRwdXRCdWZmZXIpOwotICAgIH0KLQotICAgIE1heWJlUmVu
ZGVyRGVjb2RlZFRleHR1cmVCdWZmZXIoKTsKLSAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyB0ZXh0
dXJlIHJlYWR5IG5vdyBieSB3YWl0aW5nIG1heCB8ZGVxdWV1ZVRpbWVvdXRNc3wuCi0gICAgRGVj
b2RlZFRleHR1cmVCdWZmZXIgcmVuZGVyZWRCdWZmZXIgPSB0ZXh0dXJlTGlzdGVuZXIuZGVxdWV1
ZVRleHR1cmVCdWZmZXIoZGVxdWV1ZVRpbWVvdXRNcyk7Ci0gICAgaWYgKHJlbmRlcmVkQnVmZmVy
ICE9IG51bGwpIHsKLSAgICAgIE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZmZXIoKTsKLSAg
ICAgIHJldHVybiByZW5kZXJlZEJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoKGRlcXVldWVkU3Vy
ZmFjZU91dHB1dEJ1ZmZlcnMuc2l6ZSgpCi0gICAgICAgICAgICAgICAgPj0gTWF0aC5taW4oTUFY
X1FVRVVFRF9PVVRQVVRCVUZGRVJTLCBvdXRwdXRCdWZmZXJzLmxlbmd0aCkKLSAgICAgICAgICAg
IHx8IChkZXF1ZXVlVGltZW91dE1zID4gMCAmJiAhZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVy
cy5pc0VtcHR5KCkpKSkgewotICAgICAgKytkcm9wcGVkRnJhbWVzOwotICAgICAgLy8gRHJvcCB0
aGUgb2xkZXN0IGZyYW1lIHN0aWxsIGluIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuCi0g
ICAgICAvLyBUaGUgb2xkZXN0IGZyYW1lIGlzIG93bmVkIGJ5IHx0ZXh0dXJlTGlzdGVuZXJ8IGFu
ZCBjYW4ndCBiZSBkcm9wcGVkIHNpbmNlCi0gICAgICAvLyBtZWRpYUNvZGVjLnJlbGVhc2VPdXRw
dXRCdWZmZXIgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCi0gICAgICBmaW5hbCBEZWNvZGVkT3V0
cHV0QnVmZmVyIGRyb3BwZWRGcmFtZSA9IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMucmVt
b3ZlKCk7Ci0gICAgICBpZiAoZGVxdWV1ZVRpbWVvdXRNcyA+IDApIHsKLSAgICAgICAgLy8gVE9E
TyhwZXJraik6IFJlLWFkZCB0aGUgYmVsb3cgbG9nIHdoZW4gVmlkZW9SZW5kZXJHVUkgaGFzIGJl
ZW4gcmVtb3ZlZCBvciBmaXhlZCB0bwotICAgICAgICAvLyByZXR1cm4gdGhlIG9uZSBhbmQgb25s
eSB0ZXh0dXJlIGV2ZW4gaWYgaXQgZG9lcyBub3QgcmVuZGVyLgotICAgICAgICBMb2dnaW5nLnco
VEFHLCAiRHJhaW5pbmcgZGVjb2Rlci4gRHJvcHBpbmcgZnJhbWUgd2l0aCBUUzogIgotICAgICAg
ICAgICAgICAgICsgZHJvcHBlZEZyYW1lLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zICsgIi4gVG90
YWwgbnVtYmVyIG9mIGRyb3BwZWQgZnJhbWVzOiAiCi0gICAgICAgICAgICAgICAgKyBkcm9wcGVk
RnJhbWVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJUb28gbWFu
eSBvdXRwdXQgYnVmZmVycyAiICsgZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5zaXplKCkK
LSAgICAgICAgICAgICAgICArICIuIERyb3BwaW5nIGZyYW1lIHdpdGggVFM6ICIgKyBkcm9wcGVk
RnJhbWUucHJlc2VudGF0aW9uVGltZVN0YW1wTXMKLSAgICAgICAgICAgICAgICArICIuIFRvdGFs
IG51bWJlciBvZiBkcm9wcGVkIGZyYW1lczogIiArIGRyb3BwZWRGcmFtZXMpOwotICAgICAgfQot
Ci0gICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoZHJvcHBlZEZyYW1lLmluZGV4
LCBmYWxzZSAvKiByZW5kZXIgKi8pOwotICAgICAgcmV0dXJuIG5ldyBEZWNvZGVkVGV4dHVyZUJ1
ZmZlcihudWxsIC8qIHZpZGVvRnJhbWVCdWZmZXIgKi8sCi0gICAgICAgICAgZHJvcHBlZEZyYW1l
LnByZXNlbnRhdGlvblRpbWVTdGFtcE1zLCBkcm9wcGVkRnJhbWUudGltZVN0YW1wTXMsCi0gICAg
ICAgICAgZHJvcHBlZEZyYW1lLm50cFRpbWVTdGFtcE1zLCBkcm9wcGVkRnJhbWUuZGVjb2RlVGlt
ZU1zLAotICAgICAgICAgIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gZHJvcHBlZEZy
YW1lLmVuZERlY29kZVRpbWVNcyk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZmZXIoKSB7Ci0gICAgaWYg
KGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuaXNFbXB0eSgpIHx8IHRleHR1cmVMaXN0ZW5l
ci5pc1dhaXRpbmdGb3JUZXh0dXJlKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8g
R2V0IHRoZSBmaXJzdCBmcmFtZSBpbiB0aGUgcXVldWUgYW5kIHJlbmRlciB0byB0aGUgZGVjb2Rl
ciBvdXRwdXQgc3VyZmFjZS4KLSAgICBmaW5hbCBEZWNvZGVkT3V0cHV0QnVmZmVyIGJ1ZmZlciA9
IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMucmVtb3ZlKCk7Ci0gICAgdGV4dHVyZUxpc3Rl
bmVyLmFkZEJ1ZmZlclRvUmVuZGVyKGJ1ZmZlcik7Ci0gICAgbWVkaWFDb2RlYy5yZWxlYXNlT3V0
cHV0QnVmZmVyKGJ1ZmZlci5pbmRleCwgdHJ1ZSAvKiByZW5kZXIgKi8pOwotICB9Ci0KLSAgLy8g
UmVsZWFzZSBhIGRlcXVldWVkIG91dHB1dCBieXRlIGJ1ZmZlciBiYWNrIHRvIHRoZSBjb2RlYyBm
b3IgcmUtdXNlLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZm9yCi0gIC8vIG5vbi1zdXJmYWNlIGRl
Y29kaW5nLgotICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBjYWxsIGlz
IG1hZGUgb24gdGhlIHdyb25nIHRocmVhZCwgaWYgY29kZWMgaXMgY29uZmlndXJlZAotICAvLyBm
b3Igc3VyZmFjZSBkZWNvZGluZywgb3IgaWYgfG1lZGlhQ29kZWN8IGlzIG5vdCBpbiB0aGUgRXhl
Y3V0aW5nIHN0YXRlLiBUaHJvd3MKLSAgLy8gTWVkaWFDb2RlYy5Db2RlY0V4Y2VwdGlvbiB1cG9u
IGNvZGVjIGVycm9yLgotICBAQ2FsbGVkQnlOYXRpdmVVbmNoZWNrZWQKLSAgcHJpdmF0ZSB2b2lk
IHJldHVybkRlY29kZWRPdXRwdXRCdWZmZXIoaW50IGluZGV4KQotICAgICAgdGhyb3dzIElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbiwgTWVkaWFDb2RlYy5Db2RlY0V4Y2VwdGlvbiB7Ci0gICAgY2hlY2tP
bk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBpZiAodXNlU3VyZmFjZSgpKSB7Ci0gICAgICB0aHJv
dyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJyZXR1cm5EZWNvZGVkT3V0cHV0QnVmZmVyKCkg
Y2FsbGVkIGZvciBzdXJmYWNlIGRlY29kaW5nLiIpOwotICAgIH0KLSAgICBtZWRpYUNvZGVjLnJl
bGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgsIGZhbHNlIC8qIHJlbmRlciAqLyk7Ci0gIH0KLQotICBA
Q2FsbGVkQnlOYXRpdmUKLSAgQnl0ZUJ1ZmZlcltdIGdldElucHV0QnVmZmVycygpIHsKLSAgICBy
ZXR1cm4gaW5wdXRCdWZmZXJzOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIEJ5dGVCdWZm
ZXJbXSBnZXRPdXRwdXRCdWZmZXJzKCkgewotICAgIHJldHVybiBvdXRwdXRCdWZmZXJzOwotICB9
Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIGludCBnZXRDb2xvckZvcm1hdCgpIHsKLSAgICByZXR1
cm4gY29sb3JGb3JtYXQ7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgaW50IGdldFdpZHRo
KCkgewotICAgIHJldHVybiB3aWR0aDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBpbnQg
Z2V0SGVpZ2h0KCkgewotICAgIHJldHVybiBoZWlnaHQ7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRp
dmUKLSAgaW50IGdldFN0cmlkZSgpIHsKLSAgICByZXR1cm4gc3RyaWRlOwotICB9Ci0KLSAgQENh
bGxlZEJ5TmF0aXZlCi0gIGludCBnZXRTbGljZUhlaWdodCgpIHsKLSAgICByZXR1cm4gc2xpY2VI
ZWlnaHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVE
ZWNvZGVyKFN0cmluZyBjb2RlYywgYm9vbGVhbiB1c2VTdXJmYWNlKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2Fw
aS9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL01l
ZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MWM5YmM0MmJhNWIwOGExNzRkZThkMDEzMjE0ZTcyZmFjNTE0MWRmOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDk0ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3Rh
dGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQg
YW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2Rl
Y0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxp
dGllczsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNMaXN0OwotaW1wb3J0IGFuZHJv
aWQubWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1w
b3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQg
YW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3
LlN1cmZhY2U7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhh
c2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3Vu
dERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9y
dCBvcmcud2VicnRjLkVnbEJhc2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FZ2xCYXNlMTQ7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5WaWRlb0ZyYW1lOwotCi0vLyBKYXZhLXNpZGUgb2YgcGVlcmNvbm5lY3Rp
b24uY2M6TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci4KLS8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVt
ZW50YXRpb24gZGV0YWlsIG9mIHRoZSBKYXZhIFBlZXJDb25uZWN0aW9uIEFQSS4KLUBUYXJnZXRB
cGkoMTkpCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotQERlcHJlY2F0ZWQKLXB1
YmxpYyBjbGFzcyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHsKLSAgLy8gVGhpcyBjbGFzcyBpcyBj
b25zdHJ1Y3RlZCwgb3BlcmF0ZWQsIGFuZCBkZXN0cm95ZWQgYnkgaXRzIEMrKyBpbmNhcm5hdGlv
biwKLSAgLy8gc28gdGhlIGNsYXNzIGFuZCBpdHMgbWV0aG9kcyBoYXZlIG5vbi1wdWJsaWMgdmlz
aWJpbGl0eS4gIFRoZSBBUEkgdGhpcwotICAvLyBjbGFzcyBleHBvc2VzIGFpbXMgdG8gbWltaWMg
dGhlIHdlYnJ0Yzo6VmlkZW9FbmNvZGVyIEFQSSBhcyBjbG9zZWx5IGFzCi0gIC8vIHBvc3NpYmx5
IHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgdHJhbnNsYXRpb24gd29yayBuZWNlc3NhcnkuCi0K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyIjsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgVmlkZW9FbmNvZGVyRmFjdG9yeSB0aGF0IGNh
biBiZSBpbmplY3RlZCBpbiB0aGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGFuZCByZXBsaWNhdGUK
LSAgICogdGhlIG9sZCBiZWhhdmlvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9FbmNv
ZGVyRmFjdG9yeSBjcmVhdGVGYWN0b3J5KCkgewotICAgIHJldHVybiBuZXcgRGVmYXVsdFZpZGVv
RW5jb2RlckZhY3RvcnkobmV3IEh3RW5jb2RlckZhY3RvcnkoKSk7Ci0gIH0KLQotICAvLyBGYWN0
b3J5IGZvciBjcmVhdGluZyBIVyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGluc3RhbmNlcy4KLSAg
c3RhdGljIGNsYXNzIEh3RW5jb2RlckZhY3RvcnkgaW1wbGVtZW50cyBWaWRlb0VuY29kZXJGYWN0
b3J5IHsKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU2FtZUNvZGVjKFZpZGVvQ29kZWNJ
bmZvIGNvZGVjQSwgVmlkZW9Db2RlY0luZm8gY29kZWNCKSB7Ci0gICAgICBpZiAoIWNvZGVjQS5u
YW1lLmVxdWFsc0lnbm9yZUNhc2UoY29kZWNCLm5hbWUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjb2RlY0EubmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJI
MjY0IikKLSAgICAgICAgICA/IEgyNjRVdGlscy5pc1NhbWVIMjY0UHJvZmlsZShjb2RlY0EucGFy
YW1zLCBjb2RlY0IucGFyYW1zKQotICAgICAgICAgIDogdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2
YXRlIHN0YXRpYyBib29sZWFuIGlzQ29kZWNTdXBwb3J0ZWQoCi0gICAgICAgIFZpZGVvQ29kZWNJ
bmZvW10gc3VwcG9ydGVkQ29kZWNzLCBWaWRlb0NvZGVjSW5mbyBjb2RlYykgewotICAgICAgZm9y
IChWaWRlb0NvZGVjSW5mbyBzdXBwb3J0ZWRDb2RlYyA6IHN1cHBvcnRlZENvZGVjcykgewotICAg
ICAgICBpZiAoaXNTYW1lQ29kZWMoc3VwcG9ydGVkQ29kZWMsIGNvZGVjKSkgewotICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgVmlkZW9Db2RlY0luZm9bXSBnZXRTdXBwb3J0ZWRI
YXJkd2FyZUNvZGVjcygpIHsKLSAgICAgIGZpbmFsIExpc3Q8VmlkZW9Db2RlY0luZm8+IGNvZGVj
cyA9IG5ldyBBcnJheUxpc3Q8VmlkZW9Db2RlY0luZm8+KCk7Ci0KLSAgICAgIGlmIChpc1ZwOEh3
U3VwcG9ydGVkKCkpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlZQOCBIVyBFbmNvZGVyIHN1
cHBvcnRlZC4iKTsKLSAgICAgICAgY29kZWNzLmFkZChuZXcgVmlkZW9Db2RlY0luZm8oIlZQOCIs
IG5ldyBIYXNoTWFwPD4oKSkpOwotICAgICAgfQotCi0gICAgICBpZiAoaXNWcDlId1N1cHBvcnRl
ZCgpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJWUDkgSFcgRW5jb2RlciBzdXBwb3J0ZWQu
Iik7Ci0gICAgICAgIGNvZGVjcy5hZGQobmV3IFZpZGVvQ29kZWNJbmZvKCJWUDkiLCBuZXcgSGFz
aE1hcDw+KCkpKTsKLSAgICAgIH0KLQotICAgICAgLy8gQ2hlY2sgaWYgaGlnaCBwcm9maWxlIGlz
IHN1cHBvcnRlZCBieSBkZWNvZGVyLiBJZiB5ZXMsIGVuY29kZXIgY2FuIGFsd2F5cwotICAgICAg
Ly8gZmFsbCBiYWNrIHRvIGJhc2VsaW5lIHByb2ZpbGUgYXMgYSBzdWJzZXQgYXMgaGlnaCBwcm9m
aWxlLgotICAgICAgaWYgKE1lZGlhQ29kZWNWaWRlb0RlY29kZXIuaXNIMjY0SGlnaFByb2ZpbGVI
d1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJILjI2NCBIaWdoIFByb2Zp
bGUgSFcgRW5jb2RlciBzdXBwb3J0ZWQuIik7Ci0gICAgICAgIGNvZGVjcy5hZGQoSDI2NFV0aWxz
LkRFRkFVTFRfSDI2NF9ISUdIX1BST0ZJTEVfQ09ERUMpOwotICAgICAgfQotCi0gICAgICBpZiAo
aXNIMjY0SHdTdXBwb3J0ZWQoKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSC4yNjQgSFcg
RW5jb2RlciBzdXBwb3J0ZWQuIik7Ci0gICAgICAgIGNvZGVjcy5hZGQoSDI2NFV0aWxzLkRFRkFV
TFRfSDI2NF9CQVNFTElORV9QUk9GSUxFX0NPREVDKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IGNvZGVjcy50b0FycmF5KG5ldyBWaWRlb0NvZGVjSW5mb1tjb2RlY3Muc2l6ZSgpXSk7Ci0gICAg
fQotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWRlb0NvZGVjSW5mb1tdIHN1cHBvcnRlZEhhcmR3YXJl
Q29kZWNzID0gZ2V0U3VwcG9ydGVkSGFyZHdhcmVDb2RlY3MoKTsKLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBWaWRlb0NvZGVjSW5mb1tdIGdldFN1cHBvcnRlZENvZGVjcygpIHsKLSAgICAg
IHJldHVybiBzdXBwb3J0ZWRIYXJkd2FyZUNvZGVjczsKLSAgICB9Ci0KLSAgICBATnVsbGFibGUK
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlkZW9FbmNvZGVyIGNyZWF0ZUVuY29kZXIoVmlk
ZW9Db2RlY0luZm8gaW5mbykgewotICAgICAgaWYgKCFpc0NvZGVjU3VwcG9ydGVkKHN1cHBvcnRl
ZEhhcmR3YXJlQ29kZWNzLCBpbmZvKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTm8gSFcg
dmlkZW8gZW5jb2RlciBmb3IgY29kZWMgIiArIGluZm8ubmFtZSk7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0ZSBIVyB2aWRlbyBlbmNv
ZGVyIGZvciAiICsgaW5mby5uYW1lKTsKLSAgICAgIHJldHVybiBuZXcgV3JhcHBlZE5hdGl2ZVZp
ZGVvRW5jb2RlcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBsb25nIGNy
ZWF0ZU5hdGl2ZVZpZGVvRW5jb2RlcigpIHsKLSAgICAgICAgICByZXR1cm4gbmF0aXZlQ3JlYXRl
RW5jb2RlcigKLSAgICAgICAgICAgICAgaW5mbywgLyogaGFzRWdsMTRDb250ZXh0PSAqLyBzdGF0
aWNFZ2xCYXNlIGluc3RhbmNlb2YgRWdsQmFzZTE0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBP
dmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0hhcmR3YXJlRW5jb2RlcigpIHsKLSAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01T
ID0gNTAwMDsgLy8gVGltZW91dCBmb3IgY29kZWMgcmVsZWFzaW5nLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgREVRVUVVRV9USU1FT1VUID0gMDsgLy8gTm9uLWJsb2NraW5nLCBubyB3YWl0
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUUkFURV9BREpVU1RNRU5UX0ZQUyA9IDMw
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYSU1VTV9JTklUSUFMX0ZQUyA9IDMwOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgQklUUkFURV9DT1JSRUNUSU9OX1NFQyA9IDMu
MDsKLSAgLy8gTWF4aW11bSBiaXRyYXRlIGNvcnJlY3Rpb24gc2NhbGUgLSBubyBtb3JlIHRoYW4g
NCB0aW1lcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFJBVEVfQ09SUkVDVElP
Tl9NQVhfU0NBTEUgPSA0OwotICAvLyBBbW91bnQgb2YgY29ycmVjdGlvbiBzdGVwcyB0byByZWFj
aCBjb3JyZWN0aW9uIG1heGltdW0gc2NhbGUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBC
SVRSQVRFX0NPUlJFQ1RJT05fU1RFUFMgPSAyMDsKLSAgLy8gRm9yY2VkIGtleSBmcmFtZSBpbnRl
cnZhbCAtIHVzZWQgdG8gcmVkdWNlIGNvbG9yIGRpc3RvcnRpb25zIG9uIFF1YWxjb21tIHBsYXRm
b3JtLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFFDT01fVlA4X0tFWV9GUkFNRV9JTlRF
UlZBTF9BTkRST0lEX0xfTVMgPSAxNTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBR
Q09NX1ZQOF9LRVlfRlJBTUVfSU5URVJWQUxfQU5EUk9JRF9NX01TID0gMjAwMDA7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGxvbmcgUUNPTV9WUDhfS0VZX0ZSQU1FX0lOVEVSVkFMX0FORFJPSURf
Tl9NUyA9IDE1MDAwOwotCi0gIC8vIEFjdGl2ZSBydW5uaW5nIGVuY29kZXIgaW5zdGFuY2UuIFNl
dCBpbiBpbml0RW5jb2RlKCkgKGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlKQotICAvLyBhbmQgcmVz
ZXQgdG8gbnVsbCBpbiByZWxlYXNlKCkgY2FsbC4KLSAgQE51bGxhYmxlIHByaXZhdGUgc3RhdGlj
IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgcnVubmluZ0luc3RhbmNlOwotICBATnVsbGFibGUgcHJp
dmF0ZSBzdGF0aWMgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjazsKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvZGVjRXJyb3JzOwotICAvLyBMaXN0IG9mIGRp
c2FibGVkIGNvZGVjIHR5cGVzIC0gY2FuIGJlIHNldCBmcm9tIGFwcGxpY2F0aW9uLgotICBwcml2
YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBod0VuY29kZXJEaXNhYmxlZFR5cGVzID0gbmV3IEhhc2hT
ZXQ8U3RyaW5nPigpOwotICBATnVsbGFibGUgcHJpdmF0ZSBzdGF0aWMgRWdsQmFzZSBzdGF0aWNF
Z2xCYXNlOwotCi0gIEBOdWxsYWJsZSBwcml2YXRlIFRocmVhZCBtZWRpYUNvZGVjVGhyZWFkOwot
ICBATnVsbGFibGUgcHJpdmF0ZSBNZWRpYUNvZGVjIG1lZGlhQ29kZWM7Ci0gIHByaXZhdGUgQnl0
ZUJ1ZmZlcltdIG91dHB1dEJ1ZmZlcnM7Ci0gIEBOdWxsYWJsZSBwcml2YXRlIEVnbEJhc2UxNCBl
Z2xCYXNlOwotICBwcml2YXRlIGludCBwcm9maWxlOwotICBwcml2YXRlIGludCB3aWR0aDsKLSAg
cHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBATnVsbGFibGUgcHJpdmF0ZSBTdXJmYWNlIGlucHV0U3Vy
ZmFjZTsKLSAgQE51bGxhYmxlIHByaXZhdGUgR2xSZWN0RHJhd2VyIGRyYXdlcjsKLQotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVlA4X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIu
dnA4IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOV9NSU1FX1RZUEUgPSAidmlk
ZW8veC12bmQub24yLnZwOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X01J
TUVfVFlQRSA9ICJ2aWRlby9hdmMiOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSURF
T19BVkNQcm9maWxlSGlnaCA9IDg7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSURFT19B
VkNMZXZlbDMgPSAweDEwMDsKLQotICAvLyBUeXBlIG9mIGJpdHJhdGUgYWRqdXN0bWVudCBmb3Ig
dmlkZW8gZW5jb2Rlci4KLSAgcHVibGljIGVudW0gQml0cmF0ZUFkanVzdG1lbnRUeXBlIHsKLSAg
ICAvLyBObyBhZGp1c3RtZW50IC0gdmlkZW8gZW5jb2RlciBoYXMgbm8ga25vd24gYml0cmF0ZSBw
cm9ibGVtLgotICAgIE5PX0FESlVTVE1FTlQsCi0gICAgLy8gRnJhbWVyYXRlIGJhc2VkIGJpdHJh
dGUgYWRqdXN0bWVudCBpcyByZXF1aXJlZCAtIEhXIGVuY29kZXIgZG9lcyBub3QgdXNlIGZyYW1l
Ci0gICAgLy8gdGltZXN0YW1wcyB0byBjYWxjdWxhdGUgZnJhbWUgYml0cmF0ZSBidWRnZXQgYW5k
IGluc3RlYWQgaXMgcmVseWluZyBvbiBpbml0aWFsCi0gICAgLy8gZnBzIGNvbmZpZ3VyYXRpb24g
YXNzdW1pbmcgdGhhdCBhbGwgZnJhbWVzIGFyZSBjb21pbmcgYXQgZml4ZWQgaW5pdGlhbCBmcmFt
ZSByYXRlLgotICAgIEZSQU1FUkFURV9BREpVU1RNRU5ULAotICAgIC8vIER5bmFtaWMgYml0cmF0
ZSBhZGp1c3RtZW50IGlzIHJlcXVpcmVkIC0gSFcgZW5jb2RlciB1c2VkIGZyYW1lIHRpbWVzdGFt
cHMsIGJ1dCBhY3R1YWwKLSAgICAvLyBiaXRyYXRlIGRldmlhdGVzIHRvbyBtdWNoIGZyb20gdGhl
IHRhcmdldCB2YWx1ZS4KLSAgICBEWU5BTUlDX0FESlVTVE1FTlQKLSAgfQotCi0gIC8vIFNob3Vs
ZCBiZSBpbiBzeW5jIHdpdGggd2VicnRjOjpIMjY0OjpQcm9maWxlLgotICBwdWJsaWMgc3RhdGlj
IGVudW0gSDI2NFByb2ZpbGUgewotICAgIENPTlNUUkFJTkVEX0JBU0VMSU5FKDApLAotICAgIEJB
U0VMSU5FKDEpLAotICAgIE1BSU4oMiksCi0gICAgQ09OU1RSQUlORURfSElHSCgzKSwKLSAgICBI
SUdIKDQpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7Ci0KLSAgICBIMjY0UHJvZmls
ZShpbnQgdmFsdWUpIHsKLSAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgaW50IGdldFZhbHVlKCkgewotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgfQot
Ci0gIC8vIENsYXNzIGRlc2NyaWJpbmcgc3VwcG9ydGVkIG1lZGlhIGNvZGVjIHByb3BlcnRpZXMu
Ci0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHsKLSAgICBwdWJs
aWMgZmluYWwgU3RyaW5nIGNvZGVjUHJlZml4OwotICAgIC8vIE1pbmltdW0gQW5kcm9pZCBTREsg
cmVxdWlyZWQgZm9yIHRoaXMgY29kZWMgdG8gYmUgdXNlZC4KLSAgICBwdWJsaWMgZmluYWwgaW50
IG1pblNkazsKLSAgICAvLyBGbGFnIGlmIGVuY29kZXIgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qg
dXNlIGZyYW1lIHRpbWVzdGFtcHMgdG8gY2FsY3VsYXRlIGZyYW1lIGJpdHJhdGUKLSAgICAvLyBi
dWRnZXQgYW5kIGluc3RlYWQgaXMgcmVseWluZyBvbiBpbml0aWFsIGZwcyBjb25maWd1cmF0aW9u
IGFzc3VtaW5nIHRoYXQgYWxsIGZyYW1lcyBhcmUKLSAgICAvLyBjb21pbmcgYXQgZml4ZWQgaW5p
dGlhbCBmcmFtZSByYXRlLiBCaXRyYXRlIGFkanVzdG1lbnQgaXMgcmVxdWlyZWQgZm9yIHRoaXMg
Y2FzZS4KLSAgICBwdWJsaWMgZmluYWwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1
c3RtZW50VHlwZTsKLQotICAgIE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgICBTdHJpbmcg
Y29kZWNQcmVmaXgsIGludCBtaW5TZGssIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRyYXRlQWRq
dXN0bWVudFR5cGUpIHsKLSAgICAgIHRoaXMuY29kZWNQcmVmaXggPSBjb2RlY1ByZWZpeDsKLSAg
ICAgIHRoaXMubWluU2RrID0gbWluU2RrOwotICAgICAgdGhpcy5iaXRyYXRlQWRqdXN0bWVudFR5
cGUgPSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNl
dCBFR0wgY29udGV4dCB1c2VkIGJ5IEhXIGVuY29kaW5nLiBUaGUgRUdMIGNvbnRleHQgbXVzdCBi
ZSBzaGFyZWQgd2l0aCB0aGUgdmlkZW8gY2FwdHVyZXIKLSAgICogYW5kIGFueSBsb2NhbCByZW5k
ZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RWdsQ29udGV4dChFZ2xCYXNlLkNv
bnRleHQgZWdsQ29udGV4dCkgewotICAgIGlmIChzdGF0aWNFZ2xCYXNlICE9IG51bGwpIHsKLSAg
ICAgIExvZ2dpbmcudyhUQUcsICJFZ2wgY29udGV4dCBhbHJlYWR5IHNldC4iKTsKLSAgICAgIHN0
YXRpY0VnbEJhc2UucmVsZWFzZSgpOwotICAgIH0KLSAgICBzdGF0aWNFZ2xCYXNlID0gRWdsQmFz
ZS5jcmVhdGUoZWdsQ29udGV4dCk7Ci0gIH0KLQotICAvKiogRGlzcG9zZSB0aGUgRUdMIGNvbnRl
eHQgdXNlZCBieSBIVyBlbmNvZGluZy4gKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc3Bvc2VF
Z2xDb250ZXh0KCkgewotICAgIGlmIChzdGF0aWNFZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgIHN0
YXRpY0VnbEJhc2UucmVsZWFzZSgpOwotICAgICAgc3RhdGljRWdsQmFzZSA9IG51bGw7Ci0gICAg
fQotICB9Ci0KLSAgQE51bGxhYmxlCi0gIHN0YXRpYyBFZ2xCYXNlLkNvbnRleHQgZ2V0RWdsQ29u
dGV4dCgpIHsKLSAgICByZXR1cm4gc3RhdGljRWdsQmFzZSA9PSBudWxsID8gbnVsbCA6IHN0YXRp
Y0VnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKTsKLSAgfQotCi0gIC8vIExpc3Qgb2Ygc3VwcG9y
dGVkIEhXIFZQOCBlbmNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1By
b3BlcnRpZXMgcWNvbVZwOEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygK
LSAgICAgICJPTVgucWNvbS4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCwgQml0cmF0ZUFk
anVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRp
YUNvZGVjUHJvcGVydGllcyBleHlub3NWcDhId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1By
b3BlcnRpZXMoCi0gICAgICAiT01YLkV4eW5vcy4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLk0sIEJp
dHJhdGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBpbnRlbFZwOEh3UHJvcGVydGllcyA9IG5ldyBN
ZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVguSW50ZWwuIiwgQnVpbGQuVkVSU0lPTl9D
T0RFUy5MT0xMSVBPUCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBw
cml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHZwOEh3TGlzdCgpIHsKLSAgICBm
aW5hbCBBcnJheUxpc3Q8TWVkaWFDb2RlY1Byb3BlcnRpZXM+IHN1cHBvcnRlZF9jb2RlY3MgPSBu
ZXcgQXJyYXlMaXN0PE1lZGlhQ29kZWNQcm9wZXJ0aWVzPigpOwotICAgIHN1cHBvcnRlZF9jb2Rl
Y3MuYWRkKHFjb21WcDhId1Byb3BlcnRpZXMpOwotICAgIHN1cHBvcnRlZF9jb2RlY3MuYWRkKGV4
eW5vc1ZwOEh3UHJvcGVydGllcyk7Ci0gICAgaWYgKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5maWVs
ZFRyaWFsc0ZpbmRGdWxsTmFtZSgiV2ViUlRDLUludGVsVlA4IikuZXF1YWxzKCJFbmFibGVkIikp
IHsKLSAgICAgIHN1cHBvcnRlZF9jb2RlY3MuYWRkKGludGVsVnA4SHdQcm9wZXJ0aWVzKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN1cHBvcnRlZF9jb2RlY3MudG9BcnJheShuZXcgTWVkaWFDb2RlY1By
b3BlcnRpZXNbc3VwcG9ydGVkX2NvZGVjcy5zaXplKCldKTsKLSAgfQotCi0gIC8vIExpc3Qgb2Yg
c3VwcG9ydGVkIEhXIFZQOSBlbmNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFD
b2RlY1Byb3BlcnRpZXMgcWNvbVZwOUh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVy
dGllcygKLSAgICAgICJPTVgucWNvbS4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLk4sIEJpdHJhdGVB
ZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVk
aWFDb2RlY1Byb3BlcnRpZXMgZXh5bm9zVnA5SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQ
cm9wZXJ0aWVzKAotICAgICAgIk9NWC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5OLCBC
aXRyYXRlQWRqdXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHZwOUh3TGlzdCA9Ci0gICAgICBuZXcg
TWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB7cWNvbVZwOUh3UHJvcGVydGllcywgZXh5bm9zVnA5SHdQ
cm9wZXJ0aWVzfTsKLQotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBILjI2NCBlbmNvZGVycy4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgcWNvbUgyNjRId1By
b3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLnFjb20uIiwg
QnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQsIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpV
U1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgZXh5
bm9zSDI2NEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJP
TVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1AsIEJpdHJhdGVBZGp1c3Rt
ZW50VHlwZS5GUkFNRVJBVEVfQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1l
ZGlhQ29kZWNQcm9wZXJ0aWVzIG1lZGlhdGVrSDI2NEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNv
ZGVjUHJvcGVydGllcygKLSAgICAgICJPTVguTVRLLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuT19N
UjEsIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5GUkFNRVJBVEVfQURKVVNUTUVOVCk7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10gaDI2NEh3TGlzdCgpIHsKLSAg
ICBmaW5hbCBBcnJheUxpc3Q8TWVkaWFDb2RlY1Byb3BlcnRpZXM+IHN1cHBvcnRlZF9jb2RlY3Mg
PSBuZXcgQXJyYXlMaXN0PE1lZGlhQ29kZWNQcm9wZXJ0aWVzPigpOwotICAgIHN1cHBvcnRlZF9j
b2RlY3MuYWRkKHFjb21IMjY0SHdQcm9wZXJ0aWVzKTsKLSAgICBzdXBwb3J0ZWRfY29kZWNzLmFk
ZChleHlub3NIMjY0SHdQcm9wZXJ0aWVzKTsKLSAgICBpZiAoUGVlckNvbm5lY3Rpb25GYWN0b3J5
LmZpZWxkVHJpYWxzRmluZEZ1bGxOYW1lKCJXZWJSVEMtTWVkaWFUZWtIMjY0IikuZXF1YWxzKCJF
bmFibGVkIikpIHsKLSAgICAgIHN1cHBvcnRlZF9jb2RlY3MuYWRkKG1lZGlhdGVrSDI2NEh3UHJv
cGVydGllcyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBwb3J0ZWRfY29kZWNzLnRvQXJyYXkobmV3
IE1lZGlhQ29kZWNQcm9wZXJ0aWVzW3N1cHBvcnRlZF9jb2RlY3Muc2l6ZSgpXSk7Ci0gIH0KLQot
ICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBILjI2NCBoaWdoIHByb2ZpbGUgZW5jb2RlcnMuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGV4eW5vc0gyNjRIaWdo
UHJvZmlsZUh3UHJvcGVydGllcyA9Ci0gICAgICBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0g
ICAgICAgICAgIk9NWC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBCaXRyYXRlQWRq
dXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIGgyNjRIaWdoUHJvZmlsZUh3TGlzdCA9Ci0gICAgICBu
ZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB7ZXh5bm9zSDI2NEhpZ2hQcm9maWxlSHdQcm9wZXJ0
aWVzfTsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2l0aCBwb29yIEguMjY0IGVuY29kZXIgcXVh
bGl0eS4KLSAgLy8gSFcgSC4yNjQgZW5jb2RlciBvbiBiZWxvdyBkZXZpY2VzIGhhcyBwb29yIGJp
dHJhdGUgY29udHJvbCAtIGFjdHVhbAotICAvLyBiaXRyYXRlcyBkZXZpYXRlcyBhIGxvdCBmcm9t
IHRoZSB0YXJnZXQgdmFsdWUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEgyNjRf
SFdfRVhDRVBUSU9OX01PREVMUyA9Ci0gICAgICBuZXcgU3RyaW5nW10geyJTQU1TVU5HLVNHSC1J
MzM3IiwgIk5leHVzIDciLCAiTmV4dXMgNCJ9OwotCi0gIC8vIEJpdHJhdGUgbW9kZXMgLSBzaG91
bGQgYmUgaW4gc3luYyB3aXRoIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgZGVmaW5lZAotICAv
LyBpbiBPTVhfVmlkZW8uaAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklERU9fQ29udHJv
bFJhdGVDb25zdGFudCA9IDI7Ci0gIC8vIE5WMTIgY29sb3IgZm9ybWF0IHN1cHBvcnRlZCBieSBR
Q09NIGNvZGVjLCBidXQgbm90IGRlY2xhcmVkIGluIE1lZGlhQ29kZWMgLQotICAvLyBzZWUgL2hh
cmR3YXJlL3Fjb20vbWVkaWEvbW0tY29yZS9pbmMvT01YX1FDT01FeHRucy5oCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIz
Mm0gPSAweDdGQTMwQzA0OwotICAvLyBBbGxvd2FibGUgY29sb3IgZm9ybWF0cyBzdXBwb3J0ZWQg
YnkgY29kZWMgLSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnRbXSBzdXBwb3J0ZWRDb2xvckxpc3QgPSB7Q29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9y
bWF0WVVWNDIwUGxhbmFyLAotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVW
NDIwU2VtaVBsYW5hciwKLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX1FDT01fRm9ybWF0
WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2Vt
aVBsYW5hcjMybX07Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIHN1cHBvcnRlZFN1cmZh
Y2VDb2xvckxpc3QgPSB7Q29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0U3VyZmFjZX07Ci0g
IEBWaWRlb0NvZGVjVHlwZSBwcml2YXRlIGludCB0eXBlOwotICBwcml2YXRlIGludCBjb2xvckZv
cm1hdDsKLQotICAvLyBWYXJpYWJsZXMgdXNlZCBmb3IgZHluYW1pYyBiaXRyYXRlIGFkanVzdG1l
bnQuCi0gIHByaXZhdGUgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50VHlw
ZSA9IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UOwotICBwcml2YXRlIGRvdWJs
ZSBiaXRyYXRlQWNjdW11bGF0b3I7Ci0gIHByaXZhdGUgZG91YmxlIGJpdHJhdGVBY2N1bXVsYXRv
ck1heDsKLSAgcHJpdmF0ZSBkb3VibGUgYml0cmF0ZU9ic2VydmF0aW9uVGltZU1zOwotICBwcml2
YXRlIGludCBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwOwotICBwcml2YXRlIGludCB0YXJnZXRC
aXRyYXRlQnBzOwotICBwcml2YXRlIGludCB0YXJnZXRGcHM7Ci0KLSAgLy8gSW50ZXJ2YWwgaW4g
bXMgdG8gZm9yY2Uga2V5IGZyYW1lIGdlbmVyYXRpb24uIFVzZWQgdG8gcmVkdWNlIHRoZSB0aW1l
IG9mIGNvbG9yIGRpc3RvcnRpb25zCi0gIC8vIGhhcHBlbmVkIHNvbWV0aW1lIHdoZW4gdXNpbmcg
UXVhbGNvbW0gdmlkZW8gZW5jb2Rlci4KLSAgcHJpdmF0ZSBsb25nIGZvcmNlZEtleUZyYW1lTXM7
Ci0gIHByaXZhdGUgbG9uZyBsYXN0S2V5RnJhbWVNczsKLQotICAvLyBTUFMgYW5kIFBQUyBOQUxz
IChDb25maWcgZnJhbWUpIGZvciBILjI2NC4KLSAgQE51bGxhYmxlIHByaXZhdGUgQnl0ZUJ1ZmZl
ciBjb25maWdEYXRhOwotCi0gIC8vIE1lZGlhQ29kZWMgZXJyb3IgaGFuZGxlciAtIGludm9rZWQg
d2hlbiBjcml0aWNhbCBlcnJvciBoYXBwZW5zIHdoaWNoIG1heSBwcmV2ZW50Ci0gIC8vIGZ1cnRo
ZXIgdXNlIG9mIG1lZGlhIGNvZGVjIEFQSS4gTm93IGl0IG1lYW5zIHRoYXQgb25lIG9mIG1lZGlh
IGNvZGVjIGluc3RhbmNlcwotICAvLyBpcyBoYW5naW5nIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVz
ZWQgaW4gdGhlIG5leHQgY2FsbC4KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2RlckVycm9yQ2FsbGJhY2sgewotICAgIHZvaWQgb25NZWRpYUNvZGVjVmlkZW9F
bmNvZGVyQ3JpdGljYWxFcnJvcihpbnQgY29kZWNFcnJvcnMpOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyB2b2lkIHNldEVycm9yQ2FsbGJhY2soTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckVycm9yQ2Fs
bGJhY2sgZXJyb3JDYWxsYmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJTZXQgZXJyb3IgY2Fs
bGJhY2siKTsKLSAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmVycm9yQ2FsbGJhY2sgPSBlcnJv
ckNhbGxiYWNrOwotICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIGRpc2FibGUgSFcgZW5jb2Rpbmcg
LSBjYW4gYmUgY2FsbGVkIGZyb20gYXBwbGljYXRpb25zIGZvciBwbGF0Zm9ybXMKLSAgLy8gd2hp
Y2ggaGF2ZSBrbm93biBIVyBkZWNvZGluZyBwcm9ibGVtcy4KLSAgcHVibGljIHN0YXRpYyB2b2lk
IGRpc2FibGVWcDhId0NvZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJWUDggZW5jb2Rpbmcg
aXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdFbmNvZGVyRGlzYWJsZWRUeXBl
cy5hZGQoVlA4X01JTUVfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJs
ZVZwOUh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOSBlbmNvZGluZyBpcyBkaXNh
YmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0VuY29kZXJEaXNhYmxlZFR5cGVzLmFkZChW
UDlfTUlNRV9UWVBFKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlSDI2NEh3
Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIkguMjY0IGVuY29kaW5nIGlzIGRpc2FibGVk
IGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RW5jb2RlckRpc2FibGVkVHlwZXMuYWRkKEgyNjRf
TUlNRV9UWVBFKTsKLSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0byBxdWVyeSBpZiBIVyBlbmNvZGlu
ZyBpcyBzdXBwb3J0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3U3VwcG9ydGVk
KCkgewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDhfTUlN
RV9UWVBFKQotICAgICAgICAmJiAoZmluZEh3RW5jb2RlcihWUDhfTUlNRV9UWVBFLCB2cDhId0xp
c3QoKSwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgQE51bGxhYmxlIEVuY29kZXJQcm9wZXJ0aWVzIHZwOEh3RW5jb2RlclByb3BlcnRpZXMoKSB7
Ci0gICAgaWYgKGh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA4X01JTUVfVFlQRSkp
IHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZmluZEh3
RW5jb2RlcihWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QoKSwgc3VwcG9ydGVkQ29sb3JMaXN0KTsK
LSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDlId1N1cHBvcnRlZCgp
IHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA5X01JTUVf
VFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA5X01JTUVfVFlQRSwgdnA5SHdMaXN0
LCBzdXBwb3J0ZWRDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBi
b29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJs
ZWRUeXBlcy5jb250YWlucyhIMjY0X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29k
ZXIoSDI2NF9NSU1FX1RZUEUsIGgyNjRId0xpc3QoKSwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBu
dWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0gyNjRIaWdoUHJvZmlsZUh3
U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlu
cyhIMjY0X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoSDI2NF9NSU1FX1RZ
UEUsIGgyNjRIaWdoUHJvZmlsZUh3TGlzdCwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBudWxsKTsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0
dXJlcygpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA4
X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA4X01JTUVfVFlQRSwgdnA4
SHdMaXN0KCksIHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA5SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkgewot
ICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDlfTUlNRV9UWVBF
KQotICAgICAgICAmJiAoZmluZEh3RW5jb2RlcihWUDlfTUlNRV9UWVBFLCB2cDlId0xpc3QsIHN1
cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBib29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpIHsKLSAgICByZXR1cm4g
IWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoSDI2NF9NSU1FX1RZUEUpCi0gICAgICAg
ICYmIChmaW5kSHdFbmNvZGVyKEgyNjRfTUlNRV9UWVBFLCBoMjY0SHdMaXN0KCksIHN1cHBvcnRl
ZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBm
b3IgZmluZEh3RW5jb2RlcigpIGJlbG93LgotICBwdWJsaWMgc3RhdGljIGNsYXNzIEVuY29kZXJQ
cm9wZXJ0aWVzIHsKLSAgICBwdWJsaWMgRW5jb2RlclByb3BlcnRpZXMoCi0gICAgICAgIFN0cmlu
ZyBjb2RlY05hbWUsIGludCBjb2xvckZvcm1hdCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJh
dGVBZGp1c3RtZW50VHlwZSkgewotICAgICAgdGhpcy5jb2RlY05hbWUgPSBjb2RlY05hbWU7Ci0g
ICAgICB0aGlzLmNvbG9yRm9ybWF0ID0gY29sb3JGb3JtYXQ7Ci0gICAgICB0aGlzLmJpdHJhdGVB
ZGp1c3RtZW50VHlwZSA9IGJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICB9Ci0gICAgcHVibGlj
IGZpbmFsIFN0cmluZyBjb2RlY05hbWU7IC8vIE9wZW5NYXggY29tcG9uZW50IG5hbWUgZm9yIEhX
IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgY29sb3JGb3JtYXQ7IC8vIENvbG9yIGZvcm1h
dCBzdXBwb3J0ZWQgYnkgY29kZWMuCi0gICAgcHVibGljIGZpbmFsIEJpdHJhdGVBZGp1c3RtZW50
VHlwZSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7IC8vIEJpdHJhdGUgYWRqdXN0bWVudCB0eXBlCi0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBATnVsbGFibGUgRW5jb2RlclByb3BlcnRpZXMgZmluZEh3
RW5jb2RlcigKLSAgICAgIFN0cmluZyBtaW1lLCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHN1cHBv
cnRlZEh3Q29kZWNQcm9wZXJ0aWVzLCBpbnRbXSBjb2xvckxpc3QpIHsKLSAgICAvLyBNZWRpYUNv
ZGVjLnNldFBhcmFtZXRlcnMgaXMgbWlzc2luZyBmb3IgSkIgYW5kIGJlbG93LCBzbyBiaXRyYXRl
Ci0gICAgLy8gY2FuIG5vdCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseS4KLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIHJl
dHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGRldmljZSBpcyBpbiBILjI2NCBl
eGNlcHRpb24gbGlzdC4KLSAgICBpZiAobWltZS5lcXVhbHMoSDI2NF9NSU1FX1RZUEUpKSB7Ci0g
ICAgICBMaXN0PFN0cmluZz4gZXhjZXB0aW9uTW9kZWxzID0gQXJyYXlzLmFzTGlzdChIMjY0X0hX
X0VYQ0VQVElPTl9NT0RFTFMpOwotICAgICAgaWYgKGV4Y2VwdGlvbk1vZGVscy5jb250YWlucyhC
dWlsZC5NT0RFTCkpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIk1vZGVsOiAiICsgQnVpbGQu
TU9ERUwgKyAiIGhhcyBibGFjayBsaXN0ZWQgSC4yNjQgZW5jb2Rlci4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNZWRp
YUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50KCk7ICsraSkgewotICAgICAgTWVkaWFDb2RlY0luZm8g
aW5mbyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBpbmZvID0gTWVkaWFDb2RlY0xpc3Qu
Z2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVuY29kZXIg
Y29kZWMgaW5mbyIsIGUpOwotICAgICAgfQotICAgICAgaWYgKGluZm8gPT0gbnVsbCB8fCAhaW5m
by5pc0VuY29kZXIoKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIFN0cmlu
ZyBuYW1lID0gbnVsbDsKLSAgICAgIGZvciAoU3RyaW5nIG1pbWVUeXBlIDogaW5mby5nZXRTdXBw
b3J0ZWRUeXBlcygpKSB7Ci0gICAgICAgIGlmIChtaW1lVHlwZS5lcXVhbHMobWltZSkpIHsKLSAg
ICAgICAgICBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIGlmIChuYW1lID09IG51bGwpIHsKLSAgICAgICAgY29udGludWU7
IC8vIE5vIEhXIHN1cHBvcnQgaW4gdGhpcyBjb2RlYzsgdHJ5IHRoZSBuZXh0IG9uZS4KLSAgICAg
IH0KLSAgICAgIExvZ2dpbmcudihUQUcsICJGb3VuZCBjYW5kaWRhdGUgZW5jb2RlciAiICsgbmFt
ZSk7Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkIEhXIGVuY29kZXIuCi0g
ICAgICBib29sZWFuIHN1cHBvcnRlZENvZGVjID0gZmFsc2U7Ci0gICAgICBCaXRyYXRlQWRqdXN0
bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5P
X0FESlVTVE1FTlQ7Ci0gICAgICBmb3IgKE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGNvZGVjUHJvcGVy
dGllcyA6IHN1cHBvcnRlZEh3Q29kZWNQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmIChuYW1lLnN0
YXJ0c1dpdGgoY29kZWNQcm9wZXJ0aWVzLmNvZGVjUHJlZml4KSkgewotICAgICAgICAgIGlmIChC
dWlsZC5WRVJTSU9OLlNES19JTlQgPCBjb2RlY1Byb3BlcnRpZXMubWluU2RrKSB7Ci0gICAgICAg
ICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgICAgICAgVEFHLCAiQ29kZWMgIiArIG5hbWUgKyAi
IGlzIGRpc2FibGVkIGR1ZSB0byBTREsgdmVyc2lvbiAiICsgQnVpbGQuVkVSU0lPTi5TREtfSU5U
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoY29k
ZWNQcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZSAhPSBCaXRyYXRlQWRqdXN0bWVudFR5
cGUuTk9fQURKVVNUTUVOVCkgewotICAgICAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0g
Y29kZWNQcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICAgICAgICAgIExvZ2dp
bmcudygKLSAgICAgICAgICAgICAgICBUQUcsICJDb2RlYyAiICsgbmFtZSArICIgcmVxdWlyZXMg
Yml0cmF0ZSBhZGp1c3RtZW50OiAiICsgYml0cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgc3VwcG9ydGVkQ29kZWMgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXN1cHBvcnRlZENvZGVjKSB7Ci0gICAgICAg
IGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiBIVyBjb2RlYyBzdXBwb3J0
cyBrbm93biBjb2xvciBmb3JtYXQuCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcyBjYXBhYmlsaXRp
ZXM7Ci0gICAgICB0cnkgewotICAgICAgICBjYXBhYmlsaXRpZXMgPSBpbmZvLmdldENhcGFiaWxp
dGllc0ZvclR5cGUobWltZSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVuY29kZXIg
Y2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgZm9y
IChpbnQgY29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRzKSB7Ci0gICAgICAg
IExvZ2dpbmcudihUQUcsICIgICBDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhjb2xv
ckZvcm1hdCkpOwotICAgICAgfQotCi0gICAgICBmb3IgKGludCBzdXBwb3J0ZWRDb2xvckZvcm1h
dCA6IGNvbG9yTGlzdCkgewotICAgICAgICBmb3IgKGludCBjb2RlY0NvbG9yRm9ybWF0IDogY2Fw
YWJpbGl0aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICAgIGlmIChjb2RlY0NvbG9yRm9ybWF0
ID09IHN1cHBvcnRlZENvbG9yRm9ybWF0KSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBzdXBwb3J0
ZWQgSFcgZW5jb2Rlci4KLSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3VuZCB0YXJnZXQg
ZW5jb2RlciBmb3IgbWltZSAiICsgbWltZSArICIgOiAiICsgbmFtZSArICIuIENvbG9yOiAweCIK
LSAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvZGVjQ29sb3JGb3Jt
YXQpICsgIi4gQml0cmF0ZSBhZGp1c3RtZW50OiAiCi0gICAgICAgICAgICAgICAgICAgICsgYml0
cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRW5jb2RlclByb3Bl
cnRpZXMobmFtZSwgY29kZWNDb2xvckZvcm1hdCwgYml0cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7IC8v
IE5vIEhXIGVuY29kZXIuCi0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlcigpIHt9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFk
KCkgewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkLmdldElkKCkgIT0gVGhyZWFkLmN1cnJlbnRU
aHJlYWQoKS5nZXRJZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTWVk
aWFDb2RlY1ZpZGVvRW5jb2RlciBwcmV2aW91c2x5IG9wZXJhdGVkIG9uICIgKyBtZWRpYUNvZGVj
VGhyZWFkCi0gICAgICAgICAgKyAiIGJ1dCBpcyBub3cgY2FsbGVkIG9uICIgKyBUaHJlYWQuY3Vy
cmVudFRocmVhZCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRT
dGFja1RyYWNlKCkgewotICAgIGlmIChydW5uaW5nSW5zdGFuY2UgIT0gbnVsbCAmJiBydW5uaW5n
SW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxl
bWVudFtdIG1lZGlhQ29kZWNTdGFja1RyYWNlcyA9IHJ1bm5pbmdJbnN0YW5jZS5tZWRpYUNvZGVj
VGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChtZWRpYUNvZGVjU3RhY2tUcmFjZXMu
bGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTWVkaWFDb2RlY1ZpZGVvRW5j
b2RlciBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgc3Rh
Y2tUcmFjZSA6IG1lZGlhQ29kZWNTdGFja1RyYWNlcykgewotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBzdGF0aWMgQE51bGxhYmxlIE1lZGlhQ29kZWMgY3JlYXRlQnlDb2RlY05hbWUoU3Ry
aW5nIGNvZGVjTmFtZSkgewotICAgIHRyeSB7Ci0gICAgICAvLyBJbiB0aGUgTC1TREsgdGhpcyBj
YWxsIGNhbiB0aHJvdyBJT0V4Y2VwdGlvbiBzbyBpbiBvcmRlciB0byB3b3JrIGluCi0gICAgICAv
LyBib3RoIGNhc2VzIGNhdGNoIGFuIGV4Y2VwdGlvbi4KLSAgICAgIHJldHVybiBNZWRpYUNvZGVj
LmNyZWF0ZUJ5Q29kZWNOYW1lKGNvZGVjTmFtZSk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUp
IHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZVVu
Y2hlY2tlZAotICBib29sZWFuIGluaXRFbmNvZGUoQFZpZGVvQ29kZWNUeXBlIGludCB0eXBlLCBp
bnQgcHJvZmlsZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQga2JwcywKLSAgICAgIGludCBm
cHMsIGJvb2xlYW4gdXNlU3VyZmFjZSkgewotICAgIExvZ2dpbmcuZChUQUcsCi0gICAgICAgICJK
YXZhIGluaXRFbmNvZGU6ICIgKyB0eXBlICsgIi4gUHJvZmlsZTogIiArIHByb2ZpbGUgKyAiIDog
IiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQKLSAgICAgICAgICAgICsgIi4gQCAiICsga2JwcyAr
ICIga2Jwcy4gRnBzOiAiICsgZnBzICsgIi4gRW5jb2RlIGZyb20gdGV4dHVyZSA6ICIgKyB1c2VT
dXJmYWNlKTsKLQotICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7Ci0gICAgdGhpcy53aWR0aCA9
IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGlmIChtZWRpYUNvZGVjVGhy
ZWFkICE9IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb3Jnb3Qg
dG8gcmVsZWFzZSgpPyIpOwotICAgIH0KLSAgICBFbmNvZGVyUHJvcGVydGllcyBwcm9wZXJ0aWVz
ID0gbnVsbDsKLSAgICBTdHJpbmcgbWltZSA9IG51bGw7Ci0gICAgaW50IGtleUZyYW1lSW50ZXJ2
YWxTZWMgPSAwOwotICAgIGJvb2xlYW4gY29uZmlndXJlSDI2NEhpZ2hQcm9maWxlID0gZmFsc2U7
Ci0gICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4KSB7Ci0gICAg
ICBtaW1lID0gVlA4X01JTUVfVFlQRTsKLSAgICAgIHByb3BlcnRpZXMgPSBmaW5kSHdFbmNvZGVy
KAotICAgICAgICAgIFZQOF9NSU1FX1RZUEUsIHZwOEh3TGlzdCgpLCB1c2VTdXJmYWNlID8gc3Vw
cG9ydGVkU3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRlZENvbG9yTGlzdCk7Ci0gICAgICBrZXlG
cmFtZUludGVydmFsU2VjID0gMTAwOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVj
VHlwZS5WSURFT19DT0RFQ19WUDkpIHsKLSAgICAgIG1pbWUgPSBWUDlfTUlNRV9UWVBFOwotICAg
ICAgcHJvcGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0gICAgICAgICAgVlA5X01JTUVfVFlQRSwg
dnA5SHdMaXN0LCB1c2VTdXJmYWNlID8gc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBv
cnRlZENvbG9yTGlzdCk7Ci0gICAgICBrZXlGcmFtZUludGVydmFsU2VjID0gMTAwOwotICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19IMjY0KSB7Ci0gICAg
ICBtaW1lID0gSDI2NF9NSU1FX1RZUEU7Ci0gICAgICBwcm9wZXJ0aWVzID0gZmluZEh3RW5jb2Rl
cihIMjY0X01JTUVfVFlQRSwgaDI2NEh3TGlzdCgpLAotICAgICAgICAgIHVzZVN1cmZhY2UgPyBz
dXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0IDogc3VwcG9ydGVkQ29sb3JMaXN0KTsKLSAgICAgIGlm
IChwcm9maWxlID09IEgyNjRQcm9maWxlLkNPTlNUUkFJTkVEX0hJR0guZ2V0VmFsdWUoKSkgewot
ICAgICAgICBFbmNvZGVyUHJvcGVydGllcyBoMjY0SGlnaFByb2ZpbGVQcm9wZXJ0aWVzID0gZmlu
ZEh3RW5jb2RlcihIMjY0X01JTUVfVFlQRSwKLSAgICAgICAgICAgIGgyNjRIaWdoUHJvZmlsZUh3
TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0ZWRD
b2xvckxpc3QpOwotICAgICAgICBpZiAoaDI2NEhpZ2hQcm9maWxlUHJvcGVydGllcyAhPSBudWxs
KSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkhpZ2ggcHJvZmlsZSBILjI2NCBlbmNvZGVy
IHN1cHBvcnRlZC4iKTsKLSAgICAgICAgICBjb25maWd1cmVIMjY0SGlnaFByb2ZpbGUgPSB0cnVl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJIaWdoIHByb2Zp
bGUgSC4yNjQgZW5jb2RlciByZXF1ZXN0ZWQsIGJ1dCBub3Qgc3VwcG9ydGVkLiBVc2UgYmFzZWxp
bmUuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGtleUZyYW1lSW50ZXJ2YWxTZWMgPSAy
MDsKLSAgICB9IGVsc2UgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImluaXRF
bmNvZGU6IE5vbi1zdXBwb3J0ZWQgY29kZWMgIiArIHR5cGUpOwotICAgIH0KLSAgICBpZiAocHJv
cGVydGllcyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fu
IG5vdCBmaW5kIEhXIGVuY29kZXIgZm9yICIgKyB0eXBlKTsKLSAgICB9Ci0gICAgcnVubmluZ0lu
c3RhbmNlID0gdGhpczsgLy8gRW5jb2RlciBpcyBub3cgcnVubmluZyBhbmQgY2FuIGJlIHF1ZXJp
ZWQgZm9yIHN0YWNrIHRyYWNlcy4KLSAgICBjb2xvckZvcm1hdCA9IHByb3BlcnRpZXMuY29sb3JG
b3JtYXQ7Ci0gICAgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gcHJvcGVydGllcy5iaXRyYXRlQWRq
dXN0bWVudFR5cGU7Ci0gICAgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRq
dXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpIHsKLSAgICAgIGZwcyA9IEJJVFJBVEVf
QURKVVNUTUVOVF9GUFM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZwcyA9IE1hdGgubWluKGZwcywg
TUFYSU1VTV9JTklUSUFMX0ZQUyk7Ci0gICAgfQotCi0gICAgZm9yY2VkS2V5RnJhbWVNcyA9IDA7
Ci0gICAgbGFzdEtleUZyYW1lTXMgPSAtMTsKLSAgICBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlw
ZS5WSURFT19DT0RFQ19WUDgKLSAgICAgICAgJiYgcHJvcGVydGllcy5jb2RlY05hbWUuc3RhcnRz
V2l0aChxY29tVnA4SHdQcm9wZXJ0aWVzLmNvZGVjUHJlZml4KSkgewotICAgICAgaWYgKEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA9PSBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QCi0gICAgICAg
ICAgfHwgQnVpbGQuVkVSU0lPTi5TREtfSU5UID09IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQ
T1BfTVIxKSB7Ci0gICAgICAgIGZvcmNlZEtleUZyYW1lTXMgPSBRQ09NX1ZQOF9LRVlfRlJBTUVf
SU5URVJWQUxfQU5EUk9JRF9MX01TOwotICAgICAgfSBlbHNlIGlmIChCdWlsZC5WRVJTSU9OLlNE
S19JTlQgPT0gQnVpbGQuVkVSU0lPTl9DT0RFUy5NKSB7Ci0gICAgICAgIGZvcmNlZEtleUZyYW1l
TXMgPSBRQ09NX1ZQOF9LRVlfRlJBTUVfSU5URVJWQUxfQU5EUk9JRF9NX01TOwotICAgICAgfSBl
bHNlIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPiBCdWlsZC5WRVJTSU9OX0NPREVTLk0pIHsK
LSAgICAgICAgZm9yY2VkS2V5RnJhbWVNcyA9IFFDT01fVlA4X0tFWV9GUkFNRV9JTlRFUlZBTF9B
TkRST0lEX05fTVM7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgTG9nZ2luZy5kKFRBRywgIkNvbG9y
IGZvcm1hdDogIiArIGNvbG9yRm9ybWF0ICsgIi4gQml0cmF0ZSBhZGp1c3RtZW50OiAiICsgYml0
cmF0ZUFkanVzdG1lbnRUeXBlCi0gICAgICAgICAgICArICIuIEtleSBmcmFtZSBpbnRlcnZhbDog
IiArIGZvcmNlZEtleUZyYW1lTXMgKyAiIC4gSW5pdGlhbCBmcHM6ICIgKyBmcHMpOwotICAgIHRh
cmdldEJpdHJhdGVCcHMgPSAxMDAwICoga2JwczsKLSAgICB0YXJnZXRGcHMgPSBmcHM7Ci0gICAg
Yml0cmF0ZUFjY3VtdWxhdG9yTWF4ID0gdGFyZ2V0Qml0cmF0ZUJwcyAvIDguMDsKLSAgICBiaXRy
YXRlQWNjdW11bGF0b3IgPSAwOwotICAgIGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyA9IDA7Ci0g
ICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCA9IDA7Ci0KLSAgICBtZWRpYUNvZGVjVGhyZWFk
ID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgTWVkaWFGb3JtYXQg
Zm9ybWF0ID0gTWVkaWFGb3JtYXQuY3JlYXRlVmlkZW9Gb3JtYXQobWltZSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICBmb3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfQklUX1JBVEUsIHRh
cmdldEJpdHJhdGVCcHMpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoImJpdHJhdGUtbW9kZSIs
IFZJREVPX0NvbnRyb2xSYXRlQ29uc3RhbnQpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVk
aWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCwgcHJvcGVydGllcy5jb2xvckZvcm1hdCk7Ci0gICAg
ICBmb3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfRlJBTUVfUkFURSwgdGFyZ2V0RnBz
KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9JX0ZSQU1FX0lOVEVS
VkFMLCBrZXlGcmFtZUludGVydmFsU2VjKTsKLSAgICAgIGlmIChjb25maWd1cmVIMjY0SGlnaFBy
b2ZpbGUpIHsKLSAgICAgICAgZm9ybWF0LnNldEludGVnZXIoInByb2ZpbGUiLCBWSURFT19BVkNQ
cm9maWxlSGlnaCk7Ci0gICAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKCJsZXZlbCIsIFZJREVPX0FW
Q0xldmVsMyk7Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiICBGb3JtYXQ6ICIgKyBm
b3JtYXQpOwotICAgICAgbWVkaWFDb2RlYyA9IGNyZWF0ZUJ5Q29kZWNOYW1lKHByb3BlcnRpZXMu
Y29kZWNOYW1lKTsKLSAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgICBpZiAobWVkaWFDb2Rl
YyA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW4gbm90IGNyZWF0ZSBtZWRp
YSBlbmNvZGVyIik7Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQotICAgICAgbWVkaWFDb2RlYy5jb25maWd1cmUoZm9ybWF0LCBudWxsLCBudWxsLCBN
ZWRpYUNvZGVjLkNPTkZJR1VSRV9GTEFHX0VOQ09ERSk7Ci0KLSAgICAgIGlmICh1c2VTdXJmYWNl
KSB7Ci0gICAgICAgIGVnbEJhc2UgPQotICAgICAgICAgICAgRWdsQmFzZS5jcmVhdGVFZ2wxNCgo
RWdsQmFzZTE0LkNvbnRleHQpIGdldEVnbENvbnRleHQoKSwgRWdsQmFzZS5DT05GSUdfUkVDT1JE
QUJMRSk7Ci0gICAgICAgIC8vIENyZWF0ZSBhbiBpbnB1dCBzdXJmYWNlIGFuZCBrZWVwIGEgcmVm
ZXJlbmNlIHNpbmNlIHdlIG11c3QgcmVsZWFzZSB0aGUgc3VyZmFjZSB3aGVuIGRvbmUuCi0gICAg
ICAgIGlucHV0U3VyZmFjZSA9IG1lZGlhQ29kZWMuY3JlYXRlSW5wdXRTdXJmYWNlKCk7Ci0gICAg
ICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShpbnB1dFN1cmZhY2UpOwotICAgICAgICBkcmF3ZXIg
PSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgICB9Ci0gICAgICBtZWRpYUNvZGVjLnN0YXJ0KCk7
Ci0gICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiT3V0cHV0IGJ1ZmZlcnM6ICIgKyBvdXRwdXRCdWZmZXJzLmxl
bmd0aCk7Ci0KLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgImluaXRFbmNvZGUgZmFpbGVkIiwgZSk7Ci0gICAgICByZWxlYXNlKCk7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
QENhbGxlZEJ5TmF0aXZlVW5jaGVja2VkCi0gIEJ5dGVCdWZmZXJbXSBnZXRJbnB1dEJ1ZmZlcnMo
KSB7Ci0gICAgQnl0ZUJ1ZmZlcltdIGlucHV0QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0SW5wdXRC
dWZmZXJzKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIklucHV0IGJ1ZmZlcnM6ICIgKyBpbnB1dEJ1
ZmZlcnMubGVuZ3RoKTsKLSAgICByZXR1cm4gaW5wdXRCdWZmZXJzOwotICB9Ci0KLSAgdm9pZCBj
aGVja0tleUZyYW1lUmVxdWlyZWQoYm9vbGVhbiByZXF1ZXN0ZWRLZXlGcmFtZSwgbG9uZyBwcmVz
ZW50YXRpb25UaW1lc3RhbXBVcykgewotICAgIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wTXMg
PSAocHJlc2VudGF0aW9uVGltZXN0YW1wVXMgKyA1MDApIC8gMTAwMDsKLSAgICBpZiAobGFzdEtl
eUZyYW1lTXMgPCAwKSB7Ci0gICAgICBsYXN0S2V5RnJhbWVNcyA9IHByZXNlbnRhdGlvblRpbWVz
dGFtcE1zOwotICAgIH0KLSAgICBib29sZWFuIGZvcmNlZEtleUZyYW1lID0gZmFsc2U7Ci0gICAg
aWYgKCFyZXF1ZXN0ZWRLZXlGcmFtZSAmJiBmb3JjZWRLZXlGcmFtZU1zID4gMAotICAgICAgICAm
JiBwcmVzZW50YXRpb25UaW1lc3RhbXBNcyA+IGxhc3RLZXlGcmFtZU1zICsgZm9yY2VkS2V5RnJh
bWVNcykgewotICAgICAgZm9yY2VkS2V5RnJhbWUgPSB0cnVlOwotICAgIH0KLSAgICBpZiAocmVx
dWVzdGVkS2V5RnJhbWUgfHwgZm9yY2VkS2V5RnJhbWUpIHsKLSAgICAgIC8vIElkZWFsbHkgTWVk
aWFDb2RlYyB3b3VsZCBob25vciBCVUZGRVJfRkxBR19TWU5DX0ZSQU1FIHNvIHdlIGNvdWxkCi0g
ICAgICAvLyBpbmRpY2F0ZSB0aGlzIGluIHF1ZXVlSW5wdXRCdWZmZXIoKSBiZWxvdyBhbmQgZ3Vh
cmFudGVlIF90aGlzXyBmcmFtZQotICAgICAgLy8gYmUgZW5jb2RlZCBhcyBhIGtleSBmcmFtZSwg
YnV0IHNhZGx5IHRoYXQgZmxhZyBpcyBpZ25vcmVkLiAgSW5zdGVhZCwKLSAgICAgIC8vIHdlIHJl
cXVlc3QgYSBrZXkgZnJhbWUgInNvb24iLgotICAgICAgaWYgKHJlcXVlc3RlZEtleUZyYW1lKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5jIGZyYW1lIHJlcXVlc3QiKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5jIGZyYW1lIGZvcmNlZCIpOwotICAg
ICAgfQotICAgICAgQnVuZGxlIGIgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICBiLnB1dEludChNZWRp
YUNvZGVjLlBBUkFNRVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FLCAwKTsKLSAgICAgIG1lZGlh
Q29kZWMuc2V0UGFyYW1ldGVycyhiKTsKLSAgICAgIGxhc3RLZXlGcmFtZU1zID0gcHJlc2VudGF0
aW9uVGltZXN0YW1wTXM7Ci0gICAgfQotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlVW5jaGVja2Vk
Ci0gIGJvb2xlYW4gZW5jb2RlQnVmZmVyKAotICAgICAgYm9vbGVhbiBpc0tleWZyYW1lLCBpbnQg
aW5wdXRCdWZmZXIsIGludCBzaXplLCBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSB7Ci0g
ICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgY2hlY2tLZXlG
cmFtZVJlcXVpcmVkKGlzS2V5ZnJhbWUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKTsKLSAgICAg
IG1lZGlhQ29kZWMucXVldWVJbnB1dEJ1ZmZlcihpbnB1dEJ1ZmZlciwgMCwgc2l6ZSwgcHJlc2Vu
dGF0aW9uVGltZXN0YW1wVXMsIDApOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJlbmNvZGVC
dWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAg
LyoqCi0gICAqIEVuY29kZXMgYSBuZXcgc3R5bGUgVmlkZW9GcmFtZS4gfGJ1ZmZlckluZGV4fCBp
cyAtMSBpZiB3ZSBhcmUgbm90IGVuY29kaW5nIGluIHN1cmZhY2UgbW9kZS4KLSAgICovCi0gIEBD
YWxsZWRCeU5hdGl2ZVVuY2hlY2tlZAotICBib29sZWFuIGVuY29kZUZyYW1lKGxvbmcgbmF0aXZl
RW5jb2RlciwgYm9vbGVhbiBpc0tleWZyYW1lLCBWaWRlb0ZyYW1lIGZyYW1lLCBpbnQgYnVmZmVy
SW5kZXgsCi0gICAgICBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSB7Ci0gICAgY2hlY2tP
bk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgY2hlY2tLZXlGcmFtZVJlcXVp
cmVkKGlzS2V5ZnJhbWUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKTsKLQotICAgICAgVmlkZW9G
cmFtZS5CdWZmZXIgYnVmZmVyID0gZnJhbWUuZ2V0QnVmZmVyKCk7Ci0gICAgICBpZiAoYnVmZmVy
IGluc3RhbmNlb2YgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyKSB7Ci0gICAgICAgIFZpZGVvRnJh
bWUuVGV4dHVyZUJ1ZmZlciB0ZXh0dXJlQnVmZmVyID0gKFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZl
cikgYnVmZmVyOwotICAgICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICAgIC8vIFRP
RE8ocGVya2opOiBnbENsZWFyKCkgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBzaW5jZSBldmVyeSBw
aXhlbCBpcyBjb3ZlcmVkIGFueXdheSwKLSAgICAgICAgLy8gYnV0IGl0J3MgYSB3b3JrYXJvdW5k
IGZvciBidWcgd2VicnRjOjUxNDcuCi0gICAgICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9D
T0xPUl9CVUZGRVJfQklUKTsKLSAgICAgICAgVmlkZW9GcmFtZURyYXdlci5kcmF3VGV4dHVyZShk
cmF3ZXIsIHRleHR1cmVCdWZmZXIsIG5ldyBNYXRyaXgoKSAvKiByZW5kZXJNYXRyaXggKi8sIHdp
ZHRoLAotICAgICAgICAgICAgaGVpZ2h0LCAwIC8qIHZpZXdwb3J0WCAqLywgMCAvKiB2aWV3cG9y
dFkgKi8sIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKFRpbWVV
bml0Lk1JQ1JPU0VDT05EUy50b05hbm9zKHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgaTQyMEJ1ZmZlciA9IGJ1
ZmZlci50b0k0MjAoKTsKLSAgICAgICAgZmluYWwgaW50IGNocm9tYUhlaWdodCA9IChoZWlnaHQg
KyAxKSAvIDI7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVkgPSBpNDIwQnVmZmVyLmdl
dERhdGFZKCk7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVUgPSBpNDIwQnVmZmVyLmdl
dERhdGFVKCk7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVYgPSBpNDIwQnVmZmVyLmdl
dERhdGFWKCk7Ci0gICAgICAgIGZpbmFsIGludCBzdHJpZGVZID0gaTQyMEJ1ZmZlci5nZXRTdHJp
ZGVZKCk7Ci0gICAgICAgIGZpbmFsIGludCBzdHJpZGVVID0gaTQyMEJ1ZmZlci5nZXRTdHJpZGVV
KCk7Ci0gICAgICAgIGZpbmFsIGludCBzdHJpZGVWID0gaTQyMEJ1ZmZlci5nZXRTdHJpZGVWKCk7
Ci0gICAgICAgIGlmIChkYXRhWS5jYXBhY2l0eSgpIDwgc3RyaWRlWSAqIGhlaWdodCkgewotICAg
ICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJZLXBsYW5lIGJ1ZmZlciBzaXplIHRv
byBzbWFsbC4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGF0YVUuY2FwYWNpdHkoKSA8IHN0
cmlkZVUgKiBjaHJvbWFIZWlnaHQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiVS1wbGFuZSBidWZmZXIgc2l6ZSB0b28gc21hbGwuIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGRhdGFWLmNhcGFjaXR5KCkgPCBzdHJpZGVWICogY2hyb21hSGVpZ2h0KSB7Ci0gICAg
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlYtcGxhbmUgYnVmZmVyIHNpemUgdG9v
IHNtYWxsLiIpOwotICAgICAgICB9Ci0gICAgICAgIG5hdGl2ZUZpbGxJbnB1dEJ1ZmZlcigKLSAg
ICAgICAgICAgIG5hdGl2ZUVuY29kZXIsIGJ1ZmZlckluZGV4LCBkYXRhWSwgc3RyaWRlWSwgZGF0
YVUsIHN0cmlkZVUsIGRhdGFWLCBzdHJpZGVWKTsKLSAgICAgICAgaTQyMEJ1ZmZlci5yZWxlYXNl
KCk7Ci0gICAgICAgIC8vIEk0MjAgY29uc2lzdHMgb2Ygb25lIGZ1bGwtcmVzb2x1dGlvbiBhbmQg
dHdvIGhhbGYtcmVzb2x1dGlvbiBwbGFuZXMuCi0gICAgICAgIC8vIDEgKyAxIC8gNCArIDEgLyA0
ID0gMyAvIDIKLSAgICAgICAgaW50IHl1dlNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDMgLyAyOwot
ICAgICAgICBtZWRpYUNvZGVjLnF1ZXVlSW5wdXRCdWZmZXIoYnVmZmVySW5kZXgsIDAsIHl1dlNp
emUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzLCAwKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgImVuY29kZUZyYW1lIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZVVuY2hlY2tlZAotICB2b2lkIHJlbGVhc2UoKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIiKTsKLSAgICBjaGVja09u
TWVkaWFDb2RlY1RocmVhZCgpOwotCi0gICAgY2xhc3MgQ2F1Z2h0RXhjZXB0aW9uIHsKLSAgICAg
IEV4Y2VwdGlvbiBlOwotICAgIH0KLSAgICBmaW5hbCBDYXVnaHRFeGNlcHRpb24gY2F1Z2h0RXhj
ZXB0aW9uID0gbmV3IENhdWdodEV4Y2VwdGlvbigpOwotICAgIGJvb2xlYW4gc3RvcEh1bmcgPSBm
YWxzZTsKLQotICAgIGlmIChtZWRpYUNvZGVjICE9IG51bGwpIHsKLSAgICAgIC8vIFJ1biBNZWRp
YWNvZGVjIHN0b3AoKSBhbmQgcmVsZWFzZSgpIG9uIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBzb21l
dGltZQotICAgICAgLy8gTWVkaWFjb2RlYy5zdG9wKCkgbWF5IGhhbmcuCi0gICAgICBmaW5hbCBD
b3VudERvd25MYXRjaCByZWxlYXNlRG9uZSA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLQotICAg
ICAgUnVubmFibGUgcnVuTWVkaWFDb2RlY1JlbGVhc2UgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgTG9n
Z2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIgb24gcmVsZWFzZSB0aHJlYWQiKTsKLSAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgbWVkaWFDb2RlYy5zdG9wKCk7Ci0gICAgICAgICAg
fSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRp
YSBlbmNvZGVyIHN0b3AgZmFpbGVkIiwgZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICBtZWRpYUNvZGVjLnJlbGVhc2UoKTsKLSAgICAgICAgICB9IGNhdGNoIChF
eGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGVuY29kZXIg
cmVsZWFzZSBmYWlsZWQiLCBlKTsKLSAgICAgICAgICAgIGNhdWdodEV4Y2VwdGlvbi5lID0gZTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29k
ZXIgb24gcmVsZWFzZSB0aHJlYWQgZG9uZSIpOwotCi0gICAgICAgICAgcmVsZWFzZURvbmUuY291
bnREb3duKCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBuZXcgVGhyZWFkKHJ1bk1lZGlh
Q29kZWNSZWxlYXNlKS5zdGFydCgpOwotCi0gICAgICBpZiAoIVRocmVhZFV0aWxzLmF3YWl0VW5p
bnRlcnJ1cHRpYmx5KHJlbGVhc2VEb25lLCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMp
KSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRpYSBlbmNvZGVyIHJlbGVhc2UgdGltZW91
dCIpOwotICAgICAgICBzdG9wSHVuZyA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIG1lZGlhQ29k
ZWMgPSBudWxsOwotICAgIH0KLQotICAgIG1lZGlhQ29kZWNUaHJlYWQgPSBudWxsOwotICAgIGlm
IChkcmF3ZXIgIT0gbnVsbCkgewotICAgICAgZHJhd2VyLnJlbGVhc2UoKTsKLSAgICAgIGRyYXdl
ciA9IG51bGw7Ci0gICAgfQotICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgIGVnbEJh
c2UucmVsZWFzZSgpOwotICAgICAgZWdsQmFzZSA9IG51bGw7Ci0gICAgfQotICAgIGlmIChpbnB1
dFN1cmZhY2UgIT0gbnVsbCkgewotICAgICAgaW5wdXRTdXJmYWNlLnJlbGVhc2UoKTsKLSAgICAg
IGlucHV0U3VyZmFjZSA9IG51bGw7Ci0gICAgfQotICAgIHJ1bm5pbmdJbnN0YW5jZSA9IG51bGw7
Ci0KLSAgICBpZiAoc3RvcEh1bmcpIHsKLSAgICAgIGNvZGVjRXJyb3JzKys7Ci0gICAgICBpZiAo
ZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJJbnZva2Ug
Y29kZWMgZXJyb3IgY2FsbGJhY2suIEVycm9yczogIiArIGNvZGVjRXJyb3JzKTsKLSAgICAgICAg
ZXJyb3JDYWxsYmFjay5vbk1lZGlhQ29kZWNWaWRlb0VuY29kZXJDcml0aWNhbEVycm9yKGNvZGVj
RXJyb3JzKTsKLSAgICAgIH0KLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJNZWRp
YSBlbmNvZGVyIHJlbGVhc2UgdGltZW91dC4iKTsKLSAgICB9Ci0KLSAgICAvLyBSZS10aHJvdyBh
bnkgcnVudGltZSBleGNlcHRpb24gY2F1Z2h0IGluc2lkZSB0aGUgb3RoZXIgdGhyZWFkLiBTaW5j
ZSB0aGlzIGlzIGFuIGludm9rZSwgYWRkCi0gICAgLy8gc3RhY2sgdHJhY2UgZm9yIHRoZSB3YWl0
aW5nIHRocmVhZCBhcyB3ZWxsLgotICAgIGlmIChjYXVnaHRFeGNlcHRpb24uZSAhPSBudWxsKSB7
Ci0gICAgICBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHJ1bnRpbWVFeGNlcHRpb24gPSBuZXcgUnVu
dGltZUV4Y2VwdGlvbihjYXVnaHRFeGNlcHRpb24uZSk7Ci0gICAgICBydW50aW1lRXhjZXB0aW9u
LnNldFN0YWNrVHJhY2UoVGhyZWFkVXRpbHMuY29uY2F0U3RhY2tUcmFjZXMoCi0gICAgICAgICAg
Y2F1Z2h0RXhjZXB0aW9uLmUuZ2V0U3RhY2tUcmFjZSgpLCBydW50aW1lRXhjZXB0aW9uLmdldFN0
YWNrVHJhY2UoKSkpOwotICAgICAgdGhyb3cgcnVudGltZUV4Y2VwdGlvbjsKLSAgICB9Ci0KLSAg
ICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRW5jb2RlciBkb25lIik7Ci0gIH0KLQotICBA
Q2FsbGVkQnlOYXRpdmVVbmNoZWNrZWQKLSAgcHJpdmF0ZSBib29sZWFuIHNldFJhdGVzKGludCBr
YnBzLCBpbnQgZnJhbWVSYXRlKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLQot
ICAgIGludCBjb2RlY0JpdHJhdGVCcHMgPSAxMDAwICoga2JwczsKLSAgICBpZiAoYml0cmF0ZUFk
anVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQp
IHsKLSAgICAgIGJpdHJhdGVBY2N1bXVsYXRvck1heCA9IGNvZGVjQml0cmF0ZUJwcyAvIDguMDsK
LSAgICAgIGlmICh0YXJnZXRCaXRyYXRlQnBzID4gMCAmJiBjb2RlY0JpdHJhdGVCcHMgPCB0YXJn
ZXRCaXRyYXRlQnBzKSB7Ci0gICAgICAgIC8vIFJlc2NhbGUgdGhlIGFjY3VtdWxhdG9yIGxldmVs
IGlmIHRoZSBhY2N1bXVsYXRvciBtYXggZGVjcmVhc2VzCi0gICAgICAgIGJpdHJhdGVBY2N1bXVs
YXRvciA9IGJpdHJhdGVBY2N1bXVsYXRvciAqIGNvZGVjQml0cmF0ZUJwcyAvIHRhcmdldEJpdHJh
dGVCcHM7Ci0gICAgICB9Ci0gICAgfQotICAgIHRhcmdldEJpdHJhdGVCcHMgPSBjb2RlY0JpdHJh
dGVCcHM7Ci0gICAgdGFyZ2V0RnBzID0gZnJhbWVSYXRlOwotCi0gICAgLy8gQWRqdXN0IGFjdHVh
bCBlbmNvZGVyIGJpdHJhdGUgYmFzZWQgb24gYml0cmF0ZSBhZGp1c3RtZW50IHR5cGUuCi0gICAg
aWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuRlJBTUVS
QVRFX0FESlVTVE1FTlQgJiYgdGFyZ2V0RnBzID4gMCkgewotICAgICAgY29kZWNCaXRyYXRlQnBz
ID0gQklUUkFURV9BREpVU1RNRU5UX0ZQUyAqIHRhcmdldEJpdHJhdGVCcHMgLyB0YXJnZXRGcHM7
Ci0gICAgICBMb2dnaW5nLnYoVEFHLAotICAgICAgICAgICJzZXRSYXRlczogIiArIGticHMgKyAi
IC0+ICIgKyAoY29kZWNCaXRyYXRlQnBzIC8gMTAwMCkgKyAiIGticHMuIEZwczogIiArIHRhcmdl
dEZwcyk7Ci0gICAgfSBlbHNlIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5cGUgPT0gQml0cmF0ZUFk
anVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewotICAgICAgTG9nZ2luZy52KFRBRywg
InNldFJhdGVzOiAiICsga2JwcyArICIga2Jwcy4gRnBzOiAiICsgdGFyZ2V0RnBzICsgIi4gRXhw
U2NhbGU6ICIKLSAgICAgICAgICAgICAgKyBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKTsKLSAg
ICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwICE9IDApIHsKLSAgICAgICAgY29kZWNC
aXRyYXRlQnBzID0gKGludCkgKGNvZGVjQml0cmF0ZUJwcyAqIGdldEJpdHJhdGVTY2FsZShiaXRy
YXRlQWRqdXN0bWVudFNjYWxlRXhwKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIExv
Z2dpbmcudihUQUcsICJzZXRSYXRlczogIiArIGticHMgKyAiIGticHMuIEZwczogIiArIHRhcmdl
dEZwcyk7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIEJ1bmRsZSBwYXJhbXMgPSBuZXcgQnVu
ZGxlKCk7Ci0gICAgICBwYXJhbXMucHV0SW50KE1lZGlhQ29kZWMuUEFSQU1FVEVSX0tFWV9WSURF
T19CSVRSQVRFLCBjb2RlY0JpdHJhdGVCcHMpOwotICAgICAgbWVkaWFDb2RlYy5zZXRQYXJhbWV0
ZXJzKHBhcmFtcyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3Rh
dGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInNldFJhdGVzIGZhaWxlZCIs
IGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8vIERlcXVldWUgYW4g
aW5wdXQgYnVmZmVyIGFuZCByZXR1cm4gaXRzIGluZGV4LCAtMSBpZiBubyBpbnB1dCBidWZmZXIg
aXMKLSAgLy8gYXZhaWxhYmxlLCBvciAtMiBpZiB0aGUgY29kZWMgaXMgbm8gbG9uZ2VyIG9wZXJh
dGl2ZS4KLSAgQENhbGxlZEJ5TmF0aXZlVW5jaGVja2VkCi0gIGludCBkZXF1ZXVlSW5wdXRCdWZm
ZXIoKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAg
cmV0dXJuIG1lZGlhQ29kZWMuZGVxdWV1ZUlucHV0QnVmZmVyKERFUVVFVUVfVElNRU9VVCk7Ci0g
ICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJkZXF1ZXVlSW50cHV0QnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIC0yOwot
ICAgIH0KLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVPdXRwdXRCdWZmZXIo
KSBiZWxvdy4KLSAgc3RhdGljIGNsYXNzIE91dHB1dEJ1ZmZlckluZm8gewotICAgIHB1YmxpYyBP
dXRwdXRCdWZmZXJJbmZvKAotICAgICAgICBpbnQgaW5kZXgsIEJ5dGVCdWZmZXIgYnVmZmVyLCBi
b29sZWFuIGlzS2V5RnJhbWUsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpIHsKLSAgICAg
IHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgICAg
dGhpcy5pc0tleUZyYW1lID0gaXNLZXlGcmFtZTsKLSAgICAgIHRoaXMucHJlc2VudGF0aW9uVGlt
ZXN0YW1wVXMgPSBwcmVzZW50YXRpb25UaW1lc3RhbXBVczsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
ZmluYWwgaW50IGluZGV4OwotICAgIHB1YmxpYyBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlcjsKLSAg
ICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0tleUZyYW1lOwotICAgIHB1YmxpYyBmaW5hbCBsb25n
IHByZXNlbnRhdGlvblRpbWVzdGFtcFVzOwotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJPdXRwdXRC
dWZmZXJJbmZvIikKLSAgICBpbnQgZ2V0SW5kZXgoKSB7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJPdXRwdXRCdWZmZXJJbmZvIikKLSAgICBCeXRl
QnVmZmVyIGdldEJ1ZmZlcigpIHsKLSAgICAgIHJldHVybiBidWZmZXI7Ci0gICAgfQotCi0gICAg
QENhbGxlZEJ5TmF0aXZlKCJPdXRwdXRCdWZmZXJJbmZvIikKLSAgICBib29sZWFuIGlzS2V5RnJh
bWUoKSB7Ci0gICAgICByZXR1cm4gaXNLZXlGcmFtZTsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlO
YXRpdmUoIk91dHB1dEJ1ZmZlckluZm8iKQotICAgIGxvbmcgZ2V0UHJlc2VudGF0aW9uVGltZXN0
YW1wVXMoKSB7Ci0gICAgICByZXR1cm4gcHJlc2VudGF0aW9uVGltZXN0YW1wVXM7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbmQgcmV0dXJuIGFuIG91dHB1dCBidWZmZXIsIG9yIG51bGwg
aWYgbm8gb3V0cHV0IGlzIHJlYWR5LiAgUmV0dXJuCi0gIC8vIGEgZmFrZSBPdXRwdXRCdWZmZXJJ
bmZvIHdpdGggaW5kZXggLTEgaWYgdGhlIGNvZGVjIGlzIG5vIGxvbmdlciBvcGVyYWJsZS4KLSAg
QE51bGxhYmxlCi0gIEBDYWxsZWRCeU5hdGl2ZVVuY2hlY2tlZAotICBPdXRwdXRCdWZmZXJJbmZv
IGRlcXVldWVPdXRwdXRCdWZmZXIoKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsK
LSAgICB0cnkgewotICAgICAgTWVkaWFDb2RlYy5CdWZmZXJJbmZvIGluZm8gPSBuZXcgTWVkaWFD
b2RlYy5CdWZmZXJJbmZvKCk7Ci0gICAgICBpbnQgcmVzdWx0ID0gbWVkaWFDb2RlYy5kZXF1ZXVl
T3V0cHV0QnVmZmVyKGluZm8sIERFUVVFVUVfVElNRU9VVCk7Ci0gICAgICAvLyBDaGVjayBpZiB0
aGlzIGlzIGNvbmZpZyBmcmFtZSBhbmQgc2F2ZSBjb25maWd1cmF0aW9uIGRhdGEuCi0gICAgICBp
ZiAocmVzdWx0ID49IDApIHsKLSAgICAgICAgYm9vbGVhbiBpc0NvbmZpZ0ZyYW1lID0gKGluZm8u
ZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZFUl9GTEFHX0NPREVDX0NPTkZJRykgIT0gMDsKLSAgICAg
ICAgaWYgKGlzQ29uZmlnRnJhbWUpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ29uZmln
IGZyYW1lIGdlbmVyYXRlZC4gT2Zmc2V0OiAiICsgaW5mby5vZmZzZXQgKyAiLiBTaXplOiAiICsg
aW5mby5zaXplKTsKLSAgICAgICAgICBjb25maWdEYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURp
cmVjdChpbmZvLnNpemUpOwotICAgICAgICAgIG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5wb3NpdGlv
bihpbmZvLm9mZnNldCk7Ci0gICAgICAgICAgb3V0cHV0QnVmZmVyc1tyZXN1bHRdLmxpbWl0KGlu
Zm8ub2Zmc2V0ICsgaW5mby5zaXplKTsKLSAgICAgICAgICBjb25maWdEYXRhLnB1dChvdXRwdXRC
dWZmZXJzW3Jlc3VsdF0pOwotICAgICAgICAgIC8vIExvZyBmZXcgU1BTIGhlYWRlciBieXRlcyB0
byBjaGVjayBwcm9maWxlIGFuZCBsZXZlbC4KLSAgICAgICAgICBTdHJpbmcgc3BzRGF0YSA9ICIi
OwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGluZm8uc2l6ZSA8IDggPyBpbmZvLnNp
emUgOiA4KTsgaSsrKSB7Ci0gICAgICAgICAgICBzcHNEYXRhICs9IEludGVnZXIudG9IZXhTdHJp
bmcoY29uZmlnRGF0YS5nZXQoaSkgJiAweGZmKSArICIgIjsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgTG9nZ2luZy5kKFRBRywgc3BzRGF0YSk7Ci0gICAgICAgICAgLy8gUmVsZWFzZSBidWZmZXIg
YmFjay4KLSAgICAgICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIocmVzdWx0LCBm
YWxzZSk7Ci0gICAgICAgICAgLy8gUXVlcnkgbmV4dCBvdXRwdXQuCi0gICAgICAgICAgcmVzdWx0
ID0gbWVkaWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIERFUVVFVUVfVElNRU9VVCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICAv
LyBNZWRpYUNvZGVjIGRvZXNuJ3QgY2FyZSBhYm91dCBCdWZmZXIgcG9zaXRpb24vcmVtYWluaW5n
L2V0YyBzbyB3ZSBjYW4KLSAgICAgICAgLy8gbWVzcyB3aXRoIHRoZW0gdG8gZ2V0IGEgc2xpY2Ug
YW5kIGF2b2lkIGhhdmluZyB0byBwYXNzIGV4dHJhCi0gICAgICAgIC8vIChCdWZmZXJJbmZvLXJl
bGF0ZWQpIHBhcmFtZXRlcnMgYmFjayB0byBDKysuCi0gICAgICAgIEJ5dGVCdWZmZXIgb3V0cHV0
QnVmZmVyID0gb3V0cHV0QnVmZmVyc1tyZXN1bHRdLmR1cGxpY2F0ZSgpOwotICAgICAgICBvdXRw
dXRCdWZmZXIucG9zaXRpb24oaW5mby5vZmZzZXQpOwotICAgICAgICBvdXRwdXRCdWZmZXIubGlt
aXQoaW5mby5vZmZzZXQgKyBpbmZvLnNpemUpOwotICAgICAgICByZXBvcnRFbmNvZGVkRnJhbWUo
aW5mby5zaXplKTsKLQotICAgICAgICAvLyBDaGVjayBrZXkgZnJhbWUgZmxhZy4KLSAgICAgICAg
Ym9vbGVhbiBpc0tleUZyYW1lID0gKGluZm8uZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZFUl9GTEFH
X1NZTkNfRlJBTUUpICE9IDA7Ci0gICAgICAgIGlmIChpc0tleUZyYW1lKSB7Ci0gICAgICAgICAg
TG9nZ2luZy5kKFRBRywgIlN5bmMgZnJhbWUgZ2VuZXJhdGVkIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzS2V5RnJhbWUgJiYgdHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19I
MjY0KSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkFwcGVuZGluZyBjb25maWcgZnJhbWUg
b2Ygc2l6ZSAiICsgY29uZmlnRGF0YS5jYXBhY2l0eSgpCi0gICAgICAgICAgICAgICAgICArICIg
dG8gb3V0cHV0IGJ1ZmZlciB3aXRoIG9mZnNldCAiICsgaW5mby5vZmZzZXQgKyAiLCBzaXplICIg
KyBpbmZvLnNpemUpOwotICAgICAgICAgIC8vIEZvciBILjI2NCBrZXkgZnJhbWUgYXBwZW5kIFNQ
UyBhbmQgUFBTIE5BTHMgYXQgdGhlIHN0YXJ0Ci0gICAgICAgICAgQnl0ZUJ1ZmZlciBrZXlGcmFt
ZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoY29uZmlnRGF0YS5jYXBhY2l0eSgp
ICsgaW5mby5zaXplKTsKLSAgICAgICAgICBjb25maWdEYXRhLnJld2luZCgpOwotICAgICAgICAg
IGtleUZyYW1lQnVmZmVyLnB1dChjb25maWdEYXRhKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZl
ci5wdXQob3V0cHV0QnVmZmVyKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZlci5wb3NpdGlvbigw
KTsKLSAgICAgICAgICByZXR1cm4gbmV3IE91dHB1dEJ1ZmZlckluZm8ocmVzdWx0LCBrZXlGcmFt
ZUJ1ZmZlciwgaXNLZXlGcmFtZSwgaW5mby5wcmVzZW50YXRpb25UaW1lVXMpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHJldHVybiBuZXcgT3V0cHV0QnVmZmVySW5mbygKLSAgICAgICAg
ICAgICAgcmVzdWx0LCBvdXRwdXRCdWZmZXIuc2xpY2UoKSwgaXNLZXlGcmFtZSwgaW5mby5wcmVz
ZW50YXRpb25UaW1lVXMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBN
ZWRpYUNvZGVjLklORk9fT1VUUFVUX0JVRkZFUlNfQ0hBTkdFRCkgewotICAgICAgICBvdXRwdXRC
dWZmZXJzID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0gICAgICAgIHJldHVybiBk
ZXF1ZXVlT3V0cHV0QnVmZmVyKCk7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNv
ZGVjLklORk9fT1VUUFVUX0ZPUk1BVF9DSEFOR0VEKSB7Ci0gICAgICAgIHJldHVybiBkZXF1ZXVl
T3V0cHV0QnVmZmVyKCk7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNvZGVjLklO
Rk9fVFJZX0FHQUlOX0xBVEVSKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImRlcXVldWVPdXRwdXRCdWZmZXI6ICIgKyBy
ZXN1bHQpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiZGVxdWV1ZU91dHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJl
dHVybiBuZXcgT3V0cHV0QnVmZmVySW5mbygtMSwgbnVsbCwgZmFsc2UsIC0xKTsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIGRvdWJsZSBnZXRCaXRyYXRlU2NhbGUoaW50IGJpdHJhdGVBZGp1c3Rt
ZW50U2NhbGVFeHApIHsKLSAgICByZXR1cm4gTWF0aC5wb3coQklUUkFURV9DT1JSRUNUSU9OX01B
WF9TQ0FMRSwKLSAgICAgICAgKGRvdWJsZSkgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCAvIEJJ
VFJBVEVfQ09SUkVDVElPTl9TVEVQUyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RW5j
b2RlZEZyYW1lKGludCBzaXplKSB7Ci0gICAgaWYgKHRhcmdldEZwcyA9PSAwIHx8IGJpdHJhdGVB
ZGp1c3RtZW50VHlwZSAhPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuRFlOQU1JQ19BREpVU1RNRU5U
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjdW11bGF0ZSB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIGFjdGlhbCBhbmQgZXhwZWN0ZWQgZnJhbWUgc2l6ZXMuCi0gICAgZG91Ymxl
IGV4cGVjdGVkQnl0ZXNQZXJGcmFtZSA9IHRhcmdldEJpdHJhdGVCcHMgLyAoOC4wICogdGFyZ2V0
RnBzKTsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3IgKz0gKHNpemUgLSBleHBlY3RlZEJ5dGVzUGVy
RnJhbWUpOwotICAgIGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyArPSAxMDAwLjAgLyB0YXJnZXRG
cHM7Ci0KLSAgICAvLyBQdXQgYSBjYXAgb24gdGhlIGFjY3VtdWxhdG9yLCBpLmUuLCBkb24ndCBs
ZXQgaXQgZ3JvdyBiZXlvbmQgc29tZSBsZXZlbCB0byBhdm9pZAotICAgIC8vIHVzaW5nIHRvbyBv
bGQgZGF0YSBmb3IgYml0cmF0ZSBhZGp1c3RtZW50LgotICAgIGRvdWJsZSBiaXRyYXRlQWNjdW11
bGF0b3JDYXAgPSBCSVRSQVRFX0NPUlJFQ1RJT05fU0VDICogYml0cmF0ZUFjY3VtdWxhdG9yTWF4
OwotICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IE1hdGgubWluKGJpdHJhdGVBY2N1bXVsYXRvciwg
Yml0cmF0ZUFjY3VtdWxhdG9yQ2FwKTsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBNYXRoLm1h
eChiaXRyYXRlQWNjdW11bGF0b3IsIC1iaXRyYXRlQWNjdW11bGF0b3JDYXApOwotCi0gICAgLy8g
RG8gYml0cmF0ZSBhZGp1c3RtZW50IGV2ZXJ5IDMgc2Vjb25kcyBpZiBhY3R1YWwgZW5jb2RlciBi
aXRyYXRlIGRldmlhdGVzIHRvbyBtdWNoCi0gICAgLy8gZm9ybSB0aGUgdGFyZ2V0IHZhbHVlLgot
ICAgIGlmIChiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPiAxMDAwICogQklUUkFURV9DT1JSRUNU
SU9OX1NFQykgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkFjYzogIiArIChpbnQpIGJpdHJhdGVB
Y2N1bXVsYXRvciArICIuIE1heDogIiArIChpbnQpIGJpdHJhdGVBY2N1bXVsYXRvck1heAotICAg
ICAgICAgICAgICArICIuIEV4cFNjYWxlOiAiICsgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCk7
Ci0gICAgICBib29sZWFuIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgICBpZiAoYml0cmF0ZUFjY3VtdWxhdG9yID4gYml0cmF0ZUFjY3VtdWxhdG9yTWF4KSB7Ci0g
ICAgICAgIC8vIEVuY29kZXIgZ2VuZXJhdGVzIHRvbyBoaWdoIGJpdHJhdGUgLSBuZWVkIHRvIHJl
ZHVjZSB0aGUgc2NhbGUuCi0gICAgICAgIGludCBiaXRyYXRlQWRqdXN0bWVudEluYyA9IChpbnQp
IChiaXRyYXRlQWNjdW11bGF0b3IgLyBiaXRyYXRlQWNjdW11bGF0b3JNYXggKyAwLjUpOwotICAg
ICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwIC09IGJpdHJhdGVBZGp1c3RtZW50SW5jOwot
ICAgICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBiaXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gICAg
ICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSBp
ZiAoYml0cmF0ZUFjY3VtdWxhdG9yIDwgLWJpdHJhdGVBY2N1bXVsYXRvck1heCkgewotICAgICAg
ICAvLyBFbmNvZGVyIGdlbmVyYXRlcyB0b28gbG93IGJpdHJhdGUgLSBuZWVkIHRvIGluY3JlYXNl
IHRoZSBzY2FsZS4KLSAgICAgICAgaW50IGJpdHJhdGVBZGp1c3RtZW50SW5jID0gKGludCkgKC1i
aXRyYXRlQWNjdW11bGF0b3IgLyBiaXRyYXRlQWNjdW11bGF0b3JNYXggKyAwLjUpOwotICAgICAg
ICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwICs9IGJpdHJhdGVBZGp1c3RtZW50SW5jOwotICAg
ICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSAtYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICAgICAg
ICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBp
ZiAoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUNoYW5nZWQpIHsKLSAgICAgICAgYml0cmF0ZUFkanVz
dG1lbnRTY2FsZUV4cCA9IE1hdGgubWluKGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAsIEJJVFJB
VEVfQ09SUkVDVElPTl9TVEVQUyk7Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAg
PSBNYXRoLm1heChiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwLCAtQklUUkFURV9DT1JSRUNUSU9O
X1NURVBTKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkFkanVzdGluZyBiaXRyYXRlIHNjYWxl
IHRvICIgKyBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwICsgIi4gVmFsdWU6ICIKLSAgICAgICAg
ICAgICAgICArIGdldEJpdHJhdGVTY2FsZShiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKSk7Ci0g
ICAgICAgIHNldFJhdGVzKHRhcmdldEJpdHJhdGVCcHMgLyAxMDAwLCB0YXJnZXRGcHMpOwotICAg
ICAgfQotICAgICAgYml0cmF0ZU9ic2VydmF0aW9uVGltZU1zID0gMDsKLSAgICB9Ci0gIH0KLQot
ICAvLyBSZWxlYXNlIGEgZGVxdWV1ZWQgb3V0cHV0IGJ1ZmZlciBiYWNrIHRvIHRoZSBjb2RlYyBm
b3IgcmUtdXNlLiAgUmV0dXJuCi0gIC8vIGZhbHNlIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIg
b3BlcmFibGUuCi0gIEBDYWxsZWRCeU5hdGl2ZVVuY2hlY2tlZAotICBib29sZWFuIHJlbGVhc2VP
dXRwdXRCdWZmZXIoaW50IGluZGV4KSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsK
LSAgICB0cnkgewotICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlT3V0cHV0QnVmZmVyKGluZGV4LCBm
YWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNl
cHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInJlbGVhc2VPdXRwdXRCdWZmZXIgZmFp
bGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgQENhbGxlZEJ5
TmF0aXZlCi0gIGludCBnZXRDb2xvckZvcm1hdCgpIHsKLSAgICByZXR1cm4gY29sb3JGb3JtYXQ7
Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgc3RhdGljIGJvb2xlYW4gaXNUZXh0dXJlQnVm
ZmVyKFZpZGVvRnJhbWUuQnVmZmVyIGJ1ZmZlcikgewotICAgIHJldHVybiBidWZmZXIgaW5zdGFu
Y2VvZiBWaWRlb0ZyYW1lLlRleHR1cmVCdWZmZXI7Ci0gIH0KLQotICAvKiogRmlsbHMgYW4gaW5w
dXRCdWZmZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggd2l0aCBkYXRhIGZyb20gdGhlIGJ5dGUgYnVm
ZmVycy4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlRmlsbElucHV0QnVm
ZmVyKGxvbmcgZW5jb2RlciwgaW50IGlucHV0QnVmZmVyLCBCeXRlQnVmZmVyIGRhdGFZLAotICAg
ICAgaW50IHN0cmlkZVksIEJ5dGVCdWZmZXIgZGF0YVUsIGludCBzdHJpZGVVLCBCeXRlQnVmZmVy
IGRhdGFWLCBpbnQgc3RyaWRlVik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2
ZUNyZWF0ZUVuY29kZXIoVmlkZW9Db2RlY0luZm8gaW5mbywgYm9vbGVhbiBoYXNFZ2wxNENvbnRl
eHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTWVkaWFDb25zdHJhaW50cy5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvTWVkaWFDb25zdHJhaW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyOGNmOGQxMTA3NzAwMGQxMzhjYjhlODVlNWViMDlhOGQ3ZDI2ZDBlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL01lZGlh
Q29uc3RyYWludHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9y
dC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBv
cnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogRGVzY3JpcHRpb24gb2YgbWVkaWEgY29uc3Ry
YWludHMgZm9yIHtAY29kZSBNZWRpYVN0cmVhbX0gYW5kCi0gKiB7QGNvZGUgUGVlckNvbm5lY3Rp
b259LgotICovCi1wdWJsaWMgY2xhc3MgTWVkaWFDb25zdHJhaW50cyB7Ci0gIC8qKiBTaW1wbGUg
U3RyaW5nIGtleS92YWx1ZSBwYWlyLiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEtleVZhbHVl
UGFpciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcga2V5OwotICAgIHByaXZhdGUgZmluYWwg
U3RyaW5nIHZhbHVlOwotCi0gICAgcHVibGljIEtleVZhbHVlUGFpcihTdHJpbmcga2V5LCBTdHJp
bmcgdmFsdWUpIHsKLSAgICAgIHRoaXMua2V5ID0ga2V5OwotICAgICAgdGhpcy52YWx1ZSA9IHZh
bHVlOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiS2V5VmFsdWVQYWlyIikKLSAgICBw
dWJsaWMgU3RyaW5nIGdldEtleSgpIHsKLSAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAg
QENhbGxlZEJ5TmF0aXZlKCJLZXlWYWx1ZVBhaXIiKQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFs
dWUoKSB7Ci0gICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBrZXkgKyAiOiAiICsgdmFs
dWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEBO
dWxsYWJsZSBPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlmICh0aGlzID09IG90aGVyKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKG90aGVyID09IG51bGwgfHwgZ2V0
Q2xhc3MoKSAhPSBvdGhlci5nZXRDbGFzcygpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIH0KLSAgICAgIEtleVZhbHVlUGFpciB0aGF0ID0gKEtleVZhbHVlUGFpcikgb3RoZXI7Ci0g
ICAgICByZXR1cm4ga2V5LmVxdWFscyh0aGF0LmtleSkgJiYgdmFsdWUuZXF1YWxzKHRoYXQudmFs
dWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7
Ci0gICAgICByZXR1cm4ga2V5Lmhhc2hDb2RlKCkgKyB2YWx1ZS5oYXNoQ29kZSgpOwotICAgIH0K
LSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMaXN0PEtleVZhbHVlUGFpcj4gbWFuZGF0b3J5OwotICBw
dWJsaWMgZmluYWwgTGlzdDxLZXlWYWx1ZVBhaXI+IG9wdGlvbmFsOwotCi0gIHB1YmxpYyBNZWRp
YUNvbnN0cmFpbnRzKCkgewotICAgIG1hbmRhdG9yeSA9IG5ldyBBcnJheUxpc3Q8S2V5VmFsdWVQ
YWlyPigpOwotICAgIG9wdGlvbmFsID0gbmV3IEFycmF5TGlzdDxLZXlWYWx1ZVBhaXI+KCk7Ci0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChM
aXN0PEtleVZhbHVlUGFpcj4gbGlzdCkgewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5l
dyBTdHJpbmdCdWlsZGVyKCJbIik7Ci0gICAgZm9yIChLZXlWYWx1ZVBhaXIgcGFpciA6IGxpc3Qp
IHsKLSAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpID4gMSkgewotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiLCAiKTsKLSAgICAgIH0KLSAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhaXIudG9TdHJpbmco
KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLmFwcGVuZCgiXSIpLnRvU3RyaW5nKCk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1
cm4gIm1hbmRhdG9yeTogIiArIHN0cmluZ2lmeUtleVZhbHVlUGFpckxpc3QobWFuZGF0b3J5KSAr
ICIsIG9wdGlvbmFsOiAiCi0gICAgICAgICsgc3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChvcHRp
b25hbCk7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgTGlzdDxLZXlWYWx1ZVBhaXI+IGdl
dE1hbmRhdG9yeSgpIHsKLSAgICByZXR1cm4gbWFuZGF0b3J5OwotICB9Ci0KLSAgQENhbGxlZEJ5
TmF0aXZlCi0gIExpc3Q8S2V5VmFsdWVQYWlyPiBnZXRPcHRpb25hbCgpIHsKLSAgICByZXR1cm4g
b3B0aW9uYWw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL01lZGlhU291cmNlLmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9NZWRpYVNvdXJjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MjQ1ZTNlMmViMmJjNjE3MWZjYWNlMDI2YTc5MDZkODExOTcxNDkwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL01lZGlh
U291cmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysr
IE1lZGlhU291cmNlSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIE1lZGlhU291cmNlIHsKLSAg
LyoqIFRyYWNrcyBNZWRpYVNvdXJjZUludGVyZmFjZS5Tb3VyY2VTdGF0ZSAqLwotICBwdWJsaWMg
ZW51bSBTdGF0ZSB7Ci0gICAgSU5JVElBTElaSU5HLAotICAgIExJVkUsCi0gICAgRU5ERUQsCi0g
ICAgTVVURUQ7Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlN0YXRlIikKLSAgICBzdGF0aWMgU3Rh
dGUgZnJvbU5hdGl2ZUluZGV4KGludCBuYXRpdmVJbmRleCkgewotICAgICAgcmV0dXJuIHZhbHVl
cygpW25hdGl2ZUluZGV4XTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFJlZkNvdW50
RGVsZWdhdGUgcmVmQ291bnREZWxlZ2F0ZTsKLSAgcHJpdmF0ZSBsb25nIG5hdGl2ZVNvdXJjZTsK
LQotICBwdWJsaWMgTWVkaWFTb3VyY2UobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAgICByZWZDb3Vu
dERlbGVnYXRlID0gbmV3IFJlZkNvdW50RGVsZWdhdGUoKCkgLT4gSm5pQ29tbW9uLm5hdGl2ZVJl
bGVhc2VSZWYobmF0aXZlU291cmNlKSk7Ci0gICAgdGhpcy5uYXRpdmVTb3VyY2UgPSBuYXRpdmVT
b3VyY2U7Ci0gIH0KLQotICBwdWJsaWMgU3RhdGUgc3RhdGUoKSB7Ci0gICAgY2hlY2tNZWRpYVNv
dXJjZUV4aXN0cygpOwotICAgIHJldHVybiBuYXRpdmVHZXRTdGF0ZShuYXRpdmVTb3VyY2UpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBjaGVja01lZGlhU291cmNlRXhp
c3RzKCk7Ci0gICAgcmVmQ291bnREZWxlZ2F0ZS5yZWxlYXNlKCk7Ci0gICAgbmF0aXZlU291cmNl
ID0gMDsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIGEgcG9pbnRlciB0byB3ZWJydGM6Ok1lZGlhU291
cmNlSW50ZXJmYWNlLiAqLwotICBwcm90ZWN0ZWQgbG9uZyBnZXROYXRpdmVNZWRpYVNvdXJjZSgp
IHsKLSAgICBjaGVja01lZGlhU291cmNlRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZVNvdXJj
ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSdW5zIGNvZGUgaW4ge0Bjb2RlIHJ1bm5hYmxlfSBob2xk
aW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBtZWRpYSBzb3VyY2UuIElmIHRoZSBvYmplY3QgaGFzCi0g
ICAqIGFscmVhZHkgYmVlbiByZWxlYXNlZCwgZG9lcyBub3RoaW5nLgotICAgKi8KLSAgdm9pZCBy
dW5XaXRoUmVmZXJlbmNlKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgaWYgKHJlZkNvdW50RGVs
ZWdhdGUuc2FmZVJldGFpbigpKSB7Ci0gICAgICB0cnkgewotICAgICAgICBydW5uYWJsZS5ydW4o
KTsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIHJlZkNvdW50RGVsZWdhdGUucmVsZWFzZSgp
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja01lZGlhU291cmNl
RXhpc3RzKCkgewotICAgIGlmIChuYXRpdmVTb3VyY2UgPT0gMCkgewotICAgICAgdGhyb3cgbmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTWVkaWFTb3VyY2UgaGFzIGJlZW4gZGlzcG9zZWQuIik7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0YXRlIG5hdGl2ZUdldFN0
YXRlKGxvbmcgcG9pbnRlcik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVh
bS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvTWVkaWFTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTUzMGZlNWY3Zjk2YzNmMDQxMTk1ZTRkYzFhNjhlOTE3ZWEzMzVlMC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9N
ZWRpYVN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBNZWRpYVN0cmVhbUludGVyZmFjZS4gKi8K
LXB1YmxpYyBjbGFzcyBNZWRpYVN0cmVhbSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiTWVkaWFTdHJlYW0iOwotCi0gIHB1YmxpYyBmaW5hbCBMaXN0PEF1ZGlvVHJhY2s+
IGF1ZGlvVHJhY2tzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gIHB1YmxpYyBmaW5hbCBMaXN0PFZp
ZGVvVHJhY2s+IHZpZGVvVHJhY2tzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gIHB1YmxpYyBmaW5h
bCBMaXN0PFZpZGVvVHJhY2s+IHByZXNlcnZlZFZpZGVvVHJhY2tzID0gbmV3IEFycmF5TGlzdDw+
KCk7Ci0gIHByaXZhdGUgbG9uZyBuYXRpdmVTdHJlYW07Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0g
IHB1YmxpYyBNZWRpYVN0cmVhbShsb25nIG5hdGl2ZVN0cmVhbSkgewotICAgIHRoaXMubmF0aXZl
U3RyZWFtID0gbmF0aXZlU3RyZWFtOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkVHJhY2so
QXVkaW9UcmFjayB0cmFjaykgewotICAgIGNoZWNrTWVkaWFTdHJlYW1FeGlzdHMoKTsKLSAgICBp
ZiAobmF0aXZlQWRkQXVkaW9UcmFja1RvTmF0aXZlU3RyZWFtKG5hdGl2ZVN0cmVhbSwgdHJhY2su
Z2V0TmF0aXZlQXVkaW9UcmFjaygpKSkgewotICAgICAgYXVkaW9UcmFja3MuYWRkKHRyYWNrKTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBw
dWJsaWMgYm9vbGVhbiBhZGRUcmFjayhWaWRlb1RyYWNrIHRyYWNrKSB7Ci0gICAgY2hlY2tNZWRp
YVN0cmVhbUV4aXN0cygpOwotICAgIGlmIChuYXRpdmVBZGRWaWRlb1RyYWNrVG9OYXRpdmVTdHJl
YW0obmF0aXZlU3RyZWFtLCB0cmFjay5nZXROYXRpdmVWaWRlb1RyYWNrKCkpKSB7Ci0gICAgICB2
aWRlb1RyYWNrcy5hZGQodHJhY2spOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFRyYWNrcyBhZGRlZCBpbiBhZGRUcmFjaygpIGNhbGwg
d2lsbCBiZSBhdXRvIHJlbGVhc2VkIG9uY2UgTWVkaWFTdHJlYW0uZGlzcG9zZSgpCi0gIC8vIGlz
IGNhbGxlZC4gSWYgdmlkZW8gdHJhY2sgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgYWZ0ZXIgTWVkaWFT
dHJlYW0gaXMgZGVzdHJveWVkIGl0Ci0gIC8vIHNob3VsZCBiZSBhZGRlZCB0byBNZWRpYVN0cmVh
bSB1c2luZyBhZGRQcmVzZXJ2ZWRUcmFjaygpIGNhbGwuCi0gIHB1YmxpYyBib29sZWFuIGFkZFBy
ZXNlcnZlZFRyYWNrKFZpZGVvVHJhY2sgdHJhY2spIHsKLSAgICBjaGVja01lZGlhU3RyZWFtRXhp
c3RzKCk7Ci0gICAgaWYgKG5hdGl2ZUFkZFZpZGVvVHJhY2tUb05hdGl2ZVN0cmVhbShuYXRpdmVT
dHJlYW0sIHRyYWNrLmdldE5hdGl2ZVZpZGVvVHJhY2soKSkpIHsKLSAgICAgIHByZXNlcnZlZFZp
ZGVvVHJhY2tzLmFkZCh0cmFjayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlVHJhY2soQXVkaW9UcmFj
ayB0cmFjaykgewotICAgIGNoZWNrTWVkaWFTdHJlYW1FeGlzdHMoKTsKLSAgICBhdWRpb1RyYWNr
cy5yZW1vdmUodHJhY2spOwotICAgIHJldHVybiBuYXRpdmVSZW1vdmVBdWRpb1RyYWNrKG5hdGl2
ZVN0cmVhbSwgdHJhY2suZ2V0TmF0aXZlQXVkaW9UcmFjaygpKTsKLSAgfQotCi0gIHB1YmxpYyBi
b29sZWFuIHJlbW92ZVRyYWNrKFZpZGVvVHJhY2sgdHJhY2spIHsKLSAgICBjaGVja01lZGlhU3Ry
ZWFtRXhpc3RzKCk7Ci0gICAgdmlkZW9UcmFja3MucmVtb3ZlKHRyYWNrKTsKLSAgICBwcmVzZXJ2
ZWRWaWRlb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAgIHJldHVybiBuYXRpdmVSZW1vdmVWaWRl
b1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2suZ2V0TmF0aXZlVmlkZW9UcmFjaygpKTsKLSAgfQot
Ci0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNoZWNr
TWVkaWFTdHJlYW1FeGlzdHMoKTsKLSAgICAvLyBSZW1vdmUgYW5kIHJlbGVhc2UgcHJldmlvdXNs
eSBhZGRlZCBhdWRpbyBhbmQgdmlkZW8gdHJhY2tzLgotICAgIHdoaWxlICghYXVkaW9UcmFja3Mu
aXNFbXB0eSgpKSB7Ci0gICAgICBBdWRpb1RyYWNrIHRyYWNrID0gYXVkaW9UcmFja3MuZ2V0KDAg
LyogaW5kZXggKi8pOwotICAgICAgcmVtb3ZlVHJhY2sodHJhY2spOwotICAgICAgdHJhY2suZGlz
cG9zZSgpOwotICAgIH0KLSAgICB3aGlsZSAoIXZpZGVvVHJhY2tzLmlzRW1wdHkoKSkgewotICAg
ICAgVmlkZW9UcmFjayB0cmFjayA9IHZpZGVvVHJhY2tzLmdldCgwIC8qIGluZGV4ICovKTsKLSAg
ICAgIHJlbW92ZVRyYWNrKHRyYWNrKTsKLSAgICAgIHRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0g
ICAgLy8gUmVtb3ZlLCBidXQgZG8gbm90IHJlbGVhc2UgcHJlc2VydmVkIHZpZGVvIHRyYWNrcy4K
LSAgICB3aGlsZSAoIXByZXNlcnZlZFZpZGVvVHJhY2tzLmlzRW1wdHkoKSkgewotICAgICAgcmVt
b3ZlVHJhY2socHJlc2VydmVkVmlkZW9UcmFja3MuZ2V0KDAgLyogaW5kZXggKi8pKTsKLSAgICB9
Ci0gICAgSm5pQ29tbW9uLm5hdGl2ZVJlbGVhc2VSZWYobmF0aXZlU3RyZWFtKTsKLSAgICBuYXRp
dmVTdHJlYW0gPSAwOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLSAgICBjaGVj
a01lZGlhU3RyZWFtRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldElkKG5hdGl2ZVN0cmVh
bSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAg
ICByZXR1cm4gIlsiICsgZ2V0SWQoKSArICI6QT0iICsgYXVkaW9UcmFja3Muc2l6ZSgpICsgIjpW
PSIgKyB2aWRlb1RyYWNrcy5zaXplKCkgKyAiXSI7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUK
LSAgdm9pZCBhZGROYXRpdmVBdWRpb1RyYWNrKGxvbmcgbmF0aXZlVHJhY2spIHsKLSAgICBhdWRp
b1RyYWNrcy5hZGQobmV3IEF1ZGlvVHJhY2sobmF0aXZlVHJhY2spKTsKLSAgfQotCi0gIEBDYWxs
ZWRCeU5hdGl2ZQotICB2b2lkIGFkZE5hdGl2ZVZpZGVvVHJhY2sobG9uZyBuYXRpdmVUcmFjaykg
ewotICAgIHZpZGVvVHJhY2tzLmFkZChuZXcgVmlkZW9UcmFjayhuYXRpdmVUcmFjaykpOwotICB9
Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHZvaWQgcmVtb3ZlQXVkaW9UcmFjayhsb25nIG5hdGl2
ZVRyYWNrKSB7Ci0gICAgcmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhhdWRpb1RyYWNrcywgbmF0aXZl
VHJhY2spOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHZvaWQgcmVtb3ZlVmlkZW9UcmFj
ayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgcmVtb3ZlTWVkaWFTdHJlYW1UcmFjayh2aWRlb1Ry
YWNrcywgbmF0aXZlVHJhY2spOwotICB9Ci0KLSAgLyoqIFJldHVybnMgYSBwb2ludGVyIHRvIHdl
YnJ0Yzo6TWVkaWFTdHJlYW1JbnRlcmZhY2UuICovCi0gIGxvbmcgZ2V0TmF0aXZlTWVkaWFTdHJl
YW0oKSB7Ci0gICAgY2hlY2tNZWRpYVN0cmVhbUV4aXN0cygpOwotICAgIHJldHVybiBuYXRpdmVT
dHJlYW07Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tNZWRpYVN0cmVhbUV4aXN0cygpIHsK
LSAgICBpZiAobmF0aXZlU3RyZWFtID09IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3Rh
dGVFeGNlcHRpb24oIk1lZGlhU3RyZWFtIGhhcyBiZWVuIGRpc3Bvc2VkLiIpOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFTdHJlYW1UcmFjaygKLSAgICAg
IExpc3Q8PyBleHRlbmRzIE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrcywgbG9uZyBuYXRpdmVUcmFj
aykgewotICAgIGZpbmFsIEl0ZXJhdG9yPD8gZXh0ZW5kcyBNZWRpYVN0cmVhbVRyYWNrPiBpdCA9
IHRyYWNrcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIE1l
ZGlhU3RyZWFtVHJhY2sgdHJhY2sgPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAodHJhY2suZ2V0TmF0
aXZlTWVkaWFTdHJlYW1UcmFjaygpID09IG5hdGl2ZVRyYWNrKSB7Ci0gICAgICAgIHRyYWNrLmRp
c3Bvc2UoKTsKLSAgICAgICAgaXQucmVtb3ZlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LSAgICB9Ci0gICAgTG9nZ2luZy5lKFRBRywgIkNvdWxkbid0IG5vdCBmaW5kIHRyYWNrIik7Ci0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRBdWRpb1RyYWNr
VG9OYXRpdmVTdHJlYW0oCi0gICAgICBsb25nIHN0cmVhbSwgbG9uZyBuYXRpdmVBdWRpb1RyYWNr
KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkVmlkZW9UcmFja1Rv
TmF0aXZlU3RyZWFtKAotICAgICAgbG9uZyBzdHJlYW0sIGxvbmcgbmF0aXZlVmlkZW9UcmFjayk7
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVJlbW92ZUF1ZGlvVHJhY2so
bG9uZyBzdHJlYW0sIGxvbmcgbmF0aXZlQXVkaW9UcmFjayk7Ci0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBib29sZWFuIG5hdGl2ZVJlbW92ZVZpZGVvVHJhY2sobG9uZyBzdHJlYW0sIGxvbmcgbmF0
aXZlVmlkZW9UcmFjayk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlR2V0
SWQobG9uZyBzdHJlYW0pOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTWVkaWFTdHJlYW1U
cmFjay5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMjQ5ZmZiZmNhZDVhMWI3NzhkODBiODJmMWFlNTI0Y2MwODQ5
OTgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcv
d2VicnRjL01lZGlhU3RyZWFtVHJhY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLQotLyoqIEphdmEgd3JhcHBlciBm
b3IgYSBDKysgTWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBNZWRp
YVN0cmVhbVRyYWNrIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fVFJBQ0tf
S0lORCA9ICJhdWRpbyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX1RSQUNL
X0tJTkQgPSAidmlkZW8iOwotCi0gIC8qKiBUcmFja3MgTWVkaWFTdHJlYW1UcmFja0ludGVyZmFj
ZS5UcmFja1N0YXRlICovCi0gIHB1YmxpYyBlbnVtIFN0YXRlIHsKLSAgICBMSVZFLAotICAgIEVO
REVEOwotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJTdGF0ZSIpCi0gICAgc3RhdGljIFN0YXRlIGZy
b21OYXRpdmVJbmRleChpbnQgbmF0aXZlSW5kZXgpIHsKLSAgICAgIHJldHVybiB2YWx1ZXMoKVtu
YXRpdmVJbmRleF07Ci0gICAgfQotICB9Ci0KLSAgLy8gTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0
aCBjcmlja2V0OjpNZWRpYVR5cGUuCi0gIHB1YmxpYyBlbnVtIE1lZGlhVHlwZSB7Ci0gICAgTUVE
SUFfVFlQRV9BVURJTygwKSwKLSAgICBNRURJQV9UWVBFX1ZJREVPKDEpOwotCi0gICAgcHJpdmF0
ZSBmaW5hbCBpbnQgbmF0aXZlSW5kZXg7Ci0KLSAgICBwcml2YXRlIE1lZGlhVHlwZShpbnQgbmF0
aXZlSW5kZXgpIHsKLSAgICAgIHRoaXMubmF0aXZlSW5kZXggPSBuYXRpdmVJbmRleDsKLSAgICB9
Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk1lZGlhVHlwZSIpCi0gICAgaW50IGdldE5hdGl2ZSgp
IHsKLSAgICAgIHJldHVybiBuYXRpdmVJbmRleDsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRp
dmUoIk1lZGlhVHlwZSIpCi0gICAgc3RhdGljIE1lZGlhVHlwZSBmcm9tTmF0aXZlSW5kZXgoaW50
IG5hdGl2ZUluZGV4KSB7Ci0gICAgICBmb3IgKE1lZGlhVHlwZSB0eXBlIDogTWVkaWFUeXBlLnZh
bHVlcygpKSB7Ci0gICAgICAgIGlmICh0eXBlLmdldE5hdGl2ZSgpID09IG5hdGl2ZUluZGV4KSB7
Ci0gICAgICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRocm93
IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gbmF0aXZlIG1lZGlhIHR5cGU6
ICIgKyBuYXRpdmVJbmRleCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEZhY3RvcnkgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBBdWRpb1RyYWNrIG9yIFZpZGVvVHJhY2sgc3ViY2xhc3MuICovCi0gIHN0YXRp
YyBATnVsbGFibGUgTWVkaWFTdHJlYW1UcmFjayBjcmVhdGVNZWRpYVN0cmVhbVRyYWNrKGxvbmcg
bmF0aXZlVHJhY2spIHsKLSAgICBpZiAobmF0aXZlVHJhY2sgPT0gMCkgewotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotICAgIFN0cmluZyB0cmFja0tpbmQgPSBuYXRpdmVHZXRLaW5kKG5hdGl2
ZVRyYWNrKTsKLSAgICBpZiAodHJhY2tLaW5kLmVxdWFscyhBVURJT19UUkFDS19LSU5EKSkgewot
ICAgICAgcmV0dXJuIG5ldyBBdWRpb1RyYWNrKG5hdGl2ZVRyYWNrKTsKLSAgICB9IGVsc2UgaWYg
KHRyYWNrS2luZC5lcXVhbHMoVklERU9fVFJBQ0tfS0lORCkpIHsKLSAgICAgIHJldHVybiBuZXcg
VmlkZW9UcmFjayhuYXRpdmVUcmFjayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBudWxs
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgbG9uZyBuYXRpdmVUcmFjazsKLQotICBwdWJsaWMg
TWVkaWFTdHJlYW1UcmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgaWYgKG5hdGl2ZVRyYWNr
ID09IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5hdGl2
ZVRyYWNrIG1heSBub3QgYmUgbnVsbCIpOwotICAgIH0KLSAgICB0aGlzLm5hdGl2ZVRyYWNrID0g
bmF0aXZlVHJhY2s7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGlkKCkgewotICAgIGNoZWNrTWVk
aWFTdHJlYW1UcmFja0V4aXN0cygpOwotICAgIHJldHVybiBuYXRpdmVHZXRJZChuYXRpdmVUcmFj
ayk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGtpbmQoKSB7Ci0gICAgY2hlY2tNZWRpYVN0cmVh
bVRyYWNrRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldEtpbmQobmF0aXZlVHJhY2spOwot
ICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZW5hYmxlZCgpIHsKLSAgICBjaGVja01lZGlhU3RyZWFt
VHJhY2tFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0aXZlR2V0RW5hYmxlZChuYXRpdmVUcmFjayk7
Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0g
ICAgY2hlY2tNZWRpYVN0cmVhbVRyYWNrRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZVNldEVu
YWJsZWQobmF0aXZlVHJhY2ssIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgU3RhdGUgc3RhdGUo
KSB7Ci0gICAgY2hlY2tNZWRpYVN0cmVhbVRyYWNrRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2
ZUdldFN0YXRlKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7
Ci0gICAgY2hlY2tNZWRpYVN0cmVhbVRyYWNrRXhpc3RzKCk7Ci0gICAgSm5pQ29tbW9uLm5hdGl2
ZVJlbGVhc2VSZWYobmF0aXZlVHJhY2spOwotICAgIG5hdGl2ZVRyYWNrID0gMDsKLSAgfQotCi0g
IGxvbmcgZ2V0TmF0aXZlTWVkaWFTdHJlYW1UcmFjaygpIHsKLSAgICBjaGVja01lZGlhU3RyZWFt
VHJhY2tFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0aXZlVHJhY2s7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgY2hlY2tNZWRpYVN0cmVhbVRyYWNrRXhpc3RzKCkgewotICAgIGlmIChuYXRpdmVUcmFj
ayA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJNZWRpYVN0
cmVhbVRyYWNrIGhhcyBiZWVuIGRpc3Bvc2VkLiIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlR2V0SWQobG9uZyB0cmFjayk7Ci0gIHByaXZhdGUg
c3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlR2V0S2luZChsb25nIHRyYWNrKTsKLSAgcHJpdmF0
ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlR2V0RW5hYmxlZChsb25nIHRyYWNrKTsKLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0RW5hYmxlZChsb25nIHRyYWNr
LCBib29sZWFuIGVuYWJsZWQpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RhdGUgbmF0aXZl
R2V0U3RhdGUobG9uZyB0cmFjayk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9NZWRpYVRy
YW5zcG9ydEZhY3RvcnlGYWN0b3J5LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9NZWRpYVRyYW5zcG9ydEZh
Y3RvcnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNmEzN2E2
ZDc3NzUzOWE0NjBmYzI5NDZkZjFhMjIwYWZmYTIzNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTWVkaWFUcmFuc3BvcnRGYWN0b3J5
RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEZhY3RvcnkgZm9yIGNyZWF0
aW5nIHdlYnJ0Yzo6TWVkaWFUcmFuc3BvcnRGYWN0b3J5IGluc3RhbmNlcy4KLSAqLwotcHVibGlj
IGludGVyZmFjZSBNZWRpYVRyYW5zcG9ydEZhY3RvcnlGYWN0b3J5IHsKLSAgLyoqCi0gICAqIER5
bmFtaWNhbGx5IGFsbG9jYXRlcyBhIHdlYnJ0Yzo6TWVkaWFUcmFuc3BvcnRGYWN0b3J5IGluc3Rh
bmNlIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4KLSAgICogVGhlIGNhbGxlciB0YWtlcyBv
d25lcnNoaXAgb2YgdGhlIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBsb25nIGNyZWF0ZU5hdGl2
ZU1lZGlhVHJhbnNwb3J0RmFjdG9yeSgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTWV0
cmljcy5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTWV0cmljcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzMDk4ZjcyNjVjYmQxYzNkNTFkYTdiNjM1ZGJhZWEyMDU2OTYzNjAxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL01l
dHJpY3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwot
aW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8vIEphdmEtc2lkZSBvZiBhbmRyb2lkbWV0cmljcy5j
YwotLy8KLS8vIFJ0YyBoaXN0b2dyYW1zIGNhbiBiZSBxdWVyaWVkIHRocm91Z2ggdGhlIEFQSSwg
Z2V0QW5kUmVzZXQoKS4KLS8vIFRoZSByZXR1cm5lZCBtYXAgaG9sZHMgdGhlIG5hbWUgb2YgYSBo
aXN0b2dyYW0gYW5kIGl0cyBzYW1wbGVzLgotLy8KLS8vIEV4YW1wbGUgb2YgfG1hcHwgd2l0aCBv
bmUgaGlzdG9ncmFtOgotLy8gfG5hbWV8OiAiV2ViUlRDLlZpZGVvLklucHV0RnJhbWVzUGVyU2Vj
b25kIgotLy8gICAgIHxtaW58OiAxCi0vLyAgICAgfG1heHw6IDEwMAotLy8gICAgIHxidWNrZXRD
b3VudHw6IDUwCi0vLyAgICAgfHNhbXBsZXN8OiBbMzBdOjEKLS8vCi0vLyBNb3N0IGhpc3RvZ3Jh
bXMgYXJlIG5vdCB1cGRhdGVkIGZyZXF1ZW50bHkgKGUuZy4gbW9zdCB2aWRlbyBtZXRyaWNzIGFy
ZSBhbgotLy8gYXZlcmFnZSBvdmVyIHRoZSBjYWxsIGFuZCByZWNvcmRlZCB3aGVuIGEgc3RyZWFt
IGlzIHJlbW92ZWQpLgotLy8gVGhlIG1ldHJpY3MgY2FuIGZvciBleGFtcGxlIGJlIHJldHJpZXZl
ZCB3aGVuIGEgcGVlciBjb25uZWN0aW9uIGlzIGNsb3NlZC4KLXB1YmxpYyBjbGFzcyBNZXRyaWNz
IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZXRyaWNzIjsKLQotICBw
dWJsaWMgZmluYWwgTWFwPFN0cmluZywgSGlzdG9ncmFtSW5mbz4gbWFwID0KLSAgICAgIG5ldyBI
YXNoTWFwPFN0cmluZywgSGlzdG9ncmFtSW5mbz4oKTsgLy8gPG5hbWUsIEhpc3RvZ3JhbUluZm8+
Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIE1ldHJpY3MoKSB7fQotCi0gIC8qKgotICAgKiBDbGFz
cyBob2xkaW5nIGhpc3RvZ3JhbSBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
Y2xhc3MgSGlzdG9ncmFtSW5mbyB7Ci0gICAgcHVibGljIGZpbmFsIGludCBtaW47Ci0gICAgcHVi
bGljIGZpbmFsIGludCBtYXg7Ci0gICAgcHVibGljIGZpbmFsIGludCBidWNrZXRDb3VudDsKLSAg
ICBwdWJsaWMgZmluYWwgTWFwPEludGVnZXIsIEludGVnZXI+IHNhbXBsZXMgPQotICAgICAgICBu
ZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOyAvLyA8dmFsdWUsICMgb2YgZXZlbnRzPgot
Ci0gICAgQENhbGxlZEJ5TmF0aXZlKCJIaXN0b2dyYW1JbmZvIikKLSAgICBwdWJsaWMgSGlzdG9n
cmFtSW5mbyhpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpIHsKLSAgICAgIHRoaXMu
bWluID0gbWluOwotICAgICAgdGhpcy5tYXggPSBtYXg7Ci0gICAgICB0aGlzLmJ1Y2tldENvdW50
ID0gYnVja2V0Q291bnQ7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJIaXN0b2dyYW1J
bmZvIikKLSAgICBwdWJsaWMgdm9pZCBhZGRTYW1wbGUoaW50IHZhbHVlLCBpbnQgbnVtRXZlbnRz
KSB7Ci0gICAgICBzYW1wbGVzLnB1dCh2YWx1ZSwgbnVtRXZlbnRzKTsKLSAgICB9Ci0gIH0KLQot
ICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJpdmF0ZSB2b2lkIGFkZChTdHJpbmcgbmFtZSwgSGlzdG9n
cmFtSW5mbyBpbmZvKSB7Ci0gICAgbWFwLnB1dChuYW1lLCBpbmZvKTsKLSAgfQotCi0gIC8vIEVu
YWJsZXMgZ2F0aGVyaW5nIG9mIG1ldHJpY3MgKHdoaWNoIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2V0
QW5kUmVzZXQoKSkuCi0gIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkgaXMgY3JlYXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGVuYWJsZSgpIHsKLSAgICBu
YXRpdmVFbmFibGUoKTsKLSAgfQotCi0gIC8vIEdldHMgYW5kIGNsZWFycyBuYXRpdmUgaGlzdG9n
cmFtcy4KLSAgcHVibGljIHN0YXRpYyBNZXRyaWNzIGdldEFuZFJlc2V0KCkgewotICAgIHJldHVy
biBuYXRpdmVHZXRBbmRSZXNldCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlRW5hYmxlKCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBNZXRyaWNzIG5hdGl2
ZUdldEFuZFJlc2V0KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9OYXRpdmVMaWJyYXJ5
TG9hZGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9OYXRpdmVMaWJyYXJ5TG9hZGVyLmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZDdiM2IyNTA5MjJjMjc4M2VhYzU1ZmEyZTZhNjBl
MmVkOTFkOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvTmF0aXZlTGlicmFyeUxvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
MjQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGxvYWRpbmcgbmF0aXZlIGxpYnJhcmllcy4gQSBjdXN0
b20gbG9hZGVyIGNhbiBiZSBwYXNzZWQgdG8KLSAqIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0
aWFsaXplLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hdGl2ZUxpYnJhcnlMb2FkZXIgewotICAv
KioKLSAgICogTG9hZHMgYSBuYXRpdmUgbGlicmFyeSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAg
KgotICAgKiBAcmV0dXJuIFRydWUgb24gc3VjY2VzcwotICAgKi8KLSAgYm9vbGVhbiBsb2FkKFN0
cmluZyBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05hdGl2ZVBlZXJDb25uZWN0
aW9uRmFjdG9yeS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTmF0aXZlUGVlckNvbm5lY3Rpb25GYWN0b3J5
LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYjkxZTE3NTA4MzA5YmU3NTlk
YjgzODUzMjQzNTZmZGI1OWFlNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTmF0aXZlUGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBGYWN0b3J5IGZvciBjcmVhdGluZyB3ZWJydGM6OmpuaTo6
T3duZWRQZWVyQ29ubmVjdGlvbiBpbnN0YW5jZXMuICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hdGl2
ZVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7Ci0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgd2VicnRj
Ojpqbmk6Ok93bmVkUGVlckNvbm5lY3Rpb24gaW5zdGFuY2UgYW5kIHJldHVybnMgYSBwb2ludGVy
IHRvIGl0LgotICAgKiBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgb2JqZWN0Lgot
ICAgKi8KLSAgbG9uZyBjcmVhdGVOYXRpdmVQZWVyQ29ubmVjdGlvbigpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvTmV0RXFGYWN0b3J5RmFjdG9yeS5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTmV0
RXFGYWN0b3J5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDY0
MzI0Y2JjZTliMDI3MjU2YzdlY2E2M2M4MTc1ZDQ4NTA1NDEzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05ldEVxRmFjdG9yeUZhY3Rv
cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTkgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhp
cyBpbnRlcmZhY2UgY2FuIGNyZWF0ZSBhIG5hdGl2ZSB7QGNvZGUgd2VicnRjOjpOZXRFcUZhY3Rv
cnl9LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5ldEVxRmFjdG9yeUZhY3RvcnkgewotICAvKioK
LSAgICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYSB7QGNvZGUgd2VicnRjOjpOZXRFcUZhY3Rvcnl9
LiBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hpcC4KLSAgICovCi0gIGxvbmcgY3JlYXRlTmF0aXZl
TmV0RXFGYWN0b3J5KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9OZXR3b3JrQ2hhbmdl
RGV0ZWN0b3IuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05ldHdvcmtDaGFuZ2VEZXRlY3Rvci5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ1Yzc4NDQ1YTJlZGUxYTRmZDIyNzgxNjdi
ODlhNTRiMjk3NDAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L2FwaS9vcmcvd2VicnRjL05ldHdvcmtDaGFuZ2VEZXRlY3Rvci5qYXZhCisrKyAvZGV2L251bGwK
QEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMjAgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotCi0vKiogSW50ZXJmYWNlIGZvciBkZXRlY3RpbmcgbmV0d29yayBj
aGFuZ2VzICovCi1wdWJsaWMgaW50ZXJmYWNlIE5ldHdvcmtDaGFuZ2VEZXRlY3RvciB7Ci0gIC8v
IGphdmEgZXF1aXZhbGVudCBvZiBjKysgYW5kcm9pZF9uZXR3b3JrX21vbml0b3IuaCAvIE5ldHdv
cmtUeXBlLgotICBwdWJsaWMgc3RhdGljIGVudW0gQ29ubmVjdGlvblR5cGUgewotICAgIENPTk5F
Q1RJT05fVU5LTk9XTiwKLSAgICBDT05ORUNUSU9OX0VUSEVSTkVULAotICAgIENPTk5FQ1RJT05f
V0lGSSwKLSAgICBDT05ORUNUSU9OXzVHLAotICAgIENPTk5FQ1RJT05fNEcsCi0gICAgQ09OTkVD
VElPTl8zRywKLSAgICBDT05ORUNUSU9OXzJHLAotICAgIENPTk5FQ1RJT05fVU5LTk9XTl9DRUxM
VUxBUiwKLSAgICBDT05ORUNUSU9OX0JMVUVUT09USCwKLSAgICBDT05ORUNUSU9OX1ZQTiwKLSAg
ICBDT05ORUNUSU9OX05PTkUKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSVBBZGRyZXNz
IHsKLSAgICBwdWJsaWMgZmluYWwgYnl0ZVtdIGFkZHJlc3M7Ci0KLSAgICBwdWJsaWMgSVBBZGRy
ZXNzKGJ5dGVbXSBhZGRyZXNzKSB7Ci0gICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzOwotICAg
IH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiSVBBZGRyZXNzIikKLSAgICBwcml2YXRlIGJ5dGVb
XSBnZXRBZGRyZXNzKCkgewotICAgICAgcmV0dXJuIGFkZHJlc3M7Ci0gICAgfQotICB9Ci0KLSAg
LyoqIEphdmEgdmVyc2lvbiBvZiBOZXR3b3JrTW9uaXRvci5OZXR3b3JrSW5mb3JtYXRpb24gKi8K
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBOZXR3b3JrSW5mb3JtYXRpb24gewotICAgIHB1YmxpYyBm
aW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwdWJsaWMgZmluYWwgQ29ubmVjdGlvblR5cGUgdHlwZTsK
LSAgICAvLyBVc2VkIHRvIHNwZWNpZnkgdGhlIHVuZGVybHlpbmcgbmV0d29yayB0eXBlIGlmIHRo
ZSB0eXBlIGlzIENPTk5FQ1RJT05fVlBOLgotICAgIHB1YmxpYyBmaW5hbCBDb25uZWN0aW9uVHlw
ZSB1bmRlcmx5aW5nVHlwZUZvclZwbjsKLSAgICBwdWJsaWMgZmluYWwgbG9uZyBoYW5kbGU7Ci0g
ICAgcHVibGljIGZpbmFsIElQQWRkcmVzc1tdIGlwQWRkcmVzc2VzOwotCi0gICAgcHVibGljIE5l
dHdvcmtJbmZvcm1hdGlvbihTdHJpbmcgbmFtZSwgQ29ubmVjdGlvblR5cGUgdHlwZSwgQ29ubmVj
dGlvblR5cGUgdW5kZXJseWluZ1R5cGVGb3JWcG4sCi0gICAgICAgIGxvbmcgaGFuZGxlLCBJUEFk
ZHJlc3NbXSBhZGRyZXNzZXMpIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB0aGlz
LnR5cGUgPSB0eXBlOwotICAgICAgdGhpcy51bmRlcmx5aW5nVHlwZUZvclZwbiA9IHVuZGVybHlp
bmdUeXBlRm9yVnBuOwotICAgICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gICAgICB0aGlzLmlw
QWRkcmVzc2VzID0gYWRkcmVzc2VzOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiTmV0
d29ya0luZm9ybWF0aW9uIikKLSAgICBwcml2YXRlIElQQWRkcmVzc1tdIGdldElwQWRkcmVzc2Vz
KCkgewotICAgICAgcmV0dXJuIGlwQWRkcmVzc2VzOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5h
dGl2ZSgiTmV0d29ya0luZm9ybWF0aW9uIikKLSAgICBwcml2YXRlIENvbm5lY3Rpb25UeXBlIGdl
dENvbm5lY3Rpb25UeXBlKCkgewotICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgfQotCi0gICAgQENh
bGxlZEJ5TmF0aXZlKCJOZXR3b3JrSW5mb3JtYXRpb24iKQotICAgIHByaXZhdGUgQ29ubmVjdGlv
blR5cGUgZ2V0VW5kZXJseWluZ0Nvbm5lY3Rpb25UeXBlRm9yVnBuKCkgewotICAgICAgcmV0dXJu
IHVuZGVybHlpbmdUeXBlRm9yVnBuOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiTmV0
d29ya0luZm9ybWF0aW9uIikKLSAgICBwcml2YXRlIGxvbmcgZ2V0SGFuZGxlKCkgewotICAgICAg
cmV0dXJuIGhhbmRsZTsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk5ldHdvcmtJbmZv
cm1hdGlvbiIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgIHJldHVybiBu
YW1lOwotICAgIH0KLSAgfTsKLQotICAvKiogT2JzZXJ2ZXIgaW50ZXJmYWNlIGJ5IHdoaWNoIG9i
c2VydmVyIGlzIG5vdGlmaWVkIG9mIG5ldHdvcmsgY2hhbmdlcy4gKi8KLSAgcHVibGljIHN0YXRp
YyBpbnRlcmZhY2UgT2JzZXJ2ZXIgewotICAgIC8qKiBDYWxsZWQgd2hlbiBkZWZhdWx0IG5ldHdv
cmsgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChD
b25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSk7Ci0KLSAgICBwdWJsaWMgdm9pZCBvbk5l
dHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbyk7Ci0KLSAgICBwdWJs
aWMgdm9pZCBvbk5ldHdvcmtEaXNjb25uZWN0KGxvbmcgbmV0d29ya0hhbmRsZSk7Ci0KLSAgICAv
KioKLSAgICAgKiBDYWxsZWQgd2hlbiBuZXR3b3JrIHByZWZlcmVuY2UgY2hhbmdlIGZvciBhIChs
aXN0IG9mKSBjb25uZWN0aW9uIHR5cGUocykuIChlLmcgV0lGSSkgaXMKLSAgICAgKiB8Tk9UX1BS
RUZFUlJFRHwgb3IgfE5FVVRSQUx8LgotICAgICAqCi0gICAgICogPHA+bm90ZTogfHR5cGVzfCBp
cyBhIGxpc3Qgb2YgQ29ubmVjdGlvblR5cGVzLCBzbyB0aGF0IGFsbCBjZWxsdWxhciB0eXBlcyBj
YW4gYmUgbW9kaWZpZWQgaW4KLSAgICAgKiBvbmUgY2FsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMg
dm9pZCBvbk5ldHdvcmtQcmVmZXJlbmNlKExpc3Q8Q29ubmVjdGlvblR5cGU+IHR5cGVzLCBATmV0
d29ya1ByZWZlcmVuY2UgaW50IHByZWZlcmVuY2UpOwotICB9Ci0KLSAgcHVibGljIENvbm5lY3Rp
b25UeXBlIGdldEN1cnJlbnRDb25uZWN0aW9uVHlwZSgpOwotCi0gIHB1YmxpYyBib29sZWFuIHN1
cHBvcnROZXR3b3JrQ2FsbGJhY2soKTsKLQotICBATnVsbGFibGUgcHVibGljIExpc3Q8TmV0d29y
a0luZm9ybWF0aW9uPiBnZXRBY3RpdmVOZXR3b3JrTGlzdCgpOwotCi0gIHB1YmxpYyB2b2lkIGRl
c3Ryb3koKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05ldHdvcmtDaGFuZ2VEZXRlY3Rv
ckZhY3RvcnkuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05ldHdvcmtDaGFuZ2VEZXRlY3RvckZhY3Rvcnku
amF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlOThiMjM4Nzg1YWJkMTMzMTMz
ZGUxN2MwNjMwNjEyMjE0MTJlYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9OZXR3b3JrQ2hhbmdlRGV0ZWN0b3JGYWN0b3J5LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDIwIFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLQotcHVi
bGljIGludGVyZmFjZSBOZXR3b3JrQ2hhbmdlRGV0ZWN0b3JGYWN0b3J5IHsKLSAgcHVibGljIE5l
dHdvcmtDaGFuZ2VEZXRlY3RvciBjcmVhdGUoTmV0d29ya0NoYW5nZURldGVjdG9yLk9ic2VydmVy
IG9ic2VydmVyLCBDb250ZXh0IGNvbnRleHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
TmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5RmFjdG9yeS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTmV0d29y
a0NvbnRyb2xsZXJGYWN0b3J5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NWU4ZmNhYTVhYmU4N2NmNDFmODYwYzJkNWYyNGViZTYwMWJmZTU2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05ldHdvcmtD
b250cm9sbGVyRmFjdG9yeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTkgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEZhY3Rv
cnkgZm9yIGNyZWF0aW5nIHdlYnJ0Yzo6TmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5IGluc3RhbmNl
cy4gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5RmFjdG9yeSB7
Ci0gIC8qKgotICAgKiBEeW5hbWljYWxseSBhbGxvY2F0ZXMgYSB3ZWJydGM6Ok5ldHdvcmtDb250
cm9sbGVyRmFjdG9yeSBpbnN0YW5jZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8KLSAgICogaXQu
IFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBvYmplY3QuCi0gICAqLwotICBwdWJs
aWMgbG9uZyBjcmVhdGVOYXRpdmVOZXR3b3JrQ29udHJvbGxlckZhY3RvcnkoKTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL2FwaS9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9OZXR3
b3JrTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjRiYjRkMGI1
ZTNmMzA2MDg0MjFhNWFlMzJlNzA3MjcxNzg0YWJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yLmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JB
dXRvRGV0ZWN0LklOVkFMSURfTkVUX0lEOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRl
eHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5u
b3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGph
dmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
OwotCi0vKioKLSAqIEJvcnJvd2VkIGZyb20gQ2hyb21pdW0ncwotICogc3JjL25ldC9hbmRyb2lk
L2phdmEvc3JjL29yZy9jaHJvbWl1bS9uZXQvTmV0d29ya0NoYW5nZU5vdGlmaWVyLmphdmEKLSAq
Ci0gKiA8cD5UcmlnZ2VycyB1cGRhdGVzIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhdGUg
ZnJvbSBPUyBuZXR3b3JraW5nIGV2ZW50cy4KLSAqCi0gKiA8cD5UaGlzIGNsYXNzIGlzIHRocmVh
ZC1zYWZlLgotICovCi1wdWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3IgewotICAvKioKLSAgICog
QWxlcnRlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHR5cGUgb2YgdGhlIG5ldHdvcmsgY2hhbmdlcy4g
VGhlIGFsZXJ0IGlzIGZpcmVkIG9uIHRoZSBVSSB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50
ZXJmYWNlIE5ldHdvcmtPYnNlcnZlciB7Ci0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlw
ZUNoYW5nZWQoTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rp
b25UeXBlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTmV0
d29ya01vbml0b3IiOwotCi0gIC8vIExhenkgaW5pdGlhbGl6YXRpb24gaG9sZGVyIGNsYXNzIGlk
aW9tIGZvciBzdGF0aWMgZmllbGRzLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbnN0YW5jZUhv
bGRlciB7Ci0gICAgLy8gV2UgYXJlIHN0b3JpbmcgYXBwbGljYXRpb24gY29udGV4dCBzbyBpdCBp
cyBva2F5LgotICAgIHN0YXRpYyBmaW5hbCBOZXR3b3JrTW9uaXRvciBpbnN0YW5jZSA9IG5ldyBO
ZXR3b3JrTW9uaXRvcigpOwotICB9Ci0KLSAgLy8gTmF0aXZlIG9ic2VydmVycyBvZiB0aGUgY29u
bmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PExvbmc+IG5h
dGl2ZU5ldHdvcmtPYnNlcnZlcnM7Ci0gIC8vIEphdmEgb2JzZXJ2ZXJzIG9mIHRoZSBjb25uZWN0
aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8TmV0d29ya09ic2Vy
dmVyPiBuZXR3b3JrT2JzZXJ2ZXJzOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGF1dG9EZXRl
Y3RMb2NrID0gbmV3IE9iamVjdCgpOwotICAvLyBPYmplY3QgdGhhdCBkZXRlY3RzIHRoZSBjb25u
ZWN0aW9uIHR5cGUgY2hhbmdlcyBhbmQgYnJpbmdzIHVwIG1vYmlsZSBuZXR3b3Jrcy4KLSAgQE51
bGxhYmxlIHByaXZhdGUgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGF1dG9EZXRlY3Q7Ci0gIC8v
IEFsc28gZ3VhcmRlZCBieSBhdXRvRGV0ZWN0TG9jay4KLSAgcHJpdmF0ZSBpbnQgbnVtT2JzZXJ2
ZXJzOwotCi0gIHByaXZhdGUgdm9sYXRpbGUgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5l
Y3Rpb25UeXBlIGN1cnJlbnRDb25uZWN0aW9uVHlwZTsKLQotICBwcml2YXRlIE5ldHdvcmtNb25p
dG9yKCkgewotICAgIG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMgPSBuZXcgQXJyYXlMaXN0PExvbmc+
KCk7Ci0gICAgbmV0d29ya09ic2VydmVycyA9IG5ldyBBcnJheUxpc3Q8TmV0d29ya09ic2VydmVy
PigpOwotICAgIG51bU9ic2VydmVycyA9IDA7Ci0gICAgY3VycmVudENvbm5lY3Rpb25UeXBlID0g
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9X
TjsKLSAgfQotCi0gIC8vIFRPRE8oc2FrYWwpOiBSZW1vdmUgb25jZSBkb3duc3RyZWFtIGRlcGVu
ZGVuY2llcyBoYXZlIGJlZW4gdXBkYXRlZC4KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRp
YyB2b2lkIGluaXQoQ29udGV4dCBjb250ZXh0KSB7fQotCi0gIC8qKiBSZXR1cm5zIHRoZSBzaW5n
bGV0b24gaW5zdGFuY2UuIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIG5hdGl2ZSBvciBmcm9tIEph
dmEgY29kZS4gKi8KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMgTmV0d29ya01v
bml0b3IgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIEluc3RhbmNlSG9sZGVyLmluc3RhbmNl
OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRJc1RydWUoYm9vbGVhbiBjb25k
aXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlv
bkVycm9yKCJFeHBlY3RlZCB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IEVuYWJsZXMgYXV0byBkZXRlY3Rpb24gb2YgdGhlIG5ldHdvcmsgc3RhdGUgY2hhbmdlIGFuZCBi
cmluZ3MgdXAgbW9iaWxlIG5ldHdvcmtzIGZvciB1c2luZwotICAgKiBtdWx0aS1uZXR3b3JraW5n
LiBUaGlzIHJlcXVpcmVzIHRoZSBlbWJlZGRpbmcgYXBwIGhhdmUgdGhlIHBsYXRmb3JtIEFDQ0VT
U19ORVRXT1JLX1NUQVRFIGFuZAotICAgKiBDSEFOR0VfTkVUV09SS19TVEFURSBwZXJtaXNzaW9u
LgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRNb25pdG9yaW5nKENvbnRleHQgYXBwbGljYXRp
b25Db250ZXh0KSB7Ci0gICAgc3luY2hyb25pemVkIChhdXRvRGV0ZWN0TG9jaykgewotICAgICAg
KytudW1PYnNlcnZlcnM7Ci0gICAgICBpZiAoYXV0b0RldGVjdCA9PSBudWxsKSB7Ci0gICAgICAg
IGF1dG9EZXRlY3QgPSBjcmVhdGVBdXRvRGV0ZWN0KGFwcGxpY2F0aW9uQ29udGV4dCk7Ci0gICAg
ICB9Ci0gICAgICBjdXJyZW50Q29ubmVjdGlvblR5cGUgPQotICAgICAgICAgIE5ldHdvcmtNb25p
dG9yQXV0b0RldGVjdC5nZXRDb25uZWN0aW9uVHlwZShhdXRvRGV0ZWN0LmdldEN1cnJlbnROZXR3
b3JrU3RhdGUoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIERlcHJlY2F0ZWQsIHBhc3MgaW4gYXBw
bGljYXRpb24gY29udGV4dCBpbiBzdGFydE1vbml0b3JpbmcgaW5zdGVhZC4gKi8KLSAgQERlcHJl
Y2F0ZWQKLSAgcHVibGljIHZvaWQgc3RhcnRNb25pdG9yaW5nKCkgewotICAgIHN0YXJ0TW9uaXRv
cmluZyhDb250ZXh0VXRpbHMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEVuYWJsZXMgYXV0byBkZXRlY3Rpb24gb2YgdGhlIG5ldHdvcmsgc3RhdGUgY2hhbmdl
IGFuZCBicmluZ3MgdXAgbW9iaWxlIG5ldHdvcmtzIGZvciB1c2luZwotICAgKiBtdWx0aS1uZXR3
b3JraW5nLiBUaGlzIHJlcXVpcmVzIHRoZSBlbWJlZGRpbmcgYXBwIGhhdmUgdGhlIHBsYXRmb3Jt
IEFDQ0VTU19ORVRXT1JLX1NUQVRFIGFuZAotICAgKiBDSEFOR0VfTkVUV09SS19TVEFURSBwZXJt
aXNzaW9uLgotICAgKi8KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgdm9pZCBzdGFydE1v
bml0b3JpbmcoQE51bGxhYmxlIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBsb25nIG5hdGl2
ZU9ic2VydmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0YXJ0IG1vbml0b3Jpbmcgd2l0aCBu
YXRpdmUgb2JzZXJ2ZXIgIiArIG5hdGl2ZU9ic2VydmVyKTsKLQotICAgIHN0YXJ0TW9uaXRvcmlu
ZygKLSAgICAgICAgYXBwbGljYXRpb25Db250ZXh0ICE9IG51bGwgPyBhcHBsaWNhdGlvbkNvbnRl
eHQgOiBDb250ZXh0VXRpbHMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkpOwotICAgIC8vIFRoZSBu
YXRpdmUgb2JzZXJ2ZXJzIGV4cGVjdCBhIG5ldHdvcmsgbGlzdCB1cGRhdGUgYWZ0ZXIgdGhleSBj
YWxsIHN0YXJ0TW9uaXRvcmluZy4KLSAgICBzeW5jaHJvbml6ZWQgKG5hdGl2ZU5ldHdvcmtPYnNl
cnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMuYWRkKG5hdGl2ZU9ic2VydmVy
KTsKLSAgICB9Ci0gICAgdXBkYXRlT2JzZXJ2ZXJBY3RpdmVOZXR3b3JrTGlzdChuYXRpdmVPYnNl
cnZlcik7Ci0gICAgLy8gY3VycmVudENvbm5lY3Rpb25UeXBlIHdhcyB1cGRhdGVkIGluIHN0YXJ0
TW9uaXRvcmluZygpLgotICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoZSBuYXRpdmUgb2JzZXJ2ZXJz
IGhlcmUuCi0gICAgbm90aWZ5T2JzZXJ2ZXJzT2ZDb25uZWN0aW9uVHlwZUNoYW5nZShjdXJyZW50
Q29ubmVjdGlvblR5cGUpOwotICB9Ci0KLSAgLyoqIFN0b3AgbmV0d29yayBtb25pdG9yaW5nLiBJ
ZiBubyBvbmUgaXMgbW9uaXRvcmluZyBuZXR3b3JrcywgZGVzdHJveSBhbmQgcmVzZXQgYXV0b0Rl
dGVjdC4gKi8KLSAgcHVibGljIHZvaWQgc3RvcE1vbml0b3JpbmcoKSB7Ci0gICAgc3luY2hyb25p
emVkIChhdXRvRGV0ZWN0TG9jaykgewotICAgICAgaWYgKC0tbnVtT2JzZXJ2ZXJzID09IDApIHsK
LSAgICAgICAgYXV0b0RldGVjdC5kZXN0cm95KCk7Ci0gICAgICAgIGF1dG9EZXRlY3QgPSBudWxs
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIHZv
aWQgc3RvcE1vbml0b3JpbmcobG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAgIExvZ2dpbmcuZChU
QUcsICJTdG9wIG1vbml0b3Jpbmcgd2l0aCBuYXRpdmUgb2JzZXJ2ZXIgIiArIG5hdGl2ZU9ic2Vy
dmVyKTsKLSAgICBzdG9wTW9uaXRvcmluZygpOwotICAgIHN5bmNocm9uaXplZCAobmF0aXZlTmV0
d29ya09ic2VydmVycykgewotICAgICAgbmF0aXZlTmV0d29ya09ic2VydmVycy5yZW1vdmUobmF0
aXZlT2JzZXJ2ZXIpOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBuZXR3b3Jr
IGJpbmRpbmcgaXMgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uCi0gIEBDYWxsZWRCeU5hdGl2
ZQotICBwcml2YXRlIGJvb2xlYW4gbmV0d29ya0JpbmRpbmdTdXBwb3J0ZWQoKSB7Ci0gICAgc3lu
Y2hyb25pemVkIChhdXRvRGV0ZWN0TG9jaykgewotICAgICAgcmV0dXJuIGF1dG9EZXRlY3QgIT0g
bnVsbCAmJiBhdXRvRGV0ZWN0LnN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKTsKLSAgICB9Ci0gIH0K
LQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGFuZHJvaWRTZGtJbnQo
KSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVDsKLSAgfQotCi0gIHByaXZhdGUg
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlIGdldEN1cnJlbnRDb25uZWN0
aW9uVHlwZSgpIHsKLSAgICByZXR1cm4gY3VycmVudENvbm5lY3Rpb25UeXBlOwotICB9Ci0KLSAg
cHJpdmF0ZSBsb25nIGdldEN1cnJlbnREZWZhdWx0TmV0SWQoKSB7Ci0gICAgc3luY2hyb25pemVk
IChhdXRvRGV0ZWN0TG9jaykgewotICAgICAgcmV0dXJuIGF1dG9EZXRlY3QgPT0gbnVsbCA/IElO
VkFMSURfTkVUX0lEIDogYXV0b0RldGVjdC5nZXREZWZhdWx0TmV0SWQoKTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCBjcmVhdGVBdXRvRGV0ZWN0KENv
bnRleHQgYXBwQ29udGV4dCkgewotICAgIHJldHVybiBuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0
ZWN0KG5ldyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuT2JzZXJ2ZXIoKSB7Ci0KLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoCi0gICAg
ICAgICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlIG5ld0Nvbm5lY3Rp
b25UeXBlKSB7Ci0gICAgICAgIHVwZGF0ZUN1cnJlbnRDb25uZWN0aW9uVHlwZShuZXdDb25uZWN0
aW9uVHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
b25OZXR3b3JrQ29ubmVjdChOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya0luZm9ybWF0
aW9uIG5ldHdvcmtJbmZvKSB7Ci0gICAgICAgIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Nvbm5l
Y3QobmV0d29ya0luZm8pOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIG9uTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxlKSB7Ci0gICAgICAg
IG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Rpc2Nvbm5lY3QobmV0d29ya0hhbmRsZSk7Ci0gICAg
ICB9Ci0gICAgfSwgYXBwQ29udGV4dCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlQ3Vy
cmVudENvbm5lY3Rpb25UeXBlKAotICAgICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5l
Y3Rpb25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY3VycmVudENvbm5lY3Rpb25UeXBl
ID0gbmV3Q29ubmVjdGlvblR5cGU7Ci0gICAgbm90aWZ5T2JzZXJ2ZXJzT2ZDb25uZWN0aW9uVHlw
ZUNoYW5nZShuZXdDb25uZWN0aW9uVHlwZSk7Ci0gIH0KLQotICAvKiogQWxlcnRzIGFsbCBvYnNl
cnZlcnMgb2YgYSBjb25uZWN0aW9uIGNoYW5nZS4gKi8KLSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9i
c2VydmVyc09mQ29ubmVjdGlvblR5cGVDaGFuZ2UoCi0gICAgICBOZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHsKLSAgICBMaXN0PExvbmc+
IG5hdGl2ZU9ic2VydmVycyA9IGdldE5hdGl2ZU5ldHdvcmtPYnNlcnZlcnNTeW5jKCk7Ci0gICAg
Zm9yIChMb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRp
dmVOb3RpZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQobmF0aXZlT2JzZXJ2ZXIpOwotICAgIH0KLSAg
ICAvLyBUaGlzIGF2b2lkcyBjYWxsaW5nIGV4dGVybmFsIG1ldGhvZHMgd2hpbGUgbG9ja2luZyBv
biBhbiBvYmplY3QuCi0gICAgTGlzdDxOZXR3b3JrT2JzZXJ2ZXI+IGphdmFPYnNlcnZlcnM7Ci0g
ICAgc3luY2hyb25pemVkIChuZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBqYXZhT2JzZXJ2ZXJz
ID0gbmV3IEFycmF5TGlzdDw+KG5ldHdvcmtPYnNlcnZlcnMpOwotICAgIH0KLSAgICBmb3IgKE5l
dHdvcmtPYnNlcnZlciBvYnNlcnZlciA6IGphdmFPYnNlcnZlcnMpIHsKLSAgICAgIG9ic2VydmVy
Lm9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzT2ZOZXR3b3JrQ29ubmVjdCgKLSAgICAg
IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5OZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8p
IHsKLSAgICBMaXN0PExvbmc+IG5hdGl2ZU9ic2VydmVycyA9IGdldE5hdGl2ZU5ldHdvcmtPYnNl
cnZlcnNTeW5jKCk7Ci0gICAgZm9yIChMb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlT2JzZXJ2
ZXJzKSB7Ci0gICAgICBuYXRpdmVOb3RpZnlPZk5ldHdvcmtDb25uZWN0KG5hdGl2ZU9ic2VydmVy
LCBuZXR3b3JrSW5mbyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9ic2Vy
dmVyc09mTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxlKSB7Ci0gICAgTGlzdDxM
b25nPiBuYXRpdmVPYnNlcnZlcnMgPSBnZXROYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzU3luYygpOwot
ICAgIGZvciAoTG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2ZU9ic2VydmVycykgewotICAgICAg
bmF0aXZlTm90aWZ5T2ZOZXR3b3JrRGlzY29ubmVjdChuYXRpdmVPYnNlcnZlciwgbmV0d29ya0hh
bmRsZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU9ic2VydmVyQWN0aXZl
TmV0d29ya0xpc3QobG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAgIExpc3Q8TmV0d29ya01vbml0
b3JBdXRvRGV0ZWN0Lk5ldHdvcmtJbmZvcm1hdGlvbj4gbmV0d29ya0luZm9MaXN0OwotICAgIHN5
bmNocm9uaXplZCAoYXV0b0RldGVjdExvY2spIHsKLSAgICAgIG5ldHdvcmtJbmZvTGlzdCA9IChh
dXRvRGV0ZWN0ID09IG51bGwpID8gbnVsbCA6IGF1dG9EZXRlY3QuZ2V0QWN0aXZlTmV0d29ya0xp
c3QoKTsKLSAgICB9Ci0gICAgaWYgKG5ldHdvcmtJbmZvTGlzdCA9PSBudWxsIHx8IG5ldHdvcmtJ
bmZvTGlzdC5zaXplKCkgPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5ldHdv
cmtNb25pdG9yQXV0b0RldGVjdC5OZXR3b3JrSW5mb3JtYXRpb25bXSBuZXR3b3JrSW5mb3MgPQot
ICAgICAgICBuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtJbmZvcm1hdGlvbltu
ZXR3b3JrSW5mb0xpc3Quc2l6ZSgpXTsKLSAgICBuZXR3b3JrSW5mb3MgPSBuZXR3b3JrSW5mb0xp
c3QudG9BcnJheShuZXR3b3JrSW5mb3MpOwotICAgIG5hdGl2ZU5vdGlmeU9mQWN0aXZlTmV0d29y
a0xpc3QobmF0aXZlT2JzZXJ2ZXIsIG5ldHdvcmtJbmZvcyk7Ci0gIH0KLQotICBwcml2YXRlIExp
c3Q8TG9uZz4gZ2V0TmF0aXZlTmV0d29ya09ic2VydmVyc1N5bmMoKSB7Ci0gICAgc3luY2hyb25p
emVkIChuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICByZXR1cm4gbmV3IEFycmF5TGlz
dDw+KG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBB
ZGRzIGFuIG9ic2VydmVyIGZvciBhbnkgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gICAqCi0g
ICAqIEBkZXByZWNhdGVkIFVzZSBnZXRJbnN0YW5jZShhcHBDb250ZXh0KS5hZGRPYnNlcnZlciBp
bnN0ZWFkLgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyB2b2lkIGFkZE5l
dHdvcmtPYnNlcnZlcihOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBnZXRJbnN0YW5j
ZSgpLmFkZE9ic2VydmVyKG9ic2VydmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZE9ic2Vy
dmVyKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlcikgewotICAgIHN5bmNocm9uaXplZCAobmV0d29y
a09ic2VydmVycykgewotICAgICAgbmV0d29ya09ic2VydmVycy5hZGQob2JzZXJ2ZXIpOwotICAg
IH0KLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmVzIGFuIG9ic2VydmVyIGZvciBhbnkgY29ubmVj
dGlvbiB0eXBlIGNoYW5nZXMuCi0gICAqCi0gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRJbnN0YW5j
ZShhcHBDb250ZXh0KS5yZW1vdmVPYnNlcnZlciBpbnN0ZWFkLgotICAgKi8KLSAgQERlcHJlY2F0
ZWQKLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZU5ldHdvcmtPYnNlcnZlcihOZXR3b3JrT2Jz
ZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBnZXRJbnN0YW5jZSgpLnJlbW92ZU9ic2VydmVyKG9ic2Vy
dmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZU9ic2VydmVyKE5ldHdvcmtPYnNlcnZl
ciBvYnNlcnZlcikgewotICAgIHN5bmNocm9uaXplZCAobmV0d29ya09ic2VydmVycykgewotICAg
ICAgbmV0d29ya09ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOwotICAgIH0KLSAgfQotCi0gIC8q
KiBDaGVja3MgaWYgdGhlcmUgY3VycmVudGx5IGlzIGNvbm5lY3Rpdml0eS4gKi8KLSAgcHVibGlj
IHN0YXRpYyBib29sZWFuIGlzT25saW5lKCkgewotICAgIE5ldHdvcmtNb25pdG9yQXV0b0RldGVj
dC5Db25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSA9Ci0gICAgICAgIGdldEluc3RhbmNlKCku
Z2V0Q3VycmVudENvbm5lY3Rpb25UeXBlKCk7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25UeXBlICE9
IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX05PTkU7
Ci0gIH0KLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeUNvbm5lY3Rpb25UeXBl
Q2hhbmdlZChsb25nIG5hdGl2ZUFuZHJvaWROZXR3b3JrTW9uaXRvcik7Ci0gIHByaXZhdGUgbmF0
aXZlIHZvaWQgbmF0aXZlTm90aWZ5T2ZOZXR3b3JrQ29ubmVjdCgKLSAgICAgIGxvbmcgbmF0aXZl
QW5kcm9pZE5ldHdvcmtNb25pdG9yLCBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya0lu
Zm9ybWF0aW9uIG5ldHdvcmtJbmZvKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3Rp
ZnlPZk5ldHdvcmtEaXNjb25uZWN0KAotICAgICAgbG9uZyBuYXRpdmVBbmRyb2lkTmV0d29ya01v
bml0b3IsIGxvbmcgbmV0d29ya0hhbmRsZSk7Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZl
Tm90aWZ5T2ZBY3RpdmVOZXR3b3JrTGlzdCgKLSAgICAgIGxvbmcgbmF0aXZlQW5kcm9pZE5ldHdv
cmtNb25pdG9yLCBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya0luZm9ybWF0aW9uW10g
bmV0d29ya0luZm9zKTsKLQotICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICBATnVsbGFibGUKLSAg
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGdldE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCgpIHsK
LSAgICBzeW5jaHJvbml6ZWQgKGF1dG9EZXRlY3RMb2NrKSB7Ci0gICAgICByZXR1cm4gYXV0b0Rl
dGVjdDsKLSAgICB9Ci0gIH0KLQotICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICBpbnQgZ2V0TnVt
T2JzZXJ2ZXJzKCkgewotICAgIHN5bmNocm9uaXplZCAoYXV0b0RldGVjdExvY2spIHsKLSAgICAg
IHJldHVybiBudW1PYnNlcnZlcnM7Ci0gICAgfQotICB9Ci0KLSAgLy8gRm9yIHRlc3Rpbmcgb25s
eS4KLSAgc3RhdGljIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCBjcmVhdGVBbmRTZXRBdXRvRGV0
ZWN0Rm9yVGVzdChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBOZXR3b3JrTW9uaXRvciBuZXR3b3Jr
TW9uaXRvciA9IGdldEluc3RhbmNlKCk7Ci0gICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGF1
dG9EZXRlY3QgPSBuZXR3b3JrTW9uaXRvci5jcmVhdGVBdXRvRGV0ZWN0KGNvbnRleHQpOwotICAg
IHJldHVybiBuZXR3b3JrTW9uaXRvci5hdXRvRGV0ZWN0ID0gYXV0b0RldGVjdDsKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LmphdmEgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGFjNDY5YzFkZWQ4NDgzOTJjNDcxZDIxYTQ1M2RhMDQyNGMxMjYxOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0
Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4MCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NMaW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVu
dC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRl
bnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9y
dCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyLk5ldHdvcmtDYWxsYmFjazsKLWltcG9y
dCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVy
dGllczsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5l
dHdvcmtDYXBhYmlsaXRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87Ci1pbXBv
cnQgYW5kcm9pZC5uZXQuTmV0d29ya1JlcXVlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5X
aWZpSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwotaW1wb3J0IGFu
ZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBHcm91cDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZp
LnAycC5XaWZpUDJwTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFu
ZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudGVsZXBo
b255LlRlbGVwaG9ueU1hbmFnZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBv
cnQgamF2YS5uZXQuTmV0d29ya0ludGVyZmFjZTsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXRFeGNl
cHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29s
bGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQm9ycm93ZWQgZnJv
bSBDaHJvbWl1bSdzCi0gKiBzcmMvbmV0L2FuZHJvaWQvamF2YS9zcmMvb3JnL2Nocm9taXVtL25l
dC9OZXR3b3JrQ2hhbmdlTm90aWZpZXJBdXRvRGV0ZWN0LmphdmEKLSAqCi0gKiBVc2VkIGJ5IHRo
ZSBOZXR3b3JrTW9uaXRvciB0byBsaXN0ZW4gdG8gcGxhdGZvcm0gY2hhbmdlcyBpbiBjb25uZWN0
aXZpdHkuCi0gKiBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgY2xhc3MgcmVxdWlyZXMgdGhhdCB0aGUg
YXBwIGhhdmUgdGhlIHBsYXRmb3JtCi0gKiBBQ0NFU1NfTkVUV09SS19TVEFURSBwZXJtaXNzaW9u
LgotICovCi1wdWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGV4dGVuZHMgQnJv
YWRjYXN0UmVjZWl2ZXIgewotICBwdWJsaWMgc3RhdGljIGVudW0gQ29ubmVjdGlvblR5cGUgewot
ICAgIENPTk5FQ1RJT05fVU5LTk9XTiwKLSAgICBDT05ORUNUSU9OX0VUSEVSTkVULAotICAgIENP
Tk5FQ1RJT05fV0lGSSwKLSAgICBDT05ORUNUSU9OXzRHLAotICAgIENPTk5FQ1RJT05fM0csCi0g
ICAgQ09OTkVDVElPTl8yRywKLSAgICBDT05ORUNUSU9OX1VOS05PV05fQ0VMTFVMQVIsCi0gICAg
Q09OTkVDVElPTl9CTFVFVE9PVEgsCi0gICAgQ09OTkVDVElPTl9WUE4sCi0gICAgQ09OTkVDVElP
Tl9OT05FCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIElQQWRkcmVzcyB7Ci0gICAgcHVi
bGljIGZpbmFsIGJ5dGVbXSBhZGRyZXNzOwotICAgIHB1YmxpYyBJUEFkZHJlc3MoYnl0ZVtdIGFk
ZHJlc3MpIHsKLSAgICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgfQotCi0gICAgQENh
bGxlZEJ5TmF0aXZlKCJJUEFkZHJlc3MiKQotICAgIHByaXZhdGUgYnl0ZVtdIGdldEFkZHJlc3Mo
KSB7Ci0gICAgICByZXR1cm4gYWRkcmVzczsKLSAgICB9Ci0gIH0KLQotICAvKiogSmF2YSB2ZXJz
aW9uIG9mIE5ldHdvcmtNb25pdG9yLk5ldHdvcmtJbmZvcm1hdGlvbiAqLwotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIE5ldHdvcmtJbmZvcm1hdGlvbiB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBu
YW1lOwotICAgIHB1YmxpYyBmaW5hbCBDb25uZWN0aW9uVHlwZSB0eXBlOwotICAgIC8vIFVzZWQg
dG8gc3BlY2lmeSB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHR5cGUgaWYgdGhlIHR5cGUgaXMgQ09O
TkVDVElPTl9WUE4uCi0gICAgcHVibGljIGZpbmFsIENvbm5lY3Rpb25UeXBlIHVuZGVybHlpbmdU
eXBlRm9yVnBuOwotICAgIHB1YmxpYyBmaW5hbCBsb25nIGhhbmRsZTsKLSAgICBwdWJsaWMgZmlu
YWwgSVBBZGRyZXNzW10gaXBBZGRyZXNzZXM7Ci0gICAgcHVibGljIE5ldHdvcmtJbmZvcm1hdGlv
bihTdHJpbmcgbmFtZSwgQ29ubmVjdGlvblR5cGUgdHlwZSwgQ29ubmVjdGlvblR5cGUgdW5kZXJs
eWluZ1R5cGVGb3JWcG4sCi0gICAgICAgIGxvbmcgaGFuZGxlLCBJUEFkZHJlc3NbXSBhZGRyZXNz
ZXMpIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB0aGlzLnR5cGUgPSB0eXBlOwot
ICAgICAgdGhpcy51bmRlcmx5aW5nVHlwZUZvclZwbiA9IHVuZGVybHlpbmdUeXBlRm9yVnBuOwot
ICAgICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gICAgICB0aGlzLmlwQWRkcmVzc2VzID0gYWRk
cmVzc2VzOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiTmV0d29ya0luZm9ybWF0aW9u
IikKLSAgICBwcml2YXRlIElQQWRkcmVzc1tdIGdldElwQWRkcmVzc2VzKCkgewotICAgICAgcmV0
dXJuIGlwQWRkcmVzc2VzOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiTmV0d29ya0lu
Zm9ybWF0aW9uIikKLSAgICBwcml2YXRlIENvbm5lY3Rpb25UeXBlIGdldENvbm5lY3Rpb25UeXBl
KCkgewotICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJO
ZXR3b3JrSW5mb3JtYXRpb24iKQotICAgIHByaXZhdGUgQ29ubmVjdGlvblR5cGUgZ2V0VW5kZXJs
eWluZ0Nvbm5lY3Rpb25UeXBlRm9yVnBuKCkgewotICAgICAgcmV0dXJuIHVuZGVybHlpbmdUeXBl
Rm9yVnBuOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiTmV0d29ya0luZm9ybWF0aW9u
IikKLSAgICBwcml2YXRlIGxvbmcgZ2V0SGFuZGxlKCkgewotICAgICAgcmV0dXJuIGhhbmRsZTsK
LSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk5ldHdvcmtJbmZvcm1hdGlvbiIpCi0gICAg
cHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLSAg
fTsKLQotICBzdGF0aWMgY2xhc3MgTmV0d29ya1N0YXRlIHsKLSAgICBwcml2YXRlIGZpbmFsIGJv
b2xlYW4gY29ubmVjdGVkOwotICAgIC8vIERlZmluZWQgZnJvbSBDb25uZWN0aXZpdHlNYW5hZ2Vy
LlRZUEVfWFhYIGZvciBub24tbW9iaWxlOyBmb3IgbW9iaWxlLCBpdCBpcwotICAgIC8vIGZ1cnRo
ZXIgZGl2aWRlZCBpbnRvIDJHLCAzRywgb3IgNEcgZnJvbSB0aGUgc3VidHlwZS4KLSAgICBwcml2
YXRlIGZpbmFsIGludCB0eXBlOwotICAgIC8vIERlZmluZWQgZnJvbSBOZXR3b3JrSW5mby5zdWJ0
eXBlLCB3aGljaCBpcyBvbmUgb2YgdGhlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1hY
WHMuCi0gICAgLy8gV2lsbCBiZSB1c2VmdWwgdG8gZmluZCB0aGUgbWF4aW11bSBiYW5kd2lkdGgu
Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgc3VidHlwZTsKLSAgICAvLyBXaGVuIHRoZSB0eXBlIGlz
IFRZUEVfVlBOLCB0aGUgZm9sbG93aW5nIHR3byBmaWVsZHMgc3BlY2lmeSB0aGUgc2ltaWxhciB0
eXBlIGFuZCBzdWJ0eXBlIGFzCi0gICAgLy8gYWJvdmUgZm9yIHRoZSB1bmRlcmx5aW5nIG5ldHdv
cmsgdGhhdCBpcyB1c2VkIGJ5IHRoZSBWUE4uCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgdW5kZXJs
eWluZ05ldHdvcmtUeXBlRm9yVnBuOwotICAgIHByaXZhdGUgZmluYWwgaW50IHVuZGVybHlpbmdO
ZXR3b3JrU3VidHlwZUZvclZwbjsKLQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUoYm9vbGVhbiBj
b25uZWN0ZWQsIGludCB0eXBlLCBpbnQgc3VidHlwZSwgaW50IHVuZGVybHlpbmdOZXR3b3JrVHlw
ZUZvclZwbiwKLSAgICAgICAgaW50IHVuZGVybHlpbmdOZXR3b3JrU3VidHlwZUZvclZwbikgewot
ICAgICAgdGhpcy5jb25uZWN0ZWQgPSBjb25uZWN0ZWQ7Ci0gICAgICB0aGlzLnR5cGUgPSB0eXBl
OwotICAgICAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTsKLSAgICAgIHRoaXMudW5kZXJseWluZ05l
dHdvcmtUeXBlRm9yVnBuID0gdW5kZXJseWluZ05ldHdvcmtUeXBlRm9yVnBuOwotICAgICAgdGhp
cy51bmRlcmx5aW5nTmV0d29ya1N1YnR5cGVGb3JWcG4gPSB1bmRlcmx5aW5nTmV0d29ya1N1YnR5
cGVGb3JWcG47Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNDb25uZWN0ZWQoKSB7Ci0g
ICAgICByZXR1cm4gY29ubmVjdGVkOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29y
a1R5cGUoKSB7Ci0gICAgICByZXR1cm4gdHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdl
dE5ldHdvcmtTdWJUeXBlKCkgewotICAgICAgcmV0dXJuIHN1YnR5cGU7Ci0gICAgfQotCi0gICAg
cHVibGljIGludCBnZXRVbmRlcmx5aW5nTmV0d29ya1R5cGVGb3JWcG4oKSB7Ci0gICAgICByZXR1
cm4gdW5kZXJseWluZ05ldHdvcmtUeXBlRm9yVnBuOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQg
Z2V0VW5kZXJseWluZ05ldHdvcmtTdWJ0eXBlRm9yVnBuKCkgewotICAgICAgcmV0dXJuIHVuZGVy
bHlpbmdOZXR3b3JrU3VidHlwZUZvclZwbjsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBt
ZXRob2RzIGluIHRoaXMgY2xhc3MgZ2V0IGNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGNoYW5nZXMg
aWYgdGhlIGNhbGxiYWNrCi0gICAqIGlzIHJlZ2lzdGVyZWQgd2l0aCBhIHByb3BlciBuZXR3b3Jr
IHJlcXVlc3QuIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGluIEFuZHJvaWQgTG9sbGlwb3AKLSAgICog
YW5kIGFib3ZlLgotICAgKi8KLSAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgcHJpdmF0ZSBj
bGFzcyBTaW1wbGVOZXR3b3JrQ2FsbGJhY2sgZXh0ZW5kcyBOZXR3b3JrQ2FsbGJhY2sgewotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQXZhaWxhYmxlKE5ldHdvcmsgbmV0d29yaykg
ewotICAgICAgTG9nZ2luZy5kKFRBRywgIk5ldHdvcmsgYmVjb21lcyBhdmFpbGFibGU6ICIgKyBu
ZXR3b3JrLnRvU3RyaW5nKCkpOwotICAgICAgb25OZXR3b3JrQ2hhbmdlZChuZXR3b3JrKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcGFiaWxpdGllc0NoYW5n
ZWQoTmV0d29yayBuZXR3b3JrLCBOZXR3b3JrQ2FwYWJpbGl0aWVzIG5ldHdvcmtDYXBhYmlsaXRp
ZXMpIHsKLSAgICAgIC8vIEEgY2FwYWJpbGl0aWVzIGNoYW5nZSBtYXkgaW5kaWNhdGUgdGhlIENv
bm5lY3Rpb25UeXBlIGhhcyBjaGFuZ2VkLAotICAgICAgLy8gc28gZm9yd2FyZCB0aGUgbmV3IE5l
dHdvcmtJbmZvcm1hdGlvbiBhbG9uZyB0byB0aGUgb2JzZXJ2ZXIuCi0gICAgICBMb2dnaW5nLmQo
VEFHLCAiY2FwYWJpbGl0aWVzIGNoYW5nZWQ6ICIgKyBuZXR3b3JrQ2FwYWJpbGl0aWVzLnRvU3Ry
aW5nKCkpOwotICAgICAgb25OZXR3b3JrQ2hhbmdlZChuZXR3b3JrKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxpbmtQcm9wZXJ0aWVzQ2hhbmdlZChOZXR3b3Jr
IG5ldHdvcmssIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzKSB7Ci0gICAgICAvLyBBIGxp
bmsgcHJvcGVydHkgY2hhbmdlIG1heSBpbmRpY2F0ZSB0aGUgSVAgYWRkcmVzcyBjaGFuZ2VzLgot
ICAgICAgLy8gc28gZm9yd2FyZCB0aGUgbmV3IE5ldHdvcmtJbmZvcm1hdGlvbiB0byB0aGUgb2Jz
ZXJ2ZXIuCi0gICAgICBMb2dnaW5nLmQoVEFHLCAibGluayBwcm9wZXJ0aWVzIGNoYW5nZWQ6ICIg
KyBsaW5rUHJvcGVydGllcy50b1N0cmluZygpKTsKLSAgICAgIG9uTmV0d29ya0NoYW5nZWQobmV0
d29yayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Mb3Npbmco
TmV0d29yayBuZXR3b3JrLCBpbnQgbWF4TXNUb0xpdmUpIHsKLSAgICAgIC8vIFRlbGwgdGhlIG5l
dHdvcmsgaXMgZ29pbmcgdG8gbG9zZSBpbiBNYXhNc1RvTGl2ZSBtaWxsaXNlY29uZHMuCi0gICAg
ICAvLyBXZSBtYXkgdXNlIHRoaXMgc2lnbmFsIGxhdGVyLgotICAgICAgTG9nZ2luZy5kKAotICAg
ICAgICAgIFRBRywgIk5ldHdvcmsgIiArIG5ldHdvcmsudG9TdHJpbmcoKSArICIgaXMgYWJvdXQg
dG8gbG9zZSBpbiAiICsgbWF4TXNUb0xpdmUgKyAibXMiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxvc3QoTmV0d29yayBuZXR3b3JrKSB7Ci0gICAgICBMb2dn
aW5nLmQoVEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygpICsgIiBpcyBkaXNjb25u
ZWN0ZWQiKTsKLSAgICAgIG9ic2VydmVyLm9uTmV0d29ya0Rpc2Nvbm5lY3QobmV0d29ya1RvTmV0
SWQobmV0d29yaykpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBvbk5ldHdvcmtDaGFuZ2Vk
KE5ldHdvcmsgbmV0d29yaykgewotICAgICAgTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZv
cm1hdGlvbiA9IGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5uZXR3b3JrVG9JbmZvKG5ldHdv
cmspOwotICAgICAgaWYgKG5ldHdvcmtJbmZvcm1hdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgIG9i
c2VydmVyLm9uTmV0d29ya0Nvbm5lY3QobmV0d29ya0luZm9ybWF0aW9uKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICAvKiogUXVlcmllcyB0aGUgQ29ubmVjdGl2aXR5TWFuYWdlciBmb3IgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgY29ubmVjdGlvbi4gKi8KLSAgc3RhdGljIGNsYXNz
IENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgLyoqCi0gICAgICogIE5vdGU6IElu
IHNvbWUgcmFyZSBBbmRyb2lkIHN5c3RlbXMgY29ubmVjdGl2aXR5TWFuYWdlciBpcyBudWxsLiAg
V2UgaGFuZGxlIHRoYXQKLSAgICAgKiAgZ3JhY2VmdWxseSBiZWxvdy4KLSAgICAgKi8KLSAgICBA
TnVsbGFibGUgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aXZpdHlNYW5hZ2VyIGNvbm5lY3Rpdml0eU1h
bmFnZXI7Ci0KLSAgICBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUoQ29udGV4dCBjb250ZXh0
KSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyID0KLSAgICAgICAgICAoQ29ubmVjdGl2aXR5
TWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ09OTkVDVElWSVRZX1NF
UlZJQ0UpOwotICAgIH0KLQotICAgIC8vIEZvciB0ZXN0aW5nLgotICAgIENvbm5lY3Rpdml0eU1h
bmFnZXJEZWxlZ2F0ZSgpIHsKLSAgICAgIC8vIEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBzaG91bGQg
YmUgb3ZlcnJpZGRlbi4KLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIgPSBudWxsOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFJldHVybnMgY29ubmVjdGlvbiB0eXBlIGFuZCBzdGF0dXMgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQKLSAgICAgKiBkZWZhdWx0IG5ldHdvcmsuCi0gICAg
ICovCi0gICAgTmV0d29ya1N0YXRlIGdldE5ldHdvcmtTdGF0ZSgpIHsKLSAgICAgIGlmIChjb25u
ZWN0aXZpdHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3Rh
dGUoZmFsc2UsIC0xLCAtMSwgLTEsIC0xKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBnZXROZXR3
b3JrU3RhdGUoY29ubmVjdGl2aXR5TWFuYWdlci5nZXRBY3RpdmVOZXR3b3JrSW5mbygpKTsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGNvbm5lY3Rpb24gdHlwZSBhbmQgc3RhdHVz
IGluZm9ybWF0aW9uIGFib3V0IHxuZXR3b3JrfC4KLSAgICAgKiBPbmx5IGNhbGxhYmxlIG9uIExv
bGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NMaW50KCJO
ZXdBcGkiKQotICAgIE5ldHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoQE51bGxhYmxlIE5ldHdv
cmsgbmV0d29yaykgewotICAgICAgaWYgKG5ldHdvcmsgPT0gbnVsbCB8fCBjb25uZWN0aXZpdHlN
YW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoZmFsc2Us
IC0xLCAtMSwgLTEsIC0xKTsKLSAgICAgIH0KLSAgICAgIE5ldHdvcmtJbmZvIG5ldHdvcmtJbmZv
ID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXROZXR3b3JrSW5mbyhuZXR3b3JrKTsKLSAgICAgIGlm
IChuZXR3b3JrSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJDb3VsZG4n
dCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBmcm9tIG5ldHdvcmsgIiArIG5ldHdvcmsudG9TdHJpbmco
KSk7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGZhbHNlLCAtMSwgLTEsIC0xLCAt
MSk7Ci0gICAgICB9Ci0gICAgICAvLyBUaGUgZ2VuZXJhbCBsb2dpYyBvZiBoYW5kbGluZyBhIFZQ
TiBpbiB0aGlzIG1ldGhvZCBpcyBhcyBmb2xsb3dzLiBnZXROZXR3b3JrSW5mbyB3aWxsCi0gICAg
ICAvLyByZXR1cm4gdGhlIGluZm8gb2YgdGhlIG5ldHdvcmsgd2l0aCB0aGUgc2FtZSBpZCBhcyBp
biB8bmV0d29ya3wgd2hlbiBpdCBpcyByZWdpc3RlcmVkIHZpYQotICAgICAgLy8gQ29ubmVjdGl2
aXR5TWFuYWdlci5yZWdpc3Rlck5ldHdvcmtBZ2VudCBpbiBBbmRyb2lkLiB8bmV0d29ya0luZm98
IG1heSBvciBtYXkgbm90IGluZGljYXRlCi0gICAgICAvLyB0aGUgdHlwZSBUWVBFX1ZQTiBpZiB8
bmV0d29ya3wgaXMgYSBWUE4uIFRvIHJlbGlhYmx5IGRldGVjdCB0aGUgVlBOIGludGVyZmFjZSwg
d2UgbmVlZCB0bwotICAgICAgLy8gcXVlcnkgdGhlIG5ldHdvcmsgY2FwYWJpbGl0eSBhcyBiZWxv
dyBpbiB0aGUgY2FzZSB3aGVuIG5ldHdvcmtJbmZvLmdldFR5cGUoKSBpcyBub3QKLSAgICAgIC8v
IFRZUEVfVlBOLiBPbiB0aGUgb3RoZXIgaGFuZCB3aGVuIG5ldHdvcmtJbmZvLmdldFR5cGUoKSBp
cyBUWVBFX1ZQTiwgdGhlIG9ubHkgc29sdXRpb24gc28KLSAgICAgIC8vIGZhciB0byBvYnRhaW4g
dGhlIHVuZGVybHlpbmcgbmV0d29yayBpbmZvcm1hdGlvbiBpcyB0byBxdWVyeSB0aGUgYWN0aXZl
IG5ldHdvcmsgaW50ZXJmYWNlLgotICAgICAgLy8gSG93ZXZlciwgdGhlIGFjdGl2ZSBuZXR3b3Jr
IGludGVyZmFjZSBtYXkgbm90IGJlIHVzZWQgZm9yIHRoZSBWUE4sIGZvciBleGFtcGxlLCBpZiB0
aGUgVlBOCi0gICAgICAvLyBpcyByZXN0cmljdGVkIHRvIFdpRmkgYnkgdGhlIGltcGxlbWVudGF0
aW9uIGJ1dCB0aGUgV2lGaSBpbnRlcmZhY2UgaXMgY3VycmVudGx5IHR1cm5lZAotICAgICAgLy8g
b2ZmIGFuZCB0aGUgYWN0aXZlIGludGVyZmFjZSBpcyB0aGUgQ2VsbC4gVXNpbmcgZGlyZWN0bHkg
dGhlIHJlc3VsdCBmcm9tCi0gICAgICAvLyBnZXRBY3RpdmVOZXR3b3JrSW5mbyBtYXkgdGh1cyBn
aXZlIHRoZSB3cm9uZyBpbnRlcmZhY2UgaW5mb3JtYXRpb24sIGFuZCBvbmUgc2hvdWxkIG5vdGUK
LSAgICAgIC8vIHRoYXQgZ2V0QWN0aXZlTmV0d29ya0luZm8gd291bGQgcmV0dXJuIHRoZSBkZWZh
dWx0IG5ldHdvcmsgaW50ZXJmYWNlIGlmIHRoZSBWUE4gZG9lcyBub3QKLSAgICAgIC8vIHNwZWNp
ZnkgaXRzIHVuZGVybHlpbmcgbmV0d29ya3MgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaGVyZWZv
cmUsIHdlIG5lZWQgZnVydGhlciBjb21wYXJlCi0gICAgICAvLyB8bmV0d29ya3wgdG8gdGhlIGFj
dGl2ZSBuZXR3b3JrLiBJZiB0aGV5IGFyZSBub3QgdGhlIHNhbWUgbmV0d29yaywgd2Ugd2lsbCBo
YXZlIHRvIGZhbGwKLSAgICAgIC8vIGJhY2sgdG8gcmVwb3J0IGFuIHVua25vd24gbmV0d29yay4K
LQotICAgICAgaWYgKG5ldHdvcmtJbmZvLmdldFR5cGUoKSAhPSBDb25uZWN0aXZpdHlNYW5hZ2Vy
LlRZUEVfVlBOKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBnZXROZXR3b3JrQ2FwYWJpbGl0aWVz
IHJldHVybnMgbnVsbCBpZiB0aGUgbmV0d29yayBpcyB1bmtub3duLgotICAgICAgICBOZXR3b3Jr
Q2FwYWJpbGl0aWVzIG5ldHdvcmtDYXBhYmlsaXRpZXMgPQotICAgICAgICAgICAgY29ubmVjdGl2
aXR5TWFuYWdlci5nZXROZXR3b3JrQ2FwYWJpbGl0aWVzKG5ldHdvcmspOwotICAgICAgICBpZiAo
bmV0d29ya0NhcGFiaWxpdGllcyA9PSBudWxsCi0gICAgICAgICAgICB8fCAhbmV0d29ya0NhcGFi
aWxpdGllcy5oYXNUcmFuc3BvcnQoTmV0d29ya0NhcGFiaWxpdGllcy5UUkFOU1BPUlRfVlBOKSkg
ewotICAgICAgICAgIHJldHVybiBnZXROZXR3b3JrU3RhdGUobmV0d29ya0luZm8pOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIFdoZW4gfG5ldHdvcmt8IGlzIGluIGZhY3QgYSBWUE4gYWZ0ZXIgcXVl
cnlpbmcgaXRzIGNhcGFiaWxpdHkgYnV0IHxuZXR3b3JrSW5mb3wgaXMgbm90IG9mCi0gICAgICAg
IC8vIHR5cGUgVFlQRV9WUE4sIHxuZXR3b3JrSW5mb3wgY29udGFpbnMgdGhlIGluZm8gZm9yIHRo
ZSB1bmRlcmx5aW5nIG5ldHdvcmssIGFuZCB3ZSByZXR1cm4KLSAgICAgICAgLy8gYSBOZXR3b3Jr
U3RhdGUgY29uc3RydWN0ZWQgZnJvbSBpdC4KLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3Rh
dGUobmV0d29ya0luZm8uaXNDb25uZWN0ZWQoKSwgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1ZQ
TiwgLTEsCi0gICAgICAgICAgICBuZXR3b3JrSW5mby5nZXRUeXBlKCksIG5ldHdvcmtJbmZvLmdl
dFN1YnR5cGUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdoZW4gfG5ldHdvcmtJbmZvfCBpcyBv
ZiB0eXBlIFRZUEVfVlBOLCB3aGljaCBpbXBsaWVzIHxuZXR3b3JrfCBpcyBhIFZQTiwgd2UgcmV0
dXJuIHRoZQotICAgICAgLy8gTmV0d29ya1N0YXRlIG9mIHRoZSBhY3RpdmUgbmV0d29yayB2aWEg
Z2V0QWN0aXZlTmV0d29ya0luZm8oKSwgaWYgfG5ldHdvcmt8IGlzIHRoZSBhY3RpdmUKLSAgICAg
IC8vIG5ldHdvcmsgdGhhdCBzdXBwb3J0cyB0aGUgVlBOLiBPdGhlcndpc2UsIE5ldHdvcmtTdGF0
ZSBvZiBhbiB1bmtub3duIG5ldHdvcmsgd2l0aCB0eXBlIC0xCi0gICAgICAvLyB3aWxsIGJlIHJl
dHVybmVkLgotICAgICAgLy8KLSAgICAgIC8vIE5vdGUgdGhhdCBnZXRBY3RpdmVOZXR3b3JrIGFu
ZCBnZXRBY3RpdmVOZXR3b3JrSW5mbyByZXR1cm4gbnVsbCBpZiBubyBkZWZhdWx0IG5ldHdvcmsg
aXMKLSAgICAgIC8vIGN1cnJlbnRseSBhY3RpdmUuCi0gICAgICBpZiAobmV0d29ya0luZm8uZ2V0
VHlwZSgpID09IENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9WUE4pIHsKLSAgICAgICAgaWYgKEJ1
aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk0KLSAgICAgICAgICAg
ICYmIG5ldHdvcmsuZXF1YWxzKGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWN0aXZlTmV0d29yaygp
KSkgewotICAgICAgICAgIC8vIElmIGEgVlBOIG5ldHdvcmsgaXMgaW4gcGxhY2UsIHdlIGNhbiBm
aW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgdHlwZSB2aWEgcXVlcnlpbmcgdGhlCi0gICAgICAg
ICAgLy8gYWN0aXZlIG5ldHdvcmsgaW5mbyB0aGFua3MgdG8KLSAgICAgICAgICAvLyBodHRwczov
L2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UvKy9kNmE3
OTgwZAotICAgICAgICAgIE5ldHdvcmtJbmZvIHVuZGVybHlpbmdBY3RpdmVOZXR3b3JrSW5mbyA9
IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWN0aXZlTmV0d29ya0luZm8oKTsKLSAgICAgICAgICAv
LyBXZSB1c2UgdGhlIE5ldHdvcmtJbmZvIG9mIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaWYgaXQg
aXMgbm90IG9mIFRZUEVfVlBOIGl0c2VsZi4KLSAgICAgICAgICBpZiAodW5kZXJseWluZ0FjdGl2
ZU5ldHdvcmtJbmZvICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgdW5kZXJseWluZ0FjdGl2ZU5l
dHdvcmtJbmZvLmdldFR5cGUoKSAhPSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfVlBOKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShuZXR3b3JrSW5mby5pc0Nvbm5lY3Rl
ZCgpLCBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfVlBOLCAtMSwKLSAgICAgICAgICAgICAgICB1
bmRlcmx5aW5nQWN0aXZlTmV0d29ya0luZm8uZ2V0VHlwZSgpLCB1bmRlcmx5aW5nQWN0aXZlTmV0
d29ya0luZm8uZ2V0U3VidHlwZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoCi0gICAgICAgICAgICBuZXR3b3JrSW5mby5pc0Nvbm5l
Y3RlZCgpLCBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfVlBOLCAtMSwgLTEsIC0xKTsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIGdldE5ldHdvcmtTdGF0ZShuZXR3b3JrSW5mbyk7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBjb25uZWN0aW9uIHR5cGUgYW5kIHN0YXR1cyBpbmZv
cm1hdGlvbiBnbGVhbmVkIGZyb20gbmV0d29ya0luZm8uIE5vdGUgdGhhdCB0byBvYnRhaW4KLSAg
ICAgKiB0aGUgY29tcGxldGUgaW5mb3JtYXRpb24gYWJvdXQgYSBWUE4gaW5jbHVkaW5nIHRoZSB0
eXBlIG9mIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmssIG9uZSBzaG91bGQKLSAgICAgKiB1c2UgdGhl
IGFib3ZlIG1ldGhvZCBnZXROZXR3b3JrU3RhdGUgd2l0aCBhIE5ldHdvcmsgb2JqZWN0LgotICAg
ICAqLwotICAgIHByaXZhdGUgTmV0d29ya1N0YXRlIGdldE5ldHdvcmtTdGF0ZShATnVsbGFibGUg
TmV0d29ya0luZm8gbmV0d29ya0luZm8pIHsKLSAgICAgIGlmIChuZXR3b3JrSW5mbyA9PSBudWxs
IHx8ICFuZXR3b3JrSW5mby5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0
d29ya1N0YXRlKGZhbHNlLCAtMSwgLTEsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
bmV3IE5ldHdvcmtTdGF0ZSh0cnVlLCBuZXR3b3JrSW5mby5nZXRUeXBlKCksIG5ldHdvcmtJbmZv
LmdldFN1YnR5cGUoKSwgLTEsIC0xKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5z
IGFsbCBjb25uZWN0ZWQgbmV0d29ya3MuCi0gICAgICogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBv
cCBhbmQgbmV3ZXIgcmVsZWFzZXMuCi0gICAgICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBp
IikKLSAgICBOZXR3b3JrW10gZ2V0QWxsTmV0d29ya3MoKSB7Ci0gICAgICBpZiAoY29ubmVjdGl2
aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0d29ya1swXTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyLmdldEFsbE5ldHdvcmtzKCk7
Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgTGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+IGdl
dEFjdGl2ZU5ldHdvcmtMaXN0KCkgewotICAgICAgaWYgKCFzdXBwb3J0TmV0d29ya0NhbGxiYWNr
KCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBBcnJheUxpc3Q8TmV0
d29ya0luZm9ybWF0aW9uPiBuZXRJbmZvTGlzdCA9IG5ldyBBcnJheUxpc3Q8TmV0d29ya0luZm9y
bWF0aW9uPigpOwotICAgICAgZm9yIChOZXR3b3JrIG5ldHdvcmsgOiBnZXRBbGxOZXR3b3Jrcygp
KSB7Ci0gICAgICAgIE5ldHdvcmtJbmZvcm1hdGlvbiBpbmZvID0gbmV0d29ya1RvSW5mbyhuZXR3
b3JrKTsKLSAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgewotICAgICAgICAgIG5ldEluZm9MaXN0
LmFkZChpbmZvKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIG5ldEluZm9MaXN0
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIE5ldElEIG9mIHRoZSBjdXJy
ZW50IGRlZmF1bHQgbmV0d29yay4gUmV0dXJucwotICAgICAqIElOVkFMSURfTkVUX0lEIGlmIG5v
IGN1cnJlbnQgZGVmYXVsdCBuZXR3b3JrIGNvbm5lY3RlZC4KLSAgICAgKiBPbmx5IGNhbGxhYmxl
IG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NM
aW50KCJOZXdBcGkiKQotICAgIGxvbmcgZ2V0RGVmYXVsdE5ldElkKCkgewotICAgICAgaWYgKCFz
dXBwb3J0TmV0d29ya0NhbGxiYWNrKCkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfTkVUX0lE
OwotICAgICAgfQotICAgICAgLy8gQW5kcm9pZCBMb2xsaXBvcCBoYWQgbm8gQVBJIHRvIGdldCB0
aGUgZGVmYXVsdCBuZXR3b3JrOyBvbmx5IGFuCi0gICAgICAvLyBBUEkgdG8gcmV0dXJuIHRoZSBO
ZXR3b3JrSW5mbyBmb3IgdGhlIGRlZmF1bHQgbmV0d29yay4gVG8KLSAgICAgIC8vIGRldGVybWlu
ZSB0aGUgZGVmYXVsdCBuZXR3b3JrIG9uZSBjYW4gZmluZCB0aGUgbmV0d29yayB3aXRoCi0gICAg
ICAvLyB0eXBlIG1hdGNoaW5nIHRoYXQgb2YgdGhlIGRlZmF1bHQgbmV0d29yay4KLSAgICAgIGZp
bmFsIE5ldHdvcmtJbmZvIGRlZmF1bHROZXR3b3JrSW5mbyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIu
Z2V0QWN0aXZlTmV0d29ya0luZm8oKTsKLSAgICAgIGlmIChkZWZhdWx0TmV0d29ya0luZm8gPT0g
bnVsbCkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICB9Ci0gICAgICBm
aW5hbCBOZXR3b3JrW10gbmV0d29ya3MgPSBnZXRBbGxOZXR3b3JrcygpOwotICAgICAgbG9uZyBk
ZWZhdWx0TmV0SWQgPSBJTlZBTElEX05FVF9JRDsKLSAgICAgIGZvciAoTmV0d29yayBuZXR3b3Jr
IDogbmV0d29ya3MpIHsKLSAgICAgICAgaWYgKCFoYXNJbnRlcm5ldENhcGFiaWxpdHkobmV0d29y
aykpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBOZXR3
b3JrSW5mbyBuZXR3b3JrSW5mbyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0TmV0d29ya0luZm8o
bmV0d29yayk7Ci0gICAgICAgIGlmIChuZXR3b3JrSW5mbyAhPSBudWxsICYmIG5ldHdvcmtJbmZv
LmdldFR5cGUoKSA9PSBkZWZhdWx0TmV0d29ya0luZm8uZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAg
Ly8gVGhlcmUgc2hvdWxkIG5vdCBiZSBtdWx0aXBsZSBjb25uZWN0ZWQgbmV0d29ya3Mgb2YgdGhl
Ci0gICAgICAgICAgLy8gc2FtZSB0eXBlLiBBdCBsZWFzdCBhcyBvZiBBbmRyb2lkIE1hcnNobWFs
bG93IHRoaXMgaXMKLSAgICAgICAgICAvLyBub3Qgc3VwcG9ydGVkLiBJZiB0aGlzIGJlY29tZXMg
c3VwcG9ydGVkIHRoaXMgYXNzZXJ0aW9uCi0gICAgICAgICAgLy8gbWF5IHRyaWdnZXIuIEF0IHRo
YXQgcG9pbnQgd2UgY291bGQgY29uc2lkZXIgdXNpbmcKLSAgICAgICAgICAvLyBDb25uZWN0aXZp
dHlNYW5hZ2VyLmdldERlZmF1bHROZXR3b3JrKCkgdGhvdWdoIHRoaXMKLSAgICAgICAgICAvLyBt
YXkgZ2l2ZSBjb25mdXNpbmcgcmVzdWx0cyB3aXRoIFZQTnMgYW5kIGlzIG9ubHkKLSAgICAgICAg
ICAvLyBhdmFpbGFibGUgd2l0aCBBbmRyb2lkIE1hcnNobWFsbG93LgotICAgICAgICAgIGlmIChk
ZWZhdWx0TmV0SWQgIT0gSU5WQUxJRF9ORVRfSUQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJNdWx0aXBsZSBjb25uZWN0ZWQgbmV0
d29ya3Mgb2Ygc2FtZSB0eXBlIGFyZSBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBkZWZhdWx0TmV0SWQgPSBuZXR3b3JrVG9OZXRJZChuZXR3b3JrKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgcmV0dXJuIGRlZmF1bHROZXRJZDsKLSAgICB9Ci0KLSAgICBAU3Vw
cHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHByaXZhdGUgQE51bGxhYmxlIE5ldHdvcmtJbmZvcm1h
dGlvbiBuZXR3b3JrVG9JbmZvKEBOdWxsYWJsZSBOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIGlm
IChuZXR3b3JrID09IG51bGwgfHwgY29ubmVjdGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3Bl
cnRpZXMgPSBjb25uZWN0aXZpdHlNYW5hZ2VyLmdldExpbmtQcm9wZXJ0aWVzKG5ldHdvcmspOwot
ICAgICAgLy8gZ2V0TGlua1Byb3BlcnRpZXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgbmV0d29y
ayBpcyB1bmtub3duLgotICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzID09IG51bGwpIHsKLSAgICAg
ICAgTG9nZ2luZy53KFRBRywgIkRldGVjdGVkIHVua25vd24gbmV0d29yazogIiArIG5ldHdvcmsu
dG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgaWYgKGxp
bmtQcm9wZXJ0aWVzLmdldEludGVyZmFjZU5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dp
bmcudyhUQUcsICJOdWxsIGludGVyZmFjZSBuYW1lIGZvciBuZXR3b3JrICIgKyBuZXR3b3JrLnRv
U3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgTmV0d29y
a1N0YXRlIG5ldHdvcmtTdGF0ZSA9IGdldE5ldHdvcmtTdGF0ZShuZXR3b3JrKTsKLSAgICAgIENv
bm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlID0gZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0
YXRlKTsKLSAgICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNU
SU9OX05PTkUpIHsKLSAgICAgICAgLy8gVGhpcyBtYXkgbm90IGJlIGFuIGVycm9yLiBUaGUgT1Mg
bWF5IHNpZ25hbCBhIG5ldHdvcmsgZXZlbnQgd2l0aCBjb25uZWN0aW9uIHR5cGUKLSAgICAgICAg
Ly8gTk9ORSB3aGVuIHRoZSBuZXR3b3JrIGRpc2Nvbm5lY3RzLgotICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygpICsgIiBpcyBkaXNjb25uZWN0ZWQi
KTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNvbWUgYW5kcm9p
ZCBkZXZpY2UgbWF5IHJldHVybiBhIENPTk5FQ1RJT05fVU5LTk9XTl9DRUxMVUxBUiBvciBDT05O
RUNUSU9OX1VOS05PV04gdHlwZSwKLSAgICAgIC8vIHdoaWNoIGFwcGVhcnMgdG8gYmUgdXNhYmxl
LiBKdXN0IGxvZyB0aGVtIGhlcmUuCi0gICAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gQ29ubmVj
dGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dOCi0gICAgICAgICAgfHwgY29ubmVjdGlvblR5cGUg
PT0gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dOX0NFTExVTEFSKSB7Ci0gICAgICAg
IExvZ2dpbmcuZChUQUcsICJOZXR3b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkgKyAiIGNvbm5l
Y3Rpb24gdHlwZSBpcyAiICsgY29ubmVjdGlvblR5cGUKLSAgICAgICAgICAgICAgICArICIgYmVj
YXVzZSBpdCBoYXMgdHlwZSAiICsgbmV0d29ya1N0YXRlLmdldE5ldHdvcmtUeXBlKCkgKyAiIGFu
ZCBzdWJ0eXBlICIKLSAgICAgICAgICAgICAgICArIG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrU3Vi
VHlwZSgpKTsKLSAgICAgIH0KLSAgICAgIC8vIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5L
Tk9XTiBpZiB0aGUgbmV0d29yayBpcyBub3QgYSBWUE4gb3IgdGhlIHVuZGVybHlpbmcgbmV0d29y
ayBpcwotICAgICAgLy8gdW5rbm93bi4KLSAgICAgIENvbm5lY3Rpb25UeXBlIHVuZGVybHlpbmdD
b25uZWN0aW9uVHlwZUZvclZwbiA9Ci0gICAgICAgICAgZ2V0VW5kZXJseWluZ0Nvbm5lY3Rpb25U
eXBlRm9yVnBuKG5ldHdvcmtTdGF0ZSk7Ci0KLSAgICAgIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3
b3JrSW5mb3JtYXRpb24gPSBuZXcgTmV0d29ya0luZm9ybWF0aW9uKAotICAgICAgICAgIGxpbmtQ
cm9wZXJ0aWVzLmdldEludGVyZmFjZU5hbWUoKSwgY29ubmVjdGlvblR5cGUsIHVuZGVybHlpbmdD
b25uZWN0aW9uVHlwZUZvclZwbiwKLSAgICAgICAgICBuZXR3b3JrVG9OZXRJZChuZXR3b3JrKSwg
Z2V0SVBBZGRyZXNzZXMobGlua1Byb3BlcnRpZXMpKTsKLSAgICAgIHJldHVybiBuZXR3b3JrSW5m
b3JtYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHtAY29k
ZSBuZXR3b3JrfSBjYW4gcHJvdmlkZSBJbnRlcm5ldCBhY2Nlc3MuIENhbiBiZSB1c2VkIHRvCi0g
ICAgICogaWdub3JlIHNwZWNpYWxpemVkIG5ldHdvcmtzIChlLmcuIElNUywgRk9UQSkuCi0gICAg
ICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBib29sZWFuIGhhc0ludGVybmV0
Q2FwYWJpbGl0eShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIGlmIChjb25uZWN0aXZpdHlNYW5h
Z2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZmlu
YWwgTmV0d29ya0NhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMgPSBjb25uZWN0aXZpdHlNYW5hZ2Vy
LmdldE5ldHdvcmtDYXBhYmlsaXRpZXMobmV0d29yayk7Ci0gICAgICByZXR1cm4gY2FwYWJpbGl0
aWVzICE9IG51bGwKLSAgICAgICAgICAmJiBjYXBhYmlsaXRpZXMuaGFzQ2FwYWJpbGl0eShOZXR3
b3JrQ2FwYWJpbGl0aWVzLk5FVF9DQVBBQklMSVRZX0lOVEVSTkVUKTsKLSAgICB9Ci0KLSAgICAv
KiogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuICovCi0gICAg
QFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCByZWdpc3Rlck5ldHdvcmtD
YWxsYmFjayhOZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBjb25uZWN0
aXZpdHlNYW5hZ2VyLnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKAotICAgICAgICAgIG5ldyBOZXR3
b3JrUmVxdWVzdC5CdWlsZGVyKCkKLSAgICAgICAgICAgICAgLmFkZENhcGFiaWxpdHkoTmV0d29y
a0NhcGFiaWxpdGllcy5ORVRfQ0FQQUJJTElUWV9JTlRFUk5FVCkKLSAgICAgICAgICAgICAgLmJ1
aWxkKCksCi0gICAgICAgICAgbmV0d29ya0NhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvKiogT25s
eSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuICovCi0gICAgQFN1cHBy
ZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0TW9iaWxlTmV0d29yayhO
ZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBOZXR3b3JrUmVxdWVzdC5C
dWlsZGVyIGJ1aWxkZXIgPSBuZXcgTmV0d29ya1JlcXVlc3QuQnVpbGRlcigpOwotICAgICAgYnVp
bGRlci5hZGRDYXBhYmlsaXR5KE5ldHdvcmtDYXBhYmlsaXRpZXMuTkVUX0NBUEFCSUxJVFlfSU5U
RVJORVQpCi0gICAgICAgICAgLmFkZFRyYW5zcG9ydFR5cGUoTmV0d29ya0NhcGFiaWxpdGllcy5U
UkFOU1BPUlRfQ0VMTFVMQVIpOwotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlci5yZXF1ZXN0TmV0
d29yayhidWlsZGVyLmJ1aWxkKCksIG5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfQotCi0gICAgQFN1
cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBJUEFkZHJlc3NbXSBnZXRJUEFkZHJlc3NlcyhMaW5r
UHJvcGVydGllcyBsaW5rUHJvcGVydGllcykgewotICAgICAgSVBBZGRyZXNzW10gaXBBZGRyZXNz
ZXMgPSBuZXcgSVBBZGRyZXNzW2xpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKS5zaXpl
KCldOwotICAgICAgaW50IGkgPSAwOwotICAgICAgZm9yIChMaW5rQWRkcmVzcyBsaW5rQWRkcmVz
cyA6IGxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKSkgewotICAgICAgICBpcEFkZHJl
c3Nlc1tpXSA9IG5ldyBJUEFkZHJlc3MobGlua0FkZHJlc3MuZ2V0QWRkcmVzcygpLmdldEFkZHJl
c3MoKSk7Ci0gICAgICAgICsraTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBpcEFkZHJlc3NlczsK
LSAgICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHB1YmxpYyB2b2lkIHJl
bGVhc2VDYWxsYmFjayhOZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBp
ZiAoc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJV
bnJlZ2lzdGVyIG5ldHdvcmsgY2FsbGJhY2siKTsKLSAgICAgICAgY29ubmVjdGl2aXR5TWFuYWdl
ci51bnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKG5ldHdvcmtDYWxsYmFjayk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpIHsKLSAg
ICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5M
T0xMSVBPUCAmJiBjb25uZWN0aXZpdHlNYW5hZ2VyICE9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAg
LyoqIFF1ZXJpZXMgdGhlIFdpZmlNYW5hZ2VyIGZvciBTU0lEIG9mIHRoZSBjdXJyZW50IFdpZmkg
Y29ubmVjdGlvbi4gKi8KLSAgc3RhdGljIGNsYXNzIFdpZmlNYW5hZ2VyRGVsZWdhdGUgewotICAg
IEBOdWxsYWJsZSBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgICBXaWZpTWFuYWdl
ckRlbGVnYXRlKENvbnRleHQgY29udGV4dCkgewotICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4
dDsKLSAgICB9Ci0KLSAgICAvLyBGb3IgdGVzdGluZy4KLSAgICBXaWZpTWFuYWdlckRlbGVnYXRl
KCkgewotICAgICAgLy8gQWxsIHRoZSBtZXRob2RzIGJlbG93IHNob3VsZCBiZSBvdmVycmlkZGVu
LgotICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgfQotCi0gICAgU3RyaW5nIGdldFdpZmlTU0lE
KCkgewotICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IGNvbnRleHQucmVnaXN0ZXJSZWNlaXZl
cigKLSAgICAgICAgICBudWxsLCBuZXcgSW50ZW50RmlsdGVyKFdpZmlNYW5hZ2VyLk5FVFdPUktf
U1RBVEVfQ0hBTkdFRF9BQ1RJT04pKTsKLSAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCkgewotICAg
ICAgICBmaW5hbCBXaWZpSW5mbyB3aWZpSW5mbyA9IGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEo
V2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9JTkZPKTsKLSAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51
bGwpIHsKLSAgICAgICAgICBmaW5hbCBTdHJpbmcgc3NpZCA9IHdpZmlJbmZvLmdldFNTSUQoKTsK
LSAgICAgICAgICBpZiAoc3NpZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3NpZDsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiAiIjsKLSAgICB9
Ci0gIH0KLQotICAvKiogTWFpbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3aWZpIGRpcmVj
dCAoYWthIFdpZmlQMnApIG5ldHdvcmtzLiAqLwotICBzdGF0aWMgY2xhc3MgV2lmaURpcmVjdE1h
bmFnZXJEZWxlZ2F0ZSBleHRlbmRzIEJyb2FkY2FzdFJlY2VpdmVyIHsKLSAgICAvLyBOZXR3b3Jr
ICJoYW5kbGUiIGZvciB0aGUgV2lmaSBQMnAgbmV0d29yay4gV2UgaGF2ZSB0byBiaW5kIHRvIHRo
ZSBkZWZhdWx0IG5ldHdvcmsgaWQKLSAgICAvLyAoTkVUV09SS19VTlNQRUNJRklFRCkgZm9yIHRo
ZXNlIGFkZHJlc3Nlcy4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lGSV9QMlBfTkVU
V09SS19IQU5ETEUgPSAwOwotICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICAg
IHByaXZhdGUgZmluYWwgT2JzZXJ2ZXIgb2JzZXJ2ZXI7Ci0gICAgLy8gTmV0d29yayBpbmZvcm1h
dGlvbiBhYm91dCBhIFdpZmlQMnAgKGFrYSBXaUZpLURpcmVjdCkgbmV0d29yaywgb3IgbnVsbCBp
ZiBubyBzdWNoIG5ldHdvcmsgaXMKLSAgICAvLyBjb25uZWN0ZWQuCi0gICAgQE51bGxhYmxlIHBy
aXZhdGUgTmV0d29ya0luZm9ybWF0aW9uIHdpZmlQMnBOZXR3b3JrSW5mbzsKLQotICAgIFdpZmlE
aXJlY3RNYW5hZ2VyRGVsZWdhdGUoT2JzZXJ2ZXIgb2JzZXJ2ZXIsIENvbnRleHQgY29udGV4dCkg
ewotICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICAgIHRoaXMub2JzZXJ2ZXIgPSBv
YnNlcnZlcjsKLSAgICAgIEludGVudEZpbHRlciBpbnRlbnRGaWx0ZXIgPSBuZXcgSW50ZW50Rmls
dGVyKCk7Ci0gICAgICBpbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKFdpZmlQMnBNYW5hZ2VyLldJRklf
UDJQX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24o
V2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfQ09OTkVDVElPTl9DSEFOR0VEX0FDVElPTik7Ci0gICAg
ICBjb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIodGhpcywgaW50ZW50RmlsdGVyKTsKLSAgICAgIGlm
IChCdWlsZC5WRVJTSU9OLlNES19JTlQgPiBCdWlsZC5WRVJTSU9OX0NPREVTLlApIHsKLSAgICAg
ICAgLy8gU3RhcnRpbmcgd2l0aCBBbmRyb2lkIFEgKDEwKSwgV0lGSV9QMlBfQ09OTkVDVElPTl9D
SEFOR0VEX0FDVElPTiBpcyBubyBsb25nZXIgc3RpY2t5LgotICAgICAgICAvLyBUaGlzIG1lYW5z
IHdlIGhhdmUgdG8gZXhwbGljaXRseSByZXF1ZXN0IFdpZmlQMnBHcm91cCBpbmZvIGR1cmluZyBp
bml0aWFsaXphdGlvbiBpbiBvcmRlcgotICAgICAgICAvLyB0byBnZXQgdGhpcyBkYXRhIGlmIHdl
IGFyZSBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIFdpLUZpIERpcmVjdCBuZXR3b3JrLgotICAgICAg
ICBXaWZpUDJwTWFuYWdlciBtYW5hZ2VyID0KLSAgICAgICAgICAgIChXaWZpUDJwTWFuYWdlcikg
Y29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9QMlBfU0VSVklDRSk7Ci0gICAg
ICAgIFdpZmlQMnBNYW5hZ2VyLkNoYW5uZWwgY2hhbm5lbCA9Ci0gICAgICAgICAgICBtYW5hZ2Vy
LmluaXRpYWxpemUoY29udGV4dCwgY29udGV4dC5nZXRNYWluTG9vcGVyKCksIG51bGwgLyogbGlz
dGVuZXIgKi8pOwotICAgICAgICBtYW5hZ2VyLnJlcXVlc3RHcm91cEluZm8oY2hhbm5lbCwgd2lm
aVAycEdyb3VwIC0+IHsgb25XaWZpUDJwR3JvdXBDaGFuZ2Uod2lmaVAycEdyb3VwKTsgfSk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gQnJvYWRjYXN0UmVjZWl2ZXIKLSAgICBAT3ZlcnJpZGUK
LSAgICBAU3VwcHJlc3NMaW50KCJJbmxpbmVkQXBpIikKLSAgICBwdWJsaWMgdm9pZCBvblJlY2Vp
dmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICBpZiAoV2lmaVAycE1h
bmFnZXIuV0lGSV9QMlBfQ09OTkVDVElPTl9DSEFOR0VEX0FDVElPTi5lcXVhbHMoaW50ZW50Lmdl
dEFjdGlvbigpKSkgewotICAgICAgICBXaWZpUDJwR3JvdXAgd2lmaVAycEdyb3VwID0gaW50ZW50
LmdldFBhcmNlbGFibGVFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1AyUF9HUk9VUCk7
Ci0gICAgICAgIG9uV2lmaVAycEdyb3VwQ2hhbmdlKHdpZmlQMnBHcm91cCk7Ci0gICAgICB9IGVs
c2UgaWYgKFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1NUQVRFX0NIQU5HRURfQUNUSU9OLmVxdWFs
cyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7Ci0gICAgICAgIGludCBzdGF0ZSA9IGludGVudC5nZXRJ
bnRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1NUQVRFLCAwIC8qIGRlZmF1bHQgdG8g
dW5rbm93biAqLyk7Ci0gICAgICAgIG9uV2lmaVAycFN0YXRlQ2hhbmdlKHN0YXRlKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKiogUmVsZWFzZXMgdGhlIGJyb2FkY2FzdCByZWNlaXZlci4gKi8K
LSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgY29udGV4dC51bnJlZ2lzdGVyUmVj
ZWl2ZXIodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3Q8TmV0d29ya0luZm9ybWF0aW9u
PiBnZXRBY3RpdmVOZXR3b3JrTGlzdCgpIHsKLSAgICAgIGlmICh3aWZpUDJwTmV0d29ya0luZm8g
IT0gbnVsbCkgewotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCh3aWZp
UDJwTmV0d29ya0luZm8pOwotICAgICAgfQotCi0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1w
dHlMaXN0KCk7Ci0gICAgfQotCi0gICAgLyoqIEhhbmRsZSBhIGNoYW5nZSBub3RpZmljYXRpb24g
YWJvdXQgdGhlIHdpZmkgcDJwIGdyb3VwLiAqLwotICAgIHByaXZhdGUgdm9pZCBvbldpZmlQMnBH
cm91cENoYW5nZShATnVsbGFibGUgV2lmaVAycEdyb3VwIHdpZmlQMnBHcm91cCkgewotICAgICAg
aWYgKHdpZmlQMnBHcm91cCA9PSBudWxsIHx8IHdpZmlQMnBHcm91cC5nZXRJbnRlcmZhY2UoKSA9
PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgTmV0d29ya0ludGVy
ZmFjZSB3aWZpUDJwSW50ZXJmYWNlOwotICAgICAgdHJ5IHsKLSAgICAgICAgd2lmaVAycEludGVy
ZmFjZSA9IE5ldHdvcmtJbnRlcmZhY2UuZ2V0QnlOYW1lKHdpZmlQMnBHcm91cC5nZXRJbnRlcmZh
Y2UoKSk7Ci0gICAgICB9IGNhdGNoIChTb2NrZXRFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dn
aW5nLmUoVEFHLCAiVW5hYmxlIHRvIGdldCBXaWZpUDJwIG5ldHdvcmsgaW50ZXJmYWNlIiwgZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgTGlzdDxJbmV0QWRkcmVzcz4gaW50
ZXJmYWNlQWRkcmVzc2VzID0gQ29sbGVjdGlvbnMubGlzdCh3aWZpUDJwSW50ZXJmYWNlLmdldElu
ZXRBZGRyZXNzZXMoKSk7Ci0gICAgICBJUEFkZHJlc3NbXSBpcEFkZHJlc3NlcyA9IG5ldyBJUEFk
ZHJlc3NbaW50ZXJmYWNlQWRkcmVzc2VzLnNpemUoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGludGVyZmFjZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpcEFkZHJlc3Nl
c1tpXSA9IG5ldyBJUEFkZHJlc3MoaW50ZXJmYWNlQWRkcmVzc2VzLmdldChpKS5nZXRBZGRyZXNz
KCkpOwotICAgICAgfQotCi0gICAgICB3aWZpUDJwTmV0d29ya0luZm8gPQotICAgICAgICAgIG5l
dyBOZXR3b3JrSW5mb3JtYXRpb24od2lmaVAycEdyb3VwLmdldEludGVyZmFjZSgpLCBDb25uZWN0
aW9uVHlwZS5DT05ORUNUSU9OX1dJRkksCi0gICAgICAgICAgICAgIENvbm5lY3Rpb25UeXBlLkNP
Tk5FQ1RJT05fTk9ORSwgV0lGSV9QMlBfTkVUV09SS19IQU5ETEUsIGlwQWRkcmVzc2VzKTsKLSAg
ICAgIG9ic2VydmVyLm9uTmV0d29ya0Nvbm5lY3Qod2lmaVAycE5ldHdvcmtJbmZvKTsKLSAgICB9
Ci0KLSAgICAvKiogSGFuZGxlIGEgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBhYm91dCB3aWZp
IHAycC4gKi8KLSAgICBwcml2YXRlIHZvaWQgb25XaWZpUDJwU3RhdGVDaGFuZ2UoaW50IHN0YXRl
KSB7Ci0gICAgICBpZiAoc3RhdGUgPT0gV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfU1RBVEVfRElT
QUJMRUQpIHsKLSAgICAgICAgd2lmaVAycE5ldHdvcmtJbmZvID0gbnVsbDsKLSAgICAgICAgb2Jz
ZXJ2ZXIub25OZXR3b3JrRGlzY29ubmVjdChXSUZJX1AyUF9ORVRXT1JLX0hBTkRMRSk7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIGZpbmFsIGxvbmcgSU5WQUxJRF9ORVRfSUQgPSAt
MTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QiOwotCi0gIC8vIE9ic2VydmVyIGZvciB0aGUgY29ubmVjdGlvbiB0eXBlIGNoYW5n
ZS4KLSAgcHJpdmF0ZSBmaW5hbCBPYnNlcnZlciBvYnNlcnZlcjsKLSAgcHJpdmF0ZSBmaW5hbCBJ
bnRlbnRGaWx0ZXIgaW50ZW50RmlsdGVyOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4
dDsKLSAgLy8gVXNlZCB0byByZXF1ZXN0IG1vYmlsZSBuZXR3b3JrLiBJdCBkb2VzIG5vdCBkbyBh
bnl0aGluZyBleGNlcHQgZm9yIGtlZXBpbmcKLSAgLy8gdGhlIGNhbGxiYWNrIGZvciByZWxlYXNp
bmcgdGhlIHJlcXVlc3QuCi0gIEBOdWxsYWJsZSBwcml2YXRlIGZpbmFsIE5ldHdvcmtDYWxsYmFj
ayBtb2JpbGVOZXR3b3JrQ2FsbGJhY2s7Ci0gIC8vIFVzZWQgdG8gcmVjZWl2ZSB1cGRhdGVzIG9u
IGFsbCBuZXR3b3Jrcy4KLSAgQE51bGxhYmxlIHByaXZhdGUgZmluYWwgTmV0d29ya0NhbGxiYWNr
IGFsbE5ldHdvcmtDYWxsYmFjazsKLSAgLy8gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGFu
ZCB3aWZpTWFuYWdlckRlbGVnYXRlIGFyZSBvbmx5IG5vbi1maW5hbCBmb3IgdGVzdGluZy4KLSAg
cHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgY29ubmVjdGl2aXR5TWFuYWdlckRl
bGVnYXRlOwotICBwcml2YXRlIFdpZmlNYW5hZ2VyRGVsZWdhdGUgd2lmaU1hbmFnZXJEZWxlZ2F0
ZTsKLSAgcHJpdmF0ZSBXaWZpRGlyZWN0TWFuYWdlckRlbGVnYXRlIHdpZmlEaXJlY3RNYW5hZ2Vy
RGVsZWdhdGU7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzUmVnaXN0ZXJlZDsKLSAgcHJpdmF0ZSBD
b25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd2lmaVNTSUQ7
Ci0KLSAgLyoqCi0gICAqIE9ic2VydmVyIGludGVyZmFjZSBieSB3aGljaCBvYnNlcnZlciBpcyBu
b3RpZmllZCBvZiBuZXR3b3JrIGNoYW5nZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludGVy
ZmFjZSBPYnNlcnZlciB7Ci0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gZGVmYXVsdCBuZXR3
b3JrIGNoYW5nZXMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNo
YW5nZWQoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpOwotICAgIHB1YmxpYyB2b2lk
IG9uTmV0d29ya0Nvbm5lY3QoTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKTsKLSAgICBw
dWJsaWMgdm9pZCBvbk5ldHdvcmtEaXNjb25uZWN0KGxvbmcgbmV0d29ya0hhbmRsZSk7Ci0gIH0K
LQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC4gU2hv
dWxkIG9ubHkgYmUgY2FsbGVkIG9uIFVJIHRocmVhZC4KLSAgICovCi0gIEBTdXBwcmVzc0xpbnQo
Ik5ld0FwaSIpCi0gIHB1YmxpYyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QoT2JzZXJ2ZXIgb2Jz
ZXJ2ZXIsIENvbnRleHQgY29udGV4dCkgewotICAgIHRoaXMub2JzZXJ2ZXIgPSBvYnNlcnZlcjsK
LSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxl
Z2F0ZSA9IG5ldyBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUoY29udGV4dCk7Ci0gICAgd2lm
aU1hbmFnZXJEZWxlZ2F0ZSA9IG5ldyBXaWZpTWFuYWdlckRlbGVnYXRlKGNvbnRleHQpOwotCi0g
ICAgZmluYWwgTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSA9IGNvbm5lY3Rpdml0eU1hbmFnZXJE
ZWxlZ2F0ZS5nZXROZXR3b3JrU3RhdGUoKTsKLSAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5l
Y3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSk7Ci0gICAgd2lmaVNTSUQgPSBnZXRXaWZpU1NJRChuZXR3
b3JrU3RhdGUpOwotICAgIGludGVudEZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoQ29ubmVjdGl2
aXR5TWFuYWdlci5DT05ORUNUSVZJVFlfQUNUSU9OKTsKLQotICAgIGlmIChQZWVyQ29ubmVjdGlv
bkZhY3RvcnkuZmllbGRUcmlhbHNGaW5kRnVsbE5hbWUoIkluY2x1ZGVXaWZpRGlyZWN0IikuZXF1
YWxzKCJFbmFibGVkIikpIHsKLSAgICAgIHdpZmlEaXJlY3RNYW5hZ2VyRGVsZWdhdGUgPSBuZXcg
V2lmaURpcmVjdE1hbmFnZXJEZWxlZ2F0ZShvYnNlcnZlciwgY29udGV4dCk7Ci0gICAgfQotCi0g
ICAgcmVnaXN0ZXJSZWNlaXZlcigpOwotICAgIGlmIChjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUuc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAvLyBPbiBBbmRyb2lkIDYuMC4w
LCB0aGUgV1JJVEVfU0VUVElOR1MgcGVybWlzc2lvbiBpcyBuZWNlc3NhcnkgZm9yCi0gICAgICAv
LyByZXF1ZXN0TmV0d29yaywgc28gaXQgd2lsbCBmYWlsLiBUaGlzIHdhcyBmaXhlZCBpbiBBbmRy
b2lkIDYuMC4xLgotICAgICAgTmV0d29ya0NhbGxiYWNrIHRlbXBOZXR3b3JrQ2FsbGJhY2sgPSBu
ZXcgTmV0d29ya0NhbGxiYWNrKCk7Ci0gICAgICB0cnkgewotICAgICAgICBjb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUucmVxdWVzdE1vYmlsZU5ldHdvcmsodGVtcE5ldHdvcmtDYWxsYmFjayk7
Ci0gICAgICB9IGNhdGNoIChqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb24gZSkgewotICAgICAg
ICBMb2dnaW5nLncoVEFHLCAiVW5hYmxlIHRvIG9idGFpbiBwZXJtaXNzaW9uIHRvIHJlcXVlc3Qg
YSBjZWxsdWxhciBuZXR3b3JrLiIpOwotICAgICAgICB0ZW1wTmV0d29ya0NhbGxiYWNrID0gbnVs
bDsKLSAgICAgIH0KLSAgICAgIG1vYmlsZU5ldHdvcmtDYWxsYmFjayA9IHRlbXBOZXR3b3JrQ2Fs
bGJhY2s7Ci0gICAgICBhbGxOZXR3b3JrQ2FsbGJhY2sgPSBuZXcgU2ltcGxlTmV0d29ya0NhbGxi
YWNrKCk7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUucmVnaXN0ZXJOZXR3b3Jr
Q2FsbGJhY2soYWxsTmV0d29ya0NhbGxiYWNrKTsKLSAgICB9IGVsc2UgewotICAgICAgbW9iaWxl
TmV0d29ya0NhbGxiYWNrID0gbnVsbDsKLSAgICAgIGFsbE5ldHdvcmtDYWxsYmFjayA9IG51bGw7
Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygp
IHsKLSAgICByZXR1cm4gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLnN1cHBvcnROZXR3b3Jr
Q2FsbGJhY2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgQ29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGZvciB0ZXN0cy4KLSAgICovCi0gIHZvaWQgc2V0Q29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlRm9yVGVzdHMoQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVn
YXRlIGRlbGVnYXRlKSB7Ci0gICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlID0gZGVsZWdh
dGU7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIG92ZXJyaWRpbmcgdGhlIFdpZmlNYW5hZ2Vy
RGVsZWdhdGUgZm9yIHRlc3RzLgotICAgKi8KLSAgdm9pZCBzZXRXaWZpTWFuYWdlckRlbGVnYXRl
Rm9yVGVzdHMoV2lmaU1hbmFnZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSkgewotICAgIHdpZmlNYW5hZ2Vy
RGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIg
dGhlIG9iamVjdCBoYXMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIG5ldHdvcmsgY29ubmVjdGl2aXR5
IGludGVudHMuCi0gICAqIFZpc2libGUgZm9yIHRlc3RpbmcuCi0gICAqLwotICBib29sZWFuIGlz
UmVjZWl2ZXJSZWdpc3RlcmVkRm9yVGVzdGluZygpIHsKLSAgICByZXR1cm4gaXNSZWdpc3RlcmVk
OwotICB9Ci0KLSAgQE51bGxhYmxlCi0gIExpc3Q8TmV0d29ya0luZm9ybWF0aW9uPiBnZXRBY3Rp
dmVOZXR3b3JrTGlzdCgpIHsKLSAgICBMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gY29ubmVjdGl2
aXR5TWFuYWdlckxpc3QgPQotICAgICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUuZ2V0
QWN0aXZlTmV0d29ya0xpc3QoKTsKLSAgICBpZiAoY29ubmVjdGl2aXR5TWFuYWdlckxpc3QgPT0g
bnVsbCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIEFycmF5TGlzdDxOZXR3b3Jr
SW5mb3JtYXRpb24+IHJlc3VsdCA9Ci0gICAgICAgIG5ldyBBcnJheUxpc3Q8TmV0d29ya0luZm9y
bWF0aW9uPihjb25uZWN0aXZpdHlNYW5hZ2VyTGlzdCk7Ci0gICAgaWYgKHdpZmlEaXJlY3RNYW5h
Z2VyRGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgcmVzdWx0LmFkZEFsbCh3aWZpRGlyZWN0TWFu
YWdlckRlbGVnYXRlLmdldEFjdGl2ZU5ldHdvcmtMaXN0KCkpOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICBpZiAoYWxsTmV0
d29ya0NhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZS5yZWxlYXNlQ2FsbGJhY2soYWxsTmV0d29ya0NhbGxiYWNrKTsKLSAgICB9Ci0gICAgaWYgKG1v
YmlsZU5ldHdvcmtDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2Vy
RGVsZWdhdGUucmVsZWFzZUNhbGxiYWNrKG1vYmlsZU5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfQot
ICAgIGlmICh3aWZpRGlyZWN0TWFuYWdlckRlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgIHdpZmlE
aXJlY3RNYW5hZ2VyRGVsZWdhdGUucmVsZWFzZSgpOwotICAgIH0KLSAgICB1bnJlZ2lzdGVyUmVj
ZWl2ZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlcnMgYSBCcm9hZGNhc3RSZWNlaXZl
ciBpbiB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCByZWdpc3RlclJl
Y2VpdmVyKCkgewotICAgIGlmIChpc1JlZ2lzdGVyZWQpCi0gICAgICByZXR1cm47Ci0KLSAgICBp
c1JlZ2lzdGVyZWQgPSB0cnVlOwotICAgIGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcih0aGlzLCBp
bnRlbnRGaWx0ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFVucmVnaXN0ZXJzIHRoZSBCcm9hZGNh
c3RSZWNlaXZlciBpbiB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB1
bnJlZ2lzdGVyUmVjZWl2ZXIoKSB7Ci0gICAgaWYgKCFpc1JlZ2lzdGVyZWQpCi0gICAgICByZXR1
cm47Ci0KLSAgICBpc1JlZ2lzdGVyZWQgPSBmYWxzZTsKLSAgICBjb250ZXh0LnVucmVnaXN0ZXJS
ZWNlaXZlcih0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyBOZXR3b3JrU3RhdGUgZ2V0Q3VycmVudE5l
dHdvcmtTdGF0ZSgpIHsKLSAgICByZXR1cm4gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLmdl
dE5ldHdvcmtTdGF0ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgTmV0SUQgb2YgZGV2
aWNlJ3MgY3VycmVudCBkZWZhdWx0IGNvbm5lY3RlZCBuZXR3b3JrIHVzZWQgZm9yCi0gICAqIGNv
bW11bmljYXRpb24uCi0gICAqIE9ubHkgaW1wbGVtZW50ZWQgb24gTG9sbGlwb3AgYW5kIG5ld2Vy
IHJlbGVhc2VzLCByZXR1cm5zIElOVkFMSURfTkVUX0lECi0gICAqIHdoZW4gbm90IGltcGxlbWVu
dGVkLgotICAgKi8KLSAgcHVibGljIGxvbmcgZ2V0RGVmYXVsdE5ldElkKCkgewotICAgIHJldHVy
biBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBDb25uZWN0aW9uVHlwZSBnZXRDb25uZWN0aW9uVHlwZSgKLSAgICAg
IGJvb2xlYW4gaXNDb25uZWN0ZWQsIGludCBuZXR3b3JrVHlwZSwgaW50IG5ldHdvcmtTdWJ0eXBl
KSB7Ci0gICAgaWYgKCFpc0Nvbm5lY3RlZCkgewotICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBl
LkNPTk5FQ1RJT05fTk9ORTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG5ldHdvcmtUeXBlKSB7Ci0g
ICAgICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9FVEhFUk5FVDoKLSAgICAgICAgcmV0
dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fRVRIRVJORVQ7Ci0gICAgICBjYXNlIENvbm5l
Y3Rpdml0eU1hbmFnZXIuVFlQRV9XSUZJOgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUu
Q09OTkVDVElPTl9XSUZJOwotICAgICAgY2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lN
QVg6Ci0gICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OXzRHOwotICAgICAg
Y2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfQkxVRVRPT1RIOgotICAgICAgICByZXR1cm4g
Q29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9CTFVFVE9PVEg7Ci0gICAgICBjYXNlIENvbm5lY3Rp
dml0eU1hbmFnZXIuVFlQRV9NT0JJTEU6Ci0gICAgICAgIC8vIFVzZSBpbmZvcm1hdGlvbiBmcm9t
IFRlbGVwaG9ueU1hbmFnZXIgdG8gY2xhc3NpZnkgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIHN3
aXRjaCAobmV0d29ya1N1YnR5cGUpIHsKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIu
TkVUV09SS19UWVBFX0dQUlM6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdP
UktfVFlQRV9FREdFOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZ
UEVfQ0RNQToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFXzF4
UlRUOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSURFTjoK
LSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OXzJHOwotICAgICAg
ICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfVU1UUzoKLSAgICAgICAgICBj
YXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fMDoKLSAgICAgICAgICBjYXNl
IFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQToKLSAgICAgICAgICBjYXNlIFRl
bGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTRFBBOgotICAgICAgICAgIGNhc2UgVGVsZXBo
b255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNVUEE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlN
YW5hZ2VyLk5FVFdPUktfVFlQRV9IU1BBOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdl
ci5ORVRXT1JLX1RZUEVfRVZET19COgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5O
RVRXT1JLX1RZUEVfRUhSUEQ6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdP
UktfVFlQRV9IU1BBUDoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNU
SU9OXzNHOwotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfTFRF
OgotICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fNEc7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNU
SU9OX1VOS05PV05fQ0VMTFVMQVI7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5
TWFuYWdlci5UWVBFX1ZQTjoKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJ
T05fVlBOOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNP
Tk5FQ1RJT05fVU5LTk9XTjsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIENvbm5lY3Rp
b25UeXBlIGdldENvbm5lY3Rpb25UeXBlKE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUpIHsKLSAg
ICByZXR1cm4gZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlLmlzQ29ubmVjdGVkKCksIG5l
dHdvcmtTdGF0ZS5nZXROZXR3b3JrVHlwZSgpLAotICAgICAgICBuZXR3b3JrU3RhdGUuZ2V0TmV0
d29ya1N1YlR5cGUoKSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBDb25uZWN0aW9uVHlwZSBn
ZXRVbmRlcmx5aW5nQ29ubmVjdGlvblR5cGVGb3JWcG4oTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0
ZSkgewotICAgIGlmIChuZXR3b3JrU3RhdGUuZ2V0TmV0d29ya1R5cGUoKSAhPSBDb25uZWN0aXZp
dHlNYW5hZ2VyLlRZUEVfVlBOKSB7Ci0gICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVD
VElPTl9OT05FOwotICAgIH0KLSAgICByZXR1cm4gZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0
YXRlLmlzQ29ubmVjdGVkKCksCi0gICAgICAgIG5ldHdvcmtTdGF0ZS5nZXRVbmRlcmx5aW5nTmV0
d29ya1R5cGVGb3JWcG4oKSwKLSAgICAgICAgbmV0d29ya1N0YXRlLmdldFVuZGVybHlpbmdOZXR3
b3JrU3VidHlwZUZvclZwbigpKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdpZmlTU0lE
KE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUpIHsKLSAgICBpZiAoZ2V0Q29ubmVjdGlvblR5cGUo
bmV0d29ya1N0YXRlKSAhPSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1dJRkkpCi0gICAgICBy
ZXR1cm4gIiI7Ci0gICAgcmV0dXJuIHdpZmlNYW5hZ2VyRGVsZWdhdGUuZ2V0V2lmaVNTSUQoKTsK
LSAgfQotCi0gIC8vIEJyb2FkY2FzdFJlY2VpdmVyCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgZmluYWwg
TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSA9IGdldEN1cnJlbnROZXR3b3JrU3RhdGUoKTsKLSAg
ICBpZiAoQ29ubmVjdGl2aXR5TWFuYWdlci5DT05ORUNUSVZJVFlfQUNUSU9OLmVxdWFscyhpbnRl
bnQuZ2V0QWN0aW9uKCkpKSB7Ci0gICAgICBjb25uZWN0aW9uVHlwZUNoYW5nZWQobmV0d29ya1N0
YXRlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29ubmVjdGlvblR5cGVDaGFuZ2Vk
KE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUpIHsKLSAgICBDb25uZWN0aW9uVHlwZSBuZXdDb25u
ZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSk7Ci0gICAgU3RyaW5n
IG5ld1dpZmlTU0lEID0gZ2V0V2lmaVNTSUQobmV0d29ya1N0YXRlKTsKLSAgICBpZiAobmV3Q29u
bmVjdGlvblR5cGUgPT0gY29ubmVjdGlvblR5cGUgJiYgbmV3V2lmaVNTSUQuZXF1YWxzKHdpZmlT
U0lEKSkKLSAgICAgIHJldHVybjsKLQotICAgIGNvbm5lY3Rpb25UeXBlID0gbmV3Q29ubmVjdGlv
blR5cGU7Ci0gICAgd2lmaVNTSUQgPSBuZXdXaWZpU1NJRDsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
TmV0d29yayBjb25uZWN0aXZpdHkgY2hhbmdlZCwgdHlwZSBpczogIiArIGNvbm5lY3Rpb25UeXBl
KTsKLSAgICBvYnNlcnZlci5vbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChuZXdDb25uZWN0aW9uVHlw
ZSk7Ci0gIH0KLQotICAvKioKLSAgICogRXh0cmFjdHMgTmV0SUQgb2YgbmV0d29yayBvbiBMb2xs
aXBvcCBhbmQgTmV0d29ya0hhbmRsZSAod2hpY2ggaXMgbXVuZ2xlZAotICAgKiBOZXRJRCkgb24g
TWFyc2htYWxsb3cgYW5kIG5ld2VyIHJlbGVhc2VzLiBPbmx5IGF2YWlsYWJsZSBvbiBMb2xsaXBv
cCBhbmQKLSAgICogbmV3ZXIgcmVsZWFzZXMuIFJldHVybnMgbG9uZyBzaW5jZSBnZXROZXR3b3Jr
SGFuZGxlIHJldHVybnMgbG9uZy4KLSAgICovCi0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0g
IHByaXZhdGUgc3RhdGljIGxvbmcgbmV0d29ya1RvTmV0SWQoTmV0d29yayBuZXR3b3JrKSB7Ci0g
ICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk0pIHsK
LSAgICAgIHJldHVybiBuZXR3b3JrLmdldE5ldHdvcmtIYW5kbGUoKTsKLSAgICB9Ci0KLSAgICAv
LyBOT1RFKGhvbmdoYWl6KTogVGhpcyBkZXBlbmRzIG9uIEFuZHJvaWQgZnJhbWV3b3JrIGltcGxl
bWVudGF0aW9uIGRldGFpbHMuCi0gICAgLy8gVGhlc2UgZGV0YWlscyBjYW5ub3QgY2hhbmdlIGJl
Y2F1c2UgTG9sbGlwb3AgaGFzIGJlZW4gcmVsZWFzZWQuCi0gICAgcmV0dXJuIEludGVnZXIucGFy
c2VJbnQobmV0d29yay50b1N0cmluZygpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJy
dGMvTmV0d29ya1N0YXRlUHJlZGljdG9yRmFjdG9yeUZhY3RvcnkuamF2YSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRj
L05ldHdvcmtTdGF0ZVByZWRpY3RvckZhY3RvcnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJmOTY1YmNiY2E5Mjk0ODA5NDYxOWI1ZjlmYTYwMzE2ODFkNDI1NjMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJy
dGMvTmV0d29ya1N0YXRlUHJlZGljdG9yRmFjdG9yeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTkgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotLyoqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIHdlYnJ0Yzo6TmV0d29ya1N0YXRlUHJlZGlj
dG9yRmFjdG9yeSBpbnN0YW5jZXMuICovCi1wdWJsaWMgaW50ZXJmYWNlIE5ldHdvcmtTdGF0ZVBy
ZWRpY3RvckZhY3RvcnlGYWN0b3J5IHsKLSAgLyoqCi0gICAqIER5bmFtaWNhbGx5IGFsbG9jYXRl
cyBhIHdlYnJ0Yzo6TmV0d29ya1N0YXRlUHJlZGljdG9yRmFjdG9yeSBpbnN0YW5jZSBhbmQgcmV0
dXJucyBhIHBvaW50ZXIgdG8KLSAgICogaXQuIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9m
IHRoZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgbG9uZyBjcmVhdGVOYXRpdmVOZXR3b3JrU3Rh
dGVQcmVkaWN0b3JGYWN0b3J5KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9PV05FUlMg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9PV05FUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2Y2Nj
MmRkYTJjNTA2ZTU0ZDA0Mjk5NDJmMzE3OGNiNWFmM2QwY2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvT1dORVJTCisrKyAvZGV2L251
bGwKQEAgLTEsMyArMCwwIEBACi1wZXItZmlsZSBDYW1lcmEqPXNha2FsQHdlYnJ0Yy5vcmcKLXBl
ci1maWxlIEhpc3RvZ3JhbS5qYXZhPXNha2FsQHdlYnJ0Yy5vcmcKLXBlci1maWxlIE1ldHJpY3Mu
amF2YT1zYWthbEB3ZWJydGMub3JnCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvbi5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24uamF2YQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNzg5MWI3ZjZiNDc2M2RkYzBmN2Q0ZmM1N2E4MTFmZDY2M2M2OTRj
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dl
YnJ0Yy9QZWVyQ29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5NSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRy
b2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlM
aXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rp
b25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0Owot
aW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW5kaWRhdGVQYWlyQ2hh
bmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5EYXRhQ2hhbm5lbDsKLWltcG9ydCBvcmcud2Vi
cnRjLk1lZGlhU3RyZWFtVHJhY2s7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SdHBUcmFuc2NlaXZlcjsK
LQotLyoqCi0gKiBKYXZhLWxhbmQgdmVyc2lvbiBvZiB0aGUgUGVlckNvbm5lY3Rpb24gQVBJczsg
d3JhcHMgdGhlIEMrKyBBUEkKLSAqIGh0dHA6Ly93d3cud2VicnRjLm9yZy9yZWZlcmVuY2UvbmF0
aXZlLWFwaXMsIHdoaWNoIGluIHR1cm4gaXMgaW5zcGlyZWQgYnkgdGhlCi0gKiBKUyBBUElzOiBo
dHRwOi8vZGV2LnczLm9yZy8yMDExL3dlYnJ0Yy9lZGl0b3Ivd2VicnRjLmh0bWwgYW5kCi0gKiBo
dHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYWNhcHR1cmUtc3RyZWFtcy8KLSAqLwotcHVibGljIGNs
YXNzIFBlZXJDb25uZWN0aW9uIHsKLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFj
ZTo6SWNlR2F0aGVyaW5nU3RhdGUgKi8KLSAgcHVibGljIGVudW0gSWNlR2F0aGVyaW5nU3RhdGUg
ewotICAgIE5FVywKLSAgICBHQVRIRVJJTkcsCi0gICAgQ09NUExFVEU7Ci0KLSAgICBAQ2FsbGVk
QnlOYXRpdmUoIkljZUdhdGhlcmluZ1N0YXRlIikKLSAgICBzdGF0aWMgSWNlR2F0aGVyaW5nU3Rh
dGUgZnJvbU5hdGl2ZUluZGV4KGludCBuYXRpdmVJbmRleCkgewotICAgICAgcmV0dXJuIHZhbHVl
cygpW25hdGl2ZUluZGV4XTsKLSAgICB9Ci0gIH0KLQotICAvKiogVHJhY2tzIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjpJY2VDb25uZWN0aW9uU3RhdGUgKi8KLSAgcHVibGljIGVudW0gSWNlQ29u
bmVjdGlvblN0YXRlIHsKLSAgICBORVcsCi0gICAgQ0hFQ0tJTkcsCi0gICAgQ09OTkVDVEVELAot
ICAgIENPTVBMRVRFRCwKLSAgICBGQUlMRUQsCi0gICAgRElTQ09OTkVDVEVELAotICAgIENMT1NF
RDsKLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiSWNlQ29ubmVjdGlvblN0YXRlIikKLSAgICBzdGF0
aWMgSWNlQ29ubmVjdGlvblN0YXRlIGZyb21OYXRpdmVJbmRleChpbnQgbmF0aXZlSW5kZXgpIHsK
LSAgICAgIHJldHVybiB2YWx1ZXMoKVtuYXRpdmVJbmRleF07Ci0gICAgfQotICB9Ci0KLSAgLyoq
IFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UGVlckNvbm5lY3Rpb25TdGF0ZSAqLwot
ICBwdWJsaWMgZW51bSBQZWVyQ29ubmVjdGlvblN0YXRlIHsKLSAgICBORVcsCi0gICAgQ09OTkVD
VElORywKLSAgICBDT05ORUNURUQsCi0gICAgRElTQ09OTkVDVEVELAotICAgIEZBSUxFRCwKLSAg
ICBDTE9TRUQ7Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlBlZXJDb25uZWN0aW9uU3RhdGUiKQot
ICAgIHN0YXRpYyBQZWVyQ29ubmVjdGlvblN0YXRlIGZyb21OYXRpdmVJbmRleChpbnQgbmF0aXZl
SW5kZXgpIHsKLSAgICAgIHJldHVybiB2YWx1ZXMoKVtuYXRpdmVJbmRleF07Ci0gICAgfQotICB9
Ci0KLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6VGxzQ2VydFBvbGljeSAq
LwotICBwdWJsaWMgZW51bSBUbHNDZXJ0UG9saWN5IHsKLSAgICBUTFNfQ0VSVF9QT0xJQ1lfU0VD
VVJFLAotICAgIFRMU19DRVJUX1BPTElDWV9JTlNFQ1VSRV9OT19DSEVDSywKLSAgfQotCi0gIC8q
KiBUcmFja3MgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlNpZ25hbGluZ1N0YXRlICovCi0gIHB1
YmxpYyBlbnVtIFNpZ25hbGluZ1N0YXRlIHsKLSAgICBTVEFCTEUsCi0gICAgSEFWRV9MT0NBTF9P
RkZFUiwKLSAgICBIQVZFX0xPQ0FMX1BSQU5TV0VSLAotICAgIEhBVkVfUkVNT1RFX09GRkVSLAot
ICAgIEhBVkVfUkVNT1RFX1BSQU5TV0VSLAotICAgIENMT1NFRDsKLQotICAgIEBDYWxsZWRCeU5h
dGl2ZSgiU2lnbmFsaW5nU3RhdGUiKQotICAgIHN0YXRpYyBTaWduYWxpbmdTdGF0ZSBmcm9tTmF0
aXZlSW5kZXgoaW50IG5hdGl2ZUluZGV4KSB7Ci0gICAgICByZXR1cm4gdmFsdWVzKClbbmF0aXZl
SW5kZXhdOwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rp
b25PYnNlcnZlci4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgT2JzZXJ2ZXIgewotICAg
IC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgU2lnbmFsaW5nU3RhdGUgY2hhbmdlcy4gKi8KLSAgICBA
Q2FsbGVkQnlOYXRpdmUoIk9ic2VydmVyIikgdm9pZCBvblNpZ25hbGluZ0NoYW5nZShTaWduYWxp
bmdTdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhlIEljZUNvbm5l
Y3Rpb25TdGF0ZSBjaGFuZ2VzLiAqLwotICAgIEBDYWxsZWRCeU5hdGl2ZSgiT2JzZXJ2ZXIiKSB2
b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpOwot
Ci0gICAgLyogVHJpZ2dlcmVkIHdoZW4gdGhlIHN0YW5kYXJkLWNvbXBsaWFudCBzdGF0ZSB0cmFu
c2l0aW9uIG9mIEljZUNvbm5lY3Rpb25TdGF0ZSBoYXBwZW5zLiAqLwotICAgIEBDYWxsZWRCeU5h
dGl2ZSgiT2JzZXJ2ZXIiKQotICAgIGRlZmF1bHQgdm9pZCBvblN0YW5kYXJkaXplZEljZUNvbm5l
Y3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7fQotCi0gICAgLyoqIFRy
aWdnZXJlZCB3aGVuIHRoZSBQZWVyQ29ubmVjdGlvblN0YXRlIGNoYW5nZXMuICovCi0gICAgQENh
bGxlZEJ5TmF0aXZlKCJPYnNlcnZlciIpCi0gICAgZGVmYXVsdCB2b2lkIG9uQ29ubmVjdGlvbkNo
YW5nZShQZWVyQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7fQotCi0gICAgLyoqIFRyaWdnZXJl
ZCB3aGVuIHRoZSBJQ0UgY29ubmVjdGlvbiByZWNlaXZpbmcgc3RhdHVzIGNoYW5nZXMuICovCi0g
ICAgQENhbGxlZEJ5TmF0aXZlKCJPYnNlcnZlciIpIHZvaWQgb25JY2VDb25uZWN0aW9uUmVjZWl2
aW5nQ2hhbmdlKGJvb2xlYW4gcmVjZWl2aW5nKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0
aGUgSWNlR2F0aGVyaW5nU3RhdGUgY2hhbmdlcy4gKi8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk9i
c2VydmVyIikgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZSBuZXdT
dGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gYSBuZXcgSUNFIGNhbmRpZGF0ZSBoYXMg
YmVlbiBmb3VuZC4gKi8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk9ic2VydmVyIikgdm9pZCBvbklj
ZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQg
d2hlbiBzb21lIElDRSBjYW5kaWRhdGVzIGhhdmUgYmVlbiByZW1vdmVkLiAqLwotICAgIEBDYWxs
ZWRCeU5hdGl2ZSgiT2JzZXJ2ZXIiKSB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoSWNlQ2Fu
ZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhlIElDRSBj
YW5kaWRhdGUgcGFpciBpcyBjaGFuZ2VkLiAqLwotICAgIEBDYWxsZWRCeU5hdGl2ZSgiT2JzZXJ2
ZXIiKQotICAgIGRlZmF1bHQgdm9pZCBvblNlbGVjdGVkQ2FuZGlkYXRlUGFpckNoYW5nZWQoQ2Fu
ZGlkYXRlUGFpckNoYW5nZUV2ZW50IGV2ZW50KSB7fQotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVu
IG1lZGlhIGlzIHJlY2VpdmVkIG9uIGEgbmV3IHN0cmVhbSBmcm9tIHJlbW90ZSBwZWVyLiAqLwot
ICAgIEBDYWxsZWRCeU5hdGl2ZSgiT2JzZXJ2ZXIiKSB2b2lkIG9uQWRkU3RyZWFtKE1lZGlhU3Ry
ZWFtIHN0cmVhbSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gYSByZW1vdGUgcGVlciBjbG9z
ZSBhIHN0cmVhbS4gKi8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk9ic2VydmVyIikgdm9pZCBvblJl
bW92ZVN0cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVu
IGEgcmVtb3RlIHBlZXIgb3BlbnMgYSBEYXRhQ2hhbm5lbC4gKi8KLSAgICBAQ2FsbGVkQnlOYXRp
dmUoIk9ic2VydmVyIikgdm9pZCBvbkRhdGFDaGFubmVsKERhdGFDaGFubmVsIGRhdGFDaGFubmVs
KTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiByZW5lZ290aWF0aW9uIGlzIG5lY2Vzc2FyeS4g
Ki8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk9ic2VydmVyIikgdm9pZCBvblJlbmVnb3RpYXRpb25O
ZWVkZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgbmV3IHRyYWNrIGlz
IHNpZ25hbGVkIGJ5IHRoZSByZW1vdGUgcGVlciwgYXMgYSByZXN1bHQgb2YKLSAgICAgKiBzZXRS
ZW1vdGVEZXNjcmlwdGlvbi4KLSAgICAgKi8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIk9ic2VydmVy
Iikgdm9pZCBvbkFkZFRyYWNrKFJ0cFJlY2VpdmVyIHJlY2VpdmVyLCBNZWRpYVN0cmVhbVtdIG1l
ZGlhU3RyZWFtcyk7Ci0KLSAgICAvKioKLSAgICAgKiBUcmlnZ2VyZWQgd2hlbiB0aGUgc2lnbmFs
aW5nIGZyb20gU2V0UmVtb3RlRGVzY3JpcHRpb24gaW5kaWNhdGVzIHRoYXQgYSB0cmFuc2NlaXZl
cgotICAgICAqIHdpbGwgYmUgcmVjZWl2aW5nIG1lZGlhIGZyb20gYSByZW1vdGUgZW5kcG9pbnQu
IFRoaXMgaXMgb25seSBjYWxsZWQgaWYgVU5JRklFRF9QTEFOCi0gICAgICogc2VtYW50aWNzIGFy
ZSBzcGVjaWZpZWQuIFRoZSB0cmFuc2NlaXZlciB3aWxsIGJlIGRpc3Bvc2VkIGF1dG9tYXRpY2Fs
bHkuCi0gICAgICovCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJPYnNlcnZlciIpIGRlZmF1bHQgdm9p
ZCBvblRyYWNrKFJ0cFRyYW5zY2VpdmVyIHRyYW5zY2VpdmVyKXt9OwotICB9Ci0KLSAgLyoqIEph
dmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5JY2VTZXJ2ZXIuICovCi0gIHB1
YmxpYyBzdGF0aWMgY2xhc3MgSWNlU2VydmVyIHsKLSAgICAvLyBMaXN0IG9mIFVSSXMgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgc2VydmVyLiBWYWxpZCBmb3JtYXRzIGFyZSBkZXNjcmliZWQKLSAgICAv
LyBpbiBSRkM3MDY0IGFuZCBSRkM3MDY1LCBhbmQgbW9yZSBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1
dHVyZS4gVGhlICJob3N0IgotICAgIC8vIHBhcnQgb2YgdGhlIFVSSSBtYXkgY29udGFpbiBlaXRo
ZXIgYW4gSVAgYWRkcmVzcyBvciBhIGhvc3RuYW1lLgotICAgIEBEZXByZWNhdGVkIHB1YmxpYyBm
aW5hbCBTdHJpbmcgdXJpOwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFN0cmluZz4gdXJsczsKLSAg
ICBwdWJsaWMgZmluYWwgU3RyaW5nIHVzZXJuYW1lOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcg
cGFzc3dvcmQ7Ci0gICAgcHVibGljIGZpbmFsIFRsc0NlcnRQb2xpY3kgdGxzQ2VydFBvbGljeTsK
LQotICAgIC8vIElmIHRoZSBVUklzIGluIHx1cmxzfCBvbmx5IGNvbnRhaW4gSVAgYWRkcmVzc2Vz
LCB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkCi0gICAgLy8gdG8gaW5kaWNhdGUgdGhlIGhvc3RuYW1l
LCB3aGljaCBtYXkgYmUgbmVjZXNzYXJ5IGZvciBUTFMgKHVzaW5nIHRoZSBTTkkKLSAgICAvLyBl
eHRlbnNpb24pLiBJZiB8dXJsc3wgaXRzZWxmIGNvbnRhaW5zIHRoZSBob3N0bmFtZSwgdGhpcyBp
c24ndAotICAgIC8vIG5lY2Vzc2FyeS4KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGhvc3RuYW1l
OwotCi0gICAgLy8gTGlzdCBvZiBwcm90b2NvbHMgdG8gYmUgdXNlZCBpbiB0aGUgVExTIEFMUE4g
ZXh0ZW5zaW9uLgotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFN0cmluZz4gdGxzQWxwblByb3RvY29s
czsKLQotICAgIC8vIExpc3Qgb2YgZWxsaXB0aWMgY3VydmVzIHRvIGJlIHVzZWQgaW4gdGhlIFRM
UyBlbGxpcHRpYyBjdXJ2ZXMgZXh0ZW5zaW9uLgotICAgIC8vIE9ubHkgY3VydmUgbmFtZXMgc3Vw
cG9ydGVkIGJ5IE9wZW5TU0wgc2hvdWxkIGJlIHVzZWQgKGVnLiAiUC0yNTYiLCJYMjU1MTkiKS4K
LSAgICBwdWJsaWMgZmluYWwgTGlzdDxTdHJpbmc+IHRsc0VsbGlwdGljQ3VydmVzOwotCi0gICAg
LyoqIENvbnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBTVFVOIHNlcnZlcnMuICovCi0gICAgQERl
cHJlY2F0ZWQKLSAgICBwdWJsaWMgSWNlU2VydmVyKFN0cmluZyB1cmkpIHsKLSAgICAgIHRoaXMo
dXJpLCAiIiwgIiIpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIEljZVNl
cnZlcihTdHJpbmcgdXJpLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewotICAg
ICAgdGhpcyh1cmksIHVzZXJuYW1lLCBwYXNzd29yZCwgVGxzQ2VydFBvbGljeS5UTFNfQ0VSVF9Q
T0xJQ1lfU0VDVVJFKTsKLSAgICB9Ci0KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBJY2VT
ZXJ2ZXIoU3RyaW5nIHVyaSwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIFRsc0Nl
cnRQb2xpY3kgdGxzQ2VydFBvbGljeSkgewotICAgICAgdGhpcyh1cmksIHVzZXJuYW1lLCBwYXNz
d29yZCwgdGxzQ2VydFBvbGljeSwgIiIpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAg
cHVibGljIEljZVNlcnZlcihTdHJpbmcgdXJpLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNz
d29yZCwgVGxzQ2VydFBvbGljeSB0bHNDZXJ0UG9saWN5LAotICAgICAgICBTdHJpbmcgaG9zdG5h
bWUpIHsKLSAgICAgIHRoaXModXJpLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHVyaSksIHVz
ZXJuYW1lLCBwYXNzd29yZCwgdGxzQ2VydFBvbGljeSwgaG9zdG5hbWUsIG51bGwsCi0gICAgICAg
ICAgbnVsbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBJY2VTZXJ2ZXIoU3RyaW5nIHVyaSwgTGlz
dDxTdHJpbmc+IHVybHMsIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAotICAgICAg
ICBUbHNDZXJ0UG9saWN5IHRsc0NlcnRQb2xpY3ksIFN0cmluZyBob3N0bmFtZSwgTGlzdDxTdHJp
bmc+IHRsc0FscG5Qcm90b2NvbHMsCi0gICAgICAgIExpc3Q8U3RyaW5nPiB0bHNFbGxpcHRpY0N1
cnZlcykgewotICAgICAgaWYgKHVyaSA9PSBudWxsIHx8IHVybHMgPT0gbnVsbCB8fCB1cmxzLmlz
RW1wdHkoKSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ1
cmkgPT0gbnVsbCB8fCB1cmxzID09IG51bGwgfHwgdXJscy5pc0VtcHR5KCkiKTsKLSAgICAgIH0K
LSAgICAgIGZvciAoU3RyaW5nIGl0IDogdXJscykgewotICAgICAgICBpZiAoaXQgPT0gbnVsbCkg
ewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVybHMgZWxl
bWVudCBpcyBudWxsOiAiICsgdXJscyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICh1
c2VybmFtZSA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24oInVzZXJuYW1lID09IG51bGwiKTsKLSAgICAgIH0KLSAgICAgIGlmIChwYXNzd29yZCA9
PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBh
c3N3b3JkID09IG51bGwiKTsKLSAgICAgIH0KLSAgICAgIGlmIChob3N0bmFtZSA9PSBudWxsKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImhvc3RuYW1lID09
IG51bGwiKTsKLSAgICAgIH0KLSAgICAgIHRoaXMudXJpID0gdXJpOwotICAgICAgdGhpcy51cmxz
ID0gdXJsczsKLSAgICAgIHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTsKLSAgICAgIHRoaXMucGFz
c3dvcmQgPSBwYXNzd29yZDsKLSAgICAgIHRoaXMudGxzQ2VydFBvbGljeSA9IHRsc0NlcnRQb2xp
Y3k7Ci0gICAgICB0aGlzLmhvc3RuYW1lID0gaG9zdG5hbWU7Ci0gICAgICB0aGlzLnRsc0FscG5Q
cm90b2NvbHMgPSB0bHNBbHBuUHJvdG9jb2xzOwotICAgICAgdGhpcy50bHNFbGxpcHRpY0N1cnZl
cyA9IHRsc0VsbGlwdGljQ3VydmVzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gdXJscyArICIgWyIgKyB1c2VybmFt
ZSArICI6IiArIHBhc3N3b3JkICsgIl0gWyIgKyB0bHNDZXJ0UG9saWN5ICsgIl0gWyIgKyBob3N0
bmFtZQotICAgICAgICAgICsgIl0gWyIgKyB0bHNBbHBuUHJvdG9jb2xzICsgIl0gWyIgKyB0bHNF
bGxpcHRpY0N1cnZlcyArICJdIjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
Ym9vbGVhbiBlcXVhbHMoQE51bGxhYmxlIE9iamVjdCBvYmopIHsKLSAgICAgIGlmIChvYmogPT0g
bnVsbCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAob2JqID09
IHRoaXMpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIShvYmog
aW5zdGFuY2VvZiBJY2VTZXJ2ZXIpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LSAgICAgIEljZVNlcnZlciBvdGhlciA9IChJY2VTZXJ2ZXIpIG9iajsKLSAgICAgIHJldHVybiAo
dXJpLmVxdWFscyhvdGhlci51cmkpICYmIHVybHMuZXF1YWxzKG90aGVyLnVybHMpICYmIHVzZXJu
YW1lLmVxdWFscyhvdGhlci51c2VybmFtZSkKLSAgICAgICAgICAmJiBwYXNzd29yZC5lcXVhbHMo
b3RoZXIucGFzc3dvcmQpICYmIHRsc0NlcnRQb2xpY3kuZXF1YWxzKG90aGVyLnRsc0NlcnRQb2xp
Y3kpCi0gICAgICAgICAgJiYgaG9zdG5hbWUuZXF1YWxzKG90aGVyLmhvc3RuYW1lKSAmJiB0bHNB
bHBuUHJvdG9jb2xzLmVxdWFscyhvdGhlci50bHNBbHBuUHJvdG9jb2xzKQotICAgICAgICAgICYm
IHRsc0VsbGlwdGljQ3VydmVzLmVxdWFscyhvdGhlci50bHNFbGxpcHRpY0N1cnZlcykpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICBP
YmplY3RbXSB2YWx1ZXMgPSB7dXJpLCB1cmxzLCB1c2VybmFtZSwgcGFzc3dvcmQsIHRsc0NlcnRQ
b2xpY3ksIGhvc3RuYW1lLCB0bHNBbHBuUHJvdG9jb2xzLAotICAgICAgICAgIHRsc0VsbGlwdGlj
Q3VydmVzfTsKLSAgICAgIHJldHVybiBBcnJheXMuaGFzaENvZGUodmFsdWVzKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgYnVpbGRlcihTdHJpbmcgdXJpKSB7Ci0gICAgICBy
ZXR1cm4gbmV3IEJ1aWxkZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCh1cmkpKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgYnVpbGRlcihMaXN0PFN0cmluZz4gdXJscykg
ewotICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKHVybHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBz
dGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgICBATnVsbGFibGUgcHJpdmF0ZSBmaW5hbCBMaXN0
PFN0cmluZz4gdXJsczsKLSAgICAgIHByaXZhdGUgU3RyaW5nIHVzZXJuYW1lID0gIiI7Ci0gICAg
ICBwcml2YXRlIFN0cmluZyBwYXNzd29yZCA9ICIiOwotICAgICAgcHJpdmF0ZSBUbHNDZXJ0UG9s
aWN5IHRsc0NlcnRQb2xpY3kgPSBUbHNDZXJ0UG9saWN5LlRMU19DRVJUX1BPTElDWV9TRUNVUkU7
Ci0gICAgICBwcml2YXRlIFN0cmluZyBob3N0bmFtZSA9ICIiOwotICAgICAgcHJpdmF0ZSBMaXN0
PFN0cmluZz4gdGxzQWxwblByb3RvY29sczsKLSAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHRs
c0VsbGlwdGljQ3VydmVzOwotCi0gICAgICBwcml2YXRlIEJ1aWxkZXIoTGlzdDxTdHJpbmc+IHVy
bHMpIHsKLSAgICAgICAgaWYgKHVybHMgPT0gbnVsbCB8fCB1cmxzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVybHMgPT0gbnVsbCB8
fCB1cmxzLmlzRW1wdHkoKTogIiArIHVybHMpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMudXJs
cyA9IHVybHM7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFVzZXJuYW1lKFN0
cmluZyB1c2VybmFtZSkgewotICAgICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgQnVpbGRlciBzZXRQYXNz
d29yZChTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3Jk
OwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgcHVibGljIEJ1aWxkZXIg
c2V0VGxzQ2VydFBvbGljeShUbHNDZXJ0UG9saWN5IHRsc0NlcnRQb2xpY3kpIHsKLSAgICAgICAg
dGhpcy50bHNDZXJ0UG9saWN5ID0gdGxzQ2VydFBvbGljeTsKLSAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEhvc3RuYW1lKFN0cmluZyBob3N0
bmFtZSkgewotICAgICAgICB0aGlzLmhvc3RuYW1lID0gaG9zdG5hbWU7Ci0gICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgQnVpbGRlciBzZXRUbHNBbHBuUHJvdG9j
b2xzKExpc3Q8U3RyaW5nPiB0bHNBbHBuUHJvdG9jb2xzKSB7Ci0gICAgICAgIHRoaXMudGxzQWxw
blByb3RvY29scyA9IHRsc0FscG5Qcm90b2NvbHM7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgfQotCi0gICAgICBwdWJsaWMgQnVpbGRlciBzZXRUbHNFbGxpcHRpY0N1cnZlcyhMaXN0PFN0
cmluZz4gdGxzRWxsaXB0aWNDdXJ2ZXMpIHsKLSAgICAgICAgdGhpcy50bHNFbGxpcHRpY0N1cnZl
cyA9IHRsc0VsbGlwdGljQ3VydmVzOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQot
ICAgICAgcHVibGljIEljZVNlcnZlciBjcmVhdGVJY2VTZXJ2ZXIoKSB7Ci0gICAgICAgIHJldHVy
biBuZXcgSWNlU2VydmVyKHVybHMuZ2V0KDApLCB1cmxzLCB1c2VybmFtZSwgcGFzc3dvcmQsIHRs
c0NlcnRQb2xpY3ksIGhvc3RuYW1lLAotICAgICAgICAgICAgdGxzQWxwblByb3RvY29scywgdGxz
RWxsaXB0aWNDdXJ2ZXMpOwotICAgICAgfQotICAgIH0KLQotICAgIEBOdWxsYWJsZQotICAgIEBD
YWxsZWRCeU5hdGl2ZSgiSWNlU2VydmVyIikKLSAgICBMaXN0PFN0cmluZz4gZ2V0VXJscygpIHsK
LSAgICAgIHJldHVybiB1cmxzOwotICAgIH0KLQotICAgIEBOdWxsYWJsZQotICAgIEBDYWxsZWRC
eU5hdGl2ZSgiSWNlU2VydmVyIikKLSAgICBTdHJpbmcgZ2V0VXNlcm5hbWUoKSB7Ci0gICAgICBy
ZXR1cm4gdXNlcm5hbWU7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgQENhbGxlZEJ5TmF0
aXZlKCJJY2VTZXJ2ZXIiKQotICAgIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKLSAgICAgIHJldHVy
biBwYXNzd29yZDsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkljZVNlcnZlciIpCi0g
ICAgVGxzQ2VydFBvbGljeSBnZXRUbHNDZXJ0UG9saWN5KCkgewotICAgICAgcmV0dXJuIHRsc0Nl
cnRQb2xpY3k7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJJ
Y2VTZXJ2ZXIiKQotICAgIFN0cmluZyBnZXRIb3N0bmFtZSgpIHsKLSAgICAgIHJldHVybiBob3N0
bmFtZTsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkljZVNlcnZlciIpCi0gICAgTGlz
dDxTdHJpbmc+IGdldFRsc0FscG5Qcm90b2NvbHMoKSB7Ci0gICAgICByZXR1cm4gdGxzQWxwblBy
b3RvY29sczsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkljZVNlcnZlciIpCi0gICAg
TGlzdDxTdHJpbmc+IGdldFRsc0VsbGlwdGljQ3VydmVzKCkgewotICAgICAgcmV0dXJuIHRsc0Vs
bGlwdGljQ3VydmVzOwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2UuSWNlVHJhbnNwb3J0c1R5cGUgKi8KLSAgcHVibGljIGVudW0gSWNl
VHJhbnNwb3J0c1R5cGUgeyBOT05FLCBSRUxBWSwgTk9IT1NULCBBTEwgfQotCi0gIC8qKiBKYXZh
IHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuQnVuZGxlUG9saWN5ICovCi0gIHB1
YmxpYyBlbnVtIEJ1bmRsZVBvbGljeSB7IEJBTEFOQ0VELCBNQVhCVU5ETEUsIE1BWENPTVBBVCB9
Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5SdGNwTXV4
UG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIFJ0Y3BNdXhQb2xpY3kgeyBORUdPVElBVEUsIFJFUVVJ
UkUgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuVGNw
Q2FuZGlkYXRlUG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIFRjcENhbmRpZGF0ZVBvbGljeSB7IEVO
QUJMRUQsIERJU0FCTEVEIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlLkNhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQ2FuZGlk
YXRlTmV0d29ya1BvbGljeSB7IEFMTCwgTE9XX0NPU1QgfQotCi0gIC8vIEtlZXAgaW4gc3luYyB3
aXRoIHdlYnJ0Yy9ydGNfYmFzZS9uZXR3b3JrX2NvbnN0YW50cy5oLgotICBwdWJsaWMgZW51bSBB
ZGFwdGVyVHlwZSB7Ci0gICAgVU5LTk9XTigwKSwKLSAgICBFVEhFUk5FVCgxIDw8IDApLAotICAg
IFdJRkkoMSA8PCAxKSwKLSAgICBDRUxMVUxBUigxIDw8IDIpLAotICAgIFZQTigxIDw8IDMpLAot
ICAgIExPT1BCQUNLKDEgPDwgNCksCi0gICAgQURBUFRFUl9UWVBFX0FOWSgxIDw8IDUpOwotCi0g
ICAgcHVibGljIGZpbmFsIEludGVnZXIgYml0TWFzazsKLSAgICBwcml2YXRlIEFkYXB0ZXJUeXBl
KEludGVnZXIgYml0TWFzaykgewotICAgICAgdGhpcy5iaXRNYXNrID0gYml0TWFzazsKLSAgICB9
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPEludGVnZXIsIEFkYXB0ZXJUeXBlPiBCWV9C
SVRNQVNLID0gbmV3IEhhc2hNYXA8PigpOwotICAgIHN0YXRpYyB7Ci0gICAgICBmb3IgKEFkYXB0
ZXJUeXBlIHQgOiB2YWx1ZXMoKSkgewotICAgICAgICBCWV9CSVRNQVNLLnB1dCh0LmJpdE1hc2ss
IHQpOwotICAgICAgfQotICAgIH0KLQotICAgIEBOdWxsYWJsZQotICAgIEBDYWxsZWRCeU5hdGl2
ZSgiQWRhcHRlclR5cGUiKQotICAgIHN0YXRpYyBBZGFwdGVyVHlwZSBmcm9tTmF0aXZlSW5kZXgo
aW50IG5hdGl2ZUluZGV4KSB7Ci0gICAgICByZXR1cm4gQllfQklUTUFTSy5nZXQobmF0aXZlSW5k
ZXgpOwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgcnRjOjpLZXlUeXBlICov
Ci0gIHB1YmxpYyBlbnVtIEtleVR5cGUgeyBSU0EsIEVDRFNBIH0KLQotICAvKiogSmF2YSB2ZXJz
aW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSAq
LwotICBwdWJsaWMgZW51bSBDb250aW51YWxHYXRoZXJpbmdQb2xpY3kgeyBHQVRIRVJfT05DRSwg
R0FUSEVSX0NPTlRJTlVBTExZIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIHdlYnJ0Yzo6UG9y
dFBydW5lUG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIFBvcnRQcnVuZVBvbGljeSB7Ci0gICAgTk9f
UFJVTkUsIC8vIERvIG5vdCBwcnVuZSB0dXJuIHBvcnQuCi0gICAgUFJVTkVfQkFTRURfT05fUFJJ
T1JJVFksIC8vIFBydW5lIHR1cm4gcG9ydCBiYXNlZCB0aGUgcHJpb3JpdHkgb24gdGhlIHNhbWUg
bmV0d29yawotICAgIEtFRVBfRklSU1RfUkVBRFkgLy8gS2VlcCB0aGUgZmlyc3QgcmVhZHkgcG9y
dCBhbmQgcHJ1bmUgdGhlIHJlc3Qgb24gdGhlIHNhbWUgbmV0d29yay4KLSAgfQotCi0gIC8qKgot
ICAgKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpTZHBTZW1hbnRpY3MuCi0gICAqCi0gICAqIENv
bmZpZ3VyZSB0aGUgU0RQIHNlbWFudGljcyB1c2VkIGJ5IHRoaXMgUGVlckNvbm5lY3Rpb24uIE5v
dGUgdGhhdCB0aGUKLSAgICogV2ViUlRDIDEuMCBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIFVOSUZJ
RURfUExBTiBzZW1hbnRpY3MuIFRoZQotICAgKiBSdHBUcmFuc2NlaXZlciBBUEkgaXMgb25seSBh
dmFpbGFibGUgd2l0aCBVTklGSUVEX1BMQU4gc2VtYW50aWNzLgotICAgKgotICAgKiA8cD5QTEFO
X0Igd2lsbCBjYXVzZSBQZWVyQ29ubmVjdGlvbiB0byBjcmVhdGUgb2ZmZXJzIGFuZCBhbnN3ZXJz
IHdpdGggYXQKLSAgICogbW9zdCBvbmUgYXVkaW8gYW5kIG9uZSB2aWRlbyBtPSBzZWN0aW9uIHdp
dGggbXVsdGlwbGUgUnRwU2VuZGVycyBhbmQKLSAgICogUnRwUmVjZWl2ZXJzIHNwZWNpZmllZCBh
cyBtdWx0aXBsZSBhPXNzcmMgbGluZXMgd2l0aGluIHRoZSBzZWN0aW9uLiBUaGlzCi0gICAqIHdp
bGwgYWxzbyBjYXVzZSBQZWVyQ29ubmVjdGlvbiB0byBpZ25vcmUgYWxsIGJ1dCB0aGUgZmlyc3Qg
bT0gc2VjdGlvbiBvZgotICAgKiB0aGUgc2FtZSBtZWRpYSB0eXBlLgotICAgKgotICAgKiA8cD5V
TklGSUVEX1BMQU4gd2lsbCBjYXVzZSBQZWVyQ29ubmVjdGlvbiB0byBjcmVhdGUgb2ZmZXJzIGFu
ZCBhbnN3ZXJzIHdpdGgKLSAgICogbXVsdGlwbGUgbT0gc2VjdGlvbnMgd2hlcmUgZWFjaCBtPSBz
ZWN0aW9uIG1hcHMgdG8gb25lIFJ0cFNlbmRlciBhbmQgb25lCi0gICAqIFJ0cFJlY2VpdmVyIChh
biBSdHBUcmFuc2NlaXZlciksIGVpdGhlciBib3RoIGF1ZGlvIG9yIGJvdGggdmlkZW8uIFRoaXMK
LSAgICogd2lsbCBhbHNvIGNhdXNlIFBlZXJDb25uZWN0aW9uIHRvIGlnbm9yZSBhbGwgYnV0IHRo
ZSBmaXJzdCBhPXNzcmMgbGluZXMKLSAgICogdGhhdCBmb3JtIGEgUGxhbiBCIHN0cmVhbS4KLSAg
ICoKLSAgICogPHA+Rm9yIHVzZXJzIHdobyB3aXNoIHRvIHNlbmQgbXVsdGlwbGUgYXVkaW8vdmlk
ZW8gc3RyZWFtcyBhbmQgbmVlZCB0byBzdGF5Ci0gICAqIGludGVyb3BlcmFibGUgd2l0aCBsZWdh
Y3kgV2ViUlRDIGltcGxlbWVudGF0aW9ucywgc3BlY2lmeSBQTEFOX0IuCi0gICAqCi0gICAqIDxw
PkZvciB1c2VycyB3aG8gd2lzaCB0byBzZW5kIG11bHRpcGxlIGF1ZGlvL3ZpZGVvIHN0cmVhbXMg
YW5kL29yIHdpc2ggdG8KLSAgICogdXNlIHRoZSBuZXcgUnRwVHJhbnNjZWl2ZXIgQVBJLCBzcGVj
aWZ5IFVOSUZJRURfUExBTi4KLSAgICovCi0gIHB1YmxpYyBlbnVtIFNkcFNlbWFudGljcyB7IFBM
QU5fQiwgVU5JRklFRF9QTEFOIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlLlJUQ0NvbmZpZ3VyYXRpb24gKi8KLSAgLy8gVE9ETyhxaW5nc2kpOiBSZXNv
bHZlIHRoZSBuYW1pbmcgaW5jb25zaXN0ZW5jeSBvZiBmaWVsZHMgd2l0aC93aXRob3V0IHVuaXRz
LgotICBwdWJsaWMgc3RhdGljIGNsYXNzIFJUQ0NvbmZpZ3VyYXRpb24gewotICAgIHB1YmxpYyBJ
Y2VUcmFuc3BvcnRzVHlwZSBpY2VUcmFuc3BvcnRzVHlwZTsKLSAgICBwdWJsaWMgTGlzdDxJY2VT
ZXJ2ZXI+IGljZVNlcnZlcnM7Ci0gICAgcHVibGljIEJ1bmRsZVBvbGljeSBidW5kbGVQb2xpY3k7
Ci0gICAgQE51bGxhYmxlIHB1YmxpYyBSdGNDZXJ0aWZpY2F0ZVBlbSBjZXJ0aWZpY2F0ZTsKLSAg
ICBwdWJsaWMgUnRjcE11eFBvbGljeSBydGNwTXV4UG9saWN5OwotICAgIHB1YmxpYyBUY3BDYW5k
aWRhdGVQb2xpY3kgdGNwQ2FuZGlkYXRlUG9saWN5OwotICAgIHB1YmxpYyBDYW5kaWRhdGVOZXR3
b3JrUG9saWN5IGNhbmRpZGF0ZU5ldHdvcmtQb2xpY3k7Ci0gICAgcHVibGljIGludCBhdWRpb0pp
dHRlckJ1ZmZlck1heFBhY2tldHM7Ci0gICAgcHVibGljIGJvb2xlYW4gYXVkaW9KaXR0ZXJCdWZm
ZXJGYXN0QWNjZWxlcmF0ZTsKLSAgICBwdWJsaWMgaW50IGljZUNvbm5lY3Rpb25SZWNlaXZpbmdU
aW1lb3V0OwotICAgIHB1YmxpYyBpbnQgaWNlQmFja3VwQ2FuZGlkYXRlUGFpclBpbmdJbnRlcnZh
bDsKLSAgICBwdWJsaWMgS2V5VHlwZSBrZXlUeXBlOwotICAgIHB1YmxpYyBDb250aW51YWxHYXRo
ZXJpbmdQb2xpY3kgY29udGludWFsR2F0aGVyaW5nUG9saWN5OwotICAgIHB1YmxpYyBpbnQgaWNl
Q2FuZGlkYXRlUG9vbFNpemU7Ci0gICAgQERlcHJlY2F0ZWQgLy8gYnkgdGhlIHR1cm5Qb3J0UHJ1
bmVQb2xpY3kuIFNlZSBidWdzLndlYnJ0Yy5vcmcvMTEwMjYKLSAgICBwdWJsaWMgYm9vbGVhbiBw
cnVuZVR1cm5Qb3J0czsKLSAgICBwdWJsaWMgUG9ydFBydW5lUG9saWN5IHR1cm5Qb3J0UHJ1bmVQ
b2xpY3k7Ci0gICAgcHVibGljIGJvb2xlYW4gcHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVsYXll
ZDsKLSAgICBwdWJsaWMgYm9vbGVhbiBzdXJmYWNlSWNlQ2FuZGlkYXRlc09uSWNlVHJhbnNwb3J0
VHlwZUNoYW5nZWQ7Ci0gICAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgZGVmaW5lIGludGVydmFs
cyBpbiBtaWxsaXNlY29uZHMgYXQgd2hpY2ggSUNFCi0gICAgLy8gY29ubmVjdGl2aXR5IGNoZWNr
cyBhcmUgc2VudC4KLSAgICAvLwotICAgIC8vIFdlIGNvbnNpZGVyIElDRSBpcyAic3Ryb25nbHkg
Y29ubmVjdGVkIiBmb3IgYW4gYWdlbnQgd2hlbiB0aGVyZSBpcyBhdAotICAgIC8vIGxlYXN0IG9u
ZSBjYW5kaWRhdGUgcGFpciB0aGF0IGN1cnJlbnRseSBzdWNjZWVkcyBpbiBjb25uZWN0aXZpdHkg
Y2hlY2sKLSAgICAvLyBmcm9tIGl0cyBkaXJlY3Rpb24gaS5lLiBzZW5kaW5nIGEgcGluZyBhbmQg
cmVjZWl2ZXMgYSBwaW5nIHJlc3BvbnNlLCBBTkQKLSAgICAvLyBhbGwgY2FuZGlkYXRlIHBhaXJz
IGhhdmUgc2VudCBhIG1pbmltdW0gbnVtYmVyIG9mIHBpbmdzIGZvciBjb25uZWN0aXZpdHkKLSAg
ICAvLyAodGhpcyBudW1iZXIgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMpLiBPdGhlcndpc2Us
IElDRSBpcyBjb25zaWRlcmVkIGluCi0gICAgLy8gIndlYWsgY29ubmVjdGl2aXR5Ii4KLSAgICAv
LwotICAgIC8vIE5vdGUgdGhhdCB0aGUgYWJvdmUgbm90aW9uIG9mIHN0cm9uZyBhbmQgd2VhayBj
b25uZWN0aXZpdHkgaXMgbm90IGRlZmluZWQKLSAgICAvLyBpbiBSRkMgNTI0NSwgYW5kIHRoZXkg
YXBwbHkgdG8gb3VyIGN1cnJlbnQgSUNFIGltcGxlbWVudGF0aW9uIG9ubHkuCi0gICAgLy8KLSAg
ICAvLyAxKSBpY2VDaGVja0ludGVydmFsU3Ryb25nQ29ubmVjdGl2aXR5TXMgZGVmaW5lcyB0aGUg
aW50ZXJ2YWwgYXBwbGllZCB0bwotICAgIC8vIEFMTCBjYW5kaWRhdGUgcGFpcnMgd2hlbiBJQ0Ug
aXMgc3Ryb25nbHkgY29ubmVjdGVkLAotICAgIC8vIDIpIGljZUNoZWNrSW50ZXJ2YWxXZWFrQ29u
bmVjdGl2aXR5TXMgZGVmaW5lcyB0aGUgY291bnRlcnBhcnQgZm9yIEFMTAotICAgIC8vIHBhaXJz
IHdoZW4gSUNFIGlzIHdlYWtseSBjb25uZWN0ZWQsIGFuZAotICAgIC8vIDMpIGljZUNoZWNrTWlu
SW50ZXJ2YWwgZGVmaW5lcyB0aGUgbWluaW1hbCBpbnRlcnZhbCAoZXF1aXZhbGVudGx5IHRoZQot
ICAgIC8vIG1heGltdW0gcmF0ZSkgdGhhdCBvdmVycmlkZXMgdGhlIGFib3ZlIHR3byBpbnRlcnZh
bHMgd2hlbiBlaXRoZXIgb2YgdGhlbQotICAgIC8vIGlzIGxlc3MuCi0gICAgQE51bGxhYmxlIHB1
YmxpYyBJbnRlZ2VyIGljZUNoZWNrSW50ZXJ2YWxTdHJvbmdDb25uZWN0aXZpdHlNczsKLSAgICBA
TnVsbGFibGUgcHVibGljIEludGVnZXIgaWNlQ2hlY2tJbnRlcnZhbFdlYWtDb25uZWN0aXZpdHlN
czsKLSAgICBATnVsbGFibGUgcHVibGljIEludGVnZXIgaWNlQ2hlY2tNaW5JbnRlcnZhbDsKLSAg
ICAvLyBUaGUgdGltZSBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzIGZvciB3aGljaCBhIGNhbmRpZGF0
ZSBwYWlyIG11c3Qgd2FpdCBmb3IgcmVzcG9uc2UgdG8KLSAgICAvLyBjb25uZWN0aXZpdGl5IGNo
ZWNrcyBiZWZvcmUgaXQgYmVjb21lcyB1bndyaXRhYmxlLgotICAgIEBOdWxsYWJsZSBwdWJsaWMg
SW50ZWdlciBpY2VVbndyaXRhYmxlVGltZU1zOwotICAgIC8vIFRoZSBtaW5pbXVtIG51bWJlciBv
ZiBjb25uZWN0aXZpdHkgY2hlY2tzIHRoYXQgYSBjYW5kaWRhdGUgcGFpciBtdXN0IHNlbnQgd2l0
aG91dCByZWNlaXZpbmcKLSAgICAvLyByZXNwb25zZSBiZWZvcmUgaXQgYmVjb21lcyB1bndyaXRh
YmxlLgotICAgIEBOdWxsYWJsZSBwdWJsaWMgSW50ZWdlciBpY2VVbndyaXRhYmxlTWluQ2hlY2tz
OwotICAgIC8vIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYXQgd2hpY2ggU1RVTiBjYW5k
aWRhdGVzIHdpbGwgcmVzZW5kIFNUVU4gYmluZGluZyByZXF1ZXN0cwotICAgIC8vIHRvIGtlZXAg
TkFUIGJpbmRpbmdzIG9wZW4uCi0gICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIGltcGxl
bWVudGF0aW9uIGlzIHVzZWQgaWYgdGhpcyBmaWVsZCBpcyBudWxsLgotICAgIEBOdWxsYWJsZSBw
dWJsaWMgSW50ZWdlciBzdHVuQ2FuZGlkYXRlS2VlcGFsaXZlSW50ZXJ2YWxNczsKLSAgICBwdWJs
aWMgYm9vbGVhbiBkaXNhYmxlSVB2Nk9uV2lmaTsKLSAgICAvLyBCeSBkZWZhdWx0LCBQZWVyQ29u
bmVjdGlvbiB3aWxsIHVzZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIElQdjYgbmV0d29yawotICAgIC8v
IGludGVyZmFjZXMsIGluIG9yZGVyIHRvIGF2b2lkIHRvbyBtYW55IElDRSBjYW5kaWRhdGUgcGFp
cnMgYmVpbmcgY3JlYXRlZAotICAgIC8vIGFuZCBkZWxheWluZyBJQ0UgY29tcGxldGlvbi4KLSAg
ICAvLwotICAgIC8vIENhbiBiZSBzZXQgdG8gSW50ZWdlci5NQVhfVkFMVUUgdG8gZWZmZWN0aXZl
bHkgZGlzYWJsZSB0aGUgbGltaXQuCi0gICAgcHVibGljIGludCBtYXhJUHY2TmV0d29ya3M7Ci0K
LSAgICAvLyBUaGVzZSB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IE1lZGlhU3RyZWFtIGNv
bnN0cmFpbnRzIGlmIGRlcHJlY2F0ZWQgY29uc3RyYWludHMtYmFzZWQKLSAgICAvLyBjcmVhdGUg
cGVlcmNvbm5lY3Rpb24gaW50ZXJmYWNlIGlzIHVzZWQuCi0gICAgcHVibGljIGJvb2xlYW4gZGlz
YWJsZUlwdjY7Ci0gICAgcHVibGljIGJvb2xlYW4gZW5hYmxlRHNjcDsKLSAgICBwdWJsaWMgYm9v
bGVhbiBlbmFibGVDcHVPdmVydXNlRGV0ZWN0aW9uOwotICAgIHB1YmxpYyBib29sZWFuIGVuYWJs
ZVJ0cERhdGFDaGFubmVsOwotICAgIHB1YmxpYyBib29sZWFuIHN1c3BlbmRCZWxvd01pbkJpdHJh
dGU7Ci0gICAgQE51bGxhYmxlIHB1YmxpYyBJbnRlZ2VyIHNjcmVlbmNhc3RNaW5CaXRyYXRlOwot
ICAgIEBOdWxsYWJsZSBwdWJsaWMgQm9vbGVhbiBjb21iaW5lZEF1ZGlvVmlkZW9Cd2U7Ci0gICAg
QE51bGxhYmxlIHB1YmxpYyBCb29sZWFuIGVuYWJsZUR0bHNTcnRwOwotICAgIC8vIFVzZSAiVW5r
bm93biIgdG8gcmVwcmVzZW50IG5vIHByZWZlcmVuY2Ugb2YgYWRhcHRlciB0eXBlcywgbm90IHRo
ZQotICAgIC8vIHByZWZlcmVuY2Ugb2YgYWRhcHRlcnMgb2YgdW5rbm93biB0eXBlcy4KLSAgICBw
dWJsaWMgQWRhcHRlclR5cGUgbmV0d29ya1ByZWZlcmVuY2U7Ci0gICAgcHVibGljIFNkcFNlbWFu
dGljcyBzZHBTZW1hbnRpY3M7Ci0KLSAgICAvLyBUaGlzIGlzIGFuIG9wdGlvbmFsIHdyYXBwZXIg
Zm9yIHRoZSBDKysgd2VicnRjOjpUdXJuQ3VzdG9taXplci4KLSAgICBATnVsbGFibGUgcHVibGlj
IFR1cm5DdXN0b21pemVyIHR1cm5DdXN0b21pemVyOwotCi0gICAgLy8gQWN0aXZlbHkgcmVzZXQg
dGhlIFNSVFAgcGFyYW1ldGVycyB3aGVuZXZlciB0aGUgRFRMUyB0cmFuc3BvcnRzIHVuZGVybmVh
dGggYXJlIHJlc2V0IGZvcgotICAgIC8vIGV2ZXJ5IG9mZmVyL2Fuc3dlciBuZWdvdGlhdGlvbi5U
aGlzIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgYSB3b3JrYXJvdW5kIGZvciBjcmJ1Zy5jb20vODM1
OTU4Ci0gICAgcHVibGljIGJvb2xlYW4gYWN0aXZlUmVzZXRTcnRwUGFyYW1zOwotCi0gICAgLy8g
V2hldGhlciB0aGlzIGNsaWVudCBpcyBhbGxvd2VkIHRvIHN3aXRjaCBlbmNvZGluZyBjb2RlYyBt
aWQtc3RyZWFtLiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IKLSAgICAvLyBhIFdlYlJUQyBidWcg
d2hlcmUgdGhlIHJlY2VpdmVyIGNvdWxkIGdldCBjb25mdXNzZWQgaWYgYSBjb2RlYyBzd2l0Y2gg
aGFwcGVuZWQgbWlkLWNhbGwuCi0gICAgLy8gTnVsbCBpbmRpY2F0ZXMgbm8gY2hhbmdlIHRvIGN1
cnJlbnRseSBjb25maWd1cmVkIHZhbHVlLgotICAgIEBOdWxsYWJsZSBwdWJsaWMgQm9vbGVhbiBh
bGxvd0NvZGVjU3dpdGNoaW5nOwotCi0gICAgLyoKLSAgICAgKiBFeHBlcmltZW50YWwgZmxhZyB0
aGF0IGVuYWJsZXMgYSB1c2Ugb2YgbWVkaWEgdHJhbnNwb3J0LiBJZiB0aGlzIGlzIHRydWUsIHRo
ZSBtZWRpYSB0cmFuc3BvcnQKLSAgICAgKiBmYWN0b3J5IE1VU1QgYmUgcHJvdmlkZWQgdG8gdGhl
IFBlZXJDb25uZWN0aW9uRmFjdG9yeS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiB1c2VN
ZWRpYVRyYW5zcG9ydDsKLQotICAgIC8qCi0gICAgICogRXhwZXJpbWVudGFsIGZsYWcgdGhhdCBl
bmFibGVzIGEgdXNlIG9mIG1lZGlhIHRyYW5zcG9ydCBmb3IgZGF0YSBjaGFubmVscy4gSWYgdGhp
cyBpcyB0cnVlLAotICAgICAqIHRoZSBtZWRpYSB0cmFuc3BvcnQgZmFjdG9yeSBNVVNUIGJlIHBy
b3ZpZGVkIHRvIHRoZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuCi0gICAgICovCi0gICAgcHVibGlj
IGJvb2xlYW4gdXNlTWVkaWFUcmFuc3BvcnRGb3JEYXRhQ2hhbm5lbHM7Ci0KLSAgICAvKioKLSAg
ICAgKiBEZWZpbmVzIGFkdmFuY2VkIG9wdGlvbmFsIGNyeXB0b2dyYXBoaWMgc2V0dGluZ3MgcmVs
YXRlZCB0byBTUlRQIGFuZAotICAgICAqIGZyYW1lIGVuY3J5cHRpb24gZm9yIG5hdGl2ZSBXZWJS
VEMuIFNldHRpbmcgdGhpcyB3aWxsIG92ZXJ3cml0ZSBhbnkKLSAgICAgKiBvcHRpb25zIHNldCB0
aHJvdWdoIHRoZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgKHdoaWNoIGlzIGRlcHJlY2F0ZWQpLgot
ICAgICAqLwotICAgIEBOdWxsYWJsZSBwdWJsaWMgQ3J5cHRvT3B0aW9ucyBjcnlwdG9PcHRpb25z
OwotCi0gICAgLyoqCi0gICAgICogQW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgaWYgc2V0IHdpbGwg
YmUgYXR0YWNoZWQgdG8gdGhlCi0gICAgICogVFVSTl9BTExPQ0FURV9SRVFVRVNUIHdoaWNoIGNh
biBiZSB1c2VkIHRvIGNvcnJlbGF0ZSBjbGllbnQKLSAgICAgKiBsb2dzIHdpdGggYmFja2VuZCBs
b2dzCi0gICAgICovCi0gICAgQE51bGxhYmxlIHB1YmxpYyBTdHJpbmcgdHVybkxvZ2dpbmdJZDsK
LQotICAgIC8vIFRPRE8oZGVhZGJlZWYpOiBJbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBkZWZh
dWx0cyBoZXJlLCB3ZSBzaG91bGQgZG8KLSAgICAvLyBzb21ldGhpbmcgdG8gcGljayB1cCB0aGUg
ZGVmYXVsdHMgZnJvbSBDKysuIFRoZSBPYmplY3RpdmUtQyBlcXVpdmFsZW50Ci0gICAgLy8gb2Yg
UlRDQ29uZmlndXJhdGlvbiBkb2VzIHRoYXQuCi0gICAgcHVibGljIFJUQ0NvbmZpZ3VyYXRpb24o
TGlzdDxJY2VTZXJ2ZXI+IGljZVNlcnZlcnMpIHsKLSAgICAgIGljZVRyYW5zcG9ydHNUeXBlID0g
SWNlVHJhbnNwb3J0c1R5cGUuQUxMOwotICAgICAgYnVuZGxlUG9saWN5ID0gQnVuZGxlUG9saWN5
LkJBTEFOQ0VEOwotICAgICAgcnRjcE11eFBvbGljeSA9IFJ0Y3BNdXhQb2xpY3kuUkVRVUlSRTsK
LSAgICAgIHRjcENhbmRpZGF0ZVBvbGljeSA9IFRjcENhbmRpZGF0ZVBvbGljeS5FTkFCTEVEOwot
ICAgICAgY2FuZGlkYXRlTmV0d29ya1BvbGljeSA9IENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kuQUxM
OwotICAgICAgdGhpcy5pY2VTZXJ2ZXJzID0gaWNlU2VydmVyczsKLSAgICAgIGF1ZGlvSml0dGVy
QnVmZmVyTWF4UGFja2V0cyA9IDUwOwotICAgICAgYXVkaW9KaXR0ZXJCdWZmZXJGYXN0QWNjZWxl
cmF0ZSA9IGZhbHNlOwotICAgICAgaWNlQ29ubmVjdGlvblJlY2VpdmluZ1RpbWVvdXQgPSAtMTsK
LSAgICAgIGljZUJhY2t1cENhbmRpZGF0ZVBhaXJQaW5nSW50ZXJ2YWwgPSAtMTsKLSAgICAgIGtl
eVR5cGUgPSBLZXlUeXBlLkVDRFNBOwotICAgICAgY29udGludWFsR2F0aGVyaW5nUG9saWN5ID0g
Q29udGludWFsR2F0aGVyaW5nUG9saWN5LkdBVEhFUl9PTkNFOwotICAgICAgaWNlQ2FuZGlkYXRl
UG9vbFNpemUgPSAwOwotICAgICAgcHJ1bmVUdXJuUG9ydHMgPSBmYWxzZTsKLSAgICAgIHR1cm5Q
b3J0UHJ1bmVQb2xpY3kgPSBQb3J0UHJ1bmVQb2xpY3kuTk9fUFJVTkU7Ci0gICAgICBwcmVzdW1l
V3JpdGFibGVXaGVuRnVsbHlSZWxheWVkID0gZmFsc2U7Ci0gICAgICBzdXJmYWNlSWNlQ2FuZGlk
YXRlc09uSWNlVHJhbnNwb3J0VHlwZUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgIGljZUNoZWNrSW50
ZXJ2YWxTdHJvbmdDb25uZWN0aXZpdHlNcyA9IG51bGw7Ci0gICAgICBpY2VDaGVja0ludGVydmFs
V2Vha0Nvbm5lY3Rpdml0eU1zID0gbnVsbDsKLSAgICAgIGljZUNoZWNrTWluSW50ZXJ2YWwgPSBu
dWxsOwotICAgICAgaWNlVW53cml0YWJsZVRpbWVNcyA9IG51bGw7Ci0gICAgICBpY2VVbndyaXRh
YmxlTWluQ2hlY2tzID0gbnVsbDsKLSAgICAgIHN0dW5DYW5kaWRhdGVLZWVwYWxpdmVJbnRlcnZh
bE1zID0gbnVsbDsKLSAgICAgIGRpc2FibGVJUHY2T25XaWZpID0gZmFsc2U7Ci0gICAgICBtYXhJ
UHY2TmV0d29ya3MgPSA1OwotICAgICAgZGlzYWJsZUlwdjYgPSBmYWxzZTsKLSAgICAgIGVuYWJs
ZURzY3AgPSBmYWxzZTsKLSAgICAgIGVuYWJsZUNwdU92ZXJ1c2VEZXRlY3Rpb24gPSB0cnVlOwot
ICAgICAgZW5hYmxlUnRwRGF0YUNoYW5uZWwgPSBmYWxzZTsKLSAgICAgIHN1c3BlbmRCZWxvd01p
bkJpdHJhdGUgPSBmYWxzZTsKLSAgICAgIHNjcmVlbmNhc3RNaW5CaXRyYXRlID0gbnVsbDsKLSAg
ICAgIGNvbWJpbmVkQXVkaW9WaWRlb0J3ZSA9IG51bGw7Ci0gICAgICBlbmFibGVEdGxzU3J0cCA9
IG51bGw7Ci0gICAgICBuZXR3b3JrUHJlZmVyZW5jZSA9IEFkYXB0ZXJUeXBlLlVOS05PV047Ci0g
ICAgICBzZHBTZW1hbnRpY3MgPSBTZHBTZW1hbnRpY3MuUExBTl9COwotICAgICAgYWN0aXZlUmVz
ZXRTcnRwUGFyYW1zID0gZmFsc2U7Ci0gICAgICB1c2VNZWRpYVRyYW5zcG9ydCA9IGZhbHNlOwot
ICAgICAgdXNlTWVkaWFUcmFuc3BvcnRGb3JEYXRhQ2hhbm5lbHMgPSBmYWxzZTsKLSAgICAgIGNy
eXB0b09wdGlvbnMgPSBudWxsOwotICAgICAgdHVybkxvZ2dpbmdJZCA9IG51bGw7Ci0gICAgICBh
bGxvd0NvZGVjU3dpdGNoaW5nID0gbnVsbDsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUo
IlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIEljZVRyYW5zcG9ydHNUeXBlIGdldEljZVRyYW5zcG9y
dHNUeXBlKCkgewotICAgICAgcmV0dXJuIGljZVRyYW5zcG9ydHNUeXBlOwotICAgIH0KLQotICAg
IEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgTGlzdDxJY2VTZXJ2ZXI+
IGdldEljZVNlcnZlcnMoKSB7Ci0gICAgICByZXR1cm4gaWNlU2VydmVyczsKLSAgICB9Ci0KLSAg
ICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIEJ1bmRsZVBvbGljeSBn
ZXRCdW5kbGVQb2xpY3koKSB7Ci0gICAgICByZXR1cm4gYnVuZGxlUG9saWN5OwotICAgIH0KLQot
ICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgUG9ydFBydW5lUG9s
aWN5IGdldFR1cm5Qb3J0UHJ1bmVQb2xpY3koKSB7Ci0gICAgICByZXR1cm4gdHVyblBvcnRQcnVu
ZVBvbGljeTsKLSAgICB9Ci0KLSAgICBATnVsbGFibGUKLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJU
Q0NvbmZpZ3VyYXRpb24iKQotICAgIFJ0Y0NlcnRpZmljYXRlUGVtIGdldENlcnRpZmljYXRlKCkg
ewotICAgICAgcmV0dXJuIGNlcnRpZmljYXRlOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2
ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgUnRjcE11eFBvbGljeSBnZXRSdGNwTXV4UG9saWN5
KCkgewotICAgICAgcmV0dXJuIHJ0Y3BNdXhQb2xpY3k7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5
TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBUY3BDYW5kaWRhdGVQb2xpY3kgZ2V0VGNw
Q2FuZGlkYXRlUG9saWN5KCkgewotICAgICAgcmV0dXJuIHRjcENhbmRpZGF0ZVBvbGljeTsKLSAg
ICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIENhbmRp
ZGF0ZU5ldHdvcmtQb2xpY3kgZ2V0Q2FuZGlkYXRlTmV0d29ya1BvbGljeSgpIHsKLSAgICAgIHJl
dHVybiBjYW5kaWRhdGVOZXR3b3JrUG9saWN5OwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2
ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgaW50IGdldEF1ZGlvSml0dGVyQnVmZmVyTWF4UGFj
a2V0cygpIHsKLSAgICAgIHJldHVybiBhdWRpb0ppdHRlckJ1ZmZlck1heFBhY2tldHM7Ci0gICAg
fQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBib29sZWFu
IGdldEF1ZGlvSml0dGVyQnVmZmVyRmFzdEFjY2VsZXJhdGUoKSB7Ci0gICAgICByZXR1cm4gYXVk
aW9KaXR0ZXJCdWZmZXJGYXN0QWNjZWxlcmF0ZTsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRp
dmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIGludCBnZXRJY2VDb25uZWN0aW9uUmVjZWl2aW5n
VGltZW91dCgpIHsKLSAgICAgIHJldHVybiBpY2VDb25uZWN0aW9uUmVjZWl2aW5nVGltZW91dDsK
LSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIGlu
dCBnZXRJY2VCYWNrdXBDYW5kaWRhdGVQYWlyUGluZ0ludGVydmFsKCkgewotICAgICAgcmV0dXJu
IGljZUJhY2t1cENhbmRpZGF0ZVBhaXJQaW5nSW50ZXJ2YWw7Ci0gICAgfQotCi0gICAgQENhbGxl
ZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBLZXlUeXBlIGdldEtleVR5cGUoKSB7
Ci0gICAgICByZXR1cm4ga2V5VHlwZTsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJU
Q0NvbmZpZ3VyYXRpb24iKQotICAgIENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSBnZXRDb250aW51
YWxHYXRoZXJpbmdQb2xpY3koKSB7Ci0gICAgICByZXR1cm4gY29udGludWFsR2F0aGVyaW5nUG9s
aWN5OwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0g
ICAgaW50IGdldEljZUNhbmRpZGF0ZVBvb2xTaXplKCkgewotICAgICAgcmV0dXJuIGljZUNhbmRp
ZGF0ZVBvb2xTaXplOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJh
dGlvbiIpCi0gICAgYm9vbGVhbiBnZXRQcnVuZVR1cm5Qb3J0cygpIHsKLSAgICAgIHJldHVybiBw
cnVuZVR1cm5Qb3J0czsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3Vy
YXRpb24iKQotICAgIGJvb2xlYW4gZ2V0UHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVsYXllZCgp
IHsKLSAgICAgIHJldHVybiBwcmVzdW1lV3JpdGFibGVXaGVuRnVsbHlSZWxheWVkOwotICAgIH0K
LQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgYm9vbGVhbiBn
ZXRTdXJmYWNlSWNlQ2FuZGlkYXRlc09uSWNlVHJhbnNwb3J0VHlwZUNoYW5nZWQoKSB7Ci0gICAg
ICByZXR1cm4gc3VyZmFjZUljZUNhbmRpZGF0ZXNPbkljZVRyYW5zcG9ydFR5cGVDaGFuZ2VkOwot
ICAgIH0KLQotICAgIEBOdWxsYWJsZQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJh
dGlvbiIpCi0gICAgSW50ZWdlciBnZXRJY2VDaGVja0ludGVydmFsU3Ryb25nQ29ubmVjdGl2aXR5
KCkgewotICAgICAgcmV0dXJuIGljZUNoZWNrSW50ZXJ2YWxTdHJvbmdDb25uZWN0aXZpdHlNczsK
LSAgICB9Ci0KLSAgICBATnVsbGFibGUKLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3Vy
YXRpb24iKQotICAgIEludGVnZXIgZ2V0SWNlQ2hlY2tJbnRlcnZhbFdlYWtDb25uZWN0aXZpdHko
KSB7Ci0gICAgICByZXR1cm4gaWNlQ2hlY2tJbnRlcnZhbFdlYWtDb25uZWN0aXZpdHlNczsKLSAg
ICB9Ci0KLSAgICBATnVsbGFibGUKLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRp
b24iKQotICAgIEludGVnZXIgZ2V0SWNlQ2hlY2tNaW5JbnRlcnZhbCgpIHsKLSAgICAgIHJldHVy
biBpY2VDaGVja01pbkludGVydmFsOwotICAgIH0KLQotICAgIEBOdWxsYWJsZQotICAgIEBDYWxs
ZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgSW50ZWdlciBnZXRJY2VVbndyaXRh
YmxlVGltZW91dCgpIHsKLSAgICAgIHJldHVybiBpY2VVbndyaXRhYmxlVGltZU1zOwotICAgIH0K
LQotICAgIEBOdWxsYWJsZQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIp
Ci0gICAgSW50ZWdlciBnZXRJY2VVbndyaXRhYmxlTWluQ2hlY2tzKCkgewotICAgICAgcmV0dXJu
IGljZVVud3JpdGFibGVNaW5DaGVja3M7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgQENh
bGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBJbnRlZ2VyIGdldFN0dW5DYW5k
aWRhdGVLZWVwYWxpdmVJbnRlcnZhbCgpIHsKLSAgICAgIHJldHVybiBzdHVuQ2FuZGlkYXRlS2Vl
cGFsaXZlSW50ZXJ2YWxNczsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZp
Z3VyYXRpb24iKQotICAgIGJvb2xlYW4gZ2V0RGlzYWJsZUlQdjZPbldpZmkoKSB7Ci0gICAgICBy
ZXR1cm4gZGlzYWJsZUlQdjZPbldpZmk7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJS
VENDb25maWd1cmF0aW9uIikKLSAgICBpbnQgZ2V0TWF4SVB2Nk5ldHdvcmtzKCkgewotICAgICAg
cmV0dXJuIG1heElQdjZOZXR3b3JrczsKLSAgICB9Ci0KLSAgICBATnVsbGFibGUKLSAgICBAQ2Fs
bGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIFR1cm5DdXN0b21pemVyIGdldFR1
cm5DdXN0b21pemVyKCkgewotICAgICAgcmV0dXJuIHR1cm5DdXN0b21pemVyOwotICAgIH0KLQot
ICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgYm9vbGVhbiBnZXRE
aXNhYmxlSXB2NigpIHsKLSAgICAgIHJldHVybiBkaXNhYmxlSXB2NjsKLSAgICB9Ci0KLSAgICBA
Q2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIGJvb2xlYW4gZ2V0RW5hYmxl
RHNjcCgpIHsKLSAgICAgIHJldHVybiBlbmFibGVEc2NwOwotICAgIH0KLQotICAgIEBDYWxsZWRC
eU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgYm9vbGVhbiBnZXRFbmFibGVDcHVPdmVy
dXNlRGV0ZWN0aW9uKCkgewotICAgICAgcmV0dXJuIGVuYWJsZUNwdU92ZXJ1c2VEZXRlY3Rpb247
Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBi
b29sZWFuIGdldEVuYWJsZVJ0cERhdGFDaGFubmVsKCkgewotICAgICAgcmV0dXJuIGVuYWJsZVJ0
cERhdGFDaGFubmVsOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJh
dGlvbiIpCi0gICAgYm9vbGVhbiBnZXRTdXNwZW5kQmVsb3dNaW5CaXRyYXRlKCkgewotICAgICAg
cmV0dXJuIHN1c3BlbmRCZWxvd01pbkJpdHJhdGU7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0g
ICAgQENhbGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBJbnRlZ2VyIGdldFNj
cmVlbmNhc3RNaW5CaXRyYXRlKCkgewotICAgICAgcmV0dXJuIHNjcmVlbmNhc3RNaW5CaXRyYXRl
OwotICAgIH0KLQotICAgIEBOdWxsYWJsZQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmln
dXJhdGlvbiIpCi0gICAgQm9vbGVhbiBnZXRDb21iaW5lZEF1ZGlvVmlkZW9Cd2UoKSB7Ci0gICAg
ICByZXR1cm4gY29tYmluZWRBdWRpb1ZpZGVvQndlOwotICAgIH0KLQotICAgIEBOdWxsYWJsZQot
ICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgQm9vbGVhbiBnZXRF
bmFibGVEdGxzU3J0cCgpIHsKLSAgICAgIHJldHVybiBlbmFibGVEdGxzU3J0cDsKLSAgICB9Ci0K
LSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIEFkYXB0ZXJUeXBl
IGdldE5ldHdvcmtQcmVmZXJlbmNlKCkgewotICAgICAgcmV0dXJuIG5ldHdvcmtQcmVmZXJlbmNl
OwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAg
U2RwU2VtYW50aWNzIGdldFNkcFNlbWFudGljcygpIHsKLSAgICAgIHJldHVybiBzZHBTZW1hbnRp
Y3M7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAg
ICBib29sZWFuIGdldEFjdGl2ZVJlc2V0U3J0cFBhcmFtcygpIHsKLSAgICAgIHJldHVybiBhY3Rp
dmVSZXNldFNydHBQYXJhbXM7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgQENhbGxlZEJ5
TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBCb29sZWFuIGdldEFsbG93Q29kZWNTd2l0
Y2hpbmcoKSB7Ci0gICAgICByZXR1cm4gYWxsb3dDb2RlY1N3aXRjaGluZzsKLSAgICB9Ci0KLSAg
ICBAQ2FsbGVkQnlOYXRpdmUoIlJUQ0NvbmZpZ3VyYXRpb24iKQotICAgIGJvb2xlYW4gZ2V0VXNl
TWVkaWFUcmFuc3BvcnQoKSB7Ci0gICAgICByZXR1cm4gdXNlTWVkaWFUcmFuc3BvcnQ7Ci0gICAg
fQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9uIikKLSAgICBib29sZWFu
IGdldFVzZU1lZGlhVHJhbnNwb3J0Rm9yRGF0YUNoYW5uZWxzKCkgewotICAgICAgcmV0dXJuIHVz
ZU1lZGlhVHJhbnNwb3J0Rm9yRGF0YUNoYW5uZWxzOwotICAgIH0KLQotICAgIEBOdWxsYWJsZQot
ICAgIEBDYWxsZWRCeU5hdGl2ZSgiUlRDQ29uZmlndXJhdGlvbiIpCi0gICAgQ3J5cHRvT3B0aW9u
cyBnZXRDcnlwdG9PcHRpb25zKCkgewotICAgICAgcmV0dXJuIGNyeXB0b09wdGlvbnM7Ci0gICAg
fQotCi0gICAgQE51bGxhYmxlCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSVENDb25maWd1cmF0aW9u
IikKLSAgICBTdHJpbmcgZ2V0VHVybkxvZ2dpbmdJZCgpIHsKLSAgICAgIHJldHVybiB0dXJuTG9n
Z2luZ0lkOwotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIGZpbmFsIExpc3Q8TWVkaWFTdHJlYW0+
IGxvY2FsU3RyZWFtcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICBwcml2YXRlIGZpbmFsIGxvbmcg
bmF0aXZlUGVlckNvbm5lY3Rpb247Ci0gIHByaXZhdGUgTGlzdDxSdHBTZW5kZXI+IHNlbmRlcnMg
PSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgcHJpdmF0ZSBMaXN0PFJ0cFJlY2VpdmVyPiByZWNlaXZl
cnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgcHJpdmF0ZSBMaXN0PFJ0cFRyYW5zY2VpdmVyPiB0
cmFuc2NlaXZlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAvKioKLSAgICogV3JhcHMgYSBQ
ZWVyQ29ubmVjdGlvbiBjcmVhdGVkIGJ5IHRoZSBmYWN0b3J5LiBDYW4gYmUgdXNlZCBieSBjbGll
bnRzIHRoYXQgd2FudCB0byBpbXBsZW1lbnQKLSAgICogdGhlaXIgUGVlckNvbm5lY3Rpb24gY3Jl
YXRpb24gaW4gSk5JLgotICAgKi8KLSAgcHVibGljIFBlZXJDb25uZWN0aW9uKE5hdGl2ZVBlZXJD
b25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5KSB7Ci0gICAgdGhpcyhmYWN0b3J5LmNyZWF0ZU5hdGl2
ZVBlZXJDb25uZWN0aW9uKCkpOwotICB9Ci0KLSAgUGVlckNvbm5lY3Rpb24obG9uZyBuYXRpdmVQ
ZWVyQ29ubmVjdGlvbikgewotICAgIHRoaXMubmF0aXZlUGVlckNvbm5lY3Rpb24gPSBuYXRpdmVQ
ZWVyQ29ubmVjdGlvbjsKLSAgfQotCi0gIC8vIEpzZXBJbnRlcmZhY2UuCi0gIHB1YmxpYyBTZXNz
aW9uRGVzY3JpcHRpb24gZ2V0TG9jYWxEZXNjcmlwdGlvbigpIHsKLSAgICByZXR1cm4gbmF0aXZl
R2V0TG9jYWxEZXNjcmlwdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFNlc3Npb25EZXNjcmlwdGlv
biBnZXRSZW1vdGVEZXNjcmlwdGlvbigpIHsKLSAgICByZXR1cm4gbmF0aXZlR2V0UmVtb3RlRGVz
Y3JpcHRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBSdGNDZXJ0aWZpY2F0ZVBlbSBnZXRDZXJ0aWZp
Y2F0ZSgpIHsKLSAgICByZXR1cm4gbmF0aXZlR2V0Q2VydGlmaWNhdGUoKTsKLSAgfQotCi0gIHB1
YmxpYyBEYXRhQ2hhbm5lbCBjcmVhdGVEYXRhQ2hhbm5lbChTdHJpbmcgbGFiZWwsIERhdGFDaGFu
bmVsLkluaXQgaW5pdCkgewotICAgIHJldHVybiBuYXRpdmVDcmVhdGVEYXRhQ2hhbm5lbChsYWJl
bCwgaW5pdCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVPZmZlcihTZHBPYnNlcnZlciBv
YnNlcnZlciwgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cykgewotICAgIG5hdGl2ZUNyZWF0
ZU9mZmVyKG9ic2VydmVyLCBjb25zdHJhaW50cyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVh
dGVBbnN3ZXIoU2RwT2JzZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWlu
dHMpIHsKLSAgICBuYXRpdmVDcmVhdGVBbnN3ZXIob2JzZXJ2ZXIsIGNvbnN0cmFpbnRzKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHNldExvY2FsRGVzY3JpcHRpb24oU2RwT2JzZXJ2ZXIgb2JzZXJ2
ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBuYXRpdmVTZXRMb2NhbERlc2NyaXB0
aW9uKG9ic2VydmVyLCBzZHApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVtb3RlRGVzY3Jp
cHRpb24oU2RwT2JzZXJ2ZXIgb2JzZXJ2ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAg
ICBuYXRpdmVTZXRSZW1vdGVEZXNjcmlwdGlvbihvYnNlcnZlciwgc2RwKTsKLSAgfQotCi0gIC8q
KgotICAgKiBFbmFibGVzL2Rpc2FibGVzIHBsYXlvdXQgb2YgcmVjZWl2ZWQgYXVkaW8gc3RyZWFt
cy4gRW5hYmxlZCBieSBkZWZhdWx0LgotICAgKgotICAgKiBOb3RlIHRoYXQgZXZlbiBpZiBwbGF5
b3V0IGlzIGVuYWJsZWQsIHN0cmVhbXMgd2lsbCBvbmx5IGJlIHBsYXllZCBvdXQgaWYKLSAgICog
dGhlIGFwcHJvcHJpYXRlIFNEUCBpcyBhbHNvIGFwcGxpZWQuIFRoZSBtYWluIHB1cnBvc2Ugb2Yg
dGhpcyBBUEkgaXMgdG8KLSAgICogYmUgYWJsZSB0byBjb250cm9sIHRoZSBleGFjdCB0aW1lIHdo
ZW4gYXVkaW8gcGxheW91dCBzdGFydHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBdWRpb1Bs
YXlvdXQoYm9vbGVhbiBwbGF5b3V0KSB7Ci0gICAgbmF0aXZlU2V0QXVkaW9QbGF5b3V0KHBsYXlv
dXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuYWJsZXMvZGlzYWJsZXMgcmVjb3JkaW5nIG9mIHRy
YW5zbWl0dGVkIGF1ZGlvIHN0cmVhbXMuIEVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICoKLSAgICog
Tm90ZSB0aGF0IGV2ZW4gaWYgcmVjb3JkaW5nIGlzIGVuYWJsZWQsIHN0cmVhbXMgd2lsbCBvbmx5
IGJlIHJlY29yZGVkIGlmCi0gICAqIHRoZSBhcHByb3ByaWF0ZSBTRFAgaXMgYWxzbyBhcHBsaWVk
LiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvCi0gICAqIGJlIGFibGUgdG8gY29u
dHJvbCB0aGUgZXhhY3QgdGltZSB3aGVuIGF1ZGlvIHJlY29yZGluZyBzdGFydHMuCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBzZXRBdWRpb1JlY29yZGluZyhib29sZWFuIHJlY29yZGluZykgewotICAg
IG5hdGl2ZVNldEF1ZGlvUmVjb3JkaW5nKHJlY29yZGluZyk7Ci0gIH0KLQotICBwdWJsaWMgYm9v
bGVhbiBzZXRDb25maWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgcmV0
dXJuIG5hdGl2ZVNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBib29s
ZWFuIGFkZEljZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgcmV0dXJu
IG5hdGl2ZUFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUuc2RwTWlkLCBjYW5kaWRhdGUuc2RwTUxp
bmVJbmRleCwgY2FuZGlkYXRlLnNkcCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVJ
Y2VDYW5kaWRhdGVzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICByZXR1
cm4gbmF0aXZlUmVtb3ZlSWNlQ2FuZGlkYXRlcyhjYW5kaWRhdGVzKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBBZGRzIGEgbmV3IE1lZGlhU3RyZWFtIHRvIGJlIHNlbnQgb24gdGhpcyBwZWVyIGNvbm5l
Y3Rpb24uCi0gICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBTZHBT
ZW1hbnRpY3MuVU5JRklFRF9QTEFOLiBQbGVhc2UKLSAgICogdXNlIGFkZFRyYWNrIGluc3RlYWQu
Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBhZGRTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7
Ci0gICAgYm9vbGVhbiByZXQgPSBuYXRpdmVBZGRMb2NhbFN0cmVhbShzdHJlYW0uZ2V0TmF0aXZl
TWVkaWFTdHJlYW0oKSk7Ci0gICAgaWYgKCFyZXQpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgbG9jYWxTdHJlYW1zLmFkZChzdHJlYW0pOwotICAgIHJldHVybiB0cnVlOwotICB9
Ci0KLSAgLyoqCi0gICAqIFJlbW92ZXMgdGhlIGdpdmVuIG1lZGlhIHN0cmVhbSBmcm9tIHRoaXMg
cGVlciBjb25uZWN0aW9uLgotICAgKiBUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGgg
U2RwU2VtYW50aWNzLlVOSUZJRURfUExBTi4gUGxlYXNlIHVzZQotICAgKiByZW1vdmVUcmFjayBp
bnN0ZWFkLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtIHN0
cmVhbSkgewotICAgIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKHN0cmVhbS5nZXROYXRpdmVNZWRp
YVN0cmVhbSgpKTsKLSAgICBsb2NhbFN0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci0gIH0KLQotICAv
KioKLSAgICogQ3JlYXRlcyBhbiBSdHBTZW5kZXIgd2l0aG91dCBhIHRyYWNrLgotICAgKgotICAg
KiA8cD5UaGlzIG1ldGhvZCBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gY2F1c2UgdGhlIFBlZXJD
b25uZWN0aW9uIHRvIG5lZ290aWF0ZQotICAgKiBzZW5kaW5nL3JlY2VpdmluZyBhIHNwZWNpZmlj
IG1lZGlhIHR5cGUsIGJ1dCB3aXRob3V0IGhhdmluZyBhIHRyYWNrIHRvCi0gICAqIHNlbmQgeWV0
LgotICAgKgotICAgKiA8cD5XaGVuIHRoZSBhcHBsaWNhdGlvbiBkb2VzIHdhbnQgdG8gYmVnaW4g
c2VuZGluZyBhIHRyYWNrLCBpdCBjYW4gY2FsbAotICAgKiBSdHBTZW5kZXIuc2V0VHJhY2ssIHdo
aWNoIGRvZXNuJ3QgcmVxdWlyZSBhbnkgYWRkaXRpb25hbCBTRFAgbmVnb3RpYXRpb24uCi0gICAq
Ci0gICAqIDxwPkV4YW1wbGUgdXNlOgotICAgKiA8cHJlPgotICAgKiB7QGNvZGUKLSAgICogYXVk
aW9TZW5kZXIgPSBwYy5jcmVhdGVTZW5kZXIoImF1ZGlvIiwgInN0cmVhbTEiKTsKLSAgICogdmlk
ZW9TZW5kZXIgPSBwYy5jcmVhdGVTZW5kZXIoInZpZGVvIiwgInN0cmVhbTEiKTsKLSAgICogLy8g
RG8gbm9ybWFsIFNEUCBvZmZlci9hbnN3ZXIsIHdoaWNoIHdpbGwga2ljayBvZmYgSUNFL0RUTFMg
YW5kIG5lZ290aWF0ZQotICAgKiAvLyBtZWRpYSBwYXJhbWV0ZXJzLi4uLgotICAgKiAvLyBMYXRl
ciwgd2hlbiB0aGUgZW5kcG9pbnQgaXMgcmVhZHkgdG8gYWN0dWFsbHkgYmVnaW4gc2VuZGluZzoK
LSAgICogYXVkaW9TZW5kZXIuc2V0VHJhY2soYXVkaW9UcmFjaywgZmFsc2UpOwotICAgKiB2aWRl
b1NlbmRlci5zZXRUcmFjayh2aWRlb1RyYWNrLCBmYWxzZSk7Ci0gICAqIH0KLSAgICogPC9wcmU+
Ci0gICAqIDxwPk5vdGU6IFRoaXMgY29ycmVzcG9uZHMgbW9zdCBjbG9zZWx5IHRvICJhZGRUcmFu
c2NlaXZlciIgaW4gdGhlIG9mZmljaWFsCi0gICAqIFdlYlJUQyBBUEksIGluIHRoYXQgaXQgY3Jl
YXRlcyBhIHNlbmRlciB3aXRob3V0IGEgdHJhY2suIEl0IHdhcwotICAgKiBpbXBsZW1lbnRlZCBi
ZWZvcmUgYWRkVHJhbnNjZWl2ZXIgYmVjYXVzZSBpdCBwcm92aWRlcyB1c2VmdWwKLSAgICogZnVu
Y3Rpb25hbGl0eSwgYW5kIHByb3Blcmx5IGltcGxlbWVudGluZyB0cmFuc2NlaXZlcnMgd291bGQg
aGF2ZSByZXF1aXJlZAotICAgKiBhIGdyZWF0IGRlYWwgbW9yZSB3b3JrLgotICAgKgotICAgKiA8
cD5Ob3RlOiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggU2RwU2VtYW50aWNzLlBMQU5fQiBz
cGVjaWZpZWQuIFBsZWFzZSB1c2UKLSAgICogYWRkVHJhbnNjZWl2ZXIgaW5zdGVhZC4KLSAgICoK
LSAgICogQHBhcmFtIGtpbmQgICAgICBDb3JyZXNwb25kcyB0byBNZWRpYVN0cmVhbVRyYWNrIGtp
bmRzIChtdXN0IGJlICJhdWRpbyIgb3IKLSAgICogICAgICAgICAgICAgICAgICAidmlkZW8iKS4K
LSAgICogQHBhcmFtIHN0cmVhbV9pZCBUaGUgSUQgb2YgdGhlIE1lZGlhU3RyZWFtIHRoYXQgdGhp
cyBzZW5kZXIncyB0cmFjayB3aWxsCi0gICAqICAgICAgICAgICAgICAgICAgYmUgYXNzb2NpYXRl
ZCB3aXRoIHdoZW4gU0RQIGlzIGFwcGxpZWQgdG8gdGhlIHJlbW90ZQotICAgKiAgICAgICAgICAg
ICAgICAgIFBlZXJDb25uZWN0aW9uLiBJZiBjcmVhdGVTZW5kZXIgaXMgdXNlZCB0byBjcmVhdGUg
YW4KLSAgICogICAgICAgICAgICAgICAgICBhdWRpbyBhbmQgdmlkZW8gc2VuZGVyIHRoYXQgc2hv
dWxkIGJlIHN5bmNocm9uaXplZCwgdGhleQotICAgKiAgICAgICAgICAgICAgICAgIHNob3VsZCB1
c2UgdGhlIHNhbWUgc3RyZWFtIElELgotICAgKiBAcmV0dXJuICAgICAgICAgIEEgbmV3IFJ0cFNl
bmRlciBvYmplY3QgaWYgc3VjY2Vzc2Z1bCwgb3IgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBw
dWJsaWMgUnRwU2VuZGVyIGNyZWF0ZVNlbmRlcihTdHJpbmcga2luZCwgU3RyaW5nIHN0cmVhbV9p
ZCkgewotICAgIFJ0cFNlbmRlciBuZXdTZW5kZXIgPSBuYXRpdmVDcmVhdGVTZW5kZXIoa2luZCwg
c3RyZWFtX2lkKTsKLSAgICBpZiAobmV3U2VuZGVyICE9IG51bGwpIHsKLSAgICAgIHNlbmRlcnMu
YWRkKG5ld1NlbmRlcik7Ci0gICAgfQotICAgIHJldHVybiBuZXdTZW5kZXI7Ci0gIH0KLQotICAv
KioKLSAgICogR2V0cyBhbGwgUnRwU2VuZGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwZWVyIGNv
bm5lY3Rpb24uCi0gICAqIE5vdGUgdGhhdCBjYWxsaW5nIGdldFNlbmRlcnMgd2lsbCBkaXNwb3Nl
IG9mIHRoZSBzZW5kZXJzIHByZXZpb3VzbHkKLSAgICogcmV0dXJuZWQuCi0gICAqLwotICBwdWJs
aWMgTGlzdDxSdHBTZW5kZXI+IGdldFNlbmRlcnMoKSB7Ci0gICAgZm9yIChSdHBTZW5kZXIgc2Vu
ZGVyIDogc2VuZGVycykgewotICAgICAgc2VuZGVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgc2Vu
ZGVycyA9IG5hdGl2ZUdldFNlbmRlcnMoKTsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2Rp
ZmlhYmxlTGlzdChzZW5kZXJzKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGFsbCBSdHBSZWNl
aXZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGVlciBjb25uZWN0aW9uLgotICAgKiBOb3RlIHRo
YXQgY2FsbGluZyBnZXRSZWNlaXZlcnMgd2lsbCBkaXNwb3NlIG9mIHRoZSByZWNlaXZlcnMgcHJl
dmlvdXNseQotICAgKiByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0PFJ0cFJlY2VpdmVy
PiBnZXRSZWNlaXZlcnMoKSB7Ci0gICAgZm9yIChSdHBSZWNlaXZlciByZWNlaXZlciA6IHJlY2Vp
dmVycykgewotICAgICAgcmVjZWl2ZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICByZWNlaXZlcnMg
PSBuYXRpdmVHZXRSZWNlaXZlcnMoKTsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlh
YmxlTGlzdChyZWNlaXZlcnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgYWxsIFJ0cFRyYW5z
Y2VpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwZWVyIGNvbm5lY3Rpb24uCi0gICAqIE5vdGUg
dGhhdCBjYWxsaW5nIGdldFRyYW5zY2VpdmVycyB3aWxsIGRpc3Bvc2Ugb2YgdGhlIHRyYW5zY2Vp
dmVycyBwcmV2aW91c2x5Ci0gICAqIHJldHVybmVkLgotICAgKiBOb3RlOiBUaGlzIGlzIG9ubHkg
YXZhaWxhYmxlIHdpdGggU2RwU2VtYW50aWNzLlVOSUZJRURfUExBTiBzcGVjaWZpZWQuCi0gICAq
LwotICBwdWJsaWMgTGlzdDxSdHBUcmFuc2NlaXZlcj4gZ2V0VHJhbnNjZWl2ZXJzKCkgewotICAg
IGZvciAoUnRwVHJhbnNjZWl2ZXIgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnMpIHsKLSAgICAg
IHRyYW5zY2VpdmVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgdHJhbnNjZWl2ZXJzID0gbmF0aXZl
R2V0VHJhbnNjZWl2ZXJzKCk7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxp
c3QodHJhbnNjZWl2ZXJzKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgbmV3IG1lZGlhIHN0
cmVhbSB0cmFjayB0byBiZSBzZW50IG9uIHRoaXMgcGVlciBjb25uZWN0aW9uLCBhbmQgcmV0dXJu
cwotICAgKiB0aGUgbmV3bHkgY3JlYXRlZCBSdHBTZW5kZXIuIElmIHN0cmVhbUlkcyBhcmUgc3Bl
Y2lmaWVkLCB0aGUgUnRwU2VuZGVyIHdpbGwKLSAgICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBz
dHJlYW1zIHNwZWNpZmllZCBpbiB0aGUgc3RyZWFtSWRzIGxpc3QuCi0gICAqCi0gICAqIEB0aHJv
d3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGFuIGVycm9yIGFjY29ycyBpbiBDKysgYWRkVHJh
Y2suCi0gICAqICAgICAgICAgQW4gZXJyb3IgY2FuIG9jY3VyIGlmOgotICAgKiAgICAgICAgICAg
LSBBIHNlbmRlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhlIHRyYWNrLgotICAgKiAgICAgICAgICAg
LSBUaGUgcGVlciBjb25uZWN0aW9uIGlzIGNsb3NlZC4KLSAgICovCi0gIHB1YmxpYyBSdHBTZW5k
ZXIgYWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayB0cmFjaykgewotICAgIHJldHVybiBhZGRUcmFj
ayh0cmFjaywgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICB9Ci0KLSAgcHVibGljIFJ0cFNl
bmRlciBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrIHRyYWNrLCBMaXN0PFN0cmluZz4gc3RyZWFt
SWRzKSB7Ci0gICAgaWYgKHRyYWNrID09IG51bGwgfHwgc3RyZWFtSWRzID09IG51bGwpIHsKLSAg
ICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiTm8gTWVkaWFTdHJlYW1UcmFjayBz
cGVjaWZpZWQgaW4gYWRkVHJhY2suIik7Ci0gICAgfQotICAgIFJ0cFNlbmRlciBuZXdTZW5kZXIg
PSBuYXRpdmVBZGRUcmFjayh0cmFjay5nZXROYXRpdmVNZWRpYVN0cmVhbVRyYWNrKCksIHN0cmVh
bUlkcyk7Ci0gICAgaWYgKG5ld1NlbmRlciA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxs
ZWdhbFN0YXRlRXhjZXB0aW9uKCJDKysgYWRkVHJhY2sgZmFpbGVkLiIpOwotICAgIH0KLSAgICBz
ZW5kZXJzLmFkZChuZXdTZW5kZXIpOwotICAgIHJldHVybiBuZXdTZW5kZXI7Ci0gIH0KLQotICAv
KioKLSAgICogU3RvcHMgc2VuZGluZyBtZWRpYSBmcm9tIHNlbmRlci4gVGhlIHNlbmRlciB3aWxs
IHN0aWxsIGFwcGVhciBpbiBnZXRTZW5kZXJzLiBGdXR1cmUKLSAgICogY2FsbHMgdG8gY3JlYXRl
T2ZmZXIgd2lsbCBtYXJrIHRoZSBtIHNlY3Rpb24gZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5z
Y2VpdmVyIGFzCi0gICAqIHJlY2VpdmUgb25seSBvciBpbmFjdGl2ZSwgYXMgZGVmaW5lZCBpbiBK
U0VQLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHJl
bW92ZVRyYWNrKFJ0cFNlbmRlciBzZW5kZXIpIHsKLSAgICBpZiAoc2VuZGVyID09IG51bGwpIHsK
LSAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiTm8gUnRwU2VuZGVyIHNwZWNp
ZmllZCBmb3IgcmVtb3ZlVHJhY2suIik7Ci0gICAgfQotICAgIHJldHVybiBuYXRpdmVSZW1vdmVU
cmFjayhzZW5kZXIuZ2V0TmF0aXZlUnRwU2VuZGVyKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENy
ZWF0ZXMgYSBuZXcgUnRwVHJhbnNjZWl2ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIHNldCBvZiB0cmFu
c2NlaXZlcnMuIEFkZGluZyBhCi0gICAqIHRyYW5zY2VpdmVyIHdpbGwgY2F1c2UgZnV0dXJlIGNh
bGxzIHRvIENyZWF0ZU9mZmVyIHRvIGFkZCBhIG1lZGlhIGRlc2NyaXB0aW9uCi0gICAqIGZvciB0
aGUgY29ycmVzcG9uZGluZyB0cmFuc2NlaXZlci4KLSAgICoKLSAgICogPHA+VGhlIGluaXRpYWwg
dmFsdWUgb2YgfG1pZHwgaW4gdGhlIHJldHVybmVkIHRyYW5zY2VpdmVyIGlzIG51bGwuIFNldHRp
bmcgYQotICAgKiBuZXcgc2Vzc2lvbiBkZXNjcmlwdGlvbiBtYXkgY2hhbmdlIGl0IHRvIGEgbm9u
LW51bGwgdmFsdWUuCi0gICAqCi0gICAqIDxwPmh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJydGMt
cGMvI2RvbS1ydGNwZWVyY29ubmVjdGlvbi1hZGR0cmFuc2NlaXZlcgotICAgKgotICAgKiA8cD5J
ZiBhIE1lZGlhU3RyZWFtVHJhY2sgaXMgc3BlY2lmaWVkIHRoZW4gYSB0cmFuc2NlaXZlciB3aWxs
IGJlIGFkZGVkIHdpdGggYQotICAgKiBzZW5kZXIgc2V0IHRvIHRyYW5zbWl0IHRoZSBnaXZlbiB0
cmFjay4gVGhlIGtpbmQKLSAgICogb2YgdGhlIHRyYW5zY2VpdmVyIChhbmQgc2VuZGVyL3JlY2Vp
dmVyKSB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUga2luZCBvZgotICAgKiB0aGUgdHJhY2suCi0g
ICAqCi0gICAqIDxwPklmIE1lZGlhVHlwZSBpcyBzcGVjaWZpZWQgdGhlbiBhIHRyYW5zY2VpdmVy
IHdpbGwgYmUgYWRkZWQgYmFzZWQgdXBvbiB0aGF0IHR5cGUuCi0gICAqIFRoaXMgY2FuIGJlIGVp
dGhlciBNRURJQV9UWVBFX0FVRElPIG9yIE1FRElBX1RZUEVfVklERU8uCi0gICAqCi0gICAqIDxw
Pk9wdGlvbmFsbHksIGFuIFJ0cFRyYW5zY2VpdmVySW5pdCBzdHJ1Y3R1cmUgY2FuIGJlIHNwZWNp
ZmllZCB0byBjb25maWd1cmUKLSAgICogdGhlIHRyYW5zY2VpdmVyIGZyb20gY29uc3RydWN0aW9u
LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgdHJhbnNjZWl2ZXIgd2lsbAotICAgKiBkZWZhdWx0IHRv
IGhhdmluZyBhIGRpcmVjdGlvbiBvZiBrU2VuZFJlY3YgYW5kIG5vdCBiZSBwYXJ0IG9mIGFueSBz
dHJlYW1zLgotICAgKgotICAgKiA8cD5Ob3RlOiBUaGVzZSBtZXRob2RzIGFyZSBvbmx5IGF2YWls
YWJsZSB3aXRoIFNkcFNlbWFudGljcy5VTklGSUVEX1BMQU4gc3BlY2lmaWVkLgotICAgKiBAdGhy
b3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiBhbiBlcnJvciBhY2NvcnMgaW4gQysrIGFkZFRy
YW5zY2VpdmVyCi0gICAqLwotICBwdWJsaWMgUnRwVHJhbnNjZWl2ZXIgYWRkVHJhbnNjZWl2ZXIo
TWVkaWFTdHJlYW1UcmFjayB0cmFjaykgewotICAgIHJldHVybiBhZGRUcmFuc2NlaXZlcih0cmFj
aywgbmV3IFJ0cFRyYW5zY2VpdmVyLlJ0cFRyYW5zY2VpdmVySW5pdCgpKTsKLSAgfQotCi0gIHB1
YmxpYyBSdHBUcmFuc2NlaXZlciBhZGRUcmFuc2NlaXZlcigKLSAgICAgIE1lZGlhU3RyZWFtVHJh
Y2sgdHJhY2ssIEBOdWxsYWJsZSBSdHBUcmFuc2NlaXZlci5SdHBUcmFuc2NlaXZlckluaXQgaW5p
dCkgewotICAgIGlmICh0cmFjayA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50
ZXJFeGNlcHRpb24oIk5vIE1lZGlhU3RyZWFtVHJhY2sgc3BlY2lmaWVkIGZvciBhZGRUcmFuc2Nl
aXZlci4iKTsKLSAgICB9Ci0gICAgaWYgKGluaXQgPT0gbnVsbCkgewotICAgICAgaW5pdCA9IG5l
dyBSdHBUcmFuc2NlaXZlci5SdHBUcmFuc2NlaXZlckluaXQoKTsKLSAgICB9Ci0gICAgUnRwVHJh
bnNjZWl2ZXIgbmV3VHJhbnNjZWl2ZXIgPQotICAgICAgICBuYXRpdmVBZGRUcmFuc2NlaXZlcldp
dGhUcmFjayh0cmFjay5nZXROYXRpdmVNZWRpYVN0cmVhbVRyYWNrKCksIGluaXQpOwotICAgIGlm
IChuZXdUcmFuc2NlaXZlciA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJDKysgYWRkVHJhbnNjZWl2ZXIgZmFpbGVkLiIpOwotICAgIH0KLSAgICB0cmFu
c2NlaXZlcnMuYWRkKG5ld1RyYW5zY2VpdmVyKTsKLSAgICByZXR1cm4gbmV3VHJhbnNjZWl2ZXI7
Ci0gIH0KLQotICBwdWJsaWMgUnRwVHJhbnNjZWl2ZXIgYWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJl
YW1UcmFjay5NZWRpYVR5cGUgbWVkaWFUeXBlKSB7Ci0gICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVy
KG1lZGlhVHlwZSwgbmV3IFJ0cFRyYW5zY2VpdmVyLlJ0cFRyYW5zY2VpdmVySW5pdCgpKTsKLSAg
fQotCi0gIHB1YmxpYyBSdHBUcmFuc2NlaXZlciBhZGRUcmFuc2NlaXZlcigKLSAgICAgIE1lZGlh
U3RyZWFtVHJhY2suTWVkaWFUeXBlIG1lZGlhVHlwZSwgQE51bGxhYmxlIFJ0cFRyYW5zY2VpdmVy
LlJ0cFRyYW5zY2VpdmVySW5pdCBpbml0KSB7Ci0gICAgaWYgKG1lZGlhVHlwZSA9PSBudWxsKSB7
Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oIk5vIE1lZGlhVHlwZSBzcGVj
aWZpZWQgZm9yIGFkZFRyYW5zY2VpdmVyLiIpOwotICAgIH0KLSAgICBpZiAoaW5pdCA9PSBudWxs
KSB7Ci0gICAgICBpbml0ID0gbmV3IFJ0cFRyYW5zY2VpdmVyLlJ0cFRyYW5zY2VpdmVySW5pdCgp
OwotICAgIH0KLSAgICBSdHBUcmFuc2NlaXZlciBuZXdUcmFuc2NlaXZlciA9IG5hdGl2ZUFkZFRy
YW5zY2VpdmVyT2ZUeXBlKG1lZGlhVHlwZSwgaW5pdCk7Ci0gICAgaWYgKG5ld1RyYW5zY2VpdmVy
ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkMrKyBh
ZGRUcmFuc2NlaXZlciBmYWlsZWQuIik7Ci0gICAgfQotICAgIHRyYW5zY2VpdmVycy5hZGQobmV3
VHJhbnNjZWl2ZXIpOwotICAgIHJldHVybiBuZXdUcmFuc2NlaXZlcjsKLSAgfQotCi0gIC8vIE9s
ZGVyLCBub24tc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0U3RhdHMuCi0gIEBEZXByZWNh
dGVkCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXRzKFN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIsIEBO
dWxsYWJsZSBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZU9sZEdl
dFN0YXRzKG9ic2VydmVyLCAodHJhY2sgPT0gbnVsbCkgPyAwIDogdHJhY2suZ2V0TmF0aXZlTWVk
aWFTdHJlYW1UcmFjaygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHN0YXRzIHVzaW5nIHRo
ZSBuZXcgc3RhdHMgY29sbGVjdGlvbiBBUEksIHNlZSB3ZWJydGMvYXBpL3N0YXRzLy4gVGhlc2UK
LSAgICogd2lsbCByZXBsYWNlIG9sZCBzdGF0cyBjb2xsZWN0aW9uIEFQSSB3aGVuIHRoZSBuZXcg
QVBJIGhhcyBtYXR1cmVkIGVub3VnaC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGdldFN0YXRzKFJU
Q1N0YXRzQ29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICBuYXRpdmVOZXdHZXRTdGF0
cyhjYWxsYmFjayk7Ci0gIH0KLQotICAvKioKLSAgICogTGltaXRzIHRoZSBiYW5kd2lkdGggYWxs
b2NhdGVkIGZvciBhbGwgUlRQIHN0cmVhbXMgc2VudCBieSB0aGlzCi0gICAqIFBlZXJDb25uZWN0
aW9uLiBQYXNzIG51bGwgdG8gbGVhdmUgYSB2YWx1ZSB1bmNoYW5nZWQuCi0gICAqLwotICBwdWJs
aWMgYm9vbGVhbiBzZXRCaXRyYXRlKEludGVnZXIgbWluLCBJbnRlZ2VyIGN1cnJlbnQsIEludGVn
ZXIgbWF4KSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVNldEJpdHJhdGUobWluLCBjdXJyZW50LCBtYXgp
OwotICB9Ci0KLSAgLyoqCi0gICAqIFN0YXJ0cyByZWNvcmRpbmcgYW4gUlRDIGV2ZW50IGxvZy4K
LSAgICoKLSAgICogT3duZXJzaGlwIG9mIHRoZSBmaWxlIGlzIHRyYW5zZmVyZWQgdG8gdGhlIG5h
dGl2ZSBjb2RlLiBJZiBhbiBSVEMgZXZlbnQKLSAgICogbG9nIGlzIGFscmVhZHkgYmVpbmcgcmVj
b3JkZWQsIGl0IHdpbGwgYmUgc3RvcHBlZCBhbmQgYSBuZXcgb25lIHdpbGwgc3RhcnQKLSAgICog
dXNpbmcgdGhlIHByb3ZpZGVkIGZpbGUuIExvZ2dpbmcgd2lsbCBjb250aW51ZSB1bnRpbCB0aGUg
c3RvcFJ0Y0V2ZW50TG9nCi0gICAqIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIG1heF9zaXplX2J5
dGVzIGFyZ3VtZW50IGlzIGlnbm9yZWQsIGl0IGlzIGFkZGVkCi0gICAqIGZvciBmdXR1cmUgdXNl
LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gc3RhcnRSdGNFdmVudExvZyhpbnQgZmlsZV9kZXNj
cmlwdG9yLCBpbnQgbWF4X3NpemVfYnl0ZXMpIHsKLSAgICByZXR1cm4gbmF0aXZlU3RhcnRSdGNF
dmVudExvZyhmaWxlX2Rlc2NyaXB0b3IsIG1heF9zaXplX2J5dGVzKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBTdG9wcyByZWNvcmRpbmcgYW4gUlRDIGV2ZW50IGxvZy4gSWYgbm8gUlRDIGV2ZW50IGxv
ZyBpcyBjdXJyZW50bHkgYmVpbmcKLSAgICogcmVjb3JkZWQsIHRoaXMgY2FsbCB3aWxsIGhhdmUg
bm8gZWZmZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcFJ0Y0V2ZW50TG9nKCkgewotICAg
IG5hdGl2ZVN0b3BSdGNFdmVudExvZygpOwotICB9Ci0KLSAgLy8gVE9ETyhmaXNjaG1hbik6IGFk
ZCBzdXBwb3J0IGZvciBEVE1GLXJlbGF0ZWQgbWV0aG9kcyBvbmNlIHRoYXQgQVBJCi0gIC8vIHN0
YWJpbGl6ZXMuCi0gIHB1YmxpYyBTaWduYWxpbmdTdGF0ZSBzaWduYWxpbmdTdGF0ZSgpIHsKLSAg
ICByZXR1cm4gbmF0aXZlU2lnbmFsaW5nU3RhdGUoKTsKLSAgfQotCi0gIHB1YmxpYyBJY2VDb25u
ZWN0aW9uU3RhdGUgaWNlQ29ubmVjdGlvblN0YXRlKCkgewotICAgIHJldHVybiBuYXRpdmVJY2VD
b25uZWN0aW9uU3RhdGUoKTsKLSAgfQotCi0gIHB1YmxpYyBQZWVyQ29ubmVjdGlvblN0YXRlIGNv
bm5lY3Rpb25TdGF0ZSgpIHsKLSAgICByZXR1cm4gbmF0aXZlQ29ubmVjdGlvblN0YXRlKCk7Ci0g
IH0KLQotICBwdWJsaWMgSWNlR2F0aGVyaW5nU3RhdGUgaWNlR2F0aGVyaW5nU3RhdGUoKSB7Ci0g
ICAgcmV0dXJuIG5hdGl2ZUljZUdhdGhlcmluZ1N0YXRlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBjbG9zZSgpIHsKLSAgICBuYXRpdmVDbG9zZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEZyZWUg
bmF0aXZlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQZWVyQ29ubmVjdGlvbiBpbnN0
YW5jZS4KLSAgICoKLSAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIHJlZmVyZW5jZSBjb3VudCBm
cm9tIHRoZSBDKysgUGVlckNvbm5lY3Rpb24gb2JqZWN0LAotICAgKiB3aGljaCBzaG91bGQgcmVz
dWx0IGluIGl0IGJlaW5nIGRlc3Ryb3llZC4gSXQgYWxzbyBjYWxscyBlcXVpdmFsZW50Ci0gICAq
ICJkaXNwb3NlIiBtZXRob2RzIG9uIHRoZSBKYXZhIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhpcyBQ
ZWVyQ29ubmVjdGlvbgotICAgKiAoc3RyZWFtcywgc2VuZGVycywgcmVjZWl2ZXJzKSwgc3VjaCB0
aGF0IHRoZWlyIGFzc29jaWF0ZWQgQysrIG9iamVjdHMKLSAgICogd2lsbCBhbHNvIGJlIGRlc3Ry
b3llZC4KLSAgICoKLSAgICogPHA+Tm90ZSB0aGF0IHRoaXMgbWV0aG9kIGNhbm5vdCBiZSBzYWZl
bHkgY2FsbGVkIGZyb20gYW4gb2JzZXJ2ZXIgY2FsbGJhY2sKLSAgICogKFBlZXJDb25uZWN0aW9u
Lk9ic2VydmVyLCBEYXRhQ2hhbm5lbC5PYnNlcnZlciwgZXRjLikuIElmIHlvdSB3YW50IHRvLCBm
b3IKLSAgICogZXhhbXBsZSwgZGVzdHJveSB0aGUgUGVlckNvbm5lY3Rpb24gYWZ0ZXIgYW4gIklD
RSBmYWlsZWQiIGNhbGxiYWNrLCB5b3UKLSAgICogbXVzdCBkbyB0aGlzIGFzeW5jaHJvbm91c2x5
IChpbiBvdGhlciB3b3JkcywgdW53aW5kIHRoZSBzdGFjayBmaXJzdCkuIFNlZQotICAgKiA8YSBo
cmVmPSJodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9
MzcyMSI+YnVnCi0gICAqIDM3MjE8L2E+IGZvciBtb3JlIGRldGFpbHMuCi0gICAqLwotICBwdWJs
aWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNsb3NlKCk7Ci0gICAgZm9yIChNZWRpYVN0cmVhbSBz
dHJlYW0gOiBsb2NhbFN0cmVhbXMpIHsKLSAgICAgIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKHN0
cmVhbS5nZXROYXRpdmVNZWRpYVN0cmVhbSgpKTsKLSAgICAgIHN0cmVhbS5kaXNwb3NlKCk7Ci0g
ICAgfQotICAgIGxvY2FsU3RyZWFtcy5jbGVhcigpOwotICAgIGZvciAoUnRwU2VuZGVyIHNlbmRl
ciA6IHNlbmRlcnMpIHsKLSAgICAgIHNlbmRlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIHNlbmRl
cnMuY2xlYXIoKTsKLSAgICBmb3IgKFJ0cFJlY2VpdmVyIHJlY2VpdmVyIDogcmVjZWl2ZXJzKSB7
Ci0gICAgICByZWNlaXZlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIGZvciAoUnRwVHJhbnNjZWl2
ZXIgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnMpIHsKLSAgICAgIHRyYW5zY2VpdmVyLmRpc3Bv
c2UoKTsKLSAgICB9Ci0gICAgdHJhbnNjZWl2ZXJzLmNsZWFyKCk7Ci0gICAgcmVjZWl2ZXJzLmNs
ZWFyKCk7Ci0gICAgbmF0aXZlRnJlZU93bmVkUGVlckNvbm5lY3Rpb24obmF0aXZlUGVlckNvbm5l
Y3Rpb24pOwotICB9Ci0KLSAgLyoqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuYXRpdmUgd2Vi
cnRjOjpQZWVyQ29ubmVjdGlvbkludGVyZmFjZS4gKi8KLSAgcHVibGljIGxvbmcgZ2V0TmF0aXZl
UGVlckNvbm5lY3Rpb24oKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldE5hdGl2ZVBlZXJDb25uZWN0
aW9uKCk7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgbG9uZyBnZXROYXRpdmVPd25lZFBl
ZXJDb25uZWN0aW9uKCkgewotICAgIHJldHVybiBuYXRpdmVQZWVyQ29ubmVjdGlvbjsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgbG9uZyBjcmVhdGVOYXRpdmVQZWVyQ29ubmVjdGlvbk9ic2VydmVy
KE9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZVBlZXJDb25uZWN0
aW9uT2JzZXJ2ZXIob2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgbG9uZyBuYXRp
dmVHZXROYXRpdmVQZWVyQ29ubmVjdGlvbigpOwotICBwcml2YXRlIG5hdGl2ZSBTZXNzaW9uRGVz
Y3JpcHRpb24gbmF0aXZlR2V0TG9jYWxEZXNjcmlwdGlvbigpOwotICBwcml2YXRlIG5hdGl2ZSBT
ZXNzaW9uRGVzY3JpcHRpb24gbmF0aXZlR2V0UmVtb3RlRGVzY3JpcHRpb24oKTsKLSAgcHJpdmF0
ZSBuYXRpdmUgUnRjQ2VydGlmaWNhdGVQZW0gbmF0aXZlR2V0Q2VydGlmaWNhdGUoKTsKLSAgcHJp
dmF0ZSBuYXRpdmUgRGF0YUNoYW5uZWwgbmF0aXZlQ3JlYXRlRGF0YUNoYW5uZWwoU3RyaW5nIGxh
YmVsLCBEYXRhQ2hhbm5lbC5Jbml0IGluaXQpOwotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2
ZUNyZWF0ZU9mZmVyKFNkcE9ic2VydmVyIG9ic2VydmVyLCBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0
cmFpbnRzKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDcmVhdGVBbnN3ZXIoU2RwT2Jz
ZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMpOwotICBwcml2YXRl
IG5hdGl2ZSB2b2lkIG5hdGl2ZVNldExvY2FsRGVzY3JpcHRpb24oU2RwT2JzZXJ2ZXIgb2JzZXJ2
ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2
ZVNldFJlbW90ZURlc2NyaXB0aW9uKFNkcE9ic2VydmVyIG9ic2VydmVyLCBTZXNzaW9uRGVzY3Jp
cHRpb24gc2RwKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVTZXRBdWRpb1BsYXlvdXQo
Ym9vbGVhbiBwbGF5b3V0KTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVTZXRBdWRpb1Jl
Y29yZGluZyhib29sZWFuIHJlY29yZGluZyk7Ci0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0
aXZlU2V0Qml0cmF0ZShJbnRlZ2VyIG1pbiwgSW50ZWdlciBjdXJyZW50LCBJbnRlZ2VyIG1heCk7
Ci0gIHByaXZhdGUgbmF0aXZlIFNpZ25hbGluZ1N0YXRlIG5hdGl2ZVNpZ25hbGluZ1N0YXRlKCk7
Ci0gIHByaXZhdGUgbmF0aXZlIEljZUNvbm5lY3Rpb25TdGF0ZSBuYXRpdmVJY2VDb25uZWN0aW9u
U3RhdGUoKTsKLSAgcHJpdmF0ZSBuYXRpdmUgUGVlckNvbm5lY3Rpb25TdGF0ZSBuYXRpdmVDb25u
ZWN0aW9uU3RhdGUoKTsKLSAgcHJpdmF0ZSBuYXRpdmUgSWNlR2F0aGVyaW5nU3RhdGUgbmF0aXZl
SWNlR2F0aGVyaW5nU3RhdGUoKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDbG9zZSgp
OwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlv
bk9ic2VydmVyKE9ic2VydmVyIG9ic2VydmVyKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlRnJlZU93bmVkUGVlckNvbm5lY3Rpb24obG9uZyBvd25lZFBlZXJDb25uZWN0aW9u
KTsKLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRDb25maWd1cmF0aW9uKFJUQ0Nv
bmZpZ3VyYXRpb24gY29uZmlnKTsKLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRJ
Y2VDYW5kaWRhdGUoCi0gICAgICBTdHJpbmcgc2RwTWlkLCBpbnQgc2RwTUxpbmVJbmRleCwgU3Ry
aW5nIGljZUNhbmRpZGF0ZVNkcCk7Ci0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVt
b3ZlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLSAgcHJp
dmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRMb2NhbFN0cmVhbShsb25nIHN0cmVhbSk7Ci0g
IHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlUmVtb3ZlTG9jYWxTdHJlYW0obG9uZyBzdHJlYW0p
OwotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZU9sZEdldFN0YXRzKFN0YXRzT2JzZXJ2
ZXIgb2JzZXJ2ZXIsIGxvbmcgbmF0aXZlVHJhY2spOwotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5h
dGl2ZU5ld0dldFN0YXRzKFJUQ1N0YXRzQ29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2spOwotICBw
cml2YXRlIG5hdGl2ZSBSdHBTZW5kZXIgbmF0aXZlQ3JlYXRlU2VuZGVyKFN0cmluZyBraW5kLCBT
dHJpbmcgc3RyZWFtX2lkKTsKLSAgcHJpdmF0ZSBuYXRpdmUgTGlzdDxSdHBTZW5kZXI+IG5hdGl2
ZUdldFNlbmRlcnMoKTsKLSAgcHJpdmF0ZSBuYXRpdmUgTGlzdDxSdHBSZWNlaXZlcj4gbmF0aXZl
R2V0UmVjZWl2ZXJzKCk7Ci0gIHByaXZhdGUgbmF0aXZlIExpc3Q8UnRwVHJhbnNjZWl2ZXI+IG5h
dGl2ZUdldFRyYW5zY2VpdmVycygpOwotICBwcml2YXRlIG5hdGl2ZSBSdHBTZW5kZXIgbmF0aXZl
QWRkVHJhY2sobG9uZyB0cmFjaywgTGlzdDxTdHJpbmc+IHN0cmVhbUlkcyk7Ci0gIHByaXZhdGUg
bmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVtb3ZlVHJhY2sobG9uZyBzZW5kZXIpOwotICBwcml2YXRl
IG5hdGl2ZSBSdHBUcmFuc2NlaXZlciBuYXRpdmVBZGRUcmFuc2NlaXZlcldpdGhUcmFjaygKLSAg
ICAgIGxvbmcgdHJhY2ssIFJ0cFRyYW5zY2VpdmVyLlJ0cFRyYW5zY2VpdmVySW5pdCBpbml0KTsK
LSAgcHJpdmF0ZSBuYXRpdmUgUnRwVHJhbnNjZWl2ZXIgbmF0aXZlQWRkVHJhbnNjZWl2ZXJPZlR5
cGUoCi0gICAgICBNZWRpYVN0cmVhbVRyYWNrLk1lZGlhVHlwZSBtZWRpYVR5cGUsIFJ0cFRyYW5z
Y2VpdmVyLlJ0cFRyYW5zY2VpdmVySW5pdCBpbml0KTsKLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVh
biBuYXRpdmVTdGFydFJ0Y0V2ZW50TG9nKGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBtYXhfc2l6
ZV9ieXRlcyk7Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlU3RvcFJ0Y0V2ZW50TG9nKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llcy5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25EZXBlbmRlbmNpZXMuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIwOTE2OGQ1N2M5ZmY5YjIzZTU3ZjE1NjczYzkxYWM2
MzYxYjAyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llcy5qYXZhCisrKyAvZGV2L251bGwK
QEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci0KLS8qKgot
ICogUGVlckNvbm5lY3Rpb25EZXBlbmRlbmNpZXMgaG9sZHMgYWxsIFBlZXJDb25uZWN0aW9uIGRl
cGVuZGVuY2llcyB0aGF0IGFyZQotICogYXBwbGllZCBwZXIgUGVlckNvbm5lY3Rpb24uIEEgZGVw
ZW5kZW5jeSBpcyBkaXN0aW5jdCBmcm9tIGEgY29uZmlndXJhdGlvbgotICogYXMgaXQgZGVmaW5l
cyBzaWduaWZpY2FudCBleGVjdXRhYmxlIGNvZGUgdGhhdCBjYW4gYmUgcHJvdmlkZWQgYnkgYSB1
c2VyIG9mCi0gKiB0aGUgQVBJLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGVlckNvbm5lY3Rp
b25EZXBlbmRlbmNpZXMgewotICAvLyBNYW5kYXRvcnkgZGVwZW5kZW5jaWVzLgotICBwcml2YXRl
IGZpbmFsIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyOwotCi0gIC8vIE9wdGlvbmFs
IGZpZWxkcy4KLSAgcHJpdmF0ZSBmaW5hbCBTU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyIHNzbENlcnRp
ZmljYXRlVmVyaWZpZXI7Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKLSAgICBw
cml2YXRlIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyOwotICAgIHByaXZhdGUgU1NM
Q2VydGlmaWNhdGVWZXJpZmllciBzc2xDZXJ0aWZpY2F0ZVZlcmlmaWVyOwotCi0gICAgcHJpdmF0
ZSBCdWlsZGVyKFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgICB0aGlz
Lm9ic2VydmVyID0gb2JzZXJ2ZXI7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0U1NM
Q2VydGlmaWNhdGVWZXJpZmllcihTU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyIHNzbENlcnRpZmljYXRl
VmVyaWZpZXIpIHsKLSAgICAgIHRoaXMuc3NsQ2VydGlmaWNhdGVWZXJpZmllciA9IHNzbENlcnRp
ZmljYXRlVmVyaWZpZXI7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvLyBPYnNl
cnZlciBpcyBhIHJlcXVpcmVkIGRlcGVuZGVuY3kgYW5kIHNvIGlzIGZvcmNlZCBpbiB0aGUgY29u
c3RydWN0aW9uIG9mIHRoZSBvYmplY3QuCi0gICAgcHVibGljIFBlZXJDb25uZWN0aW9uRGVwZW5k
ZW5jaWVzIGNyZWF0ZVBlZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzKCkgewotICAgICAgcmV0dXJu
IG5ldyBQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llcyhvYnNlcnZlciwgc3NsQ2VydGlmaWNhdGVW
ZXJpZmllcik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGJ1aWxkZXIo
UGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICByZXR1cm4gbmV3IEJ1aWxk
ZXIob2JzZXJ2ZXIpOwotICB9Ci0KLSAgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgZ2V0T2JzZXJ2
ZXIoKSB7Ci0gICAgcmV0dXJuIG9ic2VydmVyOwotICB9Ci0KLSAgQE51bGxhYmxlCi0gIFNTTENl
cnRpZmljYXRlVmVyaWZpZXIgZ2V0U1NMQ2VydGlmaWNhdGVWZXJpZmllcigpIHsKLSAgICByZXR1
cm4gc3NsQ2VydGlmaWNhdGVWZXJpZmllcjsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNvbm5lY3Rp
b25EZXBlbmRlbmNpZXMoCi0gICAgICBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBvYnNlcnZlciwg
U1NMQ2VydGlmaWNhdGVWZXJpZmllciBzc2xDZXJ0aWZpY2F0ZVZlcmlmaWVyKSB7Ci0gICAgdGhp
cy5vYnNlcnZlciA9IG9ic2VydmVyOwotICAgIHRoaXMuc3NsQ2VydGlmaWNhdGVWZXJpZmllciA9
IHNzbENlcnRpZmljYXRlVmVyaWZpZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRj
L1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25G
YWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4M2FjODgzNjRjZDI4
NTk1NGZjMDY4NWI4M2NhNzEzOTFlMjIwZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSw2MzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBv
cnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9u
Lk51bGxhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuTG9n
Z2luZy5TZXZlcml0eTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwotaW1wb3J0
IG9yZy53ZWJydGMuYXVkaW8uQXVkaW9EZXZpY2VNb2R1bGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5h
dWRpby5KYXZhQXVkaW9EZXZpY2VNb2R1bGU7Ci0KLS8qKgotICogSmF2YSB3cmFwcGVyIGZvciBh
IEMrKyBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UuICBNYWluIGVudHJ5IHBvaW50IHRv
Ci0gKiB0aGUgUGVlckNvbm5lY3Rpb24gQVBJIGZvciBjbGllbnRzLgotICovCi1wdWJsaWMgY2xh
c3MgUGVlckNvbm5lY3Rpb25GYWN0b3J5IHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VFJJQUxfRU5BQkxFRCA9ICJFbmFibGVkIjsKLSAgQERlcHJlY2F0ZWQgcHVibGljIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVklERU9fRlJBTUVfRU1JVF9UUklBTCA9ICJWaWRlb0ZyYW1lRW1pdCI7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9fQ0FQVFVSRVJfVEhSRUFE
X05BTUUgPSAiVmlkZW9DYXB0dXJlclRocmVhZCI7Ci0KLSAgLyoqIEhlbHBlciBjbGFzcyBob2xk
aW5nIGJvdGggSmF2YSBhbmQgQysrIHRocmVhZCBpbmZvLiAqLwotICBwcml2YXRlIHN0YXRpYyBj
bGFzcyBUaHJlYWRJbmZvIHsKLSAgICBmaW5hbCBUaHJlYWQgdGhyZWFkOwotICAgIGZpbmFsIGlu
dCB0aWQ7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFRocmVhZEluZm8gZ2V0Q3VycmVudCgpIHsKLSAg
ICAgIHJldHVybiBuZXcgVGhyZWFkSW5mbyhUaHJlYWQuY3VycmVudFRocmVhZCgpLCBQcm9jZXNz
Lm15VGlkKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgVGhyZWFkSW5mbyhUaHJlYWQgdGhyZWFk
LCBpbnQgdGlkKSB7Ci0gICAgICB0aGlzLnRocmVhZCA9IHRocmVhZDsKLSAgICAgIHRoaXMudGlk
ID0gdGlkOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4g
aW50ZXJuYWxUcmFjZXJJbml0aWFsaXplZDsKLQotICAvLyBSZW1vdmUgdGhlc2Ugb25jZSBkZXBy
ZWNhdGVkIHN0YXRpYyBwcmludFN0YWNrVHJhY2UoKSBpcyBnb25lLgotICBATnVsbGFibGUgcHJp
dmF0ZSBzdGF0aWMgVGhyZWFkSW5mbyBzdGF0aWNOZXR3b3JrVGhyZWFkOwotICBATnVsbGFibGUg
cHJpdmF0ZSBzdGF0aWMgVGhyZWFkSW5mbyBzdGF0aWNXb3JrZXJUaHJlYWQ7Ci0gIEBOdWxsYWJs
ZSBwcml2YXRlIHN0YXRpYyBUaHJlYWRJbmZvIHN0YXRpY1NpZ25hbGluZ1RocmVhZDsKLQotICBw
cml2YXRlIGxvbmcgbmF0aXZlRmFjdG9yeTsKLSAgQE51bGxhYmxlIHByaXZhdGUgdm9sYXRpbGUg
VGhyZWFkSW5mbyBuZXR3b3JrVGhyZWFkOwotICBATnVsbGFibGUgcHJpdmF0ZSB2b2xhdGlsZSBU
aHJlYWRJbmZvIHdvcmtlclRocmVhZDsKLSAgQE51bGxhYmxlIHByaXZhdGUgdm9sYXRpbGUgVGhy
ZWFkSW5mbyBzaWduYWxpbmdUaHJlYWQ7Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJbml0aWFs
aXphdGlvbk9wdGlvbnMgewotICAgIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0Owot
ICAgIGZpbmFsIFN0cmluZyBmaWVsZFRyaWFsczsKLSAgICBmaW5hbCBib29sZWFuIGVuYWJsZUlu
dGVybmFsVHJhY2VyOwotICAgIGZpbmFsIE5hdGl2ZUxpYnJhcnlMb2FkZXIgbmF0aXZlTGlicmFy
eUxvYWRlcjsKLSAgICBmaW5hbCBTdHJpbmcgbmF0aXZlTGlicmFyeU5hbWU7Ci0gICAgQE51bGxh
YmxlIExvZ2dhYmxlIGxvZ2dhYmxlOwotICAgIEBOdWxsYWJsZSBTZXZlcml0eSBsb2dnYWJsZVNl
dmVyaXR5OwotCi0gICAgcHJpdmF0ZSBJbml0aWFsaXphdGlvbk9wdGlvbnMoQ29udGV4dCBhcHBs
aWNhdGlvbkNvbnRleHQsIFN0cmluZyBmaWVsZFRyaWFscywKLSAgICAgICAgYm9vbGVhbiBlbmFi
bGVJbnRlcm5hbFRyYWNlciwgTmF0aXZlTGlicmFyeUxvYWRlciBuYXRpdmVMaWJyYXJ5TG9hZGVy
LAotICAgICAgICBTdHJpbmcgbmF0aXZlTGlicmFyeU5hbWUsIEBOdWxsYWJsZSBMb2dnYWJsZSBs
b2dnYWJsZSwKLSAgICAgICAgQE51bGxhYmxlIFNldmVyaXR5IGxvZ2dhYmxlU2V2ZXJpdHkpIHsK
LSAgICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0OwotICAg
ICAgdGhpcy5maWVsZFRyaWFscyA9IGZpZWxkVHJpYWxzOwotICAgICAgdGhpcy5lbmFibGVJbnRl
cm5hbFRyYWNlciA9IGVuYWJsZUludGVybmFsVHJhY2VyOwotICAgICAgdGhpcy5uYXRpdmVMaWJy
YXJ5TG9hZGVyID0gbmF0aXZlTGlicmFyeUxvYWRlcjsKLSAgICAgIHRoaXMubmF0aXZlTGlicmFy
eU5hbWUgPSBuYXRpdmVMaWJyYXJ5TmFtZTsKLSAgICAgIHRoaXMubG9nZ2FibGUgPSBsb2dnYWJs
ZTsKLSAgICAgIHRoaXMubG9nZ2FibGVTZXZlcml0eSA9IGxvZ2dhYmxlU2V2ZXJpdHk7Ci0gICAg
fQotCi0gICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGJ1aWxkZXIoQ29udGV4dCBhcHBsaWNhdGlv
bkNvbnRleHQpIHsKLSAgICAgIHJldHVybiBuZXcgQnVpbGRlcihhcHBsaWNhdGlvbkNvbnRleHQp
OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgICBwcml2
YXRlIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICAgICAgcHJpdmF0ZSBTdHJp
bmcgZmllbGRUcmlhbHMgPSAiIjsKLSAgICAgIHByaXZhdGUgYm9vbGVhbiBlbmFibGVJbnRlcm5h
bFRyYWNlcjsKLSAgICAgIHByaXZhdGUgTmF0aXZlTGlicmFyeUxvYWRlciBuYXRpdmVMaWJyYXJ5
TG9hZGVyID0gbmV3IE5hdGl2ZUxpYnJhcnkuRGVmYXVsdExvYWRlcigpOwotICAgICAgcHJpdmF0
ZSBTdHJpbmcgbmF0aXZlTGlicmFyeU5hbWUgPSAiamluZ2xlX3BlZXJjb25uZWN0aW9uX3NvIjsK
LSAgICAgIEBOdWxsYWJsZSBwcml2YXRlIExvZ2dhYmxlIGxvZ2dhYmxlOwotICAgICAgQE51bGxh
YmxlIHByaXZhdGUgU2V2ZXJpdHkgbG9nZ2FibGVTZXZlcml0eTsKLQotICAgICAgQnVpbGRlcihD
b250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCkgewotICAgICAgICB0aGlzLmFwcGxpY2F0aW9uQ29u
dGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICAgIH0KLQotICAgICAgcHVibGljIEJ1aWxk
ZXIgc2V0RmllbGRUcmlhbHMoU3RyaW5nIGZpZWxkVHJpYWxzKSB7Ci0gICAgICAgIHRoaXMuZmll
bGRUcmlhbHMgPSBmaWVsZFRyaWFsczsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0K
LSAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEVuYWJsZUludGVybmFsVHJhY2VyKGJvb2xlYW4gZW5h
YmxlSW50ZXJuYWxUcmFjZXIpIHsKLSAgICAgICAgdGhpcy5lbmFibGVJbnRlcm5hbFRyYWNlciA9
IGVuYWJsZUludGVybmFsVHJhY2VyOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQot
ICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TmF0aXZlTGlicmFyeUxvYWRlcihOYXRpdmVMaWJyYXJ5
TG9hZGVyIG5hdGl2ZUxpYnJhcnlMb2FkZXIpIHsKLSAgICAgICAgdGhpcy5uYXRpdmVMaWJyYXJ5
TG9hZGVyID0gbmF0aXZlTGlicmFyeUxvYWRlcjsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICB9Ci0KLSAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE5hdGl2ZUxpYnJhcnlOYW1lKFN0cmluZyBu
YXRpdmVMaWJyYXJ5TmFtZSkgewotICAgICAgICB0aGlzLm5hdGl2ZUxpYnJhcnlOYW1lID0gbmF0
aXZlTGlicmFyeU5hbWU7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICBw
dWJsaWMgQnVpbGRlciBzZXRJbmplY3RhYmxlTG9nZ2VyKExvZ2dhYmxlIGxvZ2dhYmxlLCBTZXZl
cml0eSBzZXZlcml0eSkgewotICAgICAgICB0aGlzLmxvZ2dhYmxlID0gbG9nZ2FibGU7Ci0gICAg
ICAgIHRoaXMubG9nZ2FibGVTZXZlcml0eSA9IHNldmVyaXR5OwotICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgIH0KLQotICAgICAgcHVibGljIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5Jbml0aWFs
aXphdGlvbk9wdGlvbnMgY3JlYXRlSW5pdGlhbGl6YXRpb25PcHRpb25zKCkgewotICAgICAgICBy
ZXR1cm4gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5Jbml0aWFsaXphdGlvbk9wdGlvbnMoYXBw
bGljYXRpb25Db250ZXh0LCBmaWVsZFRyaWFscywKLSAgICAgICAgICAgIGVuYWJsZUludGVybmFs
VHJhY2VyLCBuYXRpdmVMaWJyYXJ5TG9hZGVyLCBuYXRpdmVMaWJyYXJ5TmFtZSwgbG9nZ2FibGUs
Ci0gICAgICAgICAgICBsb2dnYWJsZVNldmVyaXR5KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIGNsYXNzIE9wdGlvbnMgewotICAgIC8vIEtlZXAgaW4gc3luYyB3aXRo
IHdlYnJ0Yy9ydGNfYmFzZS9uZXR3b3JrLmghCi0gICAgLy8KLSAgICAvLyBUaGVzZSBiaXQgZmll
bGRzIGFyZSBkZWZpbmVkIGZvciB8bmV0d29ya0lnbm9yZU1hc2t8IGJlbG93LgotICAgIHN0YXRp
YyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX1VOS05PV04gPSAwOwotICAgIHN0YXRpYyBmaW5hbCBp
bnQgQURBUFRFUl9UWVBFX0VUSEVSTkVUID0gMSA8PCAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQg
QURBUFRFUl9UWVBFX1dJRkkgPSAxIDw8IDE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVS
X1RZUEVfQ0VMTFVMQVIgPSAxIDw8IDI7Ci0gICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVSX1RZ
UEVfVlBOID0gMSA8PCAzOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX0xPT1BC
QUNLID0gMSA8PCA0OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX0FOWSA9IDEg
PDwgNTsKLQotICAgIHB1YmxpYyBpbnQgbmV0d29ya0lnbm9yZU1hc2s7Ci0gICAgcHVibGljIGJv
b2xlYW4gZGlzYWJsZUVuY3J5cHRpb247Ci0gICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZU5ldHdv
cmtNb25pdG9yOwotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJPcHRpb25zIikKLSAgICBpbnQgZ2V0
TmV0d29ya0lnbm9yZU1hc2soKSB7Ci0gICAgICByZXR1cm4gbmV0d29ya0lnbm9yZU1hc2s7Ci0g
ICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJPcHRpb25zIikKLSAgICBib29sZWFuIGdldERp
c2FibGVFbmNyeXB0aW9uKCkgewotICAgICAgcmV0dXJuIGRpc2FibGVFbmNyeXB0aW9uOwotICAg
IH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiT3B0aW9ucyIpCi0gICAgYm9vbGVhbiBnZXREaXNh
YmxlTmV0d29ya01vbml0b3IoKSB7Ci0gICAgICByZXR1cm4gZGlzYWJsZU5ldHdvcmtNb25pdG9y
OwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgQE51
bGxhYmxlIHByaXZhdGUgT3B0aW9ucyBvcHRpb25zOwotICAgIEBOdWxsYWJsZSBwcml2YXRlIEF1
ZGlvRGV2aWNlTW9kdWxlIGF1ZGlvRGV2aWNlTW9kdWxlOwotICAgIHByaXZhdGUgQXVkaW9FbmNv
ZGVyRmFjdG9yeUZhY3RvcnkgYXVkaW9FbmNvZGVyRmFjdG9yeUZhY3RvcnkgPQotICAgICAgICBu
ZXcgQnVpbHRpbkF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5KCk7Ci0gICAgcHJpdmF0ZSBBdWRp
b0RlY29kZXJGYWN0b3J5RmFjdG9yeSBhdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeSA9Ci0gICAg
ICAgIG5ldyBCdWlsdGluQXVkaW9EZWNvZGVyRmFjdG9yeUZhY3RvcnkoKTsKLSAgICBATnVsbGFi
bGUgcHJpdmF0ZSBWaWRlb0VuY29kZXJGYWN0b3J5IHZpZGVvRW5jb2RlckZhY3Rvcnk7Ci0gICAg
QE51bGxhYmxlIHByaXZhdGUgVmlkZW9EZWNvZGVyRmFjdG9yeSB2aWRlb0RlY29kZXJGYWN0b3J5
OwotICAgIEBOdWxsYWJsZSBwcml2YXRlIEF1ZGlvUHJvY2Vzc2luZ0ZhY3RvcnkgYXVkaW9Qcm9j
ZXNzaW5nRmFjdG9yeTsKLSAgICBATnVsbGFibGUgcHJpdmF0ZSBGZWNDb250cm9sbGVyRmFjdG9y
eUZhY3RvcnlJbnRlcmZhY2UgZmVjQ29udHJvbGxlckZhY3RvcnlGYWN0b3J5OwotICAgIEBOdWxs
YWJsZSBwcml2YXRlIE5ldHdvcmtDb250cm9sbGVyRmFjdG9yeUZhY3RvcnkgbmV0d29ya0NvbnRy
b2xsZXJGYWN0b3J5RmFjdG9yeTsKLSAgICBATnVsbGFibGUgcHJpdmF0ZSBOZXR3b3JrU3RhdGVQ
cmVkaWN0b3JGYWN0b3J5RmFjdG9yeSBuZXR3b3JrU3RhdGVQcmVkaWN0b3JGYWN0b3J5RmFjdG9y
eTsKLSAgICBATnVsbGFibGUgcHJpdmF0ZSBNZWRpYVRyYW5zcG9ydEZhY3RvcnlGYWN0b3J5IG1l
ZGlhVHJhbnNwb3J0RmFjdG9yeUZhY3Rvcnk7Ci0gICAgQE51bGxhYmxlIHByaXZhdGUgTmV0RXFG
YWN0b3J5RmFjdG9yeSBuZXRlcUZhY3RvcnlGYWN0b3J5OwotCi0gICAgcHJpdmF0ZSBCdWlsZGVy
KCkge30KLQotICAgIHB1YmxpYyBCdWlsZGVyIHNldE9wdGlvbnMoT3B0aW9ucyBvcHRpb25zKSB7
Ci0gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
fQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0QXVkaW9EZXZpY2VNb2R1bGUoQXVkaW9EZXZpY2VN
b2R1bGUgYXVkaW9EZXZpY2VNb2R1bGUpIHsKLSAgICAgIHRoaXMuYXVkaW9EZXZpY2VNb2R1bGUg
PSBhdWRpb0RldmljZU1vZHVsZTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHB1
YmxpYyBCdWlsZGVyIHNldEF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5KAotICAgICAgICBBdWRp
b0VuY29kZXJGYWN0b3J5RmFjdG9yeSBhdWRpb0VuY29kZXJGYWN0b3J5RmFjdG9yeSkgewotICAg
ICAgaWYgKGF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5ID09IG51bGwpIHsKLSAgICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJQZWVyQ29ubmVj
dGlvbkZhY3RvcnkuQnVpbGRlciBkb2VzIG5vdCBhY2NlcHQgYSBudWxsIEF1ZGlvRW5jb2RlckZh
Y3RvcnlGYWN0b3J5LiIpOwotICAgICAgfQotICAgICAgdGhpcy5hdWRpb0VuY29kZXJGYWN0b3J5
RmFjdG9yeSA9IGF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5OwotICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0QXVkaW9EZWNvZGVyRmFjdG9yeUZhY3Rv
cnkoCi0gICAgICAgIEF1ZGlvRGVjb2RlckZhY3RvcnlGYWN0b3J5IGF1ZGlvRGVjb2RlckZhY3Rv
cnlGYWN0b3J5KSB7Ci0gICAgICBpZiAoYXVkaW9EZWNvZGVyRmFjdG9yeUZhY3RvcnkgPT0gbnVs
bCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAg
ICAgICAgIlBlZXJDb25uZWN0aW9uRmFjdG9yeS5CdWlsZGVyIGRvZXMgbm90IGFjY2VwdCBhIG51
bGwgQXVkaW9EZWNvZGVyRmFjdG9yeUZhY3RvcnkuIik7Ci0gICAgICB9Ci0gICAgICB0aGlzLmF1
ZGlvRGVjb2RlckZhY3RvcnlGYWN0b3J5ID0gYXVkaW9EZWNvZGVyRmFjdG9yeUZhY3Rvcnk7Ci0g
ICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRWaWRlb0Vu
Y29kZXJGYWN0b3J5KFZpZGVvRW5jb2RlckZhY3RvcnkgdmlkZW9FbmNvZGVyRmFjdG9yeSkgewot
ICAgICAgdGhpcy52aWRlb0VuY29kZXJGYWN0b3J5ID0gdmlkZW9FbmNvZGVyRmFjdG9yeTsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHB1YmxpYyBCdWlsZGVyIHNldFZpZGVvRGVj
b2RlckZhY3RvcnkoVmlkZW9EZWNvZGVyRmFjdG9yeSB2aWRlb0RlY29kZXJGYWN0b3J5KSB7Ci0g
ICAgICB0aGlzLnZpZGVvRGVjb2RlckZhY3RvcnkgPSB2aWRlb0RlY29kZXJGYWN0b3J5OwotICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0QXVkaW9Qcm9j
ZXNzaW5nRmFjdG9yeShBdWRpb1Byb2Nlc3NpbmdGYWN0b3J5IGF1ZGlvUHJvY2Vzc2luZ0ZhY3Rv
cnkpIHsKLSAgICAgIGlmIChhdWRpb1Byb2Nlc3NpbmdGYWN0b3J5ID09IG51bGwpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKAotICAgICAgICAgICAgIlBlZXJDb25u
ZWN0aW9uRmFjdG9yeSBidWlsZGVyIGRvZXMgbm90IGFjY2VwdCBhIG51bGwgQXVkaW9Qcm9jZXNz
aW5nRmFjdG9yeS4iKTsKLSAgICAgIH0KLSAgICAgIHRoaXMuYXVkaW9Qcm9jZXNzaW5nRmFjdG9y
eSA9IGF1ZGlvUHJvY2Vzc2luZ0ZhY3Rvcnk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgQnVpbGRlciBzZXRGZWNDb250cm9sbGVyRmFjdG9yeUZhY3RvcnlJbnRlcmZh
Y2UoCi0gICAgICAgIEZlY0NvbnRyb2xsZXJGYWN0b3J5RmFjdG9yeUludGVyZmFjZSBmZWNDb250
cm9sbGVyRmFjdG9yeUZhY3RvcnkpIHsKLSAgICAgIHRoaXMuZmVjQ29udHJvbGxlckZhY3RvcnlG
YWN0b3J5ID0gZmVjQ29udHJvbGxlckZhY3RvcnlGYWN0b3J5OwotICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0TmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5
RmFjdG9yeSgKLSAgICAgICAgTmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5RmFjdG9yeSBuZXR3b3Jr
Q29udHJvbGxlckZhY3RvcnlGYWN0b3J5KSB7Ci0gICAgICB0aGlzLm5ldHdvcmtDb250cm9sbGVy
RmFjdG9yeUZhY3RvcnkgPSBuZXR3b3JrQ29udHJvbGxlckZhY3RvcnlGYWN0b3J5OwotICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0TmV0d29ya1N0YXRl
UHJlZGljdG9yRmFjdG9yeUZhY3RvcnkoCi0gICAgICAgIE5ldHdvcmtTdGF0ZVByZWRpY3RvckZh
Y3RvcnlGYWN0b3J5IG5ldHdvcmtTdGF0ZVByZWRpY3RvckZhY3RvcnlGYWN0b3J5KSB7Ci0gICAg
ICB0aGlzLm5ldHdvcmtTdGF0ZVByZWRpY3RvckZhY3RvcnlGYWN0b3J5ID0gbmV0d29ya1N0YXRl
UHJlZGljdG9yRmFjdG9yeUZhY3Rvcnk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAg
ICAvKiogU2V0cyBhIE1lZGlhVHJhbnNwb3J0RmFjdG9yeUZhY3RvcnkgZm9yIGEgUGVlckNvbm5l
Y3Rpb25GYWN0b3J5LiAqLwotICAgIHB1YmxpYyBCdWlsZGVyIHNldE1lZGlhVHJhbnNwb3J0RmFj
dG9yeUZhY3RvcnkoCi0gICAgICAgIE1lZGlhVHJhbnNwb3J0RmFjdG9yeUZhY3RvcnkgbWVkaWFU
cmFuc3BvcnRGYWN0b3J5RmFjdG9yeSkgewotICAgICAgdGhpcy5tZWRpYVRyYW5zcG9ydEZhY3Rv
cnlGYWN0b3J5ID0gbWVkaWFUcmFuc3BvcnRGYWN0b3J5RmFjdG9yeTsKLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgYSBOZXRFcUZhY3RvcnlGYWN0b3J5
IGZvciB0aGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5LiBXaGVuIHVzaW5nIGEKLSAgICAgKiBjdXN0
b20gTmV0RXFGYWN0b3J5RmFjdG9yeSwgdGhlIEF1ZGlvRGVjb2RlckZhY3RvcnlGYWN0b3J5IHdp
bGwgYmUgc2V0Ci0gICAgICogdG8gbnVsbC4gVGhlIEF1ZGlvRGVjb2RlckZhY3RvcnlGYWN0b3J5
IHNob3VsZCBiZSB3cmFwcGVkIGluIHRoZQotICAgICAqIE5ldEVxRmFjdG9yeUZhY3RvcnkuCi0g
ICAgICovCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0TmV0RXFGYWN0b3J5RmFjdG9yeShOZXRFcUZh
Y3RvcnlGYWN0b3J5IG5ldGVxRmFjdG9yeUZhY3RvcnkpIHsKLSAgICAgIHRoaXMubmV0ZXFGYWN0
b3J5RmFjdG9yeSA9IG5ldGVxRmFjdG9yeUZhY3Rvcnk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGNyZWF0ZVBlZXJDb25uZWN0
aW9uRmFjdG9yeSgpIHsKLSAgICAgIGNoZWNrSW5pdGlhbGl6ZUhhc0JlZW5DYWxsZWQoKTsKLSAg
ICAgIGlmIChhdWRpb0RldmljZU1vZHVsZSA9PSBudWxsKSB7Ci0gICAgICAgIGF1ZGlvRGV2aWNl
TW9kdWxlID0gSmF2YUF1ZGlvRGV2aWNlTW9kdWxlLmJ1aWxkZXIoQ29udGV4dFV0aWxzLmdldEFw
cGxpY2F0aW9uQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3Jl
YXRlQXVkaW9EZXZpY2VNb2R1bGUoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYXRpdmVDcmVh
dGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoQ29udGV4dFV0aWxzLmdldEFwcGxpY2F0aW9uQ29udGV4
dCgpLCBvcHRpb25zLAotICAgICAgICAgIGF1ZGlvRGV2aWNlTW9kdWxlLmdldE5hdGl2ZUF1ZGlv
RGV2aWNlTW9kdWxlUG9pbnRlcigpLAotICAgICAgICAgIGF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0
b3J5LmNyZWF0ZU5hdGl2ZUF1ZGlvRW5jb2RlckZhY3RvcnkoKSwKLSAgICAgICAgICBhdWRpb0Rl
Y29kZXJGYWN0b3J5RmFjdG9yeS5jcmVhdGVOYXRpdmVBdWRpb0RlY29kZXJGYWN0b3J5KCksIHZp
ZGVvRW5jb2RlckZhY3RvcnksCi0gICAgICAgICAgdmlkZW9EZWNvZGVyRmFjdG9yeSwKLSAgICAg
ICAgICBhdWRpb1Byb2Nlc3NpbmdGYWN0b3J5ID09IG51bGwgPyAwIDogYXVkaW9Qcm9jZXNzaW5n
RmFjdG9yeS5jcmVhdGVOYXRpdmUoKSwKLSAgICAgICAgICBmZWNDb250cm9sbGVyRmFjdG9yeUZh
Y3RvcnkgPT0gbnVsbCA/IDAgOiBmZWNDb250cm9sbGVyRmFjdG9yeUZhY3RvcnkuY3JlYXRlTmF0
aXZlKCksCi0gICAgICAgICAgbmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5RmFjdG9yeSA9PSBudWxs
Ci0gICAgICAgICAgICAgID8gMAotICAgICAgICAgICAgICA6IG5ldHdvcmtDb250cm9sbGVyRmFj
dG9yeUZhY3RvcnkuY3JlYXRlTmF0aXZlTmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5KCksCi0gICAg
ICAgICAgbmV0d29ya1N0YXRlUHJlZGljdG9yRmFjdG9yeUZhY3RvcnkgPT0gbnVsbAotICAgICAg
ICAgICAgICA/IDAKLSAgICAgICAgICAgICAgOiBuZXR3b3JrU3RhdGVQcmVkaWN0b3JGYWN0b3J5
RmFjdG9yeS5jcmVhdGVOYXRpdmVOZXR3b3JrU3RhdGVQcmVkaWN0b3JGYWN0b3J5KCksCi0gICAg
ICAgICAgbWVkaWFUcmFuc3BvcnRGYWN0b3J5RmFjdG9yeSA9PSBudWxsCi0gICAgICAgICAgICAg
ID8gMAotICAgICAgICAgICAgICA6IG1lZGlhVHJhbnNwb3J0RmFjdG9yeUZhY3RvcnkuY3JlYXRl
TmF0aXZlTWVkaWFUcmFuc3BvcnRGYWN0b3J5KCksCi0gICAgICAgICAgbmV0ZXFGYWN0b3J5RmFj
dG9yeSA9PSBudWxsID8gMCA6IG5ldGVxRmFjdG9yeUZhY3RvcnkuY3JlYXRlTmF0aXZlTmV0RXFG
YWN0b3J5KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBidWlsZGVy
KCkgewotICAgIHJldHVybiBuZXcgQnVpbGRlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvYWRz
IGFuZCBpbml0aWFsaXplcyBXZWJSVEMuIFRoaXMgbXVzdCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25j
ZSBiZWZvcmUgY3JlYXRpbmcgYQotICAgKiBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuIFJlcGxhY2Vz
IGFsbCB0aGUgb2xkIGluaXRpYWxpemF0aW9uIG1ldGhvZHMuIE11c3Qgbm90IGJlIGNhbGxlZCB3
aGlsZQotICAgKiBhIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBpcyBhbGl2ZS4KLSAgICovCi0gIHB1
YmxpYyBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEluaXRpYWxpemF0aW9uT3B0aW9ucyBvcHRpb25z
KSB7Ci0gICAgQ29udGV4dFV0aWxzLmluaXRpYWxpemUob3B0aW9ucy5hcHBsaWNhdGlvbkNvbnRl
eHQpOwotICAgIE5hdGl2ZUxpYnJhcnkuaW5pdGlhbGl6ZShvcHRpb25zLm5hdGl2ZUxpYnJhcnlM
b2FkZXIsIG9wdGlvbnMubmF0aXZlTGlicmFyeU5hbWUpOwotICAgIG5hdGl2ZUluaXRpYWxpemVB
bmRyb2lkR2xvYmFscygpOwotICAgIG5hdGl2ZUluaXRpYWxpemVGaWVsZFRyaWFscyhvcHRpb25z
LmZpZWxkVHJpYWxzKTsKLSAgICBpZiAob3B0aW9ucy5lbmFibGVJbnRlcm5hbFRyYWNlciAmJiAh
aW50ZXJuYWxUcmFjZXJJbml0aWFsaXplZCkgewotICAgICAgaW5pdGlhbGl6ZUludGVybmFsVHJh
Y2VyKCk7Ci0gICAgfQotICAgIGlmIChvcHRpb25zLmxvZ2dhYmxlICE9IG51bGwpIHsKLSAgICAg
IExvZ2dpbmcuaW5qZWN0TG9nZ2FibGUob3B0aW9ucy5sb2dnYWJsZSwgb3B0aW9ucy5sb2dnYWJs
ZVNldmVyaXR5KTsKLSAgICAgIG5hdGl2ZUluamVjdExvZ2dhYmxlKG5ldyBKTklMb2dnaW5nKG9w
dGlvbnMubG9nZ2FibGUpLCBvcHRpb25zLmxvZ2dhYmxlU2V2ZXJpdHkub3JkaW5hbCgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgTG9nZ2luZy5kKFRBRywKLSAgICAgICAgICAiUGVlckNvbm5lY3Rp
b25GYWN0b3J5IHdhcyBpbml0aWFsaXplZCB3aXRob3V0IGFuIGluamVjdGVkIExvZ2dhYmxlLiAi
Ci0gICAgICAgICAgICAgICsgIkFueSBleGlzdGluZyBMb2dnYWJsZSB3aWxsIGJlIGRlbGV0ZWQu
Iik7Ci0gICAgICBMb2dnaW5nLmRlbGV0ZUluamVjdGVkTG9nZ2FibGUoKTsKLSAgICAgIG5hdGl2
ZURlbGV0ZUxvZ2dhYmxlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBj
aGVja0luaXRpYWxpemVIYXNCZWVuQ2FsbGVkKCkgewotICAgIGlmICghTmF0aXZlTGlicmFyeS5p
c0xvYWRlZCgpIHx8IENvbnRleHRVdGlscy5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKSA9PSBudWxs
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICJQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZSB3YXMgbm90IGNhbGxlZCBiZWZvcmUgY3Jl
YXRpbmcgYSAiCi0gICAgICAgICAgKyAiUGVlckNvbm5lY3Rpb25GYWN0b3J5LiIpOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUludGVybmFsVHJhY2VyKCkg
ewotICAgIGludGVybmFsVHJhY2VySW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIG5hdGl2ZUluaXRp
YWxpemVJbnRlcm5hbFRyYWNlcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNodXRk
b3duSW50ZXJuYWxUcmFjZXIoKSB7Ci0gICAgaW50ZXJuYWxUcmFjZXJJbml0aWFsaXplZCA9IGZh
bHNlOwotICAgIG5hdGl2ZVNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsKLSAgfQotCi0gIC8vIEZp
ZWxkIHRyaWFsIGluaXRpYWxpemF0aW9uLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5l
Y3Rpb25GYWN0b3J5Ci0gIC8vIGlzIGNyZWF0ZWQuCi0gIC8vIERlcHJlY2F0ZWQsIHVzZSBQZWVy
Q29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZSBpbnN0ZWFkLgotICBARGVwcmVjYXRlZAotICBw
dWJsaWMgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUZpZWxkVHJpYWxzKFN0cmluZyBmaWVsZFRyaWFs
c0luaXRTdHJpbmcpIHsKLSAgICBuYXRpdmVJbml0aWFsaXplRmllbGRUcmlhbHMoZmllbGRUcmlh
bHNJbml0U3RyaW5nKTsKLSAgfQotCi0gIC8vIFdyYXBwZXIgb2Ygd2VicnRjOjpmaWVsZF90cmlh
bDo6RmluZEZ1bGxOYW1lLiBEZXZlbG9wIHRoZSBmZWF0dXJlIHdpdGggZGVmYXVsdCBiZWhhdmlv
dXIgb2ZmLgotICAvLyBFeGFtcGxlIHVzYWdlOgotICAvLyBpZiAoUGVlckNvbm5lY3Rpb25GYWN0
b3J5LmZpZWxkVHJpYWxzRmluZEZ1bGxOYW1lKCJXZWJSVENFeHBlcmltZW50IikuZXF1YWxzKCJF
bmFibGVkIikpIHsKLSAgLy8gICBtZXRob2QxKCk7Ci0gIC8vIH0gZWxzZSB7Ci0gIC8vICAgbWV0
aG9kMigpOwotICAvLyB9Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpZWxkVHJpYWxzRmluZEZ1
bGxOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgcmV0dXJuIE5hdGl2ZUxpYnJhcnkuaXNMb2FkZWQo
KSA/IG5hdGl2ZUZpbmRGaWVsZFRyaWFsc0Z1bGxOYW1lKG5hbWUpIDogIiI7Ci0gIH0KLSAgLy8g
U3RhcnQvc3RvcCBpbnRlcm5hbCBjYXB0dXJpbmcgb2YgaW50ZXJuYWwgdHJhY2luZy4KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIHN0YXJ0SW50ZXJuYWxUcmFjaW5nQ2FwdHVyZShTdHJpbmcgdHJh
Y2luZ0ZpbGVuYW1lKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXJ0SW50ZXJuYWxUcmFjaW5nQ2Fw
dHVyZSh0cmFjaW5nRmlsZW5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHN0b3BJ
bnRlcm5hbFRyYWNpbmdDYXB0dXJlKCkgewotICAgIG5hdGl2ZVN0b3BJbnRlcm5hbFRyYWNpbmdD
YXB0dXJlKCk7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgUGVlckNvbm5lY3Rpb25GYWN0
b3J5KGxvbmcgbmF0aXZlRmFjdG9yeSkgewotICAgIGNoZWNrSW5pdGlhbGl6ZUhhc0JlZW5DYWxs
ZWQoKTsKLSAgICBpZiAobmF0aXZlRmFjdG9yeSA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIGluaXRpYWxpemUgUGVlckNvbm5lY3Rpb25GYWN0b3J5
ISIpOwotICAgIH0KLSAgICB0aGlzLm5hdGl2ZUZhY3RvcnkgPSBuYXRpdmVGYWN0b3J5OwotICB9
Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBwYXNzIHRoZSBwYXJh
bWV0ZXJzIGRvd24gaW50byB0aGUgbmF0aXZlIEpOSSBicmlkZ2UuCi0gICAqLwotICBATnVsbGFi
bGUKLSAgUGVlckNvbm5lY3Rpb24gY3JlYXRlUGVlckNvbm5lY3Rpb25JbnRlcm5hbChQZWVyQ29u
bmVjdGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZywKLSAgICAgIE1lZGlhQ29uc3RyYWlu
dHMgY29uc3RyYWludHMsIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyLAotICAgICAg
U1NMQ2VydGlmaWNhdGVWZXJpZmllciBzc2xDZXJ0aWZpY2F0ZVZlcmlmaWVyKSB7Ci0gICAgY2hl
Y2tQZWVyQ29ubmVjdGlvbkZhY3RvcnlFeGlzdHMoKTsKLSAgICBsb25nIG5hdGl2ZU9ic2VydmVy
ID0gUGVlckNvbm5lY3Rpb24uY3JlYXRlTmF0aXZlUGVlckNvbm5lY3Rpb25PYnNlcnZlcihvYnNl
cnZlcik7Ci0gICAgaWYgKG5hdGl2ZU9ic2VydmVyID09IDApIHsKLSAgICAgIHJldHVybiBudWxs
OwotICAgIH0KLSAgICBsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9uID0gbmF0aXZlQ3JlYXRlUGVl
ckNvbm5lY3Rpb24oCi0gICAgICAgIG5hdGl2ZUZhY3RvcnksIHJ0Y0NvbmZpZywgY29uc3RyYWlu
dHMsIG5hdGl2ZU9ic2VydmVyLCBzc2xDZXJ0aWZpY2F0ZVZlcmlmaWVyKTsKLSAgICBpZiAobmF0
aXZlUGVlckNvbm5lY3Rpb24gPT0gMCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAg
IHJldHVybiBuZXcgUGVlckNvbm5lY3Rpb24obmF0aXZlUGVlckNvbm5lY3Rpb24pOwotICB9Ci0K
LSAgLyoqCi0gICAqIERlcHJlY2F0ZWQuIFBlZXJDb25uZWN0aW9uIGNvbnN0cmFpbnRzIGFyZSBk
ZXByZWNhdGVkLiBTdXBwbHkgdmFsdWVzIGluIHJ0Y0NvbmZpZyBzdHJ1Y3QKLSAgICogaW5zdGVh
ZCBhbmQgdXNlIHRoZSBtZXRob2Qgd2l0aG91dCBjb25zdHJhaW50cyBpbiB0aGUgc2lnbmF0dXJl
LgotICAgKi8KLSAgQE51bGxhYmxlCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBQZWVyQ29ubmVj
dGlvbiBjcmVhdGVQZWVyQ29ubmVjdGlvbihQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9u
IHJ0Y0NvbmZpZywKLSAgICAgIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMsIFBlZXJDb25u
ZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZVBlZXJDb25uZWN0
aW9uSW50ZXJuYWwoCi0gICAgICAgIHJ0Y0NvbmZpZywgY29uc3RyYWludHMsIG9ic2VydmVyLCAv
KiBzc2xDZXJ0aWZpY2F0ZVZlcmlmaWVyPSAqLyBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBE
ZXByZWNhdGVkLiBQZWVyQ29ubmVjdGlvbiBjb25zdHJhaW50cyBhcmUgZGVwcmVjYXRlZC4gU3Vw
cGx5IHZhbHVlcyBpbiBydGNDb25maWcgc3RydWN0Ci0gICAqIGluc3RlYWQgYW5kIHVzZSB0aGUg
bWV0aG9kIHdpdGhvdXQgY29uc3RyYWludHMgaW4gdGhlIHNpZ25hdHVyZS4KLSAgICovCi0gIEBO
dWxsYWJsZQotICBARGVwcmVjYXRlZAotICBwdWJsaWMgUGVlckNvbm5lY3Rpb24gY3JlYXRlUGVl
ckNvbm5lY3Rpb24oTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMsCi0g
ICAgICBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzLCBQZWVyQ29ubmVjdGlvbi5PYnNlcnZl
ciBvYnNlcnZlcikgewotICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRjQ29u
ZmlnID0gbmV3IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24oaWNlU2VydmVycyk7Ci0g
ICAgcmV0dXJuIGNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZywgY29uc3RyYWludHMsIG9i
c2VydmVyKTsKLSAgfQotCi0gIEBOdWxsYWJsZQotICBwdWJsaWMgUGVlckNvbm5lY3Rpb24gY3Jl
YXRlUGVlckNvbm5lY3Rpb24oCi0gICAgICBMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4g
aWNlU2VydmVycywgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBQZWVy
Q29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZyA9IG5ldyBQZWVyQ29ubmVjdGlv
bi5SVENDb25maWd1cmF0aW9uKGljZVNlcnZlcnMpOwotICAgIHJldHVybiBjcmVhdGVQZWVyQ29u
bmVjdGlvbihydGNDb25maWcsIG9ic2VydmVyKTsKLSAgfQotCi0gIEBOdWxsYWJsZQotICBwdWJs
aWMgUGVlckNvbm5lY3Rpb24gY3JlYXRlUGVlckNvbm5lY3Rpb24oCi0gICAgICBQZWVyQ29ubmVj
dGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZywgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIg
b2JzZXJ2ZXIpIHsKLSAgICByZXR1cm4gY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlnLCBu
dWxsIC8qIGNvbnN0cmFpbnRzICovLCBvYnNlcnZlcik7Ci0gIH0KLQotICBATnVsbGFibGUKLSAg
cHVibGljIFBlZXJDb25uZWN0aW9uIGNyZWF0ZVBlZXJDb25uZWN0aW9uKAotICAgICAgUGVlckNv
bm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcsIFBlZXJDb25uZWN0aW9uRGVwZW5k
ZW5jaWVzIGRlcGVuZGVuY2llcykgewotICAgIHJldHVybiBjcmVhdGVQZWVyQ29ubmVjdGlvbklu
dGVybmFsKHJ0Y0NvbmZpZywgbnVsbCAvKiBjb25zdHJhaW50cyAqLywKLSAgICAgICAgZGVwZW5k
ZW5jaWVzLmdldE9ic2VydmVyKCksIGRlcGVuZGVuY2llcy5nZXRTU0xDZXJ0aWZpY2F0ZVZlcmlm
aWVyKCkpOwotICB9Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtIGNyZWF0ZUxvY2FsTWVkaWFTdHJl
YW0oU3RyaW5nIGxhYmVsKSB7Ci0gICAgY2hlY2tQZWVyQ29ubmVjdGlvbkZhY3RvcnlFeGlzdHMo
KTsKLSAgICByZXR1cm4gbmV3IE1lZGlhU3RyZWFtKG5hdGl2ZUNyZWF0ZUxvY2FsTWVkaWFTdHJl
YW0obmF0aXZlRmFjdG9yeSwgbGFiZWwpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdmlk
ZW8gc291cmNlIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4gSWYgYWxpZ25UaW1lc3RhbXBzIGlzIGZh
bHNlLCB0aGUgY2FsbGVyIGlzCi0gICAqIHJlc3BvbnNpYmxlIGZvciBhbGlnbmluZyB0aGUgZnJh
bWUgdGltZXN0YW1wcyB0byBydGM6OlRpbWVOYW5vcygpLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFj
aGlldmUKLSAgICogaGlnaGVyIGFjY3VyYWN5IGlmIHRoZXJlIGlzIGEgYmlnIGRlbGF5IGJldHdl
ZW4gZnJhbWUgY3JlYXRpb24gYW5kIGZyYW1lcyBiZWluZyBkZWxpdmVyZWQgdG8KLSAgICogdGhl
IHJldHVybmVkIHZpZGVvIHNvdXJjZS4gSWYgYWxpZ25UaW1lc3RhbXBzIGlzIHRydWUsIHRpbWVz
dGFtcHMgd2lsbCBiZSBhbGlnbmVkIHRvCi0gICAqIHJ0Yzo6VGltZU5hbm9zKCkgd2hlbiB0aGV5
IGFycml2ZSB0byB0aGUgcmV0dXJuZWQgdmlkZW8gc291cmNlLgotICAgKi8KLSAgcHVibGljIFZp
ZGVvU291cmNlIGNyZWF0ZVZpZGVvU291cmNlKGJvb2xlYW4gaXNTY3JlZW5jYXN0LCBib29sZWFu
IGFsaWduVGltZXN0YW1wcykgewotICAgIGNoZWNrUGVlckNvbm5lY3Rpb25GYWN0b3J5RXhpc3Rz
KCk7Ci0gICAgcmV0dXJuIG5ldyBWaWRlb1NvdXJjZShuYXRpdmVDcmVhdGVWaWRlb1NvdXJjZShu
YXRpdmVGYWN0b3J5LCBpc1NjcmVlbmNhc3QsIGFsaWduVGltZXN0YW1wcykpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFNhbWUgYXMgYWJvdmUgd2l0aCBhbGlnblRpbWVzdGFtcHMgc2V0IHRvIHRydWUu
Ci0gICAqCi0gICAqIEBzZWUgI2NyZWF0ZVZpZGVvU291cmNlKGJvb2xlYW4sIGJvb2xlYW4pCi0g
ICAqLwotICBwdWJsaWMgVmlkZW9Tb3VyY2UgY3JlYXRlVmlkZW9Tb3VyY2UoYm9vbGVhbiBpc1Nj
cmVlbmNhc3QpIHsKLSAgICByZXR1cm4gY3JlYXRlVmlkZW9Tb3VyY2UoaXNTY3JlZW5jYXN0LCAv
KiBhbGlnblRpbWVzdGFtcHM9ICovIHRydWUpOwotICB9Ci0KLSAgcHVibGljIFZpZGVvVHJhY2sg
Y3JlYXRlVmlkZW9UcmFjayhTdHJpbmcgaWQsIFZpZGVvU291cmNlIHNvdXJjZSkgewotICAgIGNo
ZWNrUGVlckNvbm5lY3Rpb25GYWN0b3J5RXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5ldyBWaWRlb1Ry
YWNrKAotICAgICAgICBuYXRpdmVDcmVhdGVWaWRlb1RyYWNrKG5hdGl2ZUZhY3RvcnksIGlkLCBz
b3VyY2UuZ2V0TmF0aXZlVmlkZW9UcmFja1NvdXJjZSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgQXVk
aW9Tb3VyY2UgY3JlYXRlQXVkaW9Tb3VyY2UoTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cykg
ewotICAgIGNoZWNrUGVlckNvbm5lY3Rpb25GYWN0b3J5RXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5l
dyBBdWRpb1NvdXJjZShuYXRpdmVDcmVhdGVBdWRpb1NvdXJjZShuYXRpdmVGYWN0b3J5LCBjb25z
dHJhaW50cykpOwotICB9Ci0KLSAgcHVibGljIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFjayhT
dHJpbmcgaWQsIEF1ZGlvU291cmNlIHNvdXJjZSkgewotICAgIGNoZWNrUGVlckNvbm5lY3Rpb25G
YWN0b3J5RXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5ldyBBdWRpb1RyYWNrKG5hdGl2ZUNyZWF0ZUF1
ZGlvVHJhY2sobmF0aXZlRmFjdG9yeSwgaWQsIHNvdXJjZS5nZXROYXRpdmVBdWRpb1NvdXJjZSgp
KSk7Ci0gIH0KLQotICAvLyBTdGFydHMgcmVjb3JkaW5nIGFuIEFFQyBkdW1wLiBPd25lcnNoaXAg
b2YgdGhlIGZpbGUgaXMgdHJhbnNmZXJlZCB0byB0aGUKLSAgLy8gbmF0aXZlIGNvZGUuIElmIGFu
IEFFQyBkdW1wIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGl0IHdpbGwgYmUgc3RvcHBlZCBhbmQK
LSAgLy8gYSBuZXcgb25lIHdpbGwgc3RhcnQgdXNpbmcgdGhlIHByb3ZpZGVkIGZpbGUuCi0gIHB1
YmxpYyBib29sZWFuIHN0YXJ0QWVjRHVtcChpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgZmlsZXNp
emVfbGltaXRfYnl0ZXMpIHsKLSAgICBjaGVja1BlZXJDb25uZWN0aW9uRmFjdG9yeUV4aXN0cygp
OwotICAgIHJldHVybiBuYXRpdmVTdGFydEFlY0R1bXAobmF0aXZlRmFjdG9yeSwgZmlsZV9kZXNj
cmlwdG9yLCBmaWxlc2l6ZV9saW1pdF9ieXRlcyk7Ci0gIH0KLQotICAvLyBTdG9wcyByZWNvcmRp
bmcgYW4gQUVDIGR1bXAuIElmIG5vIEFFQyBkdW1wIGlzIGN1cnJlbnRseSBiZWluZyByZWNvcmRl
ZCwKLSAgLy8gdGhpcyBjYWxsIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gIHB1YmxpYyB2b2lkIHN0
b3BBZWNEdW1wKCkgewotICAgIGNoZWNrUGVlckNvbm5lY3Rpb25GYWN0b3J5RXhpc3RzKCk7Ci0g
ICAgbmF0aXZlU3RvcEFlY0R1bXAobmF0aXZlRmFjdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBkaXNwb3NlKCkgewotICAgIGNoZWNrUGVlckNvbm5lY3Rpb25GYWN0b3J5RXhpc3RzKCk7Ci0g
ICAgbmF0aXZlRnJlZUZhY3RvcnkobmF0aXZlRmFjdG9yeSk7Ci0gICAgbmV0d29ya1RocmVhZCA9
IG51bGw7Ci0gICAgd29ya2VyVGhyZWFkID0gbnVsbDsKLSAgICBzaWduYWxpbmdUaHJlYWQgPSBu
dWxsOwotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuZGlzcG9zZUVnbENvbnRleHQoKTsKLSAg
ICBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmRpc3Bvc2VFZ2xDb250ZXh0KCk7Ci0gICAgbmF0aXZl
RmFjdG9yeSA9IDA7Ci0gIH0KLQotICAvKiogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5hdGl2
ZSB3ZWJydGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZS4gKi8KLSAgcHVibGljIGxv
bmcgZ2V0TmF0aXZlUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkgewotICAgIGNoZWNrUGVlckNvbm5l
Y3Rpb25GYWN0b3J5RXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldE5hdGl2ZVBlZXJDb25u
ZWN0aW9uRmFjdG9yeShuYXRpdmVGYWN0b3J5KTsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIGEgcG9p
bnRlciB0byB0aGUgbmF0aXZlIE93bmVkRmFjdG9yeUFuZFRocmVhZHMgb2JqZWN0ICovCi0gIHB1
YmxpYyBsb25nIGdldE5hdGl2ZU93bmVkRmFjdG9yeUFuZFRocmVhZHMoKSB7Ci0gICAgY2hlY2tQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnlFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0aXZlRmFjdG9yeTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja1BlZXJDb25uZWN0aW9uRmFjdG9yeUV4aXN0cygp
IHsKLSAgICBpZiAobmF0aXZlRmFjdG9yeSA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bFN0YXRlRXhjZXB0aW9uKCJQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaGFzIGJlZW4gZGlzcG9zZWQu
Iik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2Uo
Ci0gICAgICBATnVsbGFibGUgVGhyZWFkSW5mbyB0aHJlYWRJbmZvLCBib29sZWFuIHByaW50TmF0
aXZlU3RhY2tUcmFjZSkgewotICAgIGlmICh0aHJlYWRJbmZvID09IG51bGwpIHsKLSAgICAgIC8v
IFRocmVhZCBjYWxsYmFja3MgaGF2ZSBub3QgYmVlbiBjb21wbGV0ZWQgeWV0LCBpZ25vcmUgY2Fs
bC4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZmluYWwgU3RyaW5nIHRocmVhZE5hbWUgPSB0
aHJlYWRJbmZvLnRocmVhZC5nZXROYW1lKCk7Ci0gICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBzdGFj
a1RyYWNlcyA9IHRocmVhZEluZm8udGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICBpZiAoc3Rh
Y2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgTG9nZ2luZy53KFRBRywgdGhyZWFkTmFtZSAr
ICIgc3RhY2t0cmFjZToiKTsKLSAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgc3RhY2tUcmFj
ZSA6IHN0YWNrVHJhY2VzKSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsIHN0YWNrVHJhY2UudG9T
dHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChwcmludE5hdGl2ZVN0YWNrVHJhY2Up
IHsKLSAgICAgIC8vIEltaXRhdGUgb3V0cHV0IGZyb20gZGVidWdnZXJkL3RvbWJzdG9uZSBzbyB0
aGF0IHN0YWNrIHRyYWNlIGNhbiBlYXNpbHkgYmUgc3ltYm9saXplZCB3aXRoCi0gICAgICAvLyBu
ZGstc3RhY2suCi0gICAgICBMb2dnaW5nLncoVEFHLCAiKioqICoqKiAqKiogKioqICoqKiAqKiog
KioqICoqKiAqKiogKioqICoqKiAqKiogKioqICoqKiAqKiogKioqIik7Ci0gICAgICBMb2dnaW5n
LncoVEFHLAotICAgICAgICAgICJwaWQ6ICIgKyBQcm9jZXNzLm15UGlkKCkgKyAiLCB0aWQ6ICIg
KyB0aHJlYWRJbmZvLnRpZCArICIsIG5hbWU6ICIgKyB0aHJlYWROYW1lCi0gICAgICAgICAgICAg
ICsgIiAgPj4+IFdlYlJUQyA8PDwiKTsKLSAgICAgIG5hdGl2ZVByaW50U3RhY2tUcmFjZSh0aHJl
YWRJbmZvLnRpZCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIERlcHJlY2F0ZWQsIHVzZSBub24tc3Rh
dGljIHZlcnNpb24gaW5zdGVhZC4gKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHByaW50U3RhY2tUcmFjZXMoKSB7Ci0gICAgcHJpbnRTdGFja1RyYWNlKHN0YXRpY05ldHdv
cmtUaHJlYWQsIC8qIHByaW50TmF0aXZlU3RhY2tUcmFjZT0gKi8gZmFsc2UpOwotICAgIHByaW50
U3RhY2tUcmFjZShzdGF0aWNXb3JrZXJUaHJlYWQsIC8qIHByaW50TmF0aXZlU3RhY2tUcmFjZT0g
Ki8gZmFsc2UpOwotICAgIHByaW50U3RhY2tUcmFjZShzdGF0aWNTaWduYWxpbmdUaHJlYWQsIC8q
IHByaW50TmF0aXZlU3RhY2tUcmFjZT0gKi8gZmFsc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBy
aW50IHRoZSBKYXZhIHN0YWNrIHRyYWNlcyBmb3IgdGhlIGNyaXRpY2FsIHRocmVhZHMgdXNlZCBi
eSBQZWVyQ29ubmVjdGlvbkZhY3RvcnksIG5hbWVseTsKLSAgICogc2lnbmFsaW5nIHRocmVhZCwg
d29ya2VyIHRocmVhZCwgYW5kIG5ldHdvcmsgdGhyZWFkLiBJZiBwcmludE5hdGl2ZVN0YWNrVHJh
Y2VzIGlzIHRydWUsIGFsc28KLSAgICogYXR0ZW1wdCB0byBwcmludCB0aGUgQysrIHN0YWNrIHRy
YWNlcyBmb3IgdGhlc2UgKGFuZCBzb21lIG90aGVyKSB0aHJlYWRzLgotICAgKi8KLSAgcHVibGlj
IHZvaWQgcHJpbnRJbnRlcm5hbFN0YWNrVHJhY2VzKGJvb2xlYW4gcHJpbnROYXRpdmVTdGFja1Ry
YWNlcykgewotICAgIHByaW50U3RhY2tUcmFjZShzaWduYWxpbmdUaHJlYWQsIHByaW50TmF0aXZl
U3RhY2tUcmFjZXMpOwotICAgIHByaW50U3RhY2tUcmFjZSh3b3JrZXJUaHJlYWQsIHByaW50TmF0
aXZlU3RhY2tUcmFjZXMpOwotICAgIHByaW50U3RhY2tUcmFjZShuZXR3b3JrVGhyZWFkLCBwcmlu
dE5hdGl2ZVN0YWNrVHJhY2VzKTsKLSAgICBpZiAocHJpbnROYXRpdmVTdGFja1RyYWNlcykgewot
ICAgICAgbmF0aXZlUHJpbnRTdGFja1RyYWNlc09mUmVnaXN0ZXJlZFRocmVhZHMoKTsKLSAgICB9
Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJpdmF0ZSB2b2lkIG9uTmV0d29ya1RocmVh
ZFJlYWR5KCkgewotICAgIG5ldHdvcmtUaHJlYWQgPSBUaHJlYWRJbmZvLmdldEN1cnJlbnQoKTsK
LSAgICBzdGF0aWNOZXR3b3JrVGhyZWFkID0gbmV0d29ya1RocmVhZDsKLSAgICBMb2dnaW5nLmQo
VEFHLCAib25OZXR3b3JrVGhyZWFkUmVhZHkiKTsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQot
ICBwcml2YXRlIHZvaWQgb25Xb3JrZXJUaHJlYWRSZWFkeSgpIHsKLSAgICB3b3JrZXJUaHJlYWQg
PSBUaHJlYWRJbmZvLmdldEN1cnJlbnQoKTsKLSAgICBzdGF0aWNXb3JrZXJUaHJlYWQgPSB3b3Jr
ZXJUaHJlYWQ7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uV29ya2VyVGhyZWFkUmVhZHkiKTsKLSAg
fQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIHZvaWQgb25TaWduYWxpbmdUaHJlYWRS
ZWFkeSgpIHsKLSAgICBzaWduYWxpbmdUaHJlYWQgPSBUaHJlYWRJbmZvLmdldEN1cnJlbnQoKTsK
LSAgICBzdGF0aWNTaWduYWxpbmdUaHJlYWQgPSBzaWduYWxpbmdUaHJlYWQ7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgIm9uU2lnbmFsaW5nVGhyZWFkUmVhZHkiKTsKLSAgfQotCi0gIC8vIE11c3QgYmUg
Y2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGNyZWF0aW5nIGEgUGVlckNvbm5lY3Rpb25GYWN0
b3J5Ci0gIC8vIChmb3IgZXhhbXBsZSwgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0aW1lKS4KLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlSW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxz
KCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUluaXRpYWxpemVGaWVsZFRy
aWFscyhTdHJpbmcgZmllbGRUcmlhbHNJbml0U3RyaW5nKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIFN0cmluZyBuYXRpdmVGaW5kRmllbGRUcmlhbHNGdWxsTmFtZShTdHJpbmcgbmFtZSk7Ci0g
IHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUluaXRpYWxpemVJbnRlcm5hbFRyYWNl
cigpOwotICAvLyBJbnRlcm5hbCB0cmFjaW5nIHNodXRkb3duLCBjYWxsZWQgdG8gcHJldmVudCBy
ZXNvdXJjZSBsZWFrcy4gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIKLSAgLy8gUGVlckNvbm5lY3Rpb25G
YWN0b3J5IGlzIGdvbmUgdG8gcHJldmVudCByYWNlcyB3aXRoIGNvZGUgcGVyZm9ybWluZyB0cmFj
aW5nLgotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTaHV0ZG93bkludGVybmFs
VHJhY2VyKCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVN0YXJ0SW50
ZXJuYWxUcmFjaW5nQ2FwdHVyZShTdHJpbmcgdHJhY2luZ0ZpbGVuYW1lKTsKLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlU3RvcEludGVybmFsVHJhY2luZ0NhcHR1cmUoKTsKLQot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IG5hdGl2ZUNyZWF0
ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShDb250ZXh0IGNvbnRleHQsCi0gICAgICBPcHRpb25zIG9w
dGlvbnMsIGxvbmcgbmF0aXZlQXVkaW9EZXZpY2VNb2R1bGUsIGxvbmcgYXVkaW9FbmNvZGVyRmFj
dG9yeSwKLSAgICAgIGxvbmcgYXVkaW9EZWNvZGVyRmFjdG9yeSwgVmlkZW9FbmNvZGVyRmFjdG9y
eSBlbmNvZGVyRmFjdG9yeSwKLSAgICAgIFZpZGVvRGVjb2RlckZhY3RvcnkgZGVjb2RlckZhY3Rv
cnksIGxvbmcgbmF0aXZlQXVkaW9Qcm9jZXNzb3IsCi0gICAgICBsb25nIG5hdGl2ZUZlY0NvbnRy
b2xsZXJGYWN0b3J5LCBsb25nIG5hdGl2ZU5ldHdvcmtDb250cm9sbGVyRmFjdG9yeSwKLSAgICAg
IGxvbmcgbmF0aXZlTmV0d29ya1N0YXRlUHJlZGljdG9yRmFjdG9yeSwgbG9uZyBtZWRpYVRyYW5z
cG9ydEZhY3RvcnksIGxvbmcgbmV0ZXFGYWN0b3J5KTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgbG9uZyBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbihsb25nIGZhY3RvcnksCi0gICAgICBQ
ZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZywgTWVkaWFDb25zdHJhaW50
cyBjb25zdHJhaW50cywgbG9uZyBuYXRpdmVPYnNlcnZlciwKLSAgICAgIFNTTENlcnRpZmljYXRl
VmVyaWZpZXIgc3NsQ2VydGlmaWNhdGVWZXJpZmllcik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSBsb25nIG5hdGl2ZUNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0obG9uZyBmYWN0b3J5LCBTdHJpbmcg
bGFiZWwpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVWaWRlb1Nv
dXJjZSgKLSAgICAgIGxvbmcgZmFjdG9yeSwgYm9vbGVhbiBpc19zY3JlZW5jYXN0LCBib29sZWFu
IGFsaWduVGltZXN0YW1wcyk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNy
ZWF0ZVZpZGVvVHJhY2soCi0gICAgICBsb25nIGZhY3RvcnksIFN0cmluZyBpZCwgbG9uZyBuYXRp
dmVWaWRlb1NvdXJjZSk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0
ZUF1ZGlvU291cmNlKGxvbmcgZmFjdG9yeSwgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cyk7
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUF1ZGlvVHJhY2sobG9u
ZyBmYWN0b3J5LCBTdHJpbmcgaWQsIGxvbmcgbmF0aXZlU291cmNlKTsKLSAgcHJpdmF0ZSBzdGF0
aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU3RhcnRBZWNEdW1wKAotICAgICAgbG9uZyBmYWN0b3J5
LCBpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTdG9wQWVjRHVtcChsb25nIGZhY3RvcnkpOwot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVGcmVlRmFjdG9yeShsb25nIGZhY3Rv
cnkpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXROYXRpdmVQZWVyQ29u
bmVjdGlvbkZhY3RvcnkobG9uZyBmYWN0b3J5KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlSW5qZWN0TG9nZ2FibGUoSk5JTG9nZ2luZyBqbmlMb2dnaW5nLCBpbnQgc2V2ZXJp
dHkpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVEZWxldGVMb2dnYWJsZSgp
OwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVQcmludFN0YWNrVHJhY2UoaW50
IHRpZCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVByaW50U3RhY2tUcmFj
ZXNPZlJlZ2lzdGVyZWRUaHJlYWRzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9QbGF0
Zm9ybVNvZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUGxhdGZv
cm1Tb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODI0MTdmZDk4MGM5ZjQyOGNmNmY1ZGI2ZTRkNzA3OTQ5YWU3MzlmMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9QbGF0
Zm9ybVNvZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
NDkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1p
bXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9ydCBhbmRyb2lkLnN1cHBv
cnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0vKiog
RmFjdG9yeSBmb3IgQW5kcm9pZCBwbGF0Zm9ybSBzb2Z0d2FyZSBWaWRlb0RlY29kZXJzLiAqLwot
cHVibGljIGNsYXNzIFBsYXRmb3JtU29mdHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5IGV4dGVuZHMg
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkgewotICAvKioKLSAgICogRGVmYXVsdCBhbGxv
d2VkIHByZWRpY2F0ZS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFByZWRpY2F0ZTxN
ZWRpYUNvZGVjSW5mbz4gZGVmYXVsdEFsbG93ZWRQcmVkaWNhdGUgPQotICAgICAgbmV3IFByZWRp
Y2F0ZTxNZWRpYUNvZGVjSW5mbz4oKSB7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nW10gcHJlZml4
V2hpdGVsaXN0ID0KLSAgICAgICAgICAgIEFycmF5cy5jb3B5T2YoTWVkaWFDb2RlY1V0aWxzLlNP
RlRXQVJFX0lNUExFTUVOVEFUSU9OX1BSRUZJWEVTLAotICAgICAgICAgICAgICAgIE1lZGlhQ29k
ZWNVdGlscy5TT0ZUV0FSRV9JTVBMRU1FTlRBVElPTl9QUkVGSVhFUy5sZW5ndGgpOwotCi0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0KE1lZGlhQ29kZWNJbmZv
IGFyZykgewotICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gYXJnLmdldE5hbWUoKTsKLSAg
ICAgICAgICBmb3IgKFN0cmluZyBwcmVmaXggOiBwcmVmaXhXaGl0ZWxpc3QpIHsKLSAgICAgICAg
ICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgewotICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICB9OwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgUGxhdGZvcm1T
b2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkgdGhhdCBzdXBwb3J0cyBzdXJmYWNlIHRleHR1cmUg
cmVuZGVyaW5nLgotICAgKgotICAgKiBAcGFyYW0gc2hhcmVkQ29udGV4dCBUaGUgdGV4dHVyZXMg
Z2VuZXJhdGVkIHdpbGwgYmUgYWNjZXNzaWJsZSBmcm9tIHRoaXMgY29udGV4dC4gTWF5IGJlIG51
bGwsCi0gICAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZGlzYWJsZXMgdGV4dHVyZSBzdXBw
b3J0LgotICAgKi8KLSAgcHVibGljIFBsYXRmb3JtU29mdHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5
KEBOdWxsYWJsZSBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCkgewotICAgIHN1cGVyKHNo
YXJlZENvbnRleHQsIGRlZmF1bHRBbGxvd2VkUHJlZGljYXRlKTsKLSAgfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvUHJlZGljYXRlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9QcmVkaWNhdGUuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBlNjk3NTAwMDI3MDJlZjE0YTAyNGM2
NmUwM2FmZjJkOTJmZWY0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9hcGkvb3JnL3dlYnJ0Yy9QcmVkaWNhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcz
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoq
Ci0gKiBSZXByZXNlbnRzIGEgcHJlZGljYXRlIChib29sZWFuLXZhbHVlZCBmdW5jdGlvbikgb2Yg
b25lIGFyZ3VtZW50LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByZWRpY2F0ZTxUPiB7Ci0gIC8q
KgotICAgKiBFdmFsdWF0ZXMgdGhpcyBwcmVkaWNhdGUgb24gdGhlIGdpdmVuIGFyZ3VtZW50Lgot
ICAgKgotICAgKiBAcGFyYW0gYXJnIHRoZSBpbnB1dCBhcmd1bWVudAotICAgKiBAcmV0dXJuIHRy
dWUgaWYgdGhlIGlucHV0IGFyZ3VtZW50IG1hdGNoZXMgdGhlIHByZWRpY2F0ZSwgb3RoZXJ3aXNl
IGZhbHNlCi0gICAqLwotICBib29sZWFuIHRlc3QoVCBhcmcpOwotCi0gIC8qKgotICAgKiBSZXR1
cm5zIGEgY29tcG9zZWQgcHJlZGljYXRlIHRoYXQgcmVwcmVzZW50cyBhIHNob3J0LWNpcmN1aXRp
bmcgbG9naWNhbCBPUiBvZiB0aGlzIHByZWRpY2F0ZQotICAgKiBhbmQgYW5vdGhlci4gV2hlbiBl
dmFsdWF0aW5nIHRoZSBjb21wb3NlZCBwcmVkaWNhdGUsIGlmIHRoaXMgcHJlZGljYXRlIGlzIHRy
dWUsIHRoZW4gdGhlIG90aGVyCi0gICAqIHByZWRpY2F0ZSBpcyBub3QgZXZhbHVhdGVkLgotICAg
KgotICAgKiBAcGFyYW0gb3RoZXIgYSBwcmVkaWNhdGUgdGhhdCB3aWxsIGJlIGxvZ2ljYWxseS1P
UmVkIHdpdGggdGhpcyBwcmVkaWNhdGUKLSAgICogQHJldHVybiBhIGNvbXBvc2VkIHByZWRpY2F0
ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHNob3J0LWNpcmN1aXRpbmcgbG9naWNhbCBPUiBvZiB0aGlz
IHByZWRpY2F0ZQotICAgKiAgICAgYW5kIHRoZSBvdGhlciBwcmVkaWNhdGUKLSAgICovCi0gIGRl
ZmF1bHQgUHJlZGljYXRlPFQ+IG9yKFByZWRpY2F0ZTw/IHN1cGVyIFQ+IG90aGVyKSB7Ci0gICAg
cmV0dXJuIG5ldyBQcmVkaWNhdGU8VD4oKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyBib29sZWFuIHRlc3QoVCBhcmcpIHsKLSAgICAgICAgcmV0dXJuIFByZWRpY2F0ZS50aGlzLnRl
c3QoYXJnKSB8fCBvdGhlci50ZXN0KGFyZyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8q
KgotICAgKiBSZXR1cm5zIGEgY29tcG9zZWQgcHJlZGljYXRlIHRoYXQgcmVwcmVzZW50cyBhIHNo
b3J0LWNpcmN1aXRpbmcgbG9naWNhbCBBTkQgb2YgdGhpcyBwcmVkaWNhdGUKLSAgICogYW5kIGFu
b3RoZXIuCi0gICAqCi0gICAqIEBwYXJhbSBvdGhlciBhIHByZWRpY2F0ZSB0aGF0IHdpbGwgYmUg
bG9naWNhbGx5LUFORGVkIHdpdGggdGhpcyBwcmVkaWNhdGUKLSAgICogQHJldHVybiBhIGNvbXBv
c2VkIHByZWRpY2F0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHNob3J0LWNpcmN1aXRpbmcgbG9naWNh
bCBBTkQgb2YgdGhpcyBwcmVkaWNhdGUKLSAgICogICAgIGFuZCB0aGUgb3RoZXIgcHJlZGljYXRl
Ci0gICAqLwotICBkZWZhdWx0IFByZWRpY2F0ZTxUPiBhbmQoUHJlZGljYXRlPD8gc3VwZXIgVD4g
b3RoZXIpIHsKLSAgICByZXR1cm4gbmV3IFByZWRpY2F0ZTxUPigpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChUIGFyZykgewotICAgICAgICByZXR1cm4gUHJl
ZGljYXRlLnRoaXMudGVzdChhcmcpICYmIG90aGVyLnRlc3QoYXJnKTsKLSAgICAgIH0KLSAgICB9
OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCByZXByZXNlbnRz
IHRoZSBsb2dpY2FsIG5lZ2F0aW9uIG9mIHRoaXMgcHJlZGljYXRlLgotICAgKgotICAgKiBAcmV0
dXJuIGEgcHJlZGljYXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgbG9naWNhbCBuZWdhdGlvbiBvZiB0
aGlzIHByZWRpY2F0ZQotICAgKi8KLSAgZGVmYXVsdCBQcmVkaWNhdGU8VD4gbmVnYXRlKCkgewot
ICAgIHJldHVybiBuZXcgUHJlZGljYXRlPFQ+KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgYm9vbGVhbiB0ZXN0KFQgYXJnKSB7Ci0gICAgICAgIHJldHVybiAhUHJlZGljYXRlLnRo
aXMudGVzdChhcmcpOwotICAgICAgfQotICAgIH07Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SVENTdGF0cy5qYXZhIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93
ZWJydGMvUlRDU3RhdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkNzYz
NGM4MjEyNzlmYmEwODYzMjhhZmIzZDNjYTRlMDYzNmM3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SVENTdGF0cy5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogSmF2YSB2ZXJz
aW9uIG9mIHdlYnJ0Yzo6UlRDU3RhdHMuIFJlcHJlc2VudHMgYW4gUlRDU3RhdHMgb2JqZWN0LCBh
cwotICogZGVzY3JpYmVkIGluIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJydGMtc3RhdHMvLiBU
aGUgfGlkfCwgfHRpbWVzdGFtcFVzfAotICogYW5kIHx0eXBlfCBhY2Nlc3NvcnMgaGF2ZSB0aGUg
c2FtZSBtZWFuaW5nIGZvciB0aGlzIGNsYXNzIGFzIGZvciB0aGUKLSAqIFJUQ1N0YXRzIGRpY3Rp
b25hcnkuIEVhY2ggUlRDU3RhdHNSZXBvcnQgcHJvZHVjZWQgYnkgZ2V0U3RhdHMgY29udGFpbnMK
LSAqIG11bHRpcGxlIFJUQ1N0YXRzIG9iamVjdHM7IG9uZSBmb3IgZWFjaCB1bmRlcmx5aW5nIG9i
amVjdCAoY29kZWMsIHN0cmVhbSwKLSAqIHRyYW5zcG9ydCwgZXRjLikgdGhhdCB3YXMgaW5zcGVj
dGVkIHRvIHByb2R1Y2UgdGhlIHN0YXRzLgotICovCi1wdWJsaWMgY2xhc3MgUlRDU3RhdHMgewot
ICBwcml2YXRlIGZpbmFsIGxvbmcgdGltZXN0YW1wVXM7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5n
IHR5cGU7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGlkOwotICBwcml2YXRlIGZpbmFsIE1hcDxT
dHJpbmcsIE9iamVjdD4gbWVtYmVyczsKLQotICBwdWJsaWMgUlRDU3RhdHMobG9uZyB0aW1lc3Rh
bXBVcywgU3RyaW5nIHR5cGUsIFN0cmluZyBpZCwgTWFwPFN0cmluZywgT2JqZWN0PiBtZW1iZXJz
KSB7Ci0gICAgdGhpcy50aW1lc3RhbXBVcyA9IHRpbWVzdGFtcFVzOwotICAgIHRoaXMudHlwZSA9
IHR5cGU7Ci0gICAgdGhpcy5pZCA9IGlkOwotICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnM7Ci0g
IH0KLQotICAvLyBUaW1lc3RhbXAgaW4gbWljcm9zZWNvbmRzLgotICBwdWJsaWMgZG91YmxlIGdl
dFRpbWVzdGFtcFVzKCkgewotICAgIHJldHVybiB0aW1lc3RhbXBVczsKLSAgfQotCi0gIC8vIEVx
dWl2YWxlbnQgdG8gUlRDU3RhdHNUeXBlIGluIHRoZSBzdGF0cyBzcGVjLiBJbmRpY2F0ZXMgdGhl
IHR5cGUgb2YgdGhlCi0gIC8vIG9iamVjdCB0aGF0IHdhcyBpbnNwZWN0ZWQgdG8gcHJvZHVjZSB0
aGUgc3RhdHMuCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKLSAgICByZXR1cm4gdHlwZTsK
LSAgfQotCi0gIC8vIFVuaXF1ZSBJRCByZXByZXNlbnRpbmcgdGhpcyBzdGF0cyBvYmplY3QuIE1h
eSBiZSByZWZlcnJlZCB0byBieSBtZW1iZXJzIG9mCi0gIC8vIG90aGVyIHN0YXRzIG9iamVjdHMu
Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFJldHVybnMgbWFwIG9mIG1lbWJlciBuYW1lcyB0byB2YWx1ZXMuIFJldHVybnMgYXMg
YW4gb3JkZXJlZCBtYXAgc28gdGhhdAotICAgKiB0aGUgc3RhdHMgb2JqZWN0IGNhbiBiZSBzZXJp
YWxpemVkIHdpdGggYSBjb25zaXN0ZW50IG9yZGVyaW5nLgotICAgKgotICAgKiBWYWx1ZXMgd2ls
bCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBvYmplY3RzOgotICAgKiAtIEJvb2xlYW4KLSAgICog
LSBJbnRlZ2VyIChmb3IgMzItYml0IHNpZ25lZCBpbnRlZ2VycykKLSAgICogLSBMb25nIChmb3Ig
MzItYml0IHVuc2lnbmVkIGFuZCA2NC1iaXQgc2lnbmVkIGludGVnZXJzKQotICAgKiAtIEJpZ0lu
dGVnZXIgKGZvciA2NC1iaXQgdW5zaWduZWQgaW50ZWdlcnMpCi0gICAqIC0gRG91YmxlCi0gICAq
IC0gU3RyaW5nCi0gICAqIC0gVGhlIGFycmF5IGZvcm0gb2YgYW55IG9mIHRoZSBhYm92ZSAoZS5n
LiwgSW50ZWdlcltdKQotICAgKi8KLSAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0TWVt
YmVycygpIHsKLSAgICByZXR1cm4gbWVtYmVyczsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBT
dHJpbmdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoInsgdGltZXN0YW1wVXM6ICIpCi0g
ICAgICAgIC5hcHBlbmQodGltZXN0YW1wVXMpCi0gICAgICAgIC5hcHBlbmQoIiwgdHlwZTogIikK
LSAgICAgICAgLmFwcGVuZCh0eXBlKQotICAgICAgICAuYXBwZW5kKCIsIGlkOiAiKQotICAgICAg
ICAuYXBwZW5kKGlkKTsKLSAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKLSAgICBmb3IgKE1hcC5F
bnRyeTxTdHJpbmcsIE9iamVjdD4gZW50cnkgOiBtZW1iZXJzLmVudHJ5U2V0KCkpIHsKLSAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIsICIpLmFwcGVuZChlbnRyeS5nZXRLZXkoKSkuYXBwZW5kKCI6ICIp
OwotICAgICAgYXBwZW5kVmFsdWUoYnVpbGRlciwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgfQot
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgfSIpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGVuZFZhbHVlKFN0cmluZ0J1aWxkZXIg
YnVpbGRlciwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0
W10pIHsKLSAgICAgIE9iamVjdFtdIGFycmF5VmFsdWUgPSAoT2JqZWN0W10pIHZhbHVlOwotICAg
ICAgYnVpbGRlci5hcHBlbmQoJ1snKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlW
YWx1ZS5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIH0KLSAgICAgICAgYXBwZW5kVmFsdWUoYnVpbGRl
ciwgYXJyYXlWYWx1ZVtpXSk7Ci0gICAgICB9Ci0gICAgICBidWlsZGVyLmFwcGVuZCgnXScpOwot
ICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgIC8vIEVuY2xv
c2Ugc3RyaW5ncyBpbiBxdW90ZXMgdG8gbWFrZSBpdCBjbGVhciB0aGV5J3JlIHN0cmluZ3MuCi0g
ICAgICBidWlsZGVyLmFwcGVuZCgnIicpLmFwcGVuZCh2YWx1ZSkuYXBwZW5kKCciJyk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NTU3KSBVc2UgY3RvciBkaXJlY3RseSB3aXRoIGZ1bGwg
TWFwIHR5cGUuCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBAQ2FsbGVkQnlO
YXRpdmUKLSAgc3RhdGljIFJUQ1N0YXRzIGNyZWF0ZShsb25nIHRpbWVzdGFtcFVzLCBTdHJpbmcg
dHlwZSwgU3RyaW5nIGlkLCBNYXAgbWVtYmVycykgewotICAgIHJldHVybiBuZXcgUlRDU3RhdHMo
dGltZXN0YW1wVXMsIHR5cGUsIGlkLCBtZW1iZXJzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvUlRDU3RhdHNDb2xsZWN0b3JDYWxsYmFjay5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUlRD
U3RhdHNDb2xsZWN0b3JDYWxsYmFjay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkYzg5MDJjOTNjNTZlNjE5M2RiZmRiYTJmNWY3OWNhNzVhYzgzNzNkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1JUQ1N0YXRzQ29s
bGVjdG9yQ2FsbGJhY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEludGVyZmFjZSBmb3Ig
cmVjZWl2aW5nIHN0YXRzIHJlcG9ydHMgKHNlZSB3ZWJydGM6OlJUQ1N0YXRzQ29sbGVjdG9yQ2Fs
bGJhY2spLiAqLwotcHVibGljIGludGVyZmFjZSBSVENTdGF0c0NvbGxlY3RvckNhbGxiYWNrIHsK
LSAgLyoqIENhbGxlZCB3aGVuIHRoZSBzdGF0cyByZXBvcnQgaXMgcmVhZHkuICovCi0gIEBDYWxs
ZWRCeU5hdGl2ZSBwdWJsaWMgdm9pZCBvblN0YXRzRGVsaXZlcmVkKFJUQ1N0YXRzUmVwb3J0IHJl
cG9ydCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SVENTdGF0c1JlcG9ydC5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvUlRDU3RhdHNSZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDRkOTBkYjFhNjg5ODA1N2YzNjZmMjJiZDFlMjhjMWZhYTU0ZWI0NC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SVENTdGF0
c1JlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQot
LyoqCi0gKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpSVENTdGF0c1JlcG9ydC4gRWFjaCBSVENT
dGF0c1JlcG9ydCBwcm9kdWNlZCBieQotICogZ2V0U3RhdHMgY29udGFpbnMgbXVsdGlwbGUgUlRD
U3RhdHMgb2JqZWN0czsgb25lIGZvciBlYWNoIHVuZGVybHlpbmcgb2JqZWN0Ci0gKiAoY29kZWMs
IHN0cmVhbSwgdHJhbnNwb3J0LCBldGMuKSB0aGF0IHdhcyBpbnNwZWN0ZWQgdG8gcHJvZHVjZSB0
aGUgc3RhdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSVENTdGF0c1JlcG9ydCB7Ci0gIHByaXZhdGUg
ZmluYWwgbG9uZyB0aW1lc3RhbXBVczsKLSAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBSVENT
dGF0cz4gc3RhdHM7Ci0KLSAgcHVibGljIFJUQ1N0YXRzUmVwb3J0KGxvbmcgdGltZXN0YW1wVXMs
IE1hcDxTdHJpbmcsIFJUQ1N0YXRzPiBzdGF0cykgewotICAgIHRoaXMudGltZXN0YW1wVXMgPSB0
aW1lc3RhbXBVczsKLSAgICB0aGlzLnN0YXRzID0gc3RhdHM7Ci0gIH0KLQotICAvLyBUaW1lc3Rh
bXAgaW4gbWljcm9zZWNvbmRzLgotICBwdWJsaWMgZG91YmxlIGdldFRpbWVzdGFtcFVzKCkgewot
ICAgIHJldHVybiB0aW1lc3RhbXBVczsKLSAgfQotCi0gIC8vIE1hcCBvZiBzdGF0cyBvYmplY3Qg
SURzIHRvIHN0YXRzIG9iamVjdHMuIENhbiBiZSB1c2VkIHRvIGVhc2lseSBsb29rIHVwCi0gIC8v
IG90aGVyIHN0YXRzIG9iamVjdHMsIHdoZW4gdGhleSByZWZlciB0byBlYWNoIG90aGVyIGJ5IElE
LgotICBwdWJsaWMgTWFwPFN0cmluZywgUlRDU3RhdHM+IGdldFN0YXRzTWFwKCkgewotICAgIHJl
dHVybiBzdGF0czsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5n
KCkgewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoInsgdGltZXN0YW1wVXM6ICIpLmFwcGVuZCh0aW1lc3RhbXBVcyku
YXBwZW5kKCIsIHN0YXRzOiBbXG4iKTsKLSAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKLSAgICBm
b3IgKFJUQ1N0YXRzIHN0YXQgOiBzdGF0cy52YWx1ZXMoKSkgewotICAgICAgaWYgKCFmaXJzdCkg
ewotICAgICAgICBidWlsZGVyLmFwcGVuZCgiLFxuIik7Ci0gICAgICB9Ci0gICAgICBidWlsZGVy
LmFwcGVuZChzdGF0KTsKLSAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgfQotICAgIGJ1aWxkZXIu
YXBwZW5kKCIgXSB9Iik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgfQotCi0g
IC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg1NTcpIFVzZSBjdG9yIGRpcmVjdGx5IHdpdGggZnVs
bCBNYXAgdHlwZS4KLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIEBDYWxsZWRC
eU5hdGl2ZQotICBwcml2YXRlIHN0YXRpYyBSVENTdGF0c1JlcG9ydCBjcmVhdGUobG9uZyB0aW1l
c3RhbXBVcywgTWFwIHN0YXRzKSB7Ci0gICAgcmV0dXJuIG5ldyBSVENTdGF0c1JlcG9ydCh0aW1l
c3RhbXBVcywgc3RhdHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SZWZDb3Vu
dGVkLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SZWZDb3VudGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBjMWMzYmYxZjljYjViMTJlNTg1MzYxMjFiMDlmZThjOTAwNDMwNGYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
UmVmQ291bnRlZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEludGVyZmFjZSBmb3Ig
cmVmIGNvdW50ZWQgb2JqZWN0cyBpbiBXZWJSVEMuIFRoZXNlIG9iamVjdHMgaGF2ZSBzaWduaWZp
Y2FudCByZXNvdXJjZXMgdGhhdCBuZWVkCi0gKiB0byBiZSBmcmVlZCB3aGVuIHRoZXkgYXJlIG5v
IGxvbmdlciBpbiB1c2UuIEVhY2ggb2JqZWN0cyBzdGFydHMgd2l0aCByZWYgY291bnQgb2Ygb25l
IHdoZW4KLSAqIGNyZWF0ZWQuIElmIGEgcmVmZXJlbmNlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRl
ciB0byBhIG1ldGhvZCwgdGhlIGNhbGxlciBoYXMgb3duZXNyc2hpcCBvZiB0aGUKLSAqIG9iamVj
dCBieSBkZWZhdWx0IC0gY2FsbGluZyByZWxlYXNlIGlzIG5vdCBuZWNlc3NhcnkgdW5sZXNzIHJl
dGFpbiBpcyBjYWxsZWQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVmQ291bnRlZCB7Ci0gIC8q
KiBJbmNyZWFzZXMgcmVmIGNvdW50IGJ5IG9uZS4gKi8KLSAgQENhbGxlZEJ5TmF0aXZlIHZvaWQg
cmV0YWluKCk7Ci0KLSAgLyoqCi0gICAqIERlY3JlYXNlcyByZWYgY291bnQgYnkgb25lLiBXaGVu
IHRoZSByZWYgY291bnQgcmVhY2hlcyB6ZXJvLCByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgb2Jq
ZWN0Ci0gICAqIHdpbGwgYmUgZnJlZWQuCi0gICAqLwotICBAQ2FsbGVkQnlOYXRpdmUgdm9pZCBy
ZWxlYXNlKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZh
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTg2NWIwN2NhNDBiYzM5Y2MyOGFiMGY3ZGNjODEyOTc0ODQ0MmVmMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SZW5k
ZXJlckNvbW1vbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhp
Y3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQu
dmlldy5WaWV3OwotCi0vKioKLSAqIFN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGZvciByZW5kZXJl
ciBpbXBsZW1lbnRhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW5kZXJlckNvbW1vbiB7Ci0g
IC8qKiBJbnRlcmZhY2UgZm9yIHJlcG9ydGluZyByZW5kZXJpbmcgZXZlbnRzLiAqLwotICBwdWJs
aWMgc3RhdGljIGludGVyZmFjZSBSZW5kZXJlckV2ZW50cyB7Ci0gICAgLyoqCi0gICAgICogQ2Fs
bGJhY2sgZmlyZWQgb25jZSBmaXJzdCBmcmFtZSBpcyByZW5kZXJlZC4KLSAgICAgKi8KLSAgICBw
dWJsaWMgdm9pZCBvbkZpcnN0RnJhbWVSZW5kZXJlZCgpOwotCi0gICAgLyoqCi0gICAgICogQ2Fs
bGJhY2sgZmlyZWQgd2hlbiByZW5kZXJlZCBmcmFtZSByZXNvbHV0aW9uIG9yIHJvdGF0aW9uIGhh
cyBjaGFuZ2VkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uRnJhbWVSZXNvbHV0aW9uQ2hh
bmdlZChpbnQgdmlkZW9XaWR0aCwgaW50IHZpZGVvSGVpZ2h0LCBpbnQgcm90YXRpb24pOwotICB9
Ci0KLSAgLyoqCi0gICAqIEludGVyZmFjZSBmb3IgcmVuZGVyaW5nIGZyYW1lcyBvbiBhbiBFR0xT
dXJmYWNlIHdpdGggc3BlY2lmaWVkIHZpZXdwb3J0IGxvY2F0aW9uLiBSb3RhdGlvbiwKLSAgICog
bWlycm9yLCBhbmQgY3JvcHBpbmcgaXMgc3BlY2lmaWVkIHVzaW5nIGEgNHg0IHRleHR1cmUgY29v
cmRpbmF0ZSB0cmFuc2Zvcm0gbWF0cml4LiBUaGUgZnJhbWUKLSAgICogaW5wdXQgY2FuIGVpdGhl
ciBiZSBhbiBPRVMgdGV4dHVyZSwgUkdCIHRleHR1cmUsIG9yIFlVViB0ZXh0dXJlcyBpbiBJNDIw
IGZvcm1hdC4gVGhlIGZ1bmN0aW9uCi0gICAqIHJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZCBtYW51
YWxseSB0byBmcmVlIHRoZSByZXNvdXJjZXMgaGVsZCBieSB0aGlzIG9iamVjdC4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEdsRHJhd2VyIHsKLSAgICAvKioKLSAgICAgKiBGdW5j
dGlvbnMgZm9yIGRyYXdpbmcgZnJhbWVzIHdpdGggZGlmZmVyZW50IHNvdXJjZXMuIFRoZSByZW5k
ZXJpbmcgc3VyZmFjZSB0YXJnZXQgaXMKLSAgICAgKiBpbXBsaWVkIGJ5IHRoZSBjdXJyZW50IEVH
TCBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIHRocmVhZCBhbmQgcmVxdWlyZXMgbm8gZXhwbGljaXQg
YXJndW1lbnQuCi0gICAgICogVGhlIGNvb3JkaW5hdGVzIHNwZWNpZnkgdGhlIHZpZXdwb3J0IGxv
Y2F0aW9uIG9uIHRoZSBzdXJmYWNlIHRhcmdldC4KLSAgICAgKi8KLSAgICB2b2lkIGRyYXdPZXMo
aW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQg
ZnJhbWVIZWlnaHQsCi0gICAgICAgIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFksIGludCB2
aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpOwotICAgIHZvaWQgZHJhd1JnYihpbnQg
dGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhl
aWdodCwgaW50IHZpZXdwb3J0WCwKLSAgICAgICAgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0
V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgdm9pZCBkcmF3WXV2KGludFtdIHl1dlRl
eHR1cmVzLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdo
dCwKLSAgICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lk
dGgsIGludCB2aWV3cG9ydEhlaWdodCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZWxlYXNlIGFsbCBH
TCByZXNvdXJjZXMuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBtYW51YWxseSwgb3RoZXJ3aXNlIHJl
c291cmNlcyBtYXkgbGVhay4KLSAgICAgKi8KLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgfQotCi0g
IC8qKgotICAgKiBIZWxwZXIgY2xhc3MgZm9yIGRldGVybWluaW5nIGxheW91dCBzaXplIGJhc2Vk
IG9uIGxheW91dCByZXF1aXJlbWVudHMsIHNjYWxpbmcgdHlwZSwgYW5kIHZpZGVvCi0gICAqIGFz
cGVjdCByYXRpby4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgVmlkZW9MYXlvdXRNZWFz
dXJlIHsKLSAgICAvLyBUaGUgc2NhbGluZyB0eXBlIGRldGVybWluZXMgaG93IHRoZSB2aWRlbyB3
aWxsIGZpbGwgdGhlIGFsbG93ZWQgbGF5b3V0IGFyZWEgaW4gbWVhc3VyZSgpLiBJdAotICAgIC8v
IGNhbiBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSBmb3IgdGhlIGNhc2Ugd2hlbiB2aWRlbyBoYXMg
bWF0Y2hlZCBvcmllbnRhdGlvbiB3aXRoIGxheW91dCBzaXplCi0gICAgLy8gYW5kIHdoZW4gdGhl
cmUgaXMgYW4gb3JpZW50YXRpb24gbWlzbWF0Y2guCi0gICAgcHJpdmF0ZSBmbG9hdCB2aXNpYmxl
RnJhY3Rpb25NYXRjaE9yaWVudGF0aW9uID0KLSAgICAgICAgY29udmVydFNjYWxpbmdUeXBlVG9W
aXNpYmxlRnJhY3Rpb24oU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0JBTEFOQ0VEKTsKLSAgICBw
cml2YXRlIGZsb2F0IHZpc2libGVGcmFjdGlvbk1pc21hdGNoT3JpZW50YXRpb24gPQotICAgICAg
ICBjb252ZXJ0U2NhbGluZ1R5cGVUb1Zpc2libGVGcmFjdGlvbihTY2FsaW5nVHlwZS5TQ0FMRV9B
U1BFQ1RfQkFMQU5DRUQpOwotCi0gICAgcHVibGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGUpIHsKLSAgICAgIHNldFNjYWxpbmdUeXBlKC8qIHNjYWxpbmdUeXBl
TWF0Y2hPcmllbnRhdGlvbj0gKi8gc2NhbGluZ1R5cGUsCi0gICAgICAgICAgLyogc2NhbGluZ1R5
cGVNaXNtYXRjaE9yaWVudGF0aW9uPSAqLyBzY2FsaW5nVHlwZSk7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoCi0gICAgICAgIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBl
TWF0Y2hPcmllbnRhdGlvbiwgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0
aW9uKSB7Ci0gICAgICB0aGlzLnZpc2libGVGcmFjdGlvbk1hdGNoT3JpZW50YXRpb24gPQotICAg
ICAgICAgIGNvbnZlcnRTY2FsaW5nVHlwZVRvVmlzaWJsZUZyYWN0aW9uKHNjYWxpbmdUeXBlTWF0
Y2hPcmllbnRhdGlvbik7Ci0gICAgICB0aGlzLnZpc2libGVGcmFjdGlvbk1pc21hdGNoT3JpZW50
YXRpb24gPQotICAgICAgICAgIGNvbnZlcnRTY2FsaW5nVHlwZVRvVmlzaWJsZUZyYWN0aW9uKHNj
YWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
c2V0VmlzaWJsZUZyYWN0aW9uKAotICAgICAgICBmbG9hdCB2aXNpYmxlRnJhY3Rpb25NYXRjaE9y
aWVudGF0aW9uLCBmbG9hdCB2aXNpYmxlRnJhY3Rpb25NaXNtYXRjaE9yaWVudGF0aW9uKSB7Ci0g
ICAgICB0aGlzLnZpc2libGVGcmFjdGlvbk1hdGNoT3JpZW50YXRpb24gPSB2aXNpYmxlRnJhY3Rp
b25NYXRjaE9yaWVudGF0aW9uOwotICAgICAgdGhpcy52aXNpYmxlRnJhY3Rpb25NaXNtYXRjaE9y
aWVudGF0aW9uID0gdmlzaWJsZUZyYWN0aW9uTWlzbWF0Y2hPcmllbnRhdGlvbjsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgUG9pbnQgbWVhc3VyZShpbnQgd2lkdGhTcGVjLCBpbnQgaGVpZ2h0U3BlYywg
aW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCkgewotICAgICAgLy8gQ2FsY3VsYXRlIG1h
eCBhbGxvd2VkIGxheW91dCBzaXplLgotICAgICAgZmluYWwgaW50IG1heFdpZHRoID0gVmlldy5n
ZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9WQUxVRSwgd2lkdGhTcGVjKTsKLSAgICAgIGZpbmFs
IGludCBtYXhIZWlnaHQgPSBWaWV3LmdldERlZmF1bHRTaXplKEludGVnZXIuTUFYX1ZBTFVFLCBo
ZWlnaHRTcGVjKTsKLSAgICAgIGlmIChmcmFtZVdpZHRoID09IDAgfHwgZnJhbWVIZWlnaHQgPT0g
MCB8fCBtYXhXaWR0aCA9PSAwIHx8IG1heEhlaWdodCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBu
ZXcgUG9pbnQobWF4V2lkdGgsIG1heEhlaWdodCk7Ci0gICAgICB9Ci0gICAgICAvLyBDYWxjdWxh
dGUgZGVzaXJlZCBkaXNwbGF5IHNpemUgYmFzZWQgb24gc2NhbGluZyB0eXBlLCB2aWRlbyBhc3Bl
Y3QgcmF0aW8sCi0gICAgICAvLyBhbmQgbWF4aW11bSBsYXlvdXQgc2l6ZS4KLSAgICAgIGZpbmFs
IGZsb2F0IGZyYW1lQXNwZWN0ID0gZnJhbWVXaWR0aCAvIChmbG9hdCkgZnJhbWVIZWlnaHQ7Ci0g
ICAgICBmaW5hbCBmbG9hdCBkaXNwbGF5QXNwZWN0ID0gbWF4V2lkdGggLyAoZmxvYXQpIG1heEhl
aWdodDsKLSAgICAgIGZpbmFsIGZsb2F0IHZpc2libGVGcmFjdGlvbiA9IChmcmFtZUFzcGVjdCA+
IDEuMGYpID09IChkaXNwbGF5QXNwZWN0ID4gMS4wZikKLSAgICAgICAgICA/IHZpc2libGVGcmFj
dGlvbk1hdGNoT3JpZW50YXRpb24KLSAgICAgICAgICA6IHZpc2libGVGcmFjdGlvbk1pc21hdGNo
T3JpZW50YXRpb247Ci0gICAgICBmaW5hbCBQb2ludCBsYXlvdXRTaXplID0gZ2V0RGlzcGxheVNp
emUodmlzaWJsZUZyYWN0aW9uLCBmcmFtZUFzcGVjdCwgbWF4V2lkdGgsIG1heEhlaWdodCk7Ci0K
LSAgICAgIC8vIElmIHRoZSBtZWFzdXJlIHNwZWNpZmljYXRpb24gaXMgZm9yY2luZyBhIHNwZWNp
ZmljIHNpemUgLSB5aWVsZC4KLSAgICAgIGlmIChWaWV3Lk1lYXN1cmVTcGVjLmdldE1vZGUod2lk
dGhTcGVjKSA9PSBWaWV3Lk1lYXN1cmVTcGVjLkVYQUNUTFkpIHsKLSAgICAgICAgbGF5b3V0U2l6
ZS54ID0gbWF4V2lkdGg7Ci0gICAgICB9Ci0gICAgICBpZiAoVmlldy5NZWFzdXJlU3BlYy5nZXRN
b2RlKGhlaWdodFNwZWMpID09IFZpZXcuTWVhc3VyZVNwZWMuRVhBQ1RMWSkgewotICAgICAgICBs
YXlvdXRTaXplLnkgPSBtYXhIZWlnaHQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbGF5b3V0U2l6
ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBUeXBlcyBvZiB2aWRlbyBzY2FsaW5nOgotICAvLyBTQ0FM
RV9BU1BFQ1RfRklUIC0gdmlkZW8gZnJhbWUgaXMgc2NhbGVkIHRvIGZpdCB0aGUgc2l6ZSBvZiB0
aGUgdmlldyBieQotICAvLyAgICBtYWludGFpbmluZyB0aGUgYXNwZWN0IHJhdGlvIChibGFjayBi
b3JkZXJzIG1heSBiZSBkaXNwbGF5ZWQpLgotICAvLyBTQ0FMRV9BU1BFQ1RfRklMTCAtIHZpZGVv
IGZyYW1lIGlzIHNjYWxlZCB0byBmaWxsIHRoZSBzaXplIG9mIHRoZSB2aWV3IGJ5Ci0gIC8vICAg
IG1haW50YWluaW5nIHRoZSBhc3BlY3QgcmF0aW8uIFNvbWUgcG9ydGlvbiBvZiB0aGUgdmlkZW8g
ZnJhbWUgbWF5IGJlCi0gIC8vICAgIGNsaXBwZWQuCi0gIC8vIFNDQUxFX0FTUEVDVF9CQUxBTkNF
RCAtIENvbXByb21pc2UgYmV0d2VlbiBGSVQgYW5kIEZJTEwuIFZpZGVvIGZyYW1lIHdpbGwgZmls
bCBhcyBtdWNoIGFzCi0gIC8vIHBvc3NpYmxlIG9mIHRoZSB2aWV3IHdoaWxlIG1haW50YWluaW5n
IGFzcGVjdCByYXRpbywgdW5kZXIgdGhlIGNvbnN0cmFpbnQgdGhhdCBhdCBsZWFzdAotICAvLyB8
QkFMQU5DRURfVklTSUJMRV9GUkFDVElPTnwgb2YgdGhlIGZyYW1lIGNvbnRlbnQgd2lsbCBiZSBz
aG93bi4KLSAgcHVibGljIHN0YXRpYyBlbnVtIFNjYWxpbmdUeXBlIHsgU0NBTEVfQVNQRUNUX0ZJ
VCwgU0NBTEVfQVNQRUNUX0ZJTEwsIFNDQUxFX0FTUEVDVF9CQUxBTkNFRCB9Ci0gIC8vIFRoZSBt
aW5pbXVtIGZyYWN0aW9uIG9mIHRoZSBmcmFtZSBjb250ZW50IHRoYXQgd2lsbCBiZSBzaG93biBm
b3IgfFNDQUxFX0FTUEVDVF9CQUxBTkNFRHwuCi0gIC8vIFRoaXMgbGltaXRzIGV4Y2Vzc2l2ZSBj
cm9wcGluZyB3aGVuIGFkanVzdGluZyBkaXNwbGF5IHNpemUuCi0gIHByaXZhdGUgc3RhdGljIGZs
b2F0IEJBTEFOQ0VEX1ZJU0lCTEVfRlJBQ1RJT04gPSAwLjU2MjVmOwotCi0gIC8qKgotICAgKiBS
ZXR1cm5zIGxheW91dCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdGhhdCBhcHBsaWVzIGFuIG9wdGlv
bmFsIG1pcnJvciBlZmZlY3QgYW5kIGNvbXBlbnNhdGVzCi0gICAqIGZvciB2aWRlbyB2cyBkaXNw
bGF5IGFzcGVjdCByYXRpby4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmxvYXRbXSBnZXRMYXlv
dXRNYXRyaXgoCi0gICAgICBib29sZWFuIG1pcnJvciwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbywg
ZmxvYXQgZGlzcGxheUFzcGVjdFJhdGlvKSB7Ci0gICAgZmxvYXQgc2NhbGVYID0gMTsKLSAgICBm
bG9hdCBzY2FsZVkgPSAxOwotICAgIC8vIFNjYWxlIFggb3IgWSBkaW1lbnNpb24gc28gdGhhdCB2
aWRlbyBhbmQgZGlzcGxheSBzaXplIGhhdmUgc2FtZSBhc3BlY3QgcmF0aW8uCi0gICAgaWYgKGRp
c3BsYXlBc3BlY3RSYXRpbyA+IHZpZGVvQXNwZWN0UmF0aW8pIHsKLSAgICAgIHNjYWxlWSA9IHZp
ZGVvQXNwZWN0UmF0aW8gLyBkaXNwbGF5QXNwZWN0UmF0aW87Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHNjYWxlWCA9IGRpc3BsYXlBc3BlY3RSYXRpbyAvIHZpZGVvQXNwZWN0UmF0aW87Ci0gICAgfQot
ICAgIC8vIEFwcGx5IG9wdGlvbmFsIGhvcml6b250YWwgZmxpcC4KLSAgICBpZiAobWlycm9yKSB7
Ci0gICAgICBzY2FsZVggKj0gLTE7Ci0gICAgfQotICAgIGZpbmFsIGZsb2F0IG1hdHJpeFtdID0g
bmV3IGZsb2F0WzE2XTsKLSAgICBNYXRyaXguc2V0SWRlbnRpdHlNKG1hdHJpeCwgMCk7Ci0gICAg
TWF0cml4LnNjYWxlTShtYXRyaXgsIDAsIHNjYWxlWCwgc2NhbGVZLCAxKTsKLSAgICBhZGp1c3RP
cmlnaW4obWF0cml4KTsKLSAgICByZXR1cm4gbWF0cml4OwotICB9Ci0KLSAgLyoqIENvbnZlcnRz
IGEgZmxvYXRbMTZdIG1hdHJpeCBhcnJheSB0byBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeC4gKi8K
LSAgcHVibGljIHN0YXRpYyBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeCBjb252ZXJ0TWF0cml4VG9B
bmRyb2lkR3JhcGhpY3NNYXRyaXgoZmxvYXRbXSBtYXRyaXg0eDQpIHsKLSAgICAvLyBjbGFuZy1m
b3JtYXQgb2ZmCi0gICAgZmxvYXRbXSB2YWx1ZXMgPSB7Ci0gICAgICAgIG1hdHJpeDR4NFswICog
NCArIDBdLCBtYXRyaXg0eDRbMSAqIDQgKyAwXSwgbWF0cml4NHg0WzMgKiA0ICsgMF0sCi0gICAg
ICAgIG1hdHJpeDR4NFswICogNCArIDFdLCBtYXRyaXg0eDRbMSAqIDQgKyAxXSwgbWF0cml4NHg0
WzMgKiA0ICsgMV0sCi0gICAgICAgIG1hdHJpeDR4NFswICogNCArIDNdLCBtYXRyaXg0eDRbMSAq
IDQgKyAzXSwgbWF0cml4NHg0WzMgKiA0ICsgM10sCi0gICAgfTsKLSAgICAvLyBjbGFuZy1mb3Jt
YXQgb24KLQotICAgIGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4IG1hdHJpeCA9IG5ldyBhbmRyb2lk
LmdyYXBoaWNzLk1hdHJpeCgpOwotICAgIG1hdHJpeC5zZXRWYWx1ZXModmFsdWVzKTsKLSAgICBy
ZXR1cm4gbWF0cml4OwotICB9Ci0KLSAgLyoqIENvbnZlcnRzIGFuZHJvaWQuZ3JhcGhpY3MuTWF0
cml4IHRvIGEgZmxvYXRbMTZdIG1hdHJpeCBhcnJheS4gKi8KLSAgcHVibGljIHN0YXRpYyBmbG9h
dFtdIGNvbnZlcnRNYXRyaXhGcm9tQW5kcm9pZEdyYXBoaWNzTWF0cml4KGFuZHJvaWQuZ3JhcGhp
Y3MuTWF0cml4IG1hdHJpeCkgewotICAgIGZsb2F0W10gdmFsdWVzID0gbmV3IGZsb2F0WzldOwot
ICAgIG1hdHJpeC5nZXRWYWx1ZXModmFsdWVzKTsKLQotICAgIC8vIFRoZSBhbmRyb2lkLmdyYXBo
aWNzLk1hdHJpeCBsb29rcyBsaWtlIHRoaXM6Ci0gICAgLy8gW3gxIHkxIHcxXQotICAgIC8vIFt4
MiB5MiB3Ml0KLSAgICAvLyBbeDMgeTMgdzNdCi0gICAgLy8gV2Ugd2FudCB0byBjb250cnVjdCBh
IG1hdHJpeCB0aGF0IGxvb2tzIGxpa2UgdGhpczoKLSAgICAvLyBbeDEgeTEgIDAgdzFdCi0gICAg
Ly8gW3gyIHkyICAwIHcyXQotICAgIC8vIFsgMCAgMCAgMSAgMF0KLSAgICAvLyBbeDMgeTMgIDAg
dzNdCi0gICAgLy8gU2luY2UgaXQgaXMgc3RvcmVkIGluIGNvbHVtbi1tYWpvciBvcmRlciwgaXQg
bG9va3MgbGlrZSB0aGlzOgotICAgIC8vIFt4MSB4MiAwIHgzCi0gICAgLy8gIHkxIHkyIDAgeTMK
LSAgICAvLyAgIDAgIDAgMSAgMAotICAgIC8vICB3MSB3MiAwIHczXQotICAgIC8vIGNsYW5nLWZv
cm1hdCBvZmYKLSAgICBmbG9hdFtdIG1hdHJpeDR4NCA9IHsKLSAgICAgICAgdmFsdWVzWzAgKiAz
ICsgMF0sICB2YWx1ZXNbMSAqIDMgKyAwXSwgMCwgIHZhbHVlc1syICogMyArIDBdLAotICAgICAg
ICB2YWx1ZXNbMCAqIDMgKyAxXSwgIHZhbHVlc1sxICogMyArIDFdLCAwLCAgdmFsdWVzWzIgKiAz
ICsgMV0sCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgIDEs
ICAwLAotICAgICAgICB2YWx1ZXNbMCAqIDMgKyAyXSwgIHZhbHVlc1sxICogMyArIDJdLCAwLCAg
dmFsdWVzWzIgKiAzICsgMl0sCi0gICAgfTsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb24KLSAgICBy
ZXR1cm4gbWF0cml4NHg0OwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGN1bGF0ZSBkaXNwbGF5IHNp
emUgYmFzZWQgb24gc2NhbGluZyB0eXBlLCB2aWRlbyBhc3BlY3QgcmF0aW8sIGFuZCBtYXhpbXVt
IGRpc3BsYXkgc2l6ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUG9pbnQgZ2V0RGlzcGxheVNp
emUoCi0gICAgICBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRp
bywgaW50IG1heERpc3BsYXlXaWR0aCwgaW50IG1heERpc3BsYXlIZWlnaHQpIHsKLSAgICByZXR1
cm4gZ2V0RGlzcGxheVNpemUoY29udmVydFNjYWxpbmdUeXBlVG9WaXNpYmxlRnJhY3Rpb24oc2Nh
bGluZ1R5cGUpLCB2aWRlb0FzcGVjdFJhdGlvLAotICAgICAgICBtYXhEaXNwbGF5V2lkdGgsIG1h
eERpc3BsYXlIZWlnaHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1vdmUgfG1hdHJpeHwgdHJhbnNm
b3JtYXRpb24gb3JpZ2luIHRvICgwLjUsIDAuNSkuIFRoaXMgaXMgdGhlIG9yaWdpbiBmb3IgdGV4
dHVyZSBjb29yZGluYXRlcwotICAgKiB0aGF0IGFyZSBpbiB0aGUgcmFuZ2UgMCB0byAxLgotICAg
Ki8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGp1c3RPcmlnaW4oZmxvYXRbXSBtYXRyaXgpIHsK
LSAgICAvLyBOb3RlIHRoYXQgT3BlbkdMIGlzIHVzaW5nIGNvbHVtbi1tYWpvciBvcmRlci4KLSAg
ICAvLyBQcmUgdHJhbnNsYXRlIHdpdGggLTAuNSB0byBtb3ZlIGNvb3JkaW5hdGVzIHRvIHJhbmdl
IFstMC41LCAwLjVdLgotICAgIG1hdHJpeFsxMl0gLT0gMC41ZiAqIChtYXRyaXhbMF0gKyBtYXRy
aXhbNF0pOwotICAgIG1hdHJpeFsxM10gLT0gMC41ZiAqIChtYXRyaXhbMV0gKyBtYXRyaXhbNV0p
OwotICAgIC8vIFBvc3QgdHJhbnNsYXRlIHdpdGggMC41IHRvIG1vdmUgY29vcmRpbmF0ZXMgdG8g
cmFuZ2UgWzAsIDFdLgotICAgIG1hdHJpeFsxMl0gKz0gMC41ZjsKLSAgICBtYXRyaXhbMTNdICs9
IDAuNWY7Ci0gIH0KLQotICAvKioKLSAgICogRWFjaCBzY2FsaW5nIHR5cGUgaGFzIGEgb25lLXRv
LW9uZSBjb3JyZXNwb25kZW5jZSB0byBhIG51bWVyaWMgbWluaW11bSBmcmFjdGlvbiBvZiB0aGUg
dmlkZW8KLSAgICogdGhhdCBtdXN0IHJlbWFpbiB2aXNpYmxlLgotICAgKi8KLSAgcHJpdmF0ZSBz
dGF0aWMgZmxvYXQgY29udmVydFNjYWxpbmdUeXBlVG9WaXNpYmxlRnJhY3Rpb24oU2NhbGluZ1R5
cGUgc2NhbGluZ1R5cGUpIHsKLSAgICBzd2l0Y2ggKHNjYWxpbmdUeXBlKSB7Ci0gICAgICBjYXNl
IFNDQUxFX0FTUEVDVF9GSVQ6Ci0gICAgICAgIHJldHVybiAxLjBmOwotICAgICAgY2FzZSBTQ0FM
RV9BU1BFQ1RfRklMTDoKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgICBjYXNlIFNDQUxFX0FT
UEVDVF9CQUxBTkNFRDoKLSAgICAgICAgcmV0dXJuIEJBTEFOQ0VEX1ZJU0lCTEVfRlJBQ1RJT047
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGN1bGF0ZSBkaXNwbGF5IHNpemUg
YmFzZWQgb24gbWluaW11bSBmcmFjdGlvbiBvZiB0aGUgdmlkZW8gdGhhdCBtdXN0IHJlbWFpbiB2
aXNpYmxlLAotICAgKiB2aWRlbyBhc3BlY3QgcmF0aW8sIGFuZCBtYXhpbXVtIGRpc3BsYXkgc2l6
ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUG9pbnQgZ2V0RGlzcGxheVNpemUoCi0gICAgICBm
bG9hdCBtaW5WaXNpYmxlRnJhY3Rpb24sIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8sIGludCBtYXhE
aXNwbGF5V2lkdGgsIGludCBtYXhEaXNwbGF5SGVpZ2h0KSB7Ci0gICAgLy8gSWYgdGhlcmUgaXMg
bm8gY29uc3RyYWludCBvbiB0aGUgYW1vdW50IG9mIGNyb3BwaW5nLCBmaWxsIHRoZSBhbGxvd2Vk
IGRpc3BsYXkgYXJlYS4KLSAgICBpZiAobWluVmlzaWJsZUZyYWN0aW9uID09IDAgfHwgdmlkZW9B
c3BlY3RSYXRpbyA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3IFBvaW50KG1heERpc3BsYXlXaWR0
aCwgbWF4RGlzcGxheUhlaWdodCk7Ci0gICAgfQotICAgIC8vIEVhY2ggZGltZW5zaW9uIGlzIGNv
bnN0cmFpbmVkIG9uIG1heCBkaXNwbGF5IHNpemUgYW5kIGhvdyBtdWNoIHdlIGFyZSBhbGxvd2Vk
IHRvIGNyb3AuCi0gICAgZmluYWwgaW50IHdpZHRoID0gTWF0aC5taW4oCi0gICAgICAgIG1heERp
c3BsYXlXaWR0aCwgTWF0aC5yb3VuZChtYXhEaXNwbGF5SGVpZ2h0IC8gbWluVmlzaWJsZUZyYWN0
aW9uICogdmlkZW9Bc3BlY3RSYXRpbykpOwotICAgIGZpbmFsIGludCBoZWlnaHQgPSBNYXRoLm1p
bigKLSAgICAgICAgbWF4RGlzcGxheUhlaWdodCwgTWF0aC5yb3VuZChtYXhEaXNwbGF5V2lkdGgg
LyBtaW5WaXNpYmxlRnJhY3Rpb24gLyB2aWRlb0FzcGVjdFJhdGlvKSk7Ci0gICAgcmV0dXJuIG5l
dyBQb2ludCh3aWR0aCwgaGVpZ2h0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
UnRjQ2VydGlmaWNhdGVQZW0uamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1J0Y0NlcnRpZmljYXRlUGVtLmph
dmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNzAxMzViM2UxMmYyN2VmNzUzNTk2
YjQ1ZjljZTlkZGY5NDE1ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvUnRjQ2VydGlmaWNhdGVQZW0uamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb247Ci0KLS8qKgotICogRWFzaWx5
IHN0b3JhYmxlL3NlcmlhbGl6YWJsZSB2ZXJzaW9uIG9mIGEgbmF0aXZlIEMrKyBSVENDZXJ0aWZp
Y2F0ZVBFTS4KLSAqLwotcHVibGljIGNsYXNzIFJ0Y0NlcnRpZmljYXRlUGVtIHsKLSAgLyoqIFBF
TSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHByaXZhdGUga2V5LiAqLwotICBwdWJsaWMg
ZmluYWwgU3RyaW5nIHByaXZhdGVLZXk7Ci0gIC8qKiBQRU0gc3RyaW5nIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KLSAgcHVibGljIGZpbmFsIFN0cmluZyBjZXJ0aWZpY2F0
ZTsKLSAgLyoqIERlZmF1bHQgZXhwaXJhdGlvbiB0aW1lIG9mIDMwIGRheXMuICovCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGxvbmcgREVGQVVMVF9FWFBJUlkgPSA2MCAqIDYwICogMjQgKiAzMDsK
LQotICAvKiogSW5zdGFudGlhdGUgYW4gUnRjQ2VydGlmaWNhdGVQZW0gb2JqZWN0IGZyb20gc3Rv
cmVkIHN0cmluZ3MuICovCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgUnRjQ2VydGlmaWNh
dGVQZW0oU3RyaW5nIHByaXZhdGVLZXksIFN0cmluZyBjZXJ0aWZpY2F0ZSkgewotICAgIHRoaXMu
cHJpdmF0ZUtleSA9IHByaXZhdGVLZXk7Ci0gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IGNlcnRpZmlj
YXRlOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIFN0cmluZyBnZXRQcml2YXRlS2V5KCkg
ewotICAgIHJldHVybiBwcml2YXRlS2V5OwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIFN0
cmluZyBnZXRDZXJ0aWZpY2F0ZSgpIHsKLSAgICByZXR1cm4gY2VydGlmaWNhdGU7Ci0gIH0KLQot
ICAvKioKLSAgICogR2VuZXJhdGUgYSBuZXcgUnRjQ2VydGlmaWNhdGVQZW0gd2l0aCB0aGUgZGVm
YXVsdCBzZXR0aW5ncyBvZiBLZXlUeXBlID0gRUNEU0EgYW5kCi0gICAqIGV4cGlyZXMgPSAzMCBk
YXlzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBSdGNDZXJ0aWZpY2F0ZVBlbSBnZW5lcmF0ZUNl
cnRpZmljYXRlKCkgewotICAgIHJldHVybiBuYXRpdmVHZW5lcmF0ZUNlcnRpZmljYXRlKFBlZXJD
b25uZWN0aW9uLktleVR5cGUuRUNEU0EsIERFRkFVTFRfRVhQSVJZKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBHZW5lcmF0ZSBhIG5ldyBSdGNDZXJ0aWZpY2F0ZVBlbSB3aXRoIGEgY3VzdG9tIEtleVR5
cGUgYW5kIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YKLSAgICogZXhwaXJlcyA9IDMwIGRheXMuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIFJ0Y0NlcnRpZmljYXRlUGVtIGdlbmVyYXRlQ2VydGlmaWNh
dGUoUGVlckNvbm5lY3Rpb24uS2V5VHlwZSBrZXlUeXBlKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdl
bmVyYXRlQ2VydGlmaWNhdGUoa2V5VHlwZSwgREVGQVVMVF9FWFBJUlkpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEdlbmVyYXRlIGEgbmV3IFJ0Y0NlcnRpZmljYXRlUGVtIHdpdGggYSBjdXN0b20gZXhw
aXJlcyBhbmQgdGhlIGRlZmF1bHQgc2V0dGluZyBvZgotICAgKiBLZXlUeXBlID0gRUNEU0EuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIFJ0Y0NlcnRpZmljYXRlUGVtIGdlbmVyYXRlQ2VydGlmaWNh
dGUobG9uZyBleHBpcmVzKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdlbmVyYXRlQ2VydGlmaWNhdGUo
UGVlckNvbm5lY3Rpb24uS2V5VHlwZS5FQ0RTQSwgZXhwaXJlcyk7Ci0gIH0KLQotICAvKiogR2Vu
ZXJhdGUgYSBuZXcgUnRjQ2VydGlmaWNhdGVQZW0gd2l0aCBhIGN1c3RvbSBLZXlUeXBlIGFuZCBh
IGN1c3RvbSBleHBpcmVzLiAqLwotICBwdWJsaWMgc3RhdGljIFJ0Y0NlcnRpZmljYXRlUGVtIGdl
bmVyYXRlQ2VydGlmaWNhdGUoCi0gICAgICBQZWVyQ29ubmVjdGlvbi5LZXlUeXBlIGtleVR5cGUs
IGxvbmcgZXhwaXJlcykgewotICAgIHJldHVybiBuYXRpdmVHZW5lcmF0ZUNlcnRpZmljYXRlKGtl
eVR5cGUsIGV4cGlyZXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFJ0Y0NlcnRp
ZmljYXRlUGVtIG5hdGl2ZUdlbmVyYXRlQ2VydGlmaWNhdGUoCi0gICAgICBQZWVyQ29ubmVjdGlv
bi5LZXlUeXBlIGtleVR5cGUsIGxvbmcgZXhwaXJlcyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dl
YnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOTNjZTc3ZDI2MWU1ZTcxZDc2MTYyMGE2
OTUwZDUxMTJkMGUxNmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvUnRwUGFyYW1ldGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
MzAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEu
bGFuZy5Eb3VibGU7Ci1pbXBvcnQgamF2YS5sYW5nLlN0cmluZzsKLWltcG9ydCBqYXZhLnV0aWwu
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFTdHJl
YW1UcmFjazsKLQotLyoqCi0gKiBUaGUgcGFyYW1ldGVycyBmb3IgYW4ge0Bjb2RlIFJ0cFNlbmRl
cn0sIGFzIGRlZmluZWQgaW4KLSAqIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8jcnRj
cnRwc2VuZGVyLWludGVyZmFjZS4KLSAqCi0gKiBOb3RlOiBUaGVzZSBzdHJ1Y3R1cmVzIHVzZSBu
dWxsYWJsZSBJbnRlZ2VyL2V0Yy4gdHlwZXMgYmVjYXVzZSBpbiB0aGUKLSAqIGZ1dHVyZSwgdGhl
eSBtYXkgYmUgdXNlZCB0byBjb25zdHJ1Y3QgT1JUQyBSdHBTZW5kZXIvUnRwUmVjZWl2ZXJzLCBp
bgotICogd2hpY2ggY2FzZSAibnVsbCIgd2lsbCBiZSB1c2VkIHRvIHJlcHJlc2VudCAiY2hvb3Nl
IHRoZSBpbXBsZW1lbnRhdGlvbgotICogZGVmYXVsdCB2YWx1ZSIuCi0gKi8KLXB1YmxpYyBjbGFz
cyBSdHBQYXJhbWV0ZXJzIHsKLSAgcHVibGljIGVudW0gRGVncmFkYXRpb25QcmVmZXJlbmNlIHsK
LSAgICAvKiogRG9lcyBub3QgZGVncmFkZSByZXNvbHV0aW9uIG9yIGZyYW1lcmF0ZS4gKi8KLSAg
ICBESVNBQkxFRCwKLSAgICAvKiogRGVncmFkZSByZXNvbHV0aW9uIGluIG9yZGVyIHRvIG1haW50
YWluIGZyYW1lcmF0ZS4gKi8KLSAgICBNQUlOVEFJTl9GUkFNRVJBVEUsCi0gICAgLyoqIERlZ3Jh
ZGUgZnJhbWVyYXRlIGluIG9yZGVyIHRvIG1haW50YWluIHJlc29sdXRpb24uICovCi0gICAgTUFJ
TlRBSU5fUkVTT0xVVElPTiwKLSAgICAvKiogRGVncmFkZSBhIGJhbGFuY2Ugb2YgZnJhbWVyYXRl
IGFuZCByZXNvbHV0aW9uLiAqLwotICAgIEJBTEFOQ0VEOwotCi0gICAgQENhbGxlZEJ5TmF0aXZl
KCJEZWdyYWRhdGlvblByZWZlcmVuY2UiKQotICAgIHN0YXRpYyBEZWdyYWRhdGlvblByZWZlcmVu
Y2UgZnJvbU5hdGl2ZUluZGV4KGludCBuYXRpdmVJbmRleCkgewotICAgICAgcmV0dXJuIHZhbHVl
cygpW25hdGl2ZUluZGV4XTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEVu
Y29kaW5nIHsKLSAgICAvLyBJZiBub24tbnVsbCwgdGhpcyByZXByZXNlbnRzIHRoZSBSSUQgdGhh
dCBpZGVudGlmaWVzIHRoaXMgZW5jb2RpbmcgbGF5ZXIuCi0gICAgLy8gUklEcyBhcmUgdXNlZCB0
byBpZGVudGlmeSBsYXllcnMgaW4gc2ltdWxjYXN0LgotICAgIEBOdWxsYWJsZSBwdWJsaWMgU3Ry
aW5nIHJpZDsKLSAgICAvLyBTZXQgdG8gdHJ1ZSB0byBjYXVzZSB0aGlzIGVuY29kaW5nIHRvIGJl
IHNlbnQsIGFuZCBmYWxzZSBmb3IgaXQgbm90IHRvCi0gICAgLy8gYmUgc2VudC4KLSAgICBwdWJs
aWMgYm9vbGVhbiBhY3RpdmUgPSB0cnVlOwotICAgIC8vIElmIG5vbi1udWxsLCB0aGlzIHJlcHJl
c2VudHMgdGhlIFRyYW5zcG9ydCBJbmRlcGVuZGVudCBBcHBsaWNhdGlvbgotICAgIC8vIFNwZWNp
ZmljIG1heGltdW0gYmFuZHdpZHRoIGRlZmluZWQgaW4gUkZDMzg5MC4gSWYgbnVsbCwgdGhlcmUg
aXMgbm8KLSAgICAvLyBtYXhpbXVtIGJpdHJhdGUuCi0gICAgQE51bGxhYmxlIHB1YmxpYyBJbnRl
Z2VyIG1heEJpdHJhdGVCcHM7Ci0gICAgLy8gVGhlIG1pbmltdW0gYml0cmF0ZSBpbiBicHMgZm9y
IHZpZGVvLgotICAgIEBOdWxsYWJsZSBwdWJsaWMgSW50ZWdlciBtaW5CaXRyYXRlQnBzOwotICAg
IC8vIFRoZSBtYXggZnJhbWVyYXRlIGluIGZwcyBmb3IgdmlkZW8uCi0gICAgQE51bGxhYmxlIHB1
YmxpYyBJbnRlZ2VyIG1heEZyYW1lcmF0ZTsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIHRlbXBvcmFs
IGxheWVycyBmb3IgdmlkZW8uCi0gICAgQE51bGxhYmxlIHB1YmxpYyBJbnRlZ2VyIG51bVRlbXBv
cmFsTGF5ZXJzOwotICAgIC8vIElmIG5vbi1udWxsLCBzY2FsZSB0aGUgd2lkdGggYW5kIGhlaWdo
dCBkb3duIGJ5IHRoaXMgZmFjdG9yIGZvciB2aWRlby4gSWYgbnVsbCwKLSAgICAvLyBpbXBsZW1l
bnRhdGlvbiBkZWZhdWx0IHNjYWxpbmcgZmFjdG9yIHdpbGwgYmUgdXNlZC4KLSAgICBATnVsbGFi
bGUgcHVibGljIERvdWJsZSBzY2FsZVJlc29sdXRpb25Eb3duQnk7Ci0gICAgLy8gU1NSQyB0byBi
ZSB1c2VkIGJ5IHRoaXMgZW5jb2RpbmcuCi0gICAgLy8gQ2FuJ3QgYmUgY2hhbmdlZCBiZXR3ZWVu
IGdldFBhcmFtZXRlcnMvc2V0UGFyYW1ldGVycy4KLSAgICBwdWJsaWMgTG9uZyBzc3JjOwotCi0g
ICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIHNpbXVsY2FzdCBs
YXllcnMuCi0gICAgcHVibGljIEVuY29kaW5nKFN0cmluZyByaWQsIGJvb2xlYW4gYWN0aXZlLCBE
b3VibGUgc2NhbGVSZXNvbHV0aW9uRG93bkJ5KSB7Ci0gICAgICB0aGlzLnJpZCA9IHJpZDsKLSAg
ICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlOwotICAgICAgdGhpcy5zY2FsZVJlc29sdXRpb25Eb3du
QnkgPSBzY2FsZVJlc29sdXRpb25Eb3duQnk7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZl
KCJFbmNvZGluZyIpCi0gICAgRW5jb2RpbmcoU3RyaW5nIHJpZCwgYm9vbGVhbiBhY3RpdmUsIElu
dGVnZXIgbWF4Qml0cmF0ZUJwcywgSW50ZWdlciBtaW5CaXRyYXRlQnBzLAotICAgICAgICBJbnRl
Z2VyIG1heEZyYW1lcmF0ZSwgSW50ZWdlciBudW1UZW1wb3JhbExheWVycywgRG91YmxlIHNjYWxl
UmVzb2x1dGlvbkRvd25CeSwgTG9uZyBzc3JjKSB7Ci0gICAgICB0aGlzLnJpZCA9IHJpZDsKLSAg
ICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlOwotICAgICAgdGhpcy5tYXhCaXRyYXRlQnBzID0gbWF4
Qml0cmF0ZUJwczsKLSAgICAgIHRoaXMubWluQml0cmF0ZUJwcyA9IG1pbkJpdHJhdGVCcHM7Ci0g
ICAgICB0aGlzLm1heEZyYW1lcmF0ZSA9IG1heEZyYW1lcmF0ZTsKLSAgICAgIHRoaXMubnVtVGVt
cG9yYWxMYXllcnMgPSBudW1UZW1wb3JhbExheWVyczsKLSAgICAgIHRoaXMuc2NhbGVSZXNvbHV0
aW9uRG93bkJ5ID0gc2NhbGVSZXNvbHV0aW9uRG93bkJ5OwotICAgICAgdGhpcy5zc3JjID0gc3Ny
YzsKLSAgICB9Ci0KLSAgICBATnVsbGFibGUKLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkVuY29kaW5n
IikKLSAgICBTdHJpbmcgZ2V0UmlkKCkgewotICAgICAgcmV0dXJuIHJpZDsKLSAgICB9Ci0KLSAg
ICBAQ2FsbGVkQnlOYXRpdmUoIkVuY29kaW5nIikKLSAgICBib29sZWFuIGdldEFjdGl2ZSgpIHsK
LSAgICAgIHJldHVybiBhY3RpdmU7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAgQENhbGxl
ZEJ5TmF0aXZlKCJFbmNvZGluZyIpCi0gICAgSW50ZWdlciBnZXRNYXhCaXRyYXRlQnBzKCkgewot
ICAgICAgcmV0dXJuIG1heEJpdHJhdGVCcHM7Ci0gICAgfQotCi0gICAgQE51bGxhYmxlCi0gICAg
QENhbGxlZEJ5TmF0aXZlKCJFbmNvZGluZyIpCi0gICAgSW50ZWdlciBnZXRNaW5CaXRyYXRlQnBz
KCkgewotICAgICAgcmV0dXJuIG1pbkJpdHJhdGVCcHM7Ci0gICAgfQotCi0gICAgQE51bGxhYmxl
Ci0gICAgQENhbGxlZEJ5TmF0aXZlKCJFbmNvZGluZyIpCi0gICAgSW50ZWdlciBnZXRNYXhGcmFt
ZXJhdGUoKSB7Ci0gICAgICByZXR1cm4gbWF4RnJhbWVyYXRlOwotICAgIH0KLQotICAgIEBOdWxs
YWJsZQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiRW5jb2RpbmciKQotICAgIEludGVnZXIgZ2V0TnVt
VGVtcG9yYWxMYXllcnMoKSB7Ci0gICAgICByZXR1cm4gbnVtVGVtcG9yYWxMYXllcnM7Ci0gICAg
fQotCi0gICAgQE51bGxhYmxlCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJFbmNvZGluZyIpCi0gICAg
RG91YmxlIGdldFNjYWxlUmVzb2x1dGlvbkRvd25CeSgpIHsKLSAgICAgIHJldHVybiBzY2FsZVJl
c29sdXRpb25Eb3duQnk7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJFbmNvZGluZyIp
Ci0gICAgTG9uZyBnZXRTc3JjKCkgewotICAgICAgcmV0dXJuIHNzcmM7Ci0gICAgfQotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb2RlYyB7Ci0gICAgLy8gUGF5bG9hZCB0eXBlIHVzZWQg
dG8gaWRlbnRpZnkgdGhpcyBjb2RlYyBpbiBSVFAgcGFja2V0cy4KLSAgICBwdWJsaWMgaW50IHBh
eWxvYWRUeXBlOwotICAgIC8vIE5hbWUgdXNlZCB0byBpZGVudGlmeSB0aGUgY29kZWMuIEVxdWl2
YWxlbnQgdG8gTUlNRSBzdWJ0eXBlLgotICAgIHB1YmxpYyBTdHJpbmcgbmFtZTsKLSAgICAvLyBU
aGUgbWVkaWEgdHlwZSBvZiB0aGlzIGNvZGVjLiBFcXVpdmFsZW50IHRvIE1JTUUgdG9wLWxldmVs
IHR5cGUuCi0gICAgTWVkaWFTdHJlYW1UcmFjay5NZWRpYVR5cGUga2luZDsKLSAgICAvLyBDbG9j
ayByYXRlIGluIEhlcnR6LgotICAgIHB1YmxpYyBJbnRlZ2VyIGNsb2NrUmF0ZTsKLSAgICAvLyBU
aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzIHVzZWQuIFNldCB0byBudWxsIGZvciB2aWRlbyBj
b2RlY3MuCi0gICAgcHVibGljIEludGVnZXIgbnVtQ2hhbm5lbHM7Ci0gICAgLy8gVGhlICJmb3Jt
YXQgc3BlY2lmaWMgcGFyYW1ldGVycyIgZmllbGQgZnJvbSB0aGUgImE9Zm10cCIgbGluZSBpbiB0
aGUgU0RQCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVyczsKLQotICAg
IEBDYWxsZWRCeU5hdGl2ZSgiQ29kZWMiKQotICAgIENvZGVjKGludCBwYXlsb2FkVHlwZSwgU3Ry
aW5nIG5hbWUsIE1lZGlhU3RyZWFtVHJhY2suTWVkaWFUeXBlIGtpbmQsIEludGVnZXIgY2xvY2tS
YXRlLAotICAgICAgICBJbnRlZ2VyIG51bUNoYW5uZWxzLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBh
cmFtZXRlcnMpIHsKLSAgICAgIHRoaXMucGF5bG9hZFR5cGUgPSBwYXlsb2FkVHlwZTsKLSAgICAg
IHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB0aGlzLmtpbmQgPSBraW5kOwotICAgICAgdGhpcy5j
bG9ja1JhdGUgPSBjbG9ja1JhdGU7Ci0gICAgICB0aGlzLm51bUNoYW5uZWxzID0gbnVtQ2hhbm5l
bHM7Ci0gICAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIH0KLQotICAgIEBD
YWxsZWRCeU5hdGl2ZSgiQ29kZWMiKQotICAgIGludCBnZXRQYXlsb2FkVHlwZSgpIHsKLSAgICAg
IHJldHVybiBwYXlsb2FkVHlwZTsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkNvZGVj
IikKLSAgICBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQot
ICAgIEBDYWxsZWRCeU5hdGl2ZSgiQ29kZWMiKQotICAgIE1lZGlhU3RyZWFtVHJhY2suTWVkaWFU
eXBlIGdldEtpbmQoKSB7Ci0gICAgICByZXR1cm4ga2luZDsKLSAgICB9Ci0KLSAgICBAQ2FsbGVk
QnlOYXRpdmUoIkNvZGVjIikKLSAgICBJbnRlZ2VyIGdldENsb2NrUmF0ZSgpIHsKLSAgICAgIHJl
dHVybiBjbG9ja1JhdGU7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJDb2RlYyIpCi0g
ICAgSW50ZWdlciBnZXROdW1DaGFubmVscygpIHsKLSAgICAgIHJldHVybiBudW1DaGFubmVsczsK
LSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkNvZGVjIikKLSAgICBNYXAgZ2V0UGFyYW1l
dGVycygpIHsKLSAgICAgIHJldHVybiBwYXJhbWV0ZXJzOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyBzdGF0aWMgY2xhc3MgUnRjcCB7Ci0gICAgLyoqIFRoZSBDYW5vbmljYWwgTmFtZSB1c2VkIGJ5
IFJUQ1AgKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBjbmFtZTsKLSAgICAvKiogV2hldGhl
ciByZWR1Y2VkIHNpemUgUlRDUCBpcyBjb25maWd1cmVkIG9yIGNvbXBvdW5kIFJUQ1AgKi8KLSAg
ICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gcmVkdWNlZFNpemU7Ci0KLSAgICBAQ2FsbGVkQnlOYXRp
dmUoIlJ0Y3AiKQotICAgIFJ0Y3AoU3RyaW5nIGNuYW1lLCBib29sZWFuIHJlZHVjZWRTaXplKSB7
Ci0gICAgICB0aGlzLmNuYW1lID0gY25hbWU7Ci0gICAgICB0aGlzLnJlZHVjZWRTaXplID0gcmVk
dWNlZFNpemU7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSdGNwIikKLSAgICBwdWJs
aWMgU3RyaW5nIGdldENuYW1lKCkgewotICAgICAgcmV0dXJuIGNuYW1lOwotICAgIH0KLQotICAg
IEBDYWxsZWRCeU5hdGl2ZSgiUnRjcCIpCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVkdWNlZFNp
emUoKSB7Ci0gICAgICByZXR1cm4gcmVkdWNlZFNpemU7Ci0gICAgfQotICB9Ci0KLSAgcHVibGlj
IHN0YXRpYyBjbGFzcyBIZWFkZXJFeHRlbnNpb24gewotICAgIC8qKiBUaGUgVVJJIG9mIHRoZSBS
VFAgaGVhZGVyIGV4dGVuc2lvbiwgYXMgZGVmaW5lZCBpbiBSRkM1Mjg1LiAqLwotICAgIHByaXZh
dGUgZmluYWwgU3RyaW5nIHVyaTsKLSAgICAvKiogVGhlIHZhbHVlIHB1dCBpbiB0aGUgUlRQIHBh
Y2tldCB0byBpZGVudGlmeSB0aGUgaGVhZGVyIGV4dGVuc2lvbi4gKi8KLSAgICBwcml2YXRlIGZp
bmFsIGludCBpZDsKLSAgICAvKiogV2hldGhlciB0aGUgaGVhZGVyIGV4dGVuc2lvbiBpcyBlbmNy
eXB0ZWQgb3Igbm90LiAqLwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBlbmNyeXB0ZWQ7Ci0K
LSAgICBAQ2FsbGVkQnlOYXRpdmUoIkhlYWRlckV4dGVuc2lvbiIpCi0gICAgSGVhZGVyRXh0ZW5z
aW9uKFN0cmluZyB1cmksIGludCBpZCwgYm9vbGVhbiBlbmNyeXB0ZWQpIHsKLSAgICAgIHRoaXMu
dXJpID0gdXJpOwotICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAgdGhpcy5lbmNyeXB0ZWQgPSBl
bmNyeXB0ZWQ7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJIZWFkZXJFeHRlbnNpb24i
KQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXJpKCkgewotICAgICAgcmV0dXJuIHVyaTsKLSAgICB9
Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkhlYWRlckV4dGVuc2lvbiIpCi0gICAgcHVibGljIGlu
dCBnZXRJZCgpIHsKLSAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRp
dmUoIkhlYWRlckV4dGVuc2lvbiIpCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0RW5jcnlwdGVkKCkg
ewotICAgICAgcmV0dXJuIGVuY3J5cHRlZDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwg
U3RyaW5nIHRyYW5zYWN0aW9uSWQ7Ci0KLSAgLyoqCi0gICAqIFdoZW4gYmFuZHdpZHRoIGlzIGNv
bnN0cmFpbmVkIGFuZCB0aGUgUnRwU2VuZGVyIG5lZWRzIHRvIGNob29zZSBiZXR3ZWVuIGRlZ3Jh
ZGluZyByZXNvbHV0aW9uIG9yCi0gICAqIGRlZ3JhZGluZyBmcmFtZXJhdGUsIGRlZ3JhZGF0aW9u
UHJlZmVyZW5jZSBpbmRpY2F0ZXMgd2hpY2ggaXMgcHJlZmVycmVkLgotICAgKi8KLSAgQE51bGxh
YmxlIHB1YmxpYyBEZWdyYWRhdGlvblByZWZlcmVuY2UgZGVncmFkYXRpb25QcmVmZXJlbmNlOwot
Ci0gIHByaXZhdGUgZmluYWwgUnRjcCBydGNwOwotCi0gIHByaXZhdGUgZmluYWwgTGlzdDxIZWFk
ZXJFeHRlbnNpb24+IGhlYWRlckV4dGVuc2lvbnM7Ci0KLSAgcHVibGljIGZpbmFsIExpc3Q8RW5j
b2Rpbmc+IGVuY29kaW5nczsKLQotICBwdWJsaWMgZmluYWwgTGlzdDxDb2RlYz4gY29kZWNzOwot
Ci0gIEBDYWxsZWRCeU5hdGl2ZQotICBSdHBQYXJhbWV0ZXJzKFN0cmluZyB0cmFuc2FjdGlvbklk
LCBEZWdyYWRhdGlvblByZWZlcmVuY2UgZGVncmFkYXRpb25QcmVmZXJlbmNlLCBSdGNwIHJ0Y3As
Ci0gICAgICBMaXN0PEhlYWRlckV4dGVuc2lvbj4gaGVhZGVyRXh0ZW5zaW9ucywgTGlzdDxFbmNv
ZGluZz4gZW5jb2RpbmdzLCBMaXN0PENvZGVjPiBjb2RlY3MpIHsKLSAgICB0aGlzLnRyYW5zYWN0
aW9uSWQgPSB0cmFuc2FjdGlvbklkOwotICAgIHRoaXMuZGVncmFkYXRpb25QcmVmZXJlbmNlID0g
ZGVncmFkYXRpb25QcmVmZXJlbmNlOwotICAgIHRoaXMucnRjcCA9IHJ0Y3A7Ci0gICAgdGhpcy5o
ZWFkZXJFeHRlbnNpb25zID0gaGVhZGVyRXh0ZW5zaW9uczsKLSAgICB0aGlzLmVuY29kaW5ncyA9
IGVuY29kaW5nczsKLSAgICB0aGlzLmNvZGVjcyA9IGNvZGVjczsKLSAgfQotCi0gIEBDYWxsZWRC
eU5hdGl2ZQotICBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25JZCgpIHsKLSAgICByZXR1cm4gdHJhbnNh
Y3Rpb25JZDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBEZWdyYWRhdGlvblByZWZlcmVu
Y2UgZ2V0RGVncmFkYXRpb25QcmVmZXJlbmNlKCkgewotICAgIHJldHVybiBkZWdyYWRhdGlvblBy
ZWZlcmVuY2U7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIFJ0Y3AgZ2V0UnRj
cCgpIHsKLSAgICByZXR1cm4gcnRjcDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJs
aWMgTGlzdDxIZWFkZXJFeHRlbnNpb24+IGdldEhlYWRlckV4dGVuc2lvbnMoKSB7Ci0gICAgcmV0
dXJuIGhlYWRlckV4dGVuc2lvbnM7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgTGlzdDxF
bmNvZGluZz4gZ2V0RW5jb2RpbmdzKCkgewotICAgIHJldHVybiBlbmNvZGluZ3M7Ci0gIH0KLQot
ICBAQ2FsbGVkQnlOYXRpdmUKLSAgTGlzdDxDb2RlYz4gZ2V0Q29kZWNzKCkgewotICAgIHJldHVy
biBjb2RlY3M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1J0cFJlY2VpdmVyLmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMTVkMzVhNmEwZTZmN2VmNjIxY2NmMzA5ZWQxNWZhMmE1NGMzNDc5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1J0cFJl
Y2VpdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5u
b3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBvcmcud2VicnRjLk1lZGlhU3RyZWFtVHJhY2s7Ci0K
LS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIFJ0cFJlY2VpdmVySW50ZXJmYWNlLiAqLwotcHVi
bGljIGNsYXNzIFJ0cFJlY2VpdmVyIHsKLSAgLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgUnRw
UmVjZWl2ZXJPYnNlcnZlckludGVyZmFjZSovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE9i
c2VydmVyIHsKLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgZmlyc3QgYXVkaW8gb3IgdmlkZW8gcGFj
a2V0IGlzIHJlY2VpdmVkLgotICAgIEBDYWxsZWRCeU5hdGl2ZSgiT2JzZXJ2ZXIiKQotICAgIHB1
YmxpYyB2b2lkIG9uRmlyc3RQYWNrZXRSZWNlaXZlZChNZWRpYVN0cmVhbVRyYWNrLk1lZGlhVHlw
ZSBtZWRpYV90eXBlKTsKLSAgfQotCi0gIHByaXZhdGUgbG9uZyBuYXRpdmVSdHBSZWNlaXZlcjsK
LSAgcHJpdmF0ZSBsb25nIG5hdGl2ZU9ic2VydmVyOwotCi0gIEBOdWxsYWJsZSBwcml2YXRlIE1l
ZGlhU3RyZWFtVHJhY2sgY2FjaGVkVHJhY2s7Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1Ymxp
YyBSdHBSZWNlaXZlcihsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKSB7Ci0gICAgdGhpcy5uYXRpdmVS
dHBSZWNlaXZlciA9IG5hdGl2ZVJ0cFJlY2VpdmVyOwotICAgIGxvbmcgbmF0aXZlVHJhY2sgPSBu
YXRpdmVHZXRUcmFjayhuYXRpdmVSdHBSZWNlaXZlcik7Ci0gICAgY2FjaGVkVHJhY2sgPSBNZWRp
YVN0cmVhbVRyYWNrLmNyZWF0ZU1lZGlhU3RyZWFtVHJhY2sobmF0aXZlVHJhY2spOwotICB9Ci0K
LSAgQE51bGxhYmxlCi0gIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrKCkgewotICAgIHJl
dHVybiBjYWNoZWRUcmFjazsKLSAgfQotCi0gIHB1YmxpYyBSdHBQYXJhbWV0ZXJzIGdldFBhcmFt
ZXRlcnMoKSB7Ci0gICAgY2hlY2tSdHBSZWNlaXZlckV4aXN0cygpOwotICAgIHJldHVybiBuYXRp
dmVHZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJp
bmcgaWQoKSB7Ci0gICAgY2hlY2tSdHBSZWNlaXZlckV4aXN0cygpOwotICAgIHJldHVybiBuYXRp
dmVHZXRJZChuYXRpdmVSdHBSZWNlaXZlcik7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAg
cHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBjaGVja1J0cFJlY2VpdmVyRXhpc3RzKCk7Ci0g
ICAgY2FjaGVkVHJhY2suZGlzcG9zZSgpOwotICAgIGlmIChuYXRpdmVPYnNlcnZlciAhPSAwKSB7
Ci0gICAgICBuYXRpdmVVbnNldE9ic2VydmVyKG5hdGl2ZVJ0cFJlY2VpdmVyLCBuYXRpdmVPYnNl
cnZlcik7Ci0gICAgICBuYXRpdmVPYnNlcnZlciA9IDA7Ci0gICAgfQotICAgIEpuaUNvbW1vbi5u
YXRpdmVSZWxlYXNlUmVmKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgICBuYXRpdmVSdHBSZWNlaXZl
ciA9IDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBTZXRPYnNlcnZlcihPYnNlcnZlciBvYnNlcnZl
cikgewotICAgIGNoZWNrUnRwUmVjZWl2ZXJFeGlzdHMoKTsKLSAgICAvLyBVbnNldCB0aGUgZXhp
c3Rpbmcgb25lIGJlZm9yZSBzZXR0aW5nIGEgbmV3IG9uZS4KLSAgICBpZiAobmF0aXZlT2JzZXJ2
ZXIgIT0gMCkgewotICAgICAgbmF0aXZlVW5zZXRPYnNlcnZlcihuYXRpdmVSdHBSZWNlaXZlciwg
bmF0aXZlT2JzZXJ2ZXIpOwotICAgIH0KLSAgICBuYXRpdmVPYnNlcnZlciA9IG5hdGl2ZVNldE9i
c2VydmVyKG5hdGl2ZVJ0cFJlY2VpdmVyLCBvYnNlcnZlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBzZXRGcmFtZURlY3J5cHRvcihGcmFtZURlY3J5cHRvciBmcmFtZURlY3J5cHRvcikgewotICAg
IGNoZWNrUnRwUmVjZWl2ZXJFeGlzdHMoKTsKLSAgICBuYXRpdmVTZXRGcmFtZURlY3J5cHRvcihu
YXRpdmVSdHBSZWNlaXZlciwgZnJhbWVEZWNyeXB0b3IuZ2V0TmF0aXZlRnJhbWVEZWNyeXB0b3Io
KSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tSdHBSZWNlaXZlckV4aXN0cygpIHsKLSAg
ICBpZiAobmF0aXZlUnRwUmVjZWl2ZXIgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiUnRwUmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQuIik7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2Yg
dGhlIHRyYWNrLgotICAvLyBXaWxsIGJlIHJlbGVhc2VkIGluIGRpc3Bvc2UoKS4KLSAgcHJpdmF0
ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlR2V0VHJhY2sobG9uZyBydHBSZWNlaXZlcik7Ci0g
IHByaXZhdGUgc3RhdGljIG5hdGl2ZSBSdHBQYXJhbWV0ZXJzIG5hdGl2ZUdldFBhcmFtZXRlcnMo
bG9uZyBydHBSZWNlaXZlcik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZl
R2V0SWQobG9uZyBydHBSZWNlaXZlcik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5h
dGl2ZVNldE9ic2VydmVyKGxvbmcgcnRwUmVjZWl2ZXIsIE9ic2VydmVyIG9ic2VydmVyKTsKLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlVW5zZXRPYnNlcnZlcihsb25nIHJ0cFJl
Y2VpdmVyLCBsb25nIG5hdGl2ZU9ic2VydmVyKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlU2V0RnJhbWVEZWNyeXB0b3IobG9uZyBydHBSZWNlaXZlciwgbG9uZyBuYXRpdmVG
cmFtZURlY3J5cHRvcik7Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUnRwU2VuZGVyLmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9SdHBTZW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmM4OTRlNWQwNDIyOTI5Mjg0NTVjZGYzYzFjMjgwODE4ZDUwMDczMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SdHBTZW5k
ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3Rh
dGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqIEphdmEgd3JhcHBl
ciBmb3IgYSBDKysgUnRwU2VuZGVySW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIFJ0cFNlbmRl
ciB7Ci0gIHByaXZhdGUgbG9uZyBuYXRpdmVSdHBTZW5kZXI7Ci0KLSAgQE51bGxhYmxlIHByaXZh
dGUgTWVkaWFTdHJlYW1UcmFjayBjYWNoZWRUcmFjazsKLSAgcHJpdmF0ZSBib29sZWFuIG93bnNU
cmFjayA9IHRydWU7Ci0gIHByaXZhdGUgZmluYWwgQE51bGxhYmxlIER0bWZTZW5kZXIgZHRtZlNl
bmRlcjsKLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIFJ0cFNlbmRlcihsb25nIG5hdGl2
ZVJ0cFNlbmRlcikgewotICAgIHRoaXMubmF0aXZlUnRwU2VuZGVyID0gbmF0aXZlUnRwU2VuZGVy
OwotICAgIGxvbmcgbmF0aXZlVHJhY2sgPSBuYXRpdmVHZXRUcmFjayhuYXRpdmVSdHBTZW5kZXIp
OwotICAgIGNhY2hlZFRyYWNrID0gTWVkaWFTdHJlYW1UcmFjay5jcmVhdGVNZWRpYVN0cmVhbVRy
YWNrKG5hdGl2ZVRyYWNrKTsKLQotICAgIGxvbmcgbmF0aXZlRHRtZlNlbmRlciA9IG5hdGl2ZUdl
dER0bWZTZW5kZXIobmF0aXZlUnRwU2VuZGVyKTsKLSAgICBkdG1mU2VuZGVyID0gKG5hdGl2ZUR0
bWZTZW5kZXIgIT0gMCkgPyBuZXcgRHRtZlNlbmRlcihuYXRpdmVEdG1mU2VuZGVyKSA6IG51bGw7
Ci0gIH0KLQotICAvKioKLSAgICogU3RhcnRzIHNlbmRpbmcgYSBuZXcgdHJhY2ssIHdpdGhvdXQg
cmVxdWlyaW5nIGFkZGl0aW9uYWwgU0RQIG5lZ290aWF0aW9uLgotICAgKiA8cD4KLSAgICogTm90
ZTogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHJlcGxhY2VUcmFjayBpbiB0aGUgb2ZmaWNpYWwgV2Vi
UlRDIEFQSS4gSXQKLSAgICogd2FzIGp1c3QgaW1wbGVtZW50ZWQgYmVmb3JlIHRoZSBzdGFuZGFy
ZHMgZ3JvdXAgc2V0dGxlZCBvbiBhIG5hbWUuCi0gICAqCi0gICAqIEBwYXJhbSB0YWtlT3duZXJz
aGlwIElmIHRydWUsIHRoZSBSdHBTZW5kZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0cmFjawot
ICAgKiAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBjYWxsZXIsIGFuZCB3aWxsIGF1dG8t
ZGlzcG9zZSBvZiBpdCB3aGVuIG5vCi0gICAqICAgICAgICAgICAgICAgICAgICAgIGxvbmdlciBu
ZWVkZWQuIHx0YWtlT3duZXJzaGlwfCBzaG91bGQgb25seSBiZSB1c2VkIGlmCi0gICAqICAgICAg
ICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgb3ducyB0aGUgdHJhY2s7IGl0IGlzIG5vdCBhcHBy
b3ByaWF0ZSB3aGVuCi0gICAqICAgICAgICAgICAgICAgICAgICAgIHRoZSB0cmFjayBpcyBvd25l
ZCBieSwgZm9yIGV4YW1wbGUsIGFub3RoZXIgUnRwU2VuZGVyCi0gICAqICAgICAgICAgICAgICAg
ICAgICAgIG9yIGEgTWVkaWFTdHJlYW0uCi0gICAqIEByZXR1cm4gICAgICAgICAgICAgIHRydWUg
b24gc3VjY2VzcyBhbmQgZmFsc2Ugb24gZmFpbHVyZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFu
IHNldFRyYWNrKEBOdWxsYWJsZSBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrLCBib29sZWFuIHRha2VP
d25lcnNoaXApIHsKLSAgICBjaGVja1J0cFNlbmRlckV4aXN0cygpOwotICAgIGlmICghbmF0aXZl
U2V0VHJhY2sobmF0aXZlUnRwU2VuZGVyLCAodHJhY2sgPT0gbnVsbCkgPyAwIDogdHJhY2suZ2V0
TmF0aXZlTWVkaWFTdHJlYW1UcmFjaygpKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAoY2FjaGVkVHJhY2sgIT0gbnVsbCAmJiBvd25zVHJhY2spIHsKLSAgICAgIGNhY2hl
ZFRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgY2FjaGVkVHJhY2sgPSB0cmFjazsKLSAgICBv
d25zVHJhY2sgPSB0YWtlT3duZXJzaGlwOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgQE51
bGxhYmxlCi0gIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrKCkgewotICAgIHJldHVybiBj
YWNoZWRUcmFjazsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0cmVhbXMoTGlzdDxTdHJpbmc+
IHN0cmVhbUlkcykgewotICAgIGNoZWNrUnRwU2VuZGVyRXhpc3RzKCk7Ci0gICAgbmF0aXZlU2V0
U3RyZWFtcyhuYXRpdmVSdHBTZW5kZXIsIHN0cmVhbUlkcyk7Ci0gIH0KLQotICBwdWJsaWMgTGlz
dDxTdHJpbmc+IGdldFN0cmVhbXMoKSB7Ci0gICAgY2hlY2tSdHBTZW5kZXJFeGlzdHMoKTsKLSAg
ICByZXR1cm4gbmF0aXZlR2V0U3RyZWFtcyhuYXRpdmVSdHBTZW5kZXIpOwotICB9Ci0KLSAgcHVi
bGljIGJvb2xlYW4gc2V0UGFyYW1ldGVycyhSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIHsKLSAg
ICBjaGVja1J0cFNlbmRlckV4aXN0cygpOwotICAgIHJldHVybiBuYXRpdmVTZXRQYXJhbWV0ZXJz
KG5hdGl2ZVJ0cFNlbmRlciwgcGFyYW1ldGVycyk7Ci0gIH0KLQotICBwdWJsaWMgUnRwUGFyYW1l
dGVycyBnZXRQYXJhbWV0ZXJzKCkgewotICAgIGNoZWNrUnRwU2VuZGVyRXhpc3RzKCk7Ci0gICAg
cmV0dXJuIG5hdGl2ZUdldFBhcmFtZXRlcnMobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQotCi0gIHB1
YmxpYyBTdHJpbmcgaWQoKSB7Ci0gICAgY2hlY2tSdHBTZW5kZXJFeGlzdHMoKTsKLSAgICByZXR1
cm4gbmF0aXZlR2V0SWQobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQotCi0gIEBOdWxsYWJsZQotICBw
dWJsaWMgRHRtZlNlbmRlciBkdG1mKCkgewotICAgIHJldHVybiBkdG1mU2VuZGVyOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgc2V0RnJhbWVFbmNyeXB0b3IoRnJhbWVFbmNyeXB0b3IgZnJhbWVFbmNy
eXB0b3IpIHsKLSAgICBjaGVja1J0cFNlbmRlckV4aXN0cygpOwotICAgIG5hdGl2ZVNldEZyYW1l
RW5jcnlwdG9yKG5hdGl2ZVJ0cFNlbmRlciwgZnJhbWVFbmNyeXB0b3IuZ2V0TmF0aXZlRnJhbWVF
bmNyeXB0b3IoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNoZWNr
UnRwU2VuZGVyRXhpc3RzKCk7Ci0gICAgaWYgKGR0bWZTZW5kZXIgIT0gbnVsbCkgewotICAgICAg
ZHRtZlNlbmRlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIGlmIChjYWNoZWRUcmFjayAhPSBudWxs
ICYmIG93bnNUcmFjaykgewotICAgICAgY2FjaGVkVHJhY2suZGlzcG9zZSgpOwotICAgIH0KLSAg
ICBKbmlDb21tb24ubmF0aXZlUmVsZWFzZVJlZihuYXRpdmVSdHBTZW5kZXIpOwotICAgIG5hdGl2
ZVJ0cFNlbmRlciA9IDA7Ci0gIH0KLQotICAvKiogUmV0dXJucyBhIHBvaW50ZXIgdG8gd2VicnRj
OjpSdHBTZW5kZXJJbnRlcmZhY2UuICovCi0gIGxvbmcgZ2V0TmF0aXZlUnRwU2VuZGVyKCkgewot
ICAgIGNoZWNrUnRwU2VuZGVyRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZVJ0cFNlbmRlcjsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja1J0cFNlbmRlckV4aXN0cygpIHsKLSAgICBpZiAo
bmF0aXZlUnRwU2VuZGVyID09IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNl
cHRpb24oIlJ0cFNlbmRlciBoYXMgYmVlbiBkaXNwb3NlZC4iKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRUcmFjayhsb25nIHJ0cFNlbmRl
ciwgbG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgLy8gVGhpcyBzaG91bGQgaW5jcmVtZW50IHRoZSBy
ZWZlcmVuY2UgY291bnQgb2YgdGhlIHRyYWNrLgotICAvLyBXaWxsIGJlIHJlbGVhc2VkIGluIGRp
c3Bvc2UoKSBvciBzZXRUcmFjaygpLgotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRp
dmVHZXRUcmFjayhsb25nIHJ0cFNlbmRlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlU2V0U3RyZWFtcyhsb25nIHJ0cFNlbmRlciwgTGlzdDxTdHJpbmc+IHN0cmVhbUlk
cyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIExpc3Q8U3RyaW5nPiBuYXRpdmVHZXRTdHJl
YW1zKGxvbmcgcnRwU2VuZGVyKTsKLQotICAvLyBUaGlzIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJl
ZmVyZW5jZSBjb3VudCBvZiB0aGUgRFRNRiBzZW5kZXIuCi0gIC8vIFdpbGwgYmUgcmVsZWFzZWQg
aW4gZGlzcG9zZSgpLgotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXREdG1m
U2VuZGVyKGxvbmcgcnRwU2VuZGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVh
biBuYXRpdmVTZXRQYXJhbWV0ZXJzKGxvbmcgcnRwU2VuZGVyLCBSdHBQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBSdHBQYXJhbWV0ZXJzIG5hdGl2ZUdl
dFBhcmFtZXRlcnMobG9uZyBydHBTZW5kZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBT
dHJpbmcgbmF0aXZlR2V0SWQobG9uZyBydHBTZW5kZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSB2b2lkIG5hdGl2ZVNldEZyYW1lRW5jcnlwdG9yKGxvbmcgcnRwU2VuZGVyLCBsb25nIG5h
dGl2ZUZyYW1lRW5jcnlwdG9yKTsKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9SdHBUcmFu
c2NlaXZlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvUnRwVHJhbnNjZWl2ZXIuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkOGViNDFkMTljMGEwZmQxYmU4ODc4NzE5MmNhZDIyNmEz
MjdiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9SdHBUcmFuc2NlaXZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGph
dmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFTdHJlYW1UcmFjazsKLWlt
cG9ydCBvcmcud2VicnRjLlJ0cFBhcmFtZXRlcnM7Ci0KLS8qKgotICogSmF2YSB3cmFwcGVyIGZv
ciBhIEMrKyBSdHBUcmFuc2NlaXZlckludGVyZmFjZS4KLSAqCi0gKiA8cD5UaGUgUlRDUnRwVHJh
bnNjZWl2ZXIgbWFwcyB0byB0aGUgUlRDUnRwVHJhbnNjZWl2ZXIgZGVmaW5lZCBieSB0aGUgV2Vi
UlRDCi0gKiBzcGVjaWZpY2F0aW9uLiBBIHRyYW5zY2VpdmVyIHJlcHJlc2VudHMgYSBjb21iaW5h
dGlvbiBvZiBhbiBSVENSdHBTZW5kZXIKLSAqIGFuZCBhbiBSVENSdHBSZWNlaXZlciB0aGF0IHNo
YXJlIGEgY29tbW9uIG1pZC4gQXMgZGVmaW5lZCBpbiBKU0VQLCBhbgotICogUlRDUnRwVHJhbnNj
ZWl2ZXIgaXMgc2FpZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBtZWRpYSBkZXNjcmlwdGlvbiBp
ZiBpdHMKLSAqIG1pZCBwcm9wZXJ0eSBpcyBub24tbmlsOyBvdGhlcndpc2UsIGl0IGlzIHNhaWQg
dG8gYmUgZGlzYXNzb2NpYXRlZC4KLSAqIEpTRVA6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9kcmFmdC1pZXRmLXJ0Y3dlYi1qc2VwLTI0Ci0gKgotICogPHA+Tm90ZSB0aGF0IFJUQ1J0cFRy
YW5zY2VpdmVycyBhcmUgb25seSBzdXBwb3J0ZWQgd2hlbiB1c2luZwotICogUlRDUGVlckNvbm5l
Y3Rpb24gd2l0aCBVbmlmaWVkIFBsYW4gU0RQLgotICoKLSAqIDxwPldlYlJUQyBzcGVjaWZpY2F0
aW9uIGZvciBSVENSdHBUcmFuc2NlaXZlciwgdGhlIEphdmFTY3JpcHQgYW5hbG9nOgotICogaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8jZG9tLXJ0Y3J0cHRyYW5zY2VpdmVyCi0gKi8K
LXB1YmxpYyBjbGFzcyBSdHBUcmFuc2NlaXZlciB7Ci0gIC8qKiBKYXZhIHZlcnNpb24gb2Ygd2Vi
cnRjOjpSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiAtIHRoZSBvcmRlcmluZyBtdXN0IGJlIGtlcHQg
aW4gc3luYy4gKi8KLSAgcHVibGljIGVudW0gUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gewotICAg
IFNFTkRfUkVDVigwKSwKLSAgICBTRU5EX09OTFkoMSksCi0gICAgUkVDVl9PTkxZKDIpLAotICAg
IElOQUNUSVZFKDMpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbmF0aXZlSW5kZXg7Ci0KLSAg
ICBwcml2YXRlIFJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGludCBuYXRpdmVJbmRleCkgewotICAg
ICAgdGhpcy5uYXRpdmVJbmRleCA9IG5hdGl2ZUluZGV4OwotICAgIH0KLQotICAgIEBDYWxsZWRC
eU5hdGl2ZSgiUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24iKQotICAgIGludCBnZXROYXRpdmVJbmRl
eCgpIHsKLSAgICAgIHJldHVybiBuYXRpdmVJbmRleDsKLSAgICB9Ci0KLSAgICBAQ2FsbGVkQnlO
YXRpdmUoIlJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIikKLSAgICBzdGF0aWMgUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb24gZnJvbU5hdGl2ZUluZGV4KGludCBuYXRpdmVJbmRleCkgewotICAgICAgZm9y
IChSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB0eXBlIDogUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24u
dmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0TmF0aXZlSW5kZXgoKSA9PSBuYXRpdmVJ
bmRleCkgewotICAgICAgICAgIHJldHVybiB0eXBlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJVa25vd24g
bmF0aXZlIFJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIHR5cGUiICsgbmF0aXZlSW5kZXgpOwotICAg
IH0KLSAgfQotCi0gIC8qKgotICAgKiBUcmFja3Mgd2VicnRjOjpSdHBUcmFuc2NlaXZlckluaXQu
IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJydGMtcGMvI2RvbS1ydGNydHB0cmFuc2NlaXZlcmlu
aXQKLSAgICogQSBzdHJ1Y3R1cmUgZm9yIGluaXRpYWxpemluZyBhbiBSdHBUcmFuc2NlaXZlciBp
biBhIGNhbGwgdG8gYWRkVHJhbnNjZWl2ZXIuCi0gICAqIE5vdGU6IFRoaXMgZG9lcyBub3QgY29u
dGFpbiBhIGxpc3Qgb2YgZW5jb2RpbmcgcGFyYW1ldGVycywgYmVjYXVzZSB0aGV5IGFyZSBjdXJy
ZW50bHkKLSAgICogbm90IGJlaW5nIHVzZWQgbmF0aXZlbHkuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIGNsYXNzIFJ0cFRyYW5zY2VpdmVySW5pdCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0
PFN0cmluZz4gc3RyZWFtSWRzOwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxSdHBQYXJhbWV0ZXJz
LkVuY29kaW5nPiBzZW5kRW5jb2RpbmdzOwotCi0gICAgcHVibGljIFJ0cFRyYW5zY2VpdmVySW5p
dCgpIHsKLSAgICAgIHRoaXMoUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24uU0VORF9SRUNWKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgUnRwVHJhbnNjZWl2ZXJJbml0KFJ0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uIGRpcmVjdGlvbikgewotICAgICAgdGhpcyhkaXJlY3Rpb24sIENvbGxlY3Rpb25zLmVtcHR5
TGlzdCgpLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFJ0
cFRyYW5zY2VpdmVySW5pdChSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24sIExpc3Q8
U3RyaW5nPiBzdHJlYW1JZHMpIHsKLSAgICAgIHRoaXMoZGlyZWN0aW9uLCBzdHJlYW1JZHMsIENv
bGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUnRwVHJhbnNjZWl2
ZXJJbml0KFJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGlzdDxTdHJpbmc+IHN0
cmVhbUlkcywKLSAgICAgICAgTGlzdDxSdHBQYXJhbWV0ZXJzLkVuY29kaW5nPiBzZW5kRW5jb2Rp
bmdzKSB7Ci0gICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKLSAgICAgIHRoaXMuc3Ry
ZWFtSWRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KHN0cmVhbUlkcyk7Ci0gICAgICB0aGlzLnNl
bmRFbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFJ0cFBhcmFtZXRlcnMuRW5jb2Rpbmc+KHNlbmRF
bmNvZGluZ3MpOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUnRwVHJhbnNjZWl2ZXJJ
bml0IikKLSAgICBpbnQgZ2V0RGlyZWN0aW9uTmF0aXZlSW5kZXgoKSB7Ci0gICAgICByZXR1cm4g
ZGlyZWN0aW9uLmdldE5hdGl2ZUluZGV4KCk7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZl
KCJSdHBUcmFuc2NlaXZlckluaXQiKQotICAgIExpc3Q8U3RyaW5nPiBnZXRTdHJlYW1JZHMoKSB7
Ci0gICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxTdHJpbmc+KHRoaXMuc3RyZWFtSWRzKTsKLSAg
ICB9Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJ0cFRyYW5zY2VpdmVySW5pdCIpCi0gICAgTGlz
dDxSdHBQYXJhbWV0ZXJzLkVuY29kaW5nPiBnZXRTZW5kRW5jb2RpbmdzKCkgewotICAgICAgcmV0
dXJuIG5ldyBBcnJheUxpc3Q8UnRwUGFyYW1ldGVycy5FbmNvZGluZz4odGhpcy5zZW5kRW5jb2Rp
bmdzKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGxvbmcgbmF0aXZlUnRwVHJhbnNjZWl2ZXI7
Ci0gIHByaXZhdGUgUnRwU2VuZGVyIGNhY2hlZFNlbmRlcjsKLSAgcHJpdmF0ZSBSdHBSZWNlaXZl
ciBjYWNoZWRSZWNlaXZlcjsKLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJvdGVjdGVkIFJ0cFRy
YW5zY2VpdmVyKGxvbmcgbmF0aXZlUnRwVHJhbnNjZWl2ZXIpIHsKLSAgICB0aGlzLm5hdGl2ZVJ0
cFRyYW5zY2VpdmVyID0gbmF0aXZlUnRwVHJhbnNjZWl2ZXI7Ci0gICAgY2FjaGVkU2VuZGVyID0g
bmF0aXZlR2V0U2VuZGVyKG5hdGl2ZVJ0cFRyYW5zY2VpdmVyKTsKLSAgICBjYWNoZWRSZWNlaXZl
ciA9IG5hdGl2ZUdldFJlY2VpdmVyKG5hdGl2ZVJ0cFRyYW5zY2VpdmVyKTsKLSAgfQotCi0gIC8q
KgotICAgKiBNZWRpYSB0eXBlIG9mIHRoZSB0cmFuc2NlaXZlci4gQW55IHNlbmRlcihzKS9yZWNl
aXZlcihzKSB3aWxsIGhhdmUgdGhpcwotICAgKiB0eXBlIGFzIHdlbGwuCi0gICAqLwotICBwdWJs
aWMgTWVkaWFTdHJlYW1UcmFjay5NZWRpYVR5cGUgZ2V0TWVkaWFUeXBlKCkgewotICAgIGNoZWNr
UnRwVHJhbnNjZWl2ZXJFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0aXZlR2V0TWVkaWFUeXBlKG5h
dGl2ZVJ0cFRyYW5zY2VpdmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWlkIGF0dHJpYnV0
ZSBpcyB0aGUgbWlkIG5lZ290aWF0ZWQgYW5kIHByZXNlbnQgaW4gdGhlIGxvY2FsIGFuZAotICAg
KiByZW1vdGUgZGVzY3JpcHRpb25zLiBCZWZvcmUgbmVnb3RpYXRpb24gaXMgY29tcGxldGUsIHRo
ZSBtaWQgdmFsdWUgbWF5IGJlCi0gICAqIG51bGwuIEFmdGVyIHJvbGxiYWNrcywgdGhlIHZhbHVl
IG1heSBjaGFuZ2UgZnJvbSBhIG5vbi1udWxsIHZhbHVlIHRvIG51bGwuCi0gICAqIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby93ZWJydGMtcGMvI2RvbS1ydGNydHB0cmFuc2NlaXZlci1taWQKLSAgICov
Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TWlkKCkgewotICAgIGNoZWNrUnRwVHJhbnNjZWl2ZXJFeGlz
dHMoKTsKLSAgICByZXR1cm4gbmF0aXZlR2V0TWlkKG5hdGl2ZVJ0cFRyYW5zY2VpdmVyKTsKLSAg
fQotCi0gIC8qKgotICAgKiBUaGUgc2VuZGVyIGF0dHJpYnV0ZSBleHBvc2VzIHRoZSBSdHBTZW5k
ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgUlRQIG1lZGlhCi0gICAqIHRoYXQgbWF5IGJlIHNlbnQg
d2l0aCB0aGUgdHJhbnNjZWl2ZXIncyBtaWQuIFRoZSBzZW5kZXIgaXMgYWx3YXlzIHByZXNlbnQs
Ci0gICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpcmVjdGlvbiBvZiBtZWRpYS4KLSAgICogaHR0cHM6
Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8jZG9tLXJ0Y3J0cHRyYW5zY2VpdmVyLXNlbmRlcgot
ICAgKi8KLSAgcHVibGljIFJ0cFNlbmRlciBnZXRTZW5kZXIoKSB7Ci0gICAgcmV0dXJuIGNhY2hl
ZFNlbmRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgcmVjZWl2ZXIgYXR0cmlidXRlIGV4cG9z
ZXMgdGhlIFJ0cFJlY2VpdmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFJUUAotICAgKiBtZWRpYSB0
aGF0IG1heSBiZSByZWNlaXZlZCB3aXRoIHRoZSB0cmFuc2NlaXZlcidzIG1pZC4gVGhlIHJlY2Vp
dmVyIGlzCi0gICAqIGFsd2F5cyBwcmVzZW50LCByZWdhcmRsZXNzIG9mIHRoZSBkaXJlY3Rpb24g
b2YgbWVkaWEuCi0gICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJydGMtcGMvI2RvbS1ydGNy
dHB0cmFuc2NlaXZlci1yZWNlaXZlcgotICAgKi8KLSAgcHVibGljIFJ0cFJlY2VpdmVyIGdldFJl
Y2VpdmVyKCkgewotICAgIHJldHVybiBjYWNoZWRSZWNlaXZlcjsKLSAgfQotCi0gIC8qKgotICAg
KiBUaGUgc3RvcHBlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHNlbmRlciBvZiB0aGlz
IHRyYW5zY2VpdmVyIHdpbGwgbm8KLSAgICogbG9uZ2VyIHNlbmQsIGFuZCB0aGF0IHRoZSByZWNl
aXZlciB3aWxsIG5vIGxvbmdlciByZWNlaXZlLiBJdCBpcyB0cnVlIGlmCi0gICAqIGVpdGhlciBz
dG9wIGhhcyBiZWVuIGNhbGxlZCBvciBpZiBzZXR0aW5nIHRoZSBsb2NhbCBvciByZW1vdGUgZGVz
Y3JpcHRpb24KLSAgICogaGFzIGNhdXNlZCB0aGUgUnRwVHJhbnNjZWl2ZXIgdG8gYmUgc3RvcHBl
ZC4KLSAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8jZG9tLXJ0Y3J0cHRyYW5z
Y2VpdmVyLXN0b3BwZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzU3RvcHBlZCgpIHsKLSAg
ICBjaGVja1J0cFRyYW5zY2VpdmVyRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0b3BwZWQo
bmF0aXZlUnRwVHJhbnNjZWl2ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBkaXJlY3Rpb24g
YXR0cmlidXRlIGluZGljYXRlcyB0aGUgcHJlZmVycmVkIGRpcmVjdGlvbiBvZiB0aGlzCi0gICAq
IHRyYW5zY2VpdmVyLCB3aGljaCB3aWxsIGJlIHVzZWQgaW4gY2FsbHMgdG8gQ3JlYXRlT2ZmZXIg
YW5kIENyZWF0ZUFuc3dlci4KLSAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8j
ZG9tLXJ0Y3J0cHRyYW5zY2VpdmVyLWRpcmVjdGlvbgotICAgKi8KLSAgcHVibGljIFJ0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uIGdldERpcmVjdGlvbigpIHsKLSAgICBjaGVja1J0cFRyYW5zY2VpdmVy
RXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZURpcmVjdGlvbihuYXRpdmVSdHBUcmFuc2NlaXZl
cik7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIGN1cnJlbnRfZGlyZWN0aW9uIGF0dHJpYnV0ZSBp
bmRpY2F0ZXMgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIG5lZ290aWF0ZWQKLSAgICogZm9yIHRoaXMg
dHJhbnNjZWl2ZXIuIElmIHRoaXMgdHJhbnNjZWl2ZXIgaGFzIG5ldmVyIGJlZW4gcmVwcmVzZW50
ZWQgaW4gYW4KLSAgICogb2ZmZXIvYW5zd2VyIGV4Y2hhbmdlLCBvciBpZiB0aGUgdHJhbnNjZWl2
ZXIgaXMgc3RvcHBlZCwgdGhlIHZhbHVlIGlzIG51bGwuCi0gICAqIGh0dHBzOi8vdzNjLmdpdGh1
Yi5pby93ZWJydGMtcGMvI2RvbS1ydGNydHB0cmFuc2NlaXZlci1jdXJyZW50ZGlyZWN0aW9uCi0g
ICAqLwotICBwdWJsaWMgUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZ2V0Q3VycmVudERpcmVjdGlv
bigpIHsKLSAgICBjaGVja1J0cFRyYW5zY2VpdmVyRXhpc3RzKCk7Ci0gICAgcmV0dXJuIG5hdGl2
ZUN1cnJlbnREaXJlY3Rpb24obmF0aXZlUnRwVHJhbnNjZWl2ZXIpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFNldHMgdGhlIHByZWZlcnJlZCBkaXJlY3Rpb24gb2YgdGhpcyB0cmFuc2NlaXZlci4gQW4g
dXBkYXRlIG9mCi0gICAqIGRpcmVjdGlvbmFsaXR5IGRvZXMgbm90IHRha2UgZWZmZWN0IGltbWVk
aWF0ZWx5LiBJbnN0ZWFkLCBmdXR1cmUgY2FsbHMgdG8KLSAgICogQ3JlYXRlT2ZmZXIgYW5kIENy
ZWF0ZUFuc3dlciBtYXJrIHRoZSBjb3JyZXNwb25kaW5nIG1lZGlhIGRlc2NyaXB0aW9ucyBhcwot
ICAgKiBzZW5kcmVjdiwgc2VuZG9ubHksIHJlY3Zvbmx5LCBvciBpbmFjdGl2ZS4KLSAgICogaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8jZG9tLXJ0Y3J0cHRyYW5zY2VpdmVyLWRpcmVj
dGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGlyZWN0aW9uKFJ0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uIHJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKSB7Ci0gICAgY2hlY2tSdHBUcmFuc2NlaXZl
ckV4aXN0cygpOwotICAgIG5hdGl2ZVNldERpcmVjdGlvbihuYXRpdmVSdHBUcmFuc2NlaXZlciwg
cnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBTdG9wIG1l
dGhvZCBpcnJldmVyc2libHkgc3RvcHMgdGhlIFJ0cFRyYW5zY2VpdmVyLiBUaGUgc2VuZGVyIG9m
IHRoaXMKLSAgICogdHJhbnNjZWl2ZXIgd2lsbCBubyBsb25nZXIgc2VuZCwgdGhlIHJlY2VpdmVy
IHdpbGwgbm8gbG9uZ2VyIHJlY2VpdmUuCi0gICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJy
dGMtcGMvI2RvbS1ydGNydHB0cmFuc2NlaXZlci1zdG9wCi0gICAqLwotICBwdWJsaWMgdm9pZCBz
dG9wKCkgewotICAgIGNoZWNrUnRwVHJhbnNjZWl2ZXJFeGlzdHMoKTsKLSAgICBuYXRpdmVTdG9w
KG5hdGl2ZVJ0cFRyYW5zY2VpdmVyKTsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJs
aWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNoZWNrUnRwVHJhbnNjZWl2ZXJFeGlzdHMoKTsKLSAg
ICBjYWNoZWRTZW5kZXIuZGlzcG9zZSgpOwotICAgIGNhY2hlZFJlY2VpdmVyLmRpc3Bvc2UoKTsK
LSAgICBKbmlDb21tb24ubmF0aXZlUmVsZWFzZVJlZihuYXRpdmVSdHBUcmFuc2NlaXZlcik7Ci0g
ICAgbmF0aXZlUnRwVHJhbnNjZWl2ZXIgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNr
UnRwVHJhbnNjZWl2ZXJFeGlzdHMoKSB7Ci0gICAgaWYgKG5hdGl2ZVJ0cFRyYW5zY2VpdmVyID09
IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJ0cFRyYW5zY2Vp
dmVyIGhhcyBiZWVuIGRpc3Bvc2VkLiIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBNZWRpYVN0cmVhbVRyYWNrLk1lZGlhVHlwZSBuYXRpdmVHZXRNZWRpYVR5cGUobG9u
ZyBydHBUcmFuc2NlaXZlcik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZl
R2V0TWlkKGxvbmcgcnRwVHJhbnNjZWl2ZXIpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgUnRw
U2VuZGVyIG5hdGl2ZUdldFNlbmRlcihsb25nIHJ0cFRyYW5zY2VpdmVyKTsKLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIFJ0cFJlY2VpdmVyIG5hdGl2ZUdldFJlY2VpdmVyKGxvbmcgcnRwVHJhbnNj
ZWl2ZXIpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTdG9wcGVkKGxv
bmcgcnRwVHJhbnNjZWl2ZXIpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb24gbmF0aXZlRGlyZWN0aW9uKGxvbmcgcnRwVHJhbnNjZWl2ZXIpOwotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gbmF0aXZlQ3VycmVudERp
cmVjdGlvbihsb25nIHJ0cFRyYW5zY2VpdmVyKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlU3RvcChsb25nIHJ0cFRyYW5zY2VpdmVyKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIHZvaWQgbmF0aXZlU2V0RGlyZWN0aW9uKAotICAgICAgbG9uZyBydHBUcmFuc2NlaXZlciwg
UnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gcnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvU1NMQ2VydGlmaWNhdGVWZXJpZmllci5qYXZhIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93
ZWJydGMvU1NMQ2VydGlmaWNhdGVWZXJpZmllci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0NjFjZDNiMTQzZDYxMDA2YTViZmM0ODE0ODMyMzJjMmNmYzNhMmZhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1NTTENl
cnRpZmljYXRlVmVyaWZpZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBUaGUgU1NM
Q2VydGlmaWNhdGVWZXJpZmllciBpbnRlcmZhY2UgYWxsb3dzIEFQSSB1c2VycyB0byBwcm92aWRl
IGN1c3RvbQotICogbG9naWMgdG8gdmVyaWZ5IGNlcnRpZmljYXRlcy4KLSAqLwotcHVibGljIGlu
dGVyZmFjZSBTU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyIHsKLSAgLyoqCi0gICAqIEltcGxlbWVudGF0
aW9ucyBvZiB2ZXJpZnkgYWxsb3cgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUgY3VzdG9tIGxvZ2lj
IGZvcgotICAgKiB2ZXJpZnlpbmcgY2VydGlmaWNhdGVzLiBUaGlzIGlzIG5vdCByZXF1aXJlZCBi
eSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgdXNlZAotICAgKiB3aXRoIGNhcmUuCi0gICAqCi0gICAq
IEBwYXJhbSBjZXJ0aWZpY2F0ZSBBIGJ5dGUgYXJyYXkgY29udGFpbmluZyBhIERFUiBlbmNvZGVk
IFg1MDkgY2VydGlmaWNhdGUuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2VydGlmaWNhdGUg
aXMgdmVyaWZpZWQgYW5kIHRydXN0ZWQgZWxzZSBmYWxzZS4KLSAgICovCi0gIEBDYWxsZWRCeU5h
dGl2ZSBib29sZWFuIHZlcmlmeShieXRlW10gY2VydGlmaWNhdGUpOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvU2NyZWVuQ2FwdHVyZXJBbmRyb2lkLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9TY3Jl
ZW5DYXB0dXJlckFuZHJvaWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZm
NWFkNzRhMjQwODE1YjI1MzNkYmI3MjQxNWExYjFhNThkOTA5MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9TY3JlZW5DYXB0dXJlckFu
ZHJvaWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24u
VGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQg
YW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQu
aGFyZHdhcmUuZGlzcGxheS5WaXJ0dWFsRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnBy
b2plY3Rpb24uTWVkaWFQcm9qZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEucHJvamVjdGlv
bi5NZWRpYVByb2plY3Rpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0
aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotCi0vKioKLSAqIEFu
IGltcGxlbWVudGF0aW9uIG9mIFZpZGVvQ2FwdHVyZXIgdG8gY2FwdHVyZSB0aGUgc2NyZWVuIGNv
bnRlbnQgYXMgYSB2aWRlbyBzdHJlYW0uCi0gKiBDYXB0dXJpbmcgaXMgZG9uZSBieSB7QGNvZGUg
TWVkaWFQcm9qZWN0aW9ufSBvbiBhIHtAY29kZSBTdXJmYWNlVGV4dHVyZX0uIFdlIGludGVyYWN0
IHdpdGggdGhpcwotICoge0Bjb2RlIFN1cmZhY2VUZXh0dXJlfSB1c2luZyBhIHtAY29kZSBTdXJm
YWNlVGV4dHVyZUhlbHBlcn0uCi0gKiBUaGUge0Bjb2RlIFN1cmZhY2VUZXh0dXJlSGVscGVyfSBp
cyBjcmVhdGVkIGJ5IHRoZSBuYXRpdmUgY29kZSBhbmQgcGFzc2VkIHRvIHRoaXMgY2FwdHVyZXIg
aW4KLSAqIHtAY29kZSBWaWRlb0NhcHR1cmVyLmluaXRpYWxpemUoKX0uIE9uIHJlY2VpdmluZyBh
IG5ldyBmcmFtZSwgdGhpcyBjYXB0dXJlciBwYXNzZXMgaXQKLSAqIGFzIGEgdGV4dHVyZSB0byB0
aGUgbmF0aXZlIGNvZGUgdmlhIHtAY29kZSBDYXB0dXJlck9ic2VydmVyLm9uRnJhbWVDYXB0dXJl
ZCgpfS4gVGhpcyB0YWtlcwotICogcGxhY2Ugb24gdGhlIEhhbmRsZXJUaHJlYWQgb2YgdGhlIGdp
dmVuIHtAY29kZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0uIFdoZW4gZG9uZSB3aXRoIGVhY2ggZnJh
bWUsCi0gKiB0aGUgbmF0aXZlIGNvZGUgcmV0dXJucyB0aGUgYnVmZmVyIHRvIHRoZSAge0Bjb2Rl
IFN1cmZhY2VUZXh0dXJlSGVscGVyfSB0byBiZSB1c2VkIGZvciBuZXcKLSAqIGZyYW1lcy4gQXQg
YW55IHRpbWUsIGF0IG1vc3Qgb25lIGZyYW1lIGlzIGJlaW5nIHByb2Nlc3NlZC4KLSAqCi0gKiBA
bm90ZSBUaGlzIGNsYXNzIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEFuZHJvaWQgTG9sbGlwb3AgYW5k
IGFib3ZlLgotICovCi1AVGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIFNjcmVlbkNhcHR1cmVy
QW5kcm9pZCBpbXBsZW1lbnRzIFZpZGVvQ2FwdHVyZXIsIFZpZGVvU2luayB7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBESVNQTEFZX0ZMQUdTID0KLSAgICAgIERpc3BsYXlNYW5hZ2VyLlZJ
UlRVQUxfRElTUExBWV9GTEFHX1BVQkxJQyB8IERpc3BsYXlNYW5hZ2VyLlZJUlRVQUxfRElTUExB
WV9GTEFHX1BSRVNFTlRBVElPTjsKLSAgLy8gRFBJIGZvciBWaXJ0dWFsRGlzcGxheSwgZG9lcyBu
b3Qgc2VlbSB0byBtYXR0ZXIgZm9yIHVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklS
VFVBTF9ESVNQTEFZX0RQSSA9IDQwMDsKLQotICBwcml2YXRlIGZpbmFsIEludGVudCBtZWRpYVBy
b2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YTsKLSAgcHJpdmF0ZSBmaW5hbCBNZWRpYVByb2pl
Y3Rpb24uQ2FsbGJhY2sgbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2s7Ci0KLSAgcHJpdmF0ZSBpbnQg
d2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgQE51bGxhYmxlIHByaXZhdGUgVmlydHVh
bERpc3BsYXkgdmlydHVhbERpc3BsYXk7Ci0gIEBOdWxsYWJsZSBwcml2YXRlIFN1cmZhY2VUZXh0
dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICBATnVsbGFibGUgcHJpdmF0ZSBDYXB0
dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgbG9uZyBudW1DYXB0dXJl
ZEZyYW1lczsKLSAgQE51bGxhYmxlIHByaXZhdGUgTWVkaWFQcm9qZWN0aW9uIG1lZGlhUHJvamVj
dGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRGlzcG9zZWQ7Ci0gIEBOdWxsYWJsZSBwcml2YXRl
IE1lZGlhUHJvamVjdGlvbk1hbmFnZXIgbWVkaWFQcm9qZWN0aW9uTWFuYWdlcjsKLQotICAvKioK
LSAgICogQ29uc3RydWN0cyBhIG5ldyBTY3JlZW4gQ2FwdHVyZXIuCi0gICAqCi0gICAqIEBwYXJh
bSBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSB0aGUgcmVzdWx0IGRhdGEgb2Yg
TWVkaWFQcm9qZWN0aW9uIHBlcm1pc3Npb24KLSAgICogICAgIGFjdGl2aXR5OyB0aGUgY2FsbGlu
ZyBhcHAgbXVzdCB2YWxpZGF0ZSB0aGF0IHJlc3VsdCBjb2RlIGlzIEFjdGl2aXR5LlJFU1VMVF9P
SyBiZWZvcmUKLSAgICogICAgIGNhbGxpbmcgdGhpcyBtZXRob2QuCi0gICAqIEBwYXJhbSBtZWRp
YVByb2plY3Rpb25DYWxsYmFjayBNZWRpYVByb2plY3Rpb24gY2FsbGJhY2sgdG8gaW1wbGVtZW50
IGFwcGxpY2F0aW9uIHNwZWNpZmljCi0gICAqICAgICBsb2dpYyBpbiBldmVudHMgc3VjaCBhcyB3
aGVuIHRoZSB1c2VyIHJldm9rZXMgYSBwcmV2aW91c2x5IGdyYW50ZWQgY2FwdHVyZSBwZXJtaXNz
aW9uLgotICAqKi8KLSAgcHVibGljIFNjcmVlbkNhcHR1cmVyQW5kcm9pZChJbnRlbnQgbWVkaWFQ
cm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEsCi0gICAgICBNZWRpYVByb2plY3Rpb24uQ2Fs
bGJhY2sgbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2spIHsKLSAgICB0aGlzLm1lZGlhUHJvamVjdGlv
blBlcm1pc3Npb25SZXN1bHREYXRhID0gbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERh
dGE7Ci0gICAgdGhpcy5tZWRpYVByb2plY3Rpb25DYWxsYmFjayA9IG1lZGlhUHJvamVjdGlvbkNh
bGxiYWNrOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTm90RGlzcG9zZWQoKSB7Ci0gICAg
aWYgKGlzRGlzcG9zZWQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYXB0
dXJlciBpcyBkaXNwb3NlZC4iKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgLy8gVE9E
TyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNr
IHN1cHByZXNzaW9uLgotICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RD
aGVjayIpCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBpbml0aWFsaXplKGZpbmFsIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgZmluYWwgQ29udGV4
dCBhcHBsaWNhdGlvbkNvbnRleHQsIGZpbmFsIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNl
cnZlcikgewotICAgIGNoZWNrTm90RGlzcG9zZWQoKTsKLQotICAgIGlmIChjYXB0dXJlck9ic2Vy
dmVyID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYXB0dXJl
ck9ic2VydmVyIG5vdCBzZXQuIik7Ci0gICAgfQotICAgIHRoaXMuY2FwdHVyZXJPYnNlcnZlciA9
IGNhcHR1cmVyT2JzZXJ2ZXI7Ci0KLSAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVs
bCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInN1cmZhY2VUZXh0dXJlSGVs
cGVyIG5vdCBzZXQuIik7Ci0gICAgfQotICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBz
dXJmYWNlVGV4dHVyZUhlbHBlcjsKLQotICAgIG1lZGlhUHJvamVjdGlvbk1hbmFnZXIgPSAoTWVk
aWFQcm9qZWN0aW9uTWFuYWdlcikgYXBwbGljYXRpb25Db250ZXh0LmdldFN5c3RlbVNlcnZpY2Uo
Ci0gICAgICAgIENvbnRleHQuTUVESUFfUFJPSkVDVElPTl9TRVJWSUNFKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5
bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0
Q2FwdHVyZSgKLSAgICAgIGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwgZmluYWwg
aW50IGlnbm9yZWRGcmFtZXJhdGUpIHsKLSAgICBjaGVja05vdERpc3Bvc2VkKCk7Ci0KLSAgICB0
aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBtZWRp
YVByb2plY3Rpb24gPSBtZWRpYVByb2plY3Rpb25NYW5hZ2VyLmdldE1lZGlhUHJvamVjdGlvbigK
LSAgICAgICAgQWN0aXZpdHkuUkVTVUxUX09LLCBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVz
dWx0RGF0YSk7Ci0KLSAgICAvLyBMZXQgTWVkaWFQcm9qZWN0aW9uIGNhbGxiYWNrIHVzZSB0aGUg
U3VyZmFjZVRleHR1cmVIZWxwZXIgdGhyZWFkLgotICAgIG1lZGlhUHJvamVjdGlvbi5yZWdpc3Rl
ckNhbGxiYWNrKG1lZGlhUHJvamVjdGlvbkNhbGxiYWNrLCBzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRIYW5kbGVyKCkpOwotCi0gICAgY3JlYXRlVmlydHVhbERpc3BsYXkoKTsKLSAgICBjYXB0dXJl
ck9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKHRydWUpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVs
cGVyLnN0YXJ0TGlzdGVuaW5nKFNjcmVlbkNhcHR1cmVyQW5kcm9pZC50aGlzKTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3lu
Y2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJO
b1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0
b3BDYXB0dXJlKCkgewotICAgIGNoZWNrTm90RGlzcG9zZWQoKTsKLSAgICBUaHJlYWRVdGlscy5p
bnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRs
ZXIoKSwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsK
LSAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RvcHBlZCgpOwotCi0gICAgICAg
IGlmICh2aXJ0dWFsRGlzcGxheSAhPSBudWxsKSB7Ci0gICAgICAgICAgdmlydHVhbERpc3BsYXku
cmVsZWFzZSgpOwotICAgICAgICAgIHZpcnR1YWxEaXNwbGF5ID0gbnVsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtZWRpYVByb2plY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgIC8vIFVu
cmVnaXN0ZXIgdGhlIGNhbGxiYWNrIGJlZm9yZSBzdG9wcGluZywgb3RoZXJ3aXNlIHRoZSBjYWxs
YmFjayByZWN1cnNpdmVseQotICAgICAgICAgIC8vIGNhbGxzIHRoaXMgbWV0aG9kLgotICAgICAg
ICAgIG1lZGlhUHJvamVjdGlvbi51bnJlZ2lzdGVyQ2FsbGJhY2sobWVkaWFQcm9qZWN0aW9uQ2Fs
bGJhY2spOwotICAgICAgICAgIG1lZGlhUHJvamVjdGlvbi5zdG9wKCk7Ci0gICAgICAgICAgbWVk
aWFQcm9qZWN0aW9uID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9T
eW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgQFN1cHByZXNzV2FybmluZ3Mo
Ik5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
ZGlzcG9zZSgpIHsKLSAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBD
aGFuZ2VzIG91dHB1dCB2aWRlbyBmb3JtYXQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNj
YWxlIHRoZSBvdXRwdXQKLSAgICogdmlkZW8sIG9yIHRvIGNoYW5nZSBvcmllbnRhdGlvbiB3aGVu
IHRoZSBjYXB0dXJlZCBzY3JlZW4gaXMgcm90YXRlZCBmb3IgZXhhbXBsZS4KLSAgICoKLSAgICog
QHBhcmFtIHdpZHRoIG5ldyBvdXRwdXQgdmlkZW8gd2lkdGgKLSAgICogQHBhcmFtIGhlaWdodCBu
ZXcgb3V0cHV0IHZpZGVvIGhlaWdodAotICAgKiBAcGFyYW0gaWdub3JlZEZyYW1lcmF0ZSBpZ25v
cmVkCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6
IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICBAU3VwcHJl
c3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gIHB1YmxpYyBzeW5jaHJv
bml6ZWQgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KAotICAgICAgZmluYWwgaW50IHdpZHRoLCBm
aW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgaWdub3JlZEZyYW1lcmF0ZSkgewotICAgIGNoZWNr
Tm90RGlzcG9zZWQoKTsKLQotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdo
dCA9IGhlaWdodDsKLQotICAgIGlmICh2aXJ0dWFsRGlzcGxheSA9PSBudWxsKSB7Ci0gICAgICAv
LyBDYXB0dXJlciBpcyBzdG9wcGVkLCB0aGUgdmlydHVhbCBkaXNwbGF5IHdpbGwgYmUgY3JlYXRl
ZCBpbiBzdGFydENhcHR1ZXIoKS4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVh
dGUgYSBuZXcgdmlydHVhbCBkaXNwbGF5IG9uIHRoZSBzdXJmYWNlVGV4dHVyZUhlbHBlciB0aHJl
YWQgdG8gYXZvaWQgaW50ZXJmZXJlbmNlCi0gICAgLy8gd2l0aCBmcmFtZSBwcm9jZXNzaW5nLCB3
aGljaCBoYXBwZW5zIG9uIHRoZSBzYW1lIHRocmVhZCAod2Ugc2VyaWFsaXplIGV2ZW50cyBieSBy
dW5uaW5nCi0gICAgLy8gdGhlbSBvbiB0aGUgc2FtZSB0aHJlYWQpLgotICAgIFRocmVhZFV0aWxz
Lmludm9rZUF0RnJvbnRVbmludGVycnVwdGlibHkoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFu
ZGxlcigpLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgdmlydHVhbERpc3BsYXkucmVsZWFzZSgpOwotICAgICAgICBj
cmVhdGVWaXJ0dWFsRGlzcGxheSgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIGNyZWF0ZVZpcnR1YWxEaXNwbGF5KCkgewotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LnNldFRleHR1cmVTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIHZpcnR1YWxEaXNwbGF5ID0gbWVk
aWFQcm9qZWN0aW9uLmNyZWF0ZVZpcnR1YWxEaXNwbGF5KCJXZWJSVENfU2NyZWVuQ2FwdHVyZSIs
IHdpZHRoLCBoZWlnaHQsCi0gICAgICAgIFZJUlRVQUxfRElTUExBWV9EUEksIERJU1BMQVlfRkxB
R1MsIG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkp
LAotICAgICAgICBudWxsIC8qIGNhbGxiYWNrICovLCBudWxsIC8qIGNhbGxiYWNrIGhhbmRsZXIg
Ki8pOwotICB9Ci0KLSAgLy8gVGhpcyBpcyBjYWxsZWQgb24gdGhlIGludGVybmFsIGxvb3BlciB0
aHJlYWQgb2Yge0BDb2RlIFN1cmZhY2VUZXh0dXJlSGVscGVyfS4KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgIG51bUNhcHR1cmVkRnJh
bWVzKys7Ci0gICAgY2FwdHVyZXJPYnNlcnZlci5vbkZyYW1lQ2FwdHVyZWQoZnJhbWUpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuY2FzdCgpIHsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBsb25nIGdldE51bUNhcHR1cmVkRnJhbWVzKCkg
ewotICAgIHJldHVybiBudW1DYXB0dXJlZEZyYW1lczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1NkcE9ic2VydmVyLmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTk5YmM1NTI4ZDllMTg4NzVkZGM2N2Jj
OTFlZGY0NmM5NzIwOGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoq
IEludGVyZmFjZSBmb3Igb2JzZXJ2aW5nIFNEUC1yZWxhdGVkIGV2ZW50cy4gKi8KLXB1YmxpYyBp
bnRlcmZhY2UgU2RwT2JzZXJ2ZXIgewotICAvKiogQ2FsbGVkIG9uIHN1Y2Nlc3Mgb2YgQ3JlYXRl
e09mZmVyLEFuc3dlcn0oKS4gKi8KLSAgQENhbGxlZEJ5TmF0aXZlIHZvaWQgb25DcmVhdGVTdWNj
ZXNzKFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIC8qKiBDYWxsZWQgb24gc3VjY2VzcyBv
ZiBTZXR7TG9jYWwsUmVtb3RlfURlc2NyaXB0aW9uKCkuICovCi0gIEBDYWxsZWRCeU5hdGl2ZSB2
b2lkIG9uU2V0U3VjY2VzcygpOwotCi0gIC8qKiBDYWxsZWQgb24gZXJyb3Igb2YgQ3JlYXRle09m
ZmVyLEFuc3dlcn0oKS4gKi8KLSAgQENhbGxlZEJ5TmF0aXZlIHZvaWQgb25DcmVhdGVGYWlsdXJl
KFN0cmluZyBlcnJvcik7Ci0KLSAgLyoqIENhbGxlZCBvbiBlcnJvciBvZiBTZXR7TG9jYWwsUmVt
b3RlfURlc2NyaXB0aW9uKCkuICovCi0gIEBDYWxsZWRCeU5hdGl2ZSB2b2lkIG9uU2V0RmFpbHVy
ZShTdHJpbmcgZXJyb3IpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvU2Vzc2lvbkRlc2Ny
aXB0aW9uLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2MDFmMGJmMmFjMzUzYTFjZmFmYWZkZTljODk2YWVi
NTZiODlhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGphdmEudXRpbC5Mb2NhbGU7Ci0KLS8qKgotICogRGVzY3JpcHRpb24gb2YgYW4gUkZDIDQ1
NjYgU2Vzc2lvbi4KLSAqIFNEUHMgYXJlIHBhc3NlZCBhcyBzZXJpYWxpemVkIFN0cmluZ3MgaW4g
SmF2YS1sYW5kIGFuZCBhcmUgbWF0ZXJpYWxpemVkCi0gKiB0byBTZXNzaW9uRGVzY3JpcHRpb25J
bnRlcmZhY2UgYXMgYXBwcm9wcmlhdGUgaW4gdGhlIEpOSSBsYXllci4KLSAqLwotcHVibGljIGNs
YXNzIFNlc3Npb25EZXNjcmlwdGlvbiB7Ci0gIC8qKiBKYXZhLWxhbmQgZW51bSB2ZXJzaW9uIG9m
IFNlc3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSdzIHR5cGUoKSBzdHJpbmcuICovCi0gIHB1Ymxp
YyBzdGF0aWMgZW51bSBUeXBlIHsKLSAgICBPRkZFUiwKLSAgICBQUkFOU1dFUiwKLSAgICBBTlNX
RVI7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGNhbm9uaWNhbEZvcm0oKSB7Ci0gICAgICByZXR1cm4g
bmFtZSgpLnRvTG93ZXJDYXNlKExvY2FsZS5VUyk7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0
aXZlKCJUeXBlIikKLSAgICBwdWJsaWMgc3RhdGljIFR5cGUgZnJvbUNhbm9uaWNhbEZvcm0oU3Ry
aW5nIGNhbm9uaWNhbCkgewotICAgICAgcmV0dXJuIFR5cGUudmFsdWVPZihUeXBlLmNsYXNzLCBj
YW5vbmljYWwudG9VcHBlckNhc2UoTG9jYWxlLlVTKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGlj
IGZpbmFsIFR5cGUgdHlwZTsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKLQot
ICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIFNlc3Npb25EZXNjcmlwdGlvbihUeXBlIHR5cGUs
IFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgdGhpcy5k
ZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIFN0
cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICByZXR1cm4gZGVzY3JpcHRpb247Ci0gIH0KLQot
ICBAQ2FsbGVkQnlOYXRpdmUKLSAgU3RyaW5nIGdldFR5cGVJbkNhbm9uaWNhbEZvcm0oKSB7Ci0g
ICAgcmV0dXJuIHR5cGUuY2Fub25pY2FsRm9ybSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9Tb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1Nv
ZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YWJlMzUwNWE2MjgzNzkxNGRhYTNmYzUwYmE3ZGYwMWNhMzVlY2EwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1NvZnR3YXJl
VmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlz
dDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQot
cHVibGljIGNsYXNzIFNvZnR3YXJlVmlkZW9EZWNvZGVyRmFjdG9yeSBpbXBsZW1lbnRzIFZpZGVv
RGVjb2RlckZhY3RvcnkgewotICBARGVwcmVjYXRlZAotICBATnVsbGFibGUKLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBWaWRlb0RlY29kZXIgY3JlYXRlRGVjb2RlcihTdHJpbmcgY29kZWNUeXBlKSB7
Ci0gICAgcmV0dXJuIGNyZWF0ZURlY29kZXIobmV3IFZpZGVvQ29kZWNJbmZvKGNvZGVjVHlwZSwg
bmV3IEhhc2hNYXA8PigpKSk7Ci0gIH0KLQotICBATnVsbGFibGUKLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBWaWRlb0RlY29kZXIgY3JlYXRlRGVjb2RlcihWaWRlb0NvZGVjSW5mbyBjb2RlY1R5cGUp
IHsKLSAgICBpZiAoY29kZWNUeXBlLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJWUDgiKSkg
ewotICAgICAgcmV0dXJuIG5ldyBMaWJ2cHhWcDhEZWNvZGVyKCk7Ci0gICAgfQotICAgIGlmIChj
b2RlY1R5cGUuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoIlZQOSIpICYmIExpYnZweFZwOURl
Y29kZXIubmF0aXZlSXNTdXBwb3J0ZWQoKSkgewotICAgICAgcmV0dXJuIG5ldyBMaWJ2cHhWcDlE
ZWNvZGVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIFZpZGVvQ29kZWNJbmZvW10gZ2V0U3VwcG9ydGVkQ29kZWNzKCkgewotICAgIHJl
dHVybiBzdXBwb3J0ZWRDb2RlY3MoKTsKLSAgfQotCi0gIHN0YXRpYyBWaWRlb0NvZGVjSW5mb1td
IHN1cHBvcnRlZENvZGVjcygpIHsKLSAgICBMaXN0PFZpZGVvQ29kZWNJbmZvPiBjb2RlY3MgPSBu
ZXcgQXJyYXlMaXN0PFZpZGVvQ29kZWNJbmZvPigpOwotCi0gICAgY29kZWNzLmFkZChuZXcgVmlk
ZW9Db2RlY0luZm8oIlZQOCIsIG5ldyBIYXNoTWFwPD4oKSkpOwotICAgIGlmIChMaWJ2cHhWcDlE
ZWNvZGVyLm5hdGl2ZUlzU3VwcG9ydGVkKCkpIHsKLSAgICAgIGNvZGVjcy5hZGQobmV3IFZpZGVv
Q29kZWNJbmZvKCJWUDkiLCBuZXcgSGFzaE1hcDw+KCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Y29kZWNzLnRvQXJyYXkobmV3IFZpZGVvQ29kZWNJbmZvW2NvZGVjcy5zaXplKCldKTsKLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvU29mdHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5Lmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9Tb2Z0d2FyZVZpZGVvRW5jb2RlckZhY3RvcnkuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3MGQyMjhlZjY4ZTQ2YTBhZjY4ZDFmZTM0YjA0NWZl
MmJkOTM1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9Tb2Z0d2FyZVZpZGVvRW5jb2RlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0
IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQg
amF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTb2Z0d2FyZVZpZGVvRW5jb2RlckZhY3Rv
cnkgaW1wbGVtZW50cyBWaWRlb0VuY29kZXJGYWN0b3J5IHsKLSAgQE51bGxhYmxlCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgVmlkZW9FbmNvZGVyIGNyZWF0ZUVuY29kZXIoVmlkZW9Db2RlY0luZm8g
aW5mbykgewotICAgIGlmIChpbmZvLm5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiVlA4IikpIHsKLSAg
ICAgIHJldHVybiBuZXcgTGlidnB4VnA4RW5jb2RlcigpOwotICAgIH0KLSAgICBpZiAoaW5mby5u
YW1lLmVxdWFsc0lnbm9yZUNhc2UoIlZQOSIpICYmIExpYnZweFZwOUVuY29kZXIubmF0aXZlSXNT
dXBwb3J0ZWQoKSkgewotICAgICAgcmV0dXJuIG5ldyBMaWJ2cHhWcDlFbmNvZGVyKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZGVv
Q29kZWNJbmZvW10gZ2V0U3VwcG9ydGVkQ29kZWNzKCkgewotICAgIHJldHVybiBzdXBwb3J0ZWRD
b2RlY3MoKTsKLSAgfQotCi0gIHN0YXRpYyBWaWRlb0NvZGVjSW5mb1tdIHN1cHBvcnRlZENvZGVj
cygpIHsKLSAgICBMaXN0PFZpZGVvQ29kZWNJbmZvPiBjb2RlY3MgPSBuZXcgQXJyYXlMaXN0PFZp
ZGVvQ29kZWNJbmZvPigpOwotCi0gICAgY29kZWNzLmFkZChuZXcgVmlkZW9Db2RlY0luZm8oIlZQ
OCIsIG5ldyBIYXNoTWFwPD4oKSkpOwotICAgIGlmIChMaWJ2cHhWcDlFbmNvZGVyLm5hdGl2ZUlz
U3VwcG9ydGVkKCkpIHsKLSAgICAgIGNvZGVjcy5hZGQobmV3IFZpZGVvQ29kZWNJbmZvKCJWUDki
LCBuZXcgSGFzaE1hcDw+KCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29kZWNzLnRvQXJyYXko
bmV3IFZpZGVvQ29kZWNJbmZvW2NvZGVjcy5zaXplKCldKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvU3RhdHNPYnNlcnZlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvU3RhdHNPYnNlcnZl
ci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTk4NGMxOGRiNzQ5MmEyY2I1
YWM3ZTdjOTFjNmJhZjkzMDFiNGY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotLyoqIEludGVyZmFjZSBmb3Igb2JzZXJ2aW5nIFN0YXRzIHJlcG9ydHMgKHNlZSB3ZWJy
dGM6OlN0YXRzT2JzZXJ2ZXJzKS4gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHNPYnNlcnZlciB7
Ci0gIC8qKiBDYWxsZWQgd2hlbiB0aGUgcmVwb3J0cyBhcmUgcmVhZHkuKi8KLSAgQENhbGxlZEJ5
TmF0aXZlIHB1YmxpYyB2b2lkIG9uQ29tcGxldGUoU3RhdHNSZXBvcnRbXSByZXBvcnRzKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1N0YXRzUmVwb3J0LmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9T
dGF0c1JlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGYxY2Y4N2Zl
NWFhNWEyYThkNzZjMWVjMGY3ZDA1ZTYxMmQwNTZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1N0YXRzUmVwb3J0LmphdmEKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLS8qKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpTdGF0c1JlcG9ydC4gKi8K
LXB1YmxpYyBjbGFzcyBTdGF0c1JlcG9ydCB7Ci0gIC8qKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRj
OjpTdGF0c1JlcG9ydDo6VmFsdWUuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgVmFsdWUgewot
ICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHZh
bHVlOwotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJWYWx1ZSIpCi0gICAgcHVibGljIFZhbHVlKFN0
cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAg
ICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBT
dHJpbmdCdWlsZGVyKCk7Ci0gICAgICBidWlsZGVyLmFwcGVuZCgiWyIpLmFwcGVuZChuYW1lKS5h
cHBlbmQoIjogIikuYXBwZW5kKHZhbHVlKS5hcHBlbmQoIl0iKTsKLSAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBpZDsK
LSAgcHVibGljIGZpbmFsIFN0cmluZyB0eXBlOwotICAvLyBUaW1lIHNpbmNlIDE5NzAtMDEtMDFU
MDA6MDA6MDBaIGluIG1pbGxpc2Vjb25kcy4KLSAgcHVibGljIGZpbmFsIGRvdWJsZSB0aW1lc3Rh
bXA7Ci0gIHB1YmxpYyBmaW5hbCBWYWx1ZVtdIHZhbHVlczsKLQotICBAQ2FsbGVkQnlOYXRpdmUK
LSAgcHVibGljIFN0YXRzUmVwb3J0KFN0cmluZyBpZCwgU3RyaW5nIHR5cGUsIGRvdWJsZSB0aW1l
c3RhbXAsIFZhbHVlW10gdmFsdWVzKSB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICAgIHRoaXMudHlw
ZSA9IHR5cGU7Ci0gICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgdGhpcy52YWx1
ZXMgPSB2YWx1ZXM7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZyB0b1N0cmlu
ZygpIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwot
ICAgIGJ1aWxkZXIuYXBwZW5kKCJpZDogIikKLSAgICAgICAgLmFwcGVuZChpZCkKLSAgICAgICAg
LmFwcGVuZCgiLCB0eXBlOiAiKQotICAgICAgICAuYXBwZW5kKHR5cGUpCi0gICAgICAgIC5hcHBl
bmQoIiwgdGltZXN0YW1wOiAiKQotICAgICAgICAuYXBwZW5kKHRpbWVzdGFtcCkKLSAgICAgICAg
LmFwcGVuZCgiLCB2YWx1ZXM6ICIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZXNbaV0udG9TdHJpbmcoKSku
YXBwZW5kKCIsICIpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9TdXJmYWNlRWdsUmVuZGVyZXIuamF2YSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9v
cmcvd2VicnRjL1N1cmZhY2VFZ2xSZW5kZXJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3YTZkYjE1ODg3MDQ5NTQ5Y2FiNjgxOGVhM2UyZTMzYmM4OWEwZWYyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1N1cmZh
Y2VFZ2xSZW5kZXJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQudmll
dy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxh
dGNoOwotCi0vKioKLSAqIERpc3BsYXkgdGhlIHZpZGVvIHN0cmVhbSBvbiBhIFN1cmZhY2UuCi0g
KiByZW5kZXJGcmFtZSgpIGlzIGFzeW5jaHJvbm91cyB0byBhdm9pZCBibG9ja2luZyB0aGUgY2Fs
bGluZyB0aHJlYWQuCi0gKiBUaGlzIGNsYXNzIGlzIHRocmVhZCBzYWZlIGFuZCBoYW5kbGVzIGFj
Y2VzcyBmcm9tIHBvdGVudGlhbGx5IHRocmVlIGRpZmZlcmVudCB0aHJlYWRzOgotICogSW50ZXJh
Y3Rpb24gZnJvbSB0aGUgbWFpbiBhcHAgaW4gaW5pdCwgcmVsZWFzZSBhbmQgc2V0TWlycm9yLgot
ICogSW50ZXJhY3Rpb24gZnJvbSBDKysgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UgaW4gcmVuZGVy
RnJhbWUuCi0gKiBJbnRlcmFjdGlvbiBmcm9tIFN1cmZhY2VIb2xkZXIgbGlmZWN5Y2xlIGluIHN1
cmZhY2VDcmVhdGVkLCBzdXJmYWNlQ2hhbmdlZCwgYW5kIHN1cmZhY2VEZXN0cm95ZWQuCi0gKi8K
LXB1YmxpYyBjbGFzcyBTdXJmYWNlRWdsUmVuZGVyZXIgZXh0ZW5kcyBFZ2xSZW5kZXJlciBpbXBs
ZW1lbnRzIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIlN1cmZhY2VFZ2xSZW5kZXJlciI7Ci0KLSAgLy8gQ2FsbGJhY2sgZm9yIHJl
cG9ydGluZyByZW5kZXJlciBldmVudHMuIFJlYWQtb25seSBhZnRlciBpbml0aWFsaXphdGlvbiBz
byBubyBsb2NrIHJlcXVpcmVkLgotICBwcml2YXRlIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZl
bnRzIHJlbmRlcmVyRXZlbnRzOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGxheW91dExvY2sg
PSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1JlbmRlcmluZ1BhdXNlZDsKLSAg
cHJpdmF0ZSBib29sZWFuIGlzRmlyc3RGcmFtZVJlbmRlcmVkOwotICBwcml2YXRlIGludCByb3Rh
dGVkRnJhbWVXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgcm90YXRlZEZyYW1lSGVpZ2h0OwotICBwcml2
YXRlIGludCBmcmFtZVJvdGF0aW9uOwotCi0gIC8qKgotICAgKiBJbiBvcmRlciB0byByZW5kZXIg
c29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQoKS4KLSAgICovCi0gIHB1YmxpYyBT
dXJmYWNlRWdsUmVuZGVyZXIoU3RyaW5nIG5hbWUpIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBJbml0aWFsaXplIHRoaXMgY2xhc3MsIHNoYXJpbmcgcmVzb3VyY2VzIHdp
dGggfHNoYXJlZENvbnRleHR8LiBUaGUgY3VzdG9tIHxkcmF3ZXJ8IHdpbGwgYmUgdXNlZAotICAg
KiBmb3IgZHJhd2luZyBmcmFtZXMgb24gdGhlIEVHTFN1cmZhY2UuIFRoaXMgY2xhc3MgaXMgcmVz
cG9uc2libGUgZm9yIGNhbGxpbmcgcmVsZWFzZSgpIG9uCi0gICAqIHxkcmF3ZXJ8LiBJdCBpcyBh
bGxvd2VkIHRvIGNhbGwgaW5pdCgpIHRvIHJlaW5pdGlhbGl6ZSB0aGUgcmVuZGVyZXIgYWZ0ZXIg
YSBwcmV2aW91cwotICAgKiBpbml0KCkvcmVsZWFzZSgpIGN5Y2xlLgotICAgKi8KLSAgcHVibGlj
IHZvaWQgaW5pdChmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwKLSAgICAgIFJl
bmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzLCBmaW5hbCBpbnRbXSBj
b25maWdBdHRyaWJ1dGVzLAotICAgICAgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyKSB7
Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIHRoaXMucmVuZGVy
ZXJFdmVudHMgPSByZW5kZXJlckV2ZW50czsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2sp
IHsKLSAgICAgIGlzRmlyc3RGcmFtZVJlbmRlcmVkID0gZmFsc2U7Ci0gICAgICByb3RhdGVkRnJh
bWVXaWR0aCA9IDA7Ci0gICAgICByb3RhdGVkRnJhbWVIZWlnaHQgPSAwOwotICAgICAgZnJhbWVS
b3RhdGlvbiA9IDA7Ci0gICAgfQotICAgIHN1cGVyLmluaXQoc2hhcmVkQ29udGV4dCwgY29uZmln
QXR0cmlidXRlcywgZHJhd2VyKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBp
bml0KGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBmaW5hbCBpbnRbXSBjb25m
aWdBdHRyaWJ1dGVzLAotICAgICAgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyKSB7Ci0g
ICAgaW5pdChzaGFyZWRDb250ZXh0LCBudWxsIC8qIHJlbmRlcmVyRXZlbnRzICovLCBjb25maWdB
dHRyaWJ1dGVzLCBkcmF3ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIExpbWl0IHJlbmRlciBmcmFt
ZXJhdGUuCi0gICAqCi0gICAqIEBwYXJhbSBmcHMgTGltaXQgcmVuZGVyIGZyYW1lcmF0ZSB0byB0
aGlzIHZhbHVlLCBvciB1c2UgRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkgdG8gZGlzYWJsZSBmcHMK
LSAgICogICAgICAgICAgICByZWR1Y3Rpb24uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgc2V0RnBzUmVkdWN0aW9uKGZsb2F0IGZwcykgewotICAgIHN5bmNocm9uaXplZCAobGF5
b3V0TG9jaykgewotICAgICAgaXNSZW5kZXJpbmdQYXVzZWQgPSBmcHMgPT0gMGY7Ci0gICAgfQot
ICAgIHN1cGVyLnNldEZwc1JlZHVjdGlvbihmcHMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIGRpc2FibGVGcHNSZWR1Y3Rpb24oKSB7Ci0gICAgc3luY2hyb25pemVkIChsYXlv
dXRMb2NrKSB7Ci0gICAgICBpc1JlbmRlcmluZ1BhdXNlZCA9IGZhbHNlOwotICAgIH0KLSAgICBz
dXBlci5kaXNhYmxlRnBzUmVkdWN0aW9uKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgcGF1c2VWaWRlbygpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2spIHsKLSAg
ICAgIGlzUmVuZGVyaW5nUGF1c2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgc3VwZXIucGF1c2VWaWRl
bygpOwotICB9Ci0KLSAgLy8gVmlkZW9TaW5rIGludGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgIHVwZGF0ZUZyYW1lRGlt
ZW5zaW9uc0FuZFJlcG9ydEV2ZW50cyhmcmFtZSk7Ci0gICAgc3VwZXIub25GcmFtZShmcmFtZSk7
Ci0gIH0KLQotICAvLyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGludGVyZmFjZS4KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKGZpbmFsIFN1cmZhY2VIb2xkZXIgaG9s
ZGVyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIGNyZWF0
ZUVnbFN1cmZhY2UoaG9sZGVyLmdldFN1cmZhY2UoKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3llZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAg
IFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICBmaW5hbCBDb3VudERvd25M
YXRjaCBjb21wbGV0aW9uTGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgcmVsZWFz
ZUVnbFN1cmZhY2UoY29tcGxldGlvbkxhdGNoOjpjb3VudERvd24pOwotICAgIFRocmVhZFV0aWxz
LmF3YWl0VW5pbnRlcnJ1cHRpYmx5KGNvbXBsZXRpb25MYXRjaCk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGlu
dCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIFRocmVhZFV0aWxzLmNoZWNr
SXNPbk1haW5UaHJlYWQoKTsKLSAgICBsb2dEKCJzdXJmYWNlQ2hhbmdlZDogZm9ybWF0OiAiICsg
Zm9ybWF0ICsgIiBzaXplOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOwotICB9Ci0KLSAgLy8g
VXBkYXRlIGZyYW1lIGRpbWVuc2lvbnMgYW5kIHJlcG9ydCBhbnkgY2hhbmdlcyB0byB8cmVuZGVy
ZXJFdmVudHN8LgotICBwcml2YXRlIHZvaWQgdXBkYXRlRnJhbWVEaW1lbnNpb25zQW5kUmVwb3J0
RXZlbnRzKFZpZGVvRnJhbWUgZnJhbWUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2sp
IHsKLSAgICAgIGlmIChpc1JlbmRlcmluZ1BhdXNlZCkgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBpZiAoIWlzRmlyc3RGcmFtZVJlbmRlcmVkKSB7Ci0gICAgICAgIGlzRmlyc3RG
cmFtZVJlbmRlcmVkID0gdHJ1ZTsKLSAgICAgICAgbG9nRCgiUmVwb3J0aW5nIGZpcnN0IHJlbmRl
cmVkIGZyYW1lLiIpOwotICAgICAgICBpZiAocmVuZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAg
ICAgICAgIHJlbmRlcmVyRXZlbnRzLm9uRmlyc3RGcmFtZVJlbmRlcmVkKCk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGlmIChyb3RhdGVkRnJhbWVXaWR0aCAhPSBmcmFtZS5nZXRSb3RhdGVk
V2lkdGgoKQotICAgICAgICAgIHx8IHJvdGF0ZWRGcmFtZUhlaWdodCAhPSBmcmFtZS5nZXRSb3Rh
dGVkSGVpZ2h0KCkKLSAgICAgICAgICB8fCBmcmFtZVJvdGF0aW9uICE9IGZyYW1lLmdldFJvdGF0
aW9uKCkpIHsKLSAgICAgICAgbG9nRCgiUmVwb3J0aW5nIGZyYW1lIHJlc29sdXRpb24gY2hhbmdl
ZCB0byAiICsgZnJhbWUuZ2V0QnVmZmVyKCkuZ2V0V2lkdGgoKSArICJ4IgotICAgICAgICAgICAg
KyBmcmFtZS5nZXRCdWZmZXIoKS5nZXRIZWlnaHQoKSArICIgd2l0aCByb3RhdGlvbiAiICsgZnJh
bWUuZ2V0Um90YXRpb24oKSk7Ci0gICAgICAgIGlmIChyZW5kZXJlckV2ZW50cyAhPSBudWxsKSB7
Ci0gICAgICAgICAgcmVuZGVyZXJFdmVudHMub25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKAotICAg
ICAgICAgICAgICBmcmFtZS5nZXRCdWZmZXIoKS5nZXRXaWR0aCgpLCBmcmFtZS5nZXRCdWZmZXIo
KS5nZXRIZWlnaHQoKSwgZnJhbWUuZ2V0Um90YXRpb24oKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cm90YXRlZEZyYW1lV2lkdGggPSBmcmFtZS5nZXRSb3RhdGVkV2lkdGgoKTsKLSAgICAgICAgcm90
YXRlZEZyYW1lSGVpZ2h0ID0gZnJhbWUuZ2V0Um90YXRlZEhlaWdodCgpOwotICAgICAgICBmcmFt
ZVJvdGF0aW9uID0gZnJhbWUuZ2V0Um90YXRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgbG9nRChTdHJpbmcgc3RyaW5nKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywg
bmFtZSArICI6ICIgKyBzdHJpbmcpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9T
dXJmYWNlVGV4dHVyZUhlbHBlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxw
ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyMmE4NzQ4NzkxZjIyYmI4
ZTdlN2M4OWEyMTNmMzdiNjg2MDAxOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlci5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsMzg5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBv
cnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5n
bC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJv
aWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQu
b3MuSGFuZGxlclRocmVhZDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxs
YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsKLWltcG9ydCBvcmcu
d2VicnRjLkVnbEJhc2UuQ29udGV4dDsKLWltcG9ydCBvcmcud2VicnRjLlRleHR1cmVCdWZmZXJJ
bXBsLlJlZkNvdW50TW9uaXRvcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvRnJhbWUuVGV4dHVy
ZUJ1ZmZlcjsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIHVzaW5nIGEgU3VyZmFjZVRleHR1
cmUgdG8gY3JlYXRlIFdlYlJUQyBWaWRlb0ZyYW1lcy4gSW4gb3JkZXIgdG8gY3JlYXRlIFdlYlJU
QwotICogVmlkZW9GcmFtZXMsIHJlbmRlciBvbnRvIHRoZSBTdXJmYWNlVGV4dHVyZS4gVGhlIGZy
YW1lcyB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgbGlzdGVuZXIuIE9ubHkKLSAqIG9uZSB0ZXh0
dXJlIGZyYW1lIGNhbiBiZSBpbiBmbGlnaHQgYXQgb25jZSwgc28gdGhlIGZyYW1lIG11c3QgYmUg
cmVsZWFzZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBhCi0gKiBuZXcgZnJhbWUuIENhbGwgc3RvcExp
c3RlbmluZygpIHRvIHN0b3AgcmVjZWl2ZWluZyBuZXcgZnJhbWVzLiBDYWxsIGRpc3Bvc2UgdG8g
cmVsZWFzZSBhbGwKLSAqIHJlc291cmNlcyBvbmNlIHRoZSB0ZXh0dXJlIGZyYW1lIGlzIHJlbGVh
c2VkLgotICovCi1wdWJsaWMgY2xhc3MgU3VyZmFjZVRleHR1cmVIZWxwZXIgewotICAvKioKLSAg
ICogSW50ZXJmYWNlIGZvciBtb25pdG9yaW5nIHRleHR1cmUgYnVmZmVycyBjcmVhdGVkIGZyb20g
dGhpcyBTdXJmYWNlVGV4dHVyZS4gU2luY2Ugb25seSBvbmUKLSAgICogdGV4dHVyZSBidWZmZXIg
Y2FuIGV4aXN0IGF0IGEgdGltZSwgdGhpcyBjYW4gYmUgdXNlZCB0byBtb25pdG9yIGZvciBzdHVj
ayBmcmFtZXMuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEZyYW1lUmVmTW9uaXRvciB7Ci0g
ICAgLyoqIEEgbmV3IGZyYW1lIHdhcyBjcmVhdGVkLiBOZXcgZnJhbWVzIHN0YXJ0IHdpdGggcmVm
IGNvdW50IG9mIDEuICovCi0gICAgdm9pZCBvbk5ld0J1ZmZlcihUZXh0dXJlQnVmZmVyIHRleHR1
cmVCdWZmZXIpOwotICAgIC8qKiBSZWYgY291bnQgb2YgdGhlIGZyYW1lIHdhcyBpbmNyZW1lbnRl
ZCBieSB0aGUgY2FsbGluZyB0aHJlYWQuICovCi0gICAgdm9pZCBvblJldGFpbkJ1ZmZlcihUZXh0
dXJlQnVmZmVyIHRleHR1cmVCdWZmZXIpOwotICAgIC8qKiBSZWYgY291bnQgb2YgdGhlIGZyYW1l
IHdhcyBkZWNyZW1lbnRlZCBieSB0aGUgY2FsbGluZyB0aHJlYWQuICovCi0gICAgdm9pZCBvblJl
bGVhc2VCdWZmZXIoVGV4dHVyZUJ1ZmZlciB0ZXh0dXJlQnVmZmVyKTsKLSAgICAvKiogRnJhbWUg
d2FzIGRlc3Ryb3llZCAocmVmIGNvdW50IHJlYWNoZWQgMCkuICovCi0gICAgdm9pZCBvbkRlc3Ry
b3lCdWZmZXIoVGV4dHVyZUJ1ZmZlciB0ZXh0dXJlQnVmZmVyKTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU3VyZmFjZVRleHR1cmVIZWxwZXIiOwotICAvKioK
LSAgICogQ29uc3RydWN0IGEgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyIHNoYXJpbmcgT3BlbkdM
IHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gQSBkZWRpY2F0ZWQKLSAgICogdGhyZWFk
IGFuZCBoYW5kbGVyIGlzIGNyZWF0ZWQgZm9yIGhhbmRsaW5nIHRoZSBTdXJmYWNlVGV4dHVyZS4g
TWF5IHJldHVybiBudWxsIGlmIEVHTCBmYWlscyB0bwotICAgKiBpbml0aWFsaXplIGEgcGl4ZWwg
YnVmZmVyIHN1cmZhY2UgYW5kIG1ha2UgaXQgY3VycmVudC4gSWYgYWxpZ25UaW1lc3RhbXBzIGlz
IHRydWUsIHRoZSBmcmFtZQotICAgKiB0aW1lc3RhbXBzIHdpbGwgYmUgYWxpZ25lZCB0byBydGM6
OlRpbWVOYW5vcygpLiBJZiBmcmFtZSB0aW1lc3RhbXBzIGFyZSBhbGlnbmVkIHRvCi0gICAqIHJ0
Yzo6VGltZU5hbm9zKCkgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYWxpZ25pbmcgdGltZXN0YW1wcyBh
Z2FpbiBpbgotICAgKiBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UoKS4g
VGhpcyBtYWtlcyB0aGUgdGltZXN0YW1wcyBtb3JlIGFjY3VyYXRlIGFuZAotICAgKiBjbG9zZXIg
dG8gYWN0dWFsIGNyZWF0aW9uIHRpbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIGNyZWF0ZShmaW5hbCBTdHJpbmcgdGhyZWFkTmFtZSwKLSAgICAgIGZpbmFs
IEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBib29sZWFuIGFsaWduVGltZXN0YW1wcywg
ZmluYWwgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlciwKLSAgICAgIEZyYW1lUmVmTW9uaXRvciBm
cmFtZVJlZk1vbml0b3IpIHsKLSAgICBmaW5hbCBIYW5kbGVyVGhyZWFkIHRocmVhZCA9IG5ldyBI
YW5kbGVyVGhyZWFkKHRocmVhZE5hbWUpOwotICAgIHRocmVhZC5zdGFydCgpOwotICAgIGZpbmFs
IEhhbmRsZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRocmVhZC5nZXRMb29wZXIoKSk7Ci0KLSAg
ICAvLyBUaGUgb25GcmFtZUF2YWlsYWJsZSgpIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb24g
dGhlIFN1cmZhY2VUZXh0dXJlIGN0b3IgdGhyZWFkLiBTZWU6Ci0gICAgLy8gaHR0cDovL2dyZXBj
b2RlLmNvbS9maWxlL3JlcG9zaXRvcnkuZ3JlcGNvZGUuY29tL2phdmEvZXh0L2NvbS5nb29nbGUu
YW5kcm9pZC9hbmRyb2lkLzUuMS4xX3IxL2FuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmUu
amF2YSMxOTUuCi0gICAgLy8gVGhlcmVmb3JlLCBpbiBvcmRlciB0byBjb250cm9sIHRoZSBjYWxs
YmFjayB0aHJlYWQgb24gQVBJIGx2bCA8IDIxLCB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIKLSAg
ICAvLyBpcyBjb25zdHJ1Y3RlZCBvbiB0aGUgfGhhbmRsZXJ8IHRocmVhZC4KLSAgICByZXR1cm4g
VGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShoYW5kbGVyLCBuZXcgQ2Fs
bGFibGU8U3VyZmFjZVRleHR1cmVIZWxwZXI+KCkgewotICAgICAgQE51bGxhYmxlCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdXJmYWNlVGV4dHVyZUhlbHBlciBjYWxsKCkgewotICAg
ICAgICB0cnkgewotICAgICAgICAgIHJldHVybiBuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIoCi0g
ICAgICAgICAgICAgIHNoYXJlZENvbnRleHQsIGhhbmRsZXIsIGFsaWduVGltZXN0YW1wcywgeXV2
Q29udmVydGVyLCBmcmFtZVJlZk1vbml0b3IpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhj
ZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCB0aHJlYWROYW1lICsgIiBjcmVh
dGUgZmFpbHVyZSIsIGUpOwotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogU2FtZSBhcyBhYm92ZSB3aXRoIGFsaWdu
VGltZXN0YW1wcyBzZXQgdG8gZmFsc2UgYW5kIHl1dkNvbnZlcnRlciBzZXQgdG8gbmV3IFl1dkNv
bnZlcnRlci4KLSAgICoKLSAgICogQHNlZSAjY3JlYXRlKFN0cmluZywgRWdsQmFzZS5Db250ZXh0
LCBib29sZWFuLCBZdXZDb252ZXJ0ZXIsIEZyYW1lUmVmTW9uaXRvcikKLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgU3VyZmFjZVRleHR1cmVIZWxwZXIgY3JlYXRlKAotICAgICAgZmluYWwgU3RyaW5n
IHRocmVhZE5hbWUsIGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0gICAg
cmV0dXJuIGNyZWF0ZSh0aHJlYWROYW1lLCBzaGFyZWRDb250ZXh0LCAvKiBhbGlnblRpbWVzdGFt
cHM9ICovIGZhbHNlLCBuZXcgWXV2Q29udmVydGVyKCksCi0gICAgICAgIC8qZnJhbWVSZWZNb25p
dG9yPSovbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogU2FtZSBhcyBhYm92ZSB3aXRoIHl1dkNv
bnZlcnRlciBzZXQgdG8gbmV3IFl1dkNvbnZlcnRlci4KLSAgICoKLSAgICogQHNlZSAjY3JlYXRl
KFN0cmluZywgRWdsQmFzZS5Db250ZXh0LCBib29sZWFuLCBZdXZDb252ZXJ0ZXIsIEZyYW1lUmVm
TW9uaXRvcikKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3VyZmFjZVRleHR1cmVIZWxwZXIgY3Jl
YXRlKAotICAgICAgZmluYWwgU3RyaW5nIHRocmVhZE5hbWUsIGZpbmFsIEVnbEJhc2UuQ29udGV4
dCBzaGFyZWRDb250ZXh0LCBib29sZWFuIGFsaWduVGltZXN0YW1wcykgewotICAgIHJldHVybiBj
cmVhdGUoCi0gICAgICAgIHRocmVhZE5hbWUsIHNoYXJlZENvbnRleHQsIGFsaWduVGltZXN0YW1w
cywgbmV3IFl1dkNvbnZlcnRlcigpLCAvKmZyYW1lUmVmTW9uaXRvcj0qL251bGwpOwotICB9Ci0K
LSAgLyoqCi0gICAqIENyZWF0ZSBhIFN1cmZhY2VUZXh0dXJlSGVscGVyIHdpdGhvdXQgZnJhbWUg
cmVmIG1vbml0b3IuCi0gICAqCi0gICAqIEBzZWUgI2NyZWF0ZShTdHJpbmcsIEVnbEJhc2UuQ29u
dGV4dCwgYm9vbGVhbiwgWXV2Q29udmVydGVyLCBGcmFtZVJlZk1vbml0b3IpCi0gICAqLwotICBw
dWJsaWMgc3RhdGljIFN1cmZhY2VUZXh0dXJlSGVscGVyIGNyZWF0ZShmaW5hbCBTdHJpbmcgdGhy
ZWFkTmFtZSwKLSAgICAgIGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBib29s
ZWFuIGFsaWduVGltZXN0YW1wcywgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlcikgewotICAgIHJl
dHVybiBjcmVhdGUoCi0gICAgICAgIHRocmVhZE5hbWUsIHNoYXJlZENvbnRleHQsIGFsaWduVGlt
ZXN0YW1wcywgeXV2Q29udmVydGVyLCAvKmZyYW1lUmVmTW9uaXRvcj0qL251bGwpOwotICB9Ci0K
LSAgcHJpdmF0ZSBmaW5hbCBSZWZDb3VudE1vbml0b3IgdGV4dHVyZVJlZkNvdW50TW9uaXRvciA9
IG5ldyBSZWZDb3VudE1vbml0b3IoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25SZXRhaW4oVGV4dHVyZUJ1ZmZlckltcGwgdGV4dHVyZUJ1ZmZlcikgewotICAgICAgaWYgKGZy
YW1lUmVmTW9uaXRvciAhPSBudWxsKSB7Ci0gICAgICAgIGZyYW1lUmVmTW9uaXRvci5vblJldGFp
bkJ1ZmZlcih0ZXh0dXJlQnVmZmVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvblJlbGVhc2UoVGV4dHVyZUJ1ZmZlckltcGwgdGV4dHVyZUJ1ZmZl
cikgewotICAgICAgaWYgKGZyYW1lUmVmTW9uaXRvciAhPSBudWxsKSB7Ci0gICAgICAgIGZyYW1l
UmVmTW9uaXRvci5vblJlbGVhc2VCdWZmZXIodGV4dHVyZUJ1ZmZlcik7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EZXN0cm95KFRleHR1cmVCdWZm
ZXJJbXBsIHRleHR1cmVCdWZmZXIpIHsKLSAgICAgIHJldHVyblRleHR1cmVGcmFtZSgpOwotICAg
ICAgaWYgKGZyYW1lUmVmTW9uaXRvciAhPSBudWxsKSB7Ci0gICAgICAgIGZyYW1lUmVmTW9uaXRv
ci5vbkRlc3Ryb3lCdWZmZXIodGV4dHVyZUJ1ZmZlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Owot
Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxlciBoYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEVnbEJh
c2UgZWdsQmFzZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVy
ZTsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgb2VzVGV4dHVyZUlkOwotICBwcml2YXRlIGZpbmFsIFl1
dkNvbnZlcnRlciB5dXZDb252ZXJ0ZXI7Ci0gIEBOdWxsYWJsZSBwcml2YXRlIGZpbmFsIFRpbWVz
dGFtcEFsaWduZXIgdGltZXN0YW1wQWxpZ25lcjsKLSAgcHJpdmF0ZSBmaW5hbCBGcmFtZVJlZk1v
bml0b3IgZnJhbWVSZWZNb25pdG9yOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSBh
Y2Nlc3NlZCBmcm9tIHRoZSB8aGFuZGxlcnwgdGhyZWFkLgotICBATnVsbGFibGUgcHJpdmF0ZSBW
aWRlb1NpbmsgbGlzdGVuZXI7Ci0gIC8vIFRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgdGhpcyBjbGFz
cy4KLSAgcHJpdmF0ZSBib29sZWFuIGhhc1BlbmRpbmdUZXh0dXJlOwotICBwcml2YXRlIHZvbGF0
aWxlIGJvb2xlYW4gaXNUZXh0dXJlSW5Vc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1F1aXR0aW5n
OwotICBwcml2YXRlIGludCBmcmFtZVJvdGF0aW9uOwotICBwcml2YXRlIGludCB0ZXh0dXJlV2lk
dGg7Ci0gIHByaXZhdGUgaW50IHRleHR1cmVIZWlnaHQ7Ci0gIC8vIHxwZW5kaW5nTGlzdGVuZXJ8
IGlzIHNldCBpbiBzZXRMaXN0ZW5lcigpIGFuZCB0aGUgcnVubmFibGUgaXMgcG9zdGVkIHRvIHRo
ZSBoYW5kbGVyIHRocmVhZC4KLSAgLy8gc2V0TGlzdGVuZXIoKSBpcyBub3QgYWxsb3dlZCB0byBi
ZSBjYWxsZWQgYWdhaW4gYmVmb3JlIHN0b3BMaXN0ZW5pbmcoKSwgc28gdGhpcyBpcyB0aHJlYWQg
c2FmZS4KLSAgQE51bGxhYmxlIHByaXZhdGUgVmlkZW9TaW5rIHBlbmRpbmdMaXN0ZW5lcjsKLSAg
ZmluYWwgUnVubmFibGUgc2V0TGlzdGVuZXJSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFH
LCAiU2V0dGluZyBsaXN0ZW5lciB0byAiICsgcGVuZGluZ0xpc3RlbmVyKTsKLSAgICAgIGxpc3Rl
bmVyID0gcGVuZGluZ0xpc3RlbmVyOwotICAgICAgcGVuZGluZ0xpc3RlbmVyID0gbnVsbDsKLSAg
ICAgIC8vIE1heSBoYXZlIGEgcGVuZGluZyBmcmFtZSBmcm9tIHRoZSBwcmV2aW91cyBjYXB0dXJl
IHNlc3Npb24gLSBkcm9wIGl0LgotICAgICAgaWYgKGhhc1BlbmRpbmdUZXh0dXJlKSB7Ci0gICAg
ICAgIC8vIENhbGxpbmcgdXBkYXRlVGV4SW1hZ2UoKSBpcyBuZWNjZXNzYXJ5IGluIG9yZGVyIHRv
IHJlY2VpdmUgbmV3IGZyYW1lcy4KLSAgICAgICAgdXBkYXRlVGV4SW1hZ2UoKTsKLSAgICAgICAg
aGFzUGVuZGluZ1RleHR1cmUgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJp
dmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlcihDb250ZXh0IHNoYXJlZENvbnRleHQsIEhhbmRsZXIg
aGFuZGxlciwgYm9vbGVhbiBhbGlnblRpbWVzdGFtcHMsCi0gICAgICBZdXZDb252ZXJ0ZXIgeXV2
Q29udmVydGVyLCBGcmFtZVJlZk1vbml0b3IgZnJhbWVSZWZNb25pdG9yKSB7Ci0gICAgaWYgKGhh
bmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkg
ewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiU3VyZmFjZVRleHR1cmVI
ZWxwZXIgbXVzdCBiZSBjcmVhdGVkIG9uIHRoZSBoYW5kbGVyIHRocmVhZCIpOwotICAgIH0KLSAg
ICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHRoaXMudGltZXN0YW1wQWxpZ25lciA9IGFs
aWduVGltZXN0YW1wcyA/IG5ldyBUaW1lc3RhbXBBbGlnbmVyKCkgOiBudWxsOwotICAgIHRoaXMu
eXV2Q29udmVydGVyID0geXV2Q29udmVydGVyOwotICAgIHRoaXMuZnJhbWVSZWZNb25pdG9yID0g
ZnJhbWVSZWZNb25pdG9yOwotCi0gICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENv
bnRleHQsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgdHJ5IHsKLSAgICAgIC8v
IEJvdGggdGhlc2Ugc3RhdGVtZW50cyBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gZmFpbCBvbiByYXJl
IG9jY2FzaW9ucywgc2VlIEJVRz13ZWJydGM6NTY4Mi4KLSAgICAgIGVnbEJhc2UuY3JlYXRlRHVt
bXlQYnVmZmVyU3VyZmFjZSgpOwotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIH0g
Y2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgLy8gQ2xlYW4gdXAgYmVmb3JlIHJl
dGhyb3dpbmcgdGhlIGV4Y2VwdGlvbi4KLSAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAg
aGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLQotICAg
IG9lc1RleHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRV
UkVfRVhURVJOQUxfT0VTKTsKLSAgICBzdXJmYWNlVGV4dHVyZSA9IG5ldyBTdXJmYWNlVGV4dHVy
ZShvZXNUZXh0dXJlSWQpOwotICAgIHNldE9uRnJhbWVBdmFpbGFibGVMaXN0ZW5lcihzdXJmYWNl
VGV4dHVyZSwgKFN1cmZhY2VUZXh0dXJlIHN0KSAtPiB7Ci0gICAgICBoYXNQZW5kaW5nVGV4dHVy
ZSA9IHRydWU7Ci0gICAgICB0cnlEZWxpdmVyVGV4dHVyZUZyYW1lKCk7Ci0gICAgfSwgaGFuZGxl
cik7Ci0gIH0KLQotICBAVGFyZ2V0QXBpKDIxKQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldE9u
RnJhbWVBdmFpbGFibGVMaXN0ZW5lcihTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSwKLSAg
ICAgIFN1cmZhY2VUZXh0dXJlLk9uRnJhbWVBdmFpbGFibGVMaXN0ZW5lciBsaXN0ZW5lciwgSGFu
ZGxlciBoYW5kbGVyKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5W
RVJTSU9OX0NPREVTLkxPTExJUE9QKSB7Ci0gICAgICBzdXJmYWNlVGV4dHVyZS5zZXRPbkZyYW1l
QXZhaWxhYmxlTGlzdGVuZXIobGlzdGVuZXIsIGhhbmRsZXIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAvLyBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCB0aGUgbGlzdGVuZXIgd2lsbCBiZSBj
YWxsZWQgb24gYW4gYXJiaXRyYXJ5IHRocmVhZCwgYnV0IGluCi0gICAgICAvLyBwcmF0aWNlLCBp
dCBpcyBhbHdheXMgdGhlIHRocmVhZCBvbiB3aGljaCB0aGUgU3VyZmFjZVRleHR1cmUgd2FzIGNv
bnN0cnVjdGVkLiBUaGVyZSBhcmUKLSAgICAgIC8vIGFzc2VydGlvbnMgaW4gcGxhY2UgaW4gY2Fz
ZSB0aGlzIGV2ZXIgY2hhbmdlcy4gRm9yIEFQSSA+PSAyMSwgd2UgdXNlIHRoZSBuZXcgQVBJIHRv
Ci0gICAgICAvLyBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGhhbmRsZXIuCi0gICAgICBzdXJmYWNl
VGV4dHVyZS5zZXRPbkZyYW1lQXZhaWxhYmxlTGlzdGVuZXIobGlzdGVuZXIpOwotICAgIH0KLSAg
fQotCi0gIC8qKgotICAgKiBTdGFydCB0byBzdHJlYW0gdGV4dHVyZXMgdG8gdGhlIGdpdmVuIHxs
aXN0ZW5lcnwuIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBsaXN0ZW5lciwgeW91IG5lZWQgdG8KLSAg
ICogY2FsbCBzdG9wTGlzdGVuaW5nKCkgZmlyc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFy
dExpc3RlbmluZyhmaW5hbCBWaWRlb1NpbmsgbGlzdGVuZXIpIHsKLSAgICBpZiAodGhpcy5saXN0
ZW5lciAhPSBudWxsIHx8IHRoaXMucGVuZGluZ0xpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJlSGVscGVyIGxpc3Rl
bmVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiIpOwotICAgIH0KLSAgICB0aGlzLnBlbmRpbmdMaXN0
ZW5lciA9IGxpc3RlbmVyOwotICAgIGhhbmRsZXIucG9zdChzZXRMaXN0ZW5lclJ1bm5hYmxlKTsK
LSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZy4gVGhlIGxpc3RlbmVyIHNldCBpbiBz
dGFydExpc3RlbmluZygpIGlzIGd1YXJhbnRlZGVkIHRvIG5vdCByZWNlaXZlIGFueSBtb3JlCi0g
ICAqIG9uRnJhbWUoKSBjYWxsYmFja3MgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICAg
Ki8KLSAgcHVibGljIHZvaWQgc3RvcExpc3RlbmluZygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
c3RvcExpc3RlbmluZygpIik7Ci0gICAgaGFuZGxlci5yZW1vdmVDYWxsYmFja3Moc2V0TGlzdGVu
ZXJSdW5uYWJsZSk7Ci0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJs
eShoYW5kbGVyLCAoKSAtPiB7Ci0gICAgICBsaXN0ZW5lciA9IG51bGw7Ci0gICAgICBwZW5kaW5n
TGlzdGVuZXIgPSBudWxsOwotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIFVzZSB0aGlzIGZ1
bmN0aW9uIHRvIHNldCB0aGUgdGV4dHVyZSBzaXplLiBOb3RlLCBkbyBub3QgY2FsbCBzZXREZWZh
dWx0QnVmZmVyU2l6ZSgpIHlvdXJzZWxmCi0gICAqIHNpbmNlIHRoaXMgY2xhc3MgbmVlZHMgdG8g
YmUgYXdhcmUgb2YgdGhlIHRleHR1cmUgc2l6ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRl
eHR1cmVTaXplKGludCB0ZXh0dXJlV2lkdGgsIGludCB0ZXh0dXJlSGVpZ2h0KSB7Ci0gICAgaWYg
KHRleHR1cmVXaWR0aCA8PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKCJUZXh0dXJlIHdpZHRoIG11c3QgYmUgcG9zaXRpdmUsIGJ1dCB3YXMgIiArIHRleHR1
cmVXaWR0aCk7Ci0gICAgfQotICAgIGlmICh0ZXh0dXJlSGVpZ2h0IDw9IDApIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgIlRleHR1cmUgaGVp
Z2h0IG11c3QgYmUgcG9zaXRpdmUsIGJ1dCB3YXMgIiArIHRleHR1cmVIZWlnaHQpOwotICAgIH0K
LSAgICBzdXJmYWNlVGV4dHVyZS5zZXREZWZhdWx0QnVmZmVyU2l6ZSh0ZXh0dXJlV2lkdGgsIHRl
eHR1cmVIZWlnaHQpOwotICAgIGhhbmRsZXIucG9zdCgoKSAtPiB7Ci0gICAgICB0aGlzLnRleHR1
cmVXaWR0aCA9IHRleHR1cmVXaWR0aDsKLSAgICAgIHRoaXMudGV4dHVyZUhlaWdodCA9IHRleHR1
cmVIZWlnaHQ7Ci0gICAgICB0cnlEZWxpdmVyVGV4dHVyZUZyYW1lKCk7Ci0gICAgfSk7Ci0gIH0K
LQotICAvKiogU2V0IHRoZSByb3RhdGlvbiBvZiB0aGUgZGVsaXZlcmVkIGZyYW1lcy4gKi8KLSAg
cHVibGljIHZvaWQgc2V0RnJhbWVSb3RhdGlvbihpbnQgcm90YXRpb24pIHsKLSAgICBoYW5kbGVy
LnBvc3QoKCkgLT4gdGhpcy5mcmFtZVJvdGF0aW9uID0gcm90YXRpb24pOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFJldHJpZXZlIHRoZSB1bmRlcmx5aW5nIFN1cmZhY2VUZXh0dXJlLiBUaGUgU3VyZmFj
ZVRleHR1cmUgc2hvdWxkIGJlIHBhc3NlZCBpbiB0byBhIHZpZGVvCi0gICAqIHByb2R1Y2VyIHN1
Y2ggYXMgYSBjYW1lcmEgb3IgZGVjb2Rlci4KLSAgICovCi0gIHB1YmxpYyBTdXJmYWNlVGV4dHVy
ZSBnZXRTdXJmYWNlVGV4dHVyZSgpIHsKLSAgICByZXR1cm4gc3VyZmFjZVRleHR1cmU7Ci0gIH0K
LQotICAvKiogUmV0cmlldmUgdGhlIGhhbmRsZXIgdGhhdCBjYWxscyBvbkZyYW1lKCkuIFRoaXMg
aGFuZGxlciBpcyB2YWxpZCB1bnRpbCBkaXNwb3NlKCkgaXMgY2FsbGVkLiAqLwotICBwdWJsaWMg
SGFuZGxlciBnZXRIYW5kbGVyKCkgewotICAgIHJldHVybiBoYW5kbGVyOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRleHR1cmUgZnJhbWUgaXMg
cmVsZWFzZWQuIE9ubHkgb25lIHRleHR1cmUgZnJhbWUgY2FuIGJlIGluCi0gICAqIGZsaWdodCBh
dCBvbmNlLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhIG5ldyBmcmFt
ZSBpcyBkZWxpdmVyZWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmV0dXJuVGV4dHVyZUZyYW1l
KCkgewotICAgIGhhbmRsZXIucG9zdCgoKSAtPiB7Ci0gICAgICBpc1RleHR1cmVJblVzZSA9IGZh
bHNlOwotICAgICAgaWYgKGlzUXVpdHRpbmcpIHsKLSAgICAgICAgcmVsZWFzZSgpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdHJ5RGVsaXZlclRleHR1cmVGcmFtZSgpOwotICAgICAgfQotICAg
IH0pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNUZXh0dXJlSW5Vc2UoKSB7Ci0gICAgcmV0
dXJuIGlzVGV4dHVyZUluVXNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGwgZGlzY29ubmVjdCgp
IHRvIHN0b3AgcmVjZWl2aW5nIGZyYW1lcy4gT3BlbkdMIHJlc291cmNlcyBhcmUgcmVsZWFzZWQg
YW5kIHRoZSBoYW5kbGVyIGlzCi0gICAqIHN0b3BwZWQgd2hlbiB0aGUgdGV4dHVyZSBmcmFtZSBo
YXMgYmVlbiByZWxlYXNlZC4gWW91IGFyZSBndWFyYW50ZWVkIHRvIG5vdCByZWNlaXZlIGFueSBt
b3JlCi0gICAqIG9uRnJhbWUoKSBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJkaXNwb3NlKCki
KTsKLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KGhhbmRsZXIs
ICgpIC0+IHsKLSAgICAgIGlzUXVpdHRpbmcgPSB0cnVlOwotICAgICAgaWYgKCFpc1RleHR1cmVJ
blVzZSkgewotICAgICAgICByZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAv
KioKLSAgICogUG9zdHMgdG8gdGhlIGNvcnJlY3QgdGhyZWFkIHRvIGNvbnZlcnQgfHRleHR1cmVC
dWZmZXJ8IHRvIEk0MjAuCi0gICAqCi0gICAqIEBkZXByZWNhdGVkIFVzZSB0b0k0MjAoKSBpbnN0
ZWFkLgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIFZpZGVvRnJhbWUuSTQyMEJ1ZmZl
ciB0ZXh0dXJlVG9ZdXYoZmluYWwgVGV4dHVyZUJ1ZmZlciB0ZXh0dXJlQnVmZmVyKSB7Ci0gICAg
cmV0dXJuIHRleHR1cmVCdWZmZXIudG9JNDIwKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBk
YXRlVGV4SW1hZ2UoKSB7Ci0gICAgLy8gU3VyZmFjZVRleHR1cmUudXBkYXRlVGV4SW1hZ2UgYXBw
YXJlbnRseSBjYW4gY29tcGV0ZSBhbmQgZGVhZGxvY2sgd2l0aCBlZ2xTd2FwQnVmZmVycywKLSAg
ICAvLyBhcyBvYnNlcnZlZCBvbiBOZXh1cyA1LiBUaGVyZWZvcmUsIHN5bmNocm9uaXplIGl0IHdp
dGggdGhlIEVHTCBmdW5jdGlvbnMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5v
cmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD01NzAyIGZvciBtb3JlIGluZm8uCi0gICAgc3lu
Y2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIHN1cmZhY2VUZXh0dXJlLnVwZGF0ZVRl
eEltYWdlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyeURlbGl2ZXJUZXh0dXJl
RnJhbWUoKSB7Ci0gICAgaWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkgIT0gVGhy
ZWFkLmN1cnJlbnRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2Vw
dGlvbigiV3JvbmcgdGhyZWFkLiIpOwotICAgIH0KLSAgICBpZiAoaXNRdWl0dGluZyB8fCAhaGFz
UGVuZGluZ1RleHR1cmUgfHwgaXNUZXh0dXJlSW5Vc2UgfHwgbGlzdGVuZXIgPT0gbnVsbCkgewot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodGV4dHVyZVdpZHRoID09IDAgfHwgdGV4dHVy
ZUhlaWdodCA9PSAwKSB7Ci0gICAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzb2x1dGlv
biBuZWVkcyB0byBiZSBwcm92aWRlZCBieSBhIGNhbGwgdG8gc2V0VGV4dHVyZVNpemUoKSBiZWZv
cmUKLSAgICAgIC8vIGZyYW1lcyBhcmUgcHJvZHVjZWQuCi0gICAgICBMb2dnaW5nLncoVEFHLCAi
VGV4dHVyZSBzaXplIGhhcyBub3QgYmVlbiBzZXQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlzVGV4dHVyZUluVXNlID0gdHJ1ZTsKLSAgICBoYXNQZW5kaW5nVGV4dHVyZSA9IGZhbHNl
OwotCi0gICAgdXBkYXRlVGV4SW1hZ2UoKTsKLQotICAgIGZpbmFsIGZsb2F0W10gdHJhbnNmb3Jt
TWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKLSAgICBzdXJmYWNlVGV4dHVyZS5nZXRUcmFuc2Zvcm1N
YXRyaXgodHJhbnNmb3JtTWF0cml4KTsKLSAgICBsb25nIHRpbWVzdGFtcE5zID0gc3VyZmFjZVRl
eHR1cmUuZ2V0VGltZXN0YW1wKCk7Ci0gICAgaWYgKHRpbWVzdGFtcEFsaWduZXIgIT0gbnVsbCkg
ewotICAgICAgdGltZXN0YW1wTnMgPSB0aW1lc3RhbXBBbGlnbmVyLnRyYW5zbGF0ZVRpbWVzdGFt
cCh0aW1lc3RhbXBOcyk7Ci0gICAgfQotICAgIGZpbmFsIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZl
ciBidWZmZXIgPQotICAgICAgICBuZXcgVGV4dHVyZUJ1ZmZlckltcGwodGV4dHVyZVdpZHRoLCB0
ZXh0dXJlSGVpZ2h0LCBUZXh0dXJlQnVmZmVyLlR5cGUuT0VTLCBvZXNUZXh0dXJlSWQsCi0gICAg
ICAgICAgICBSZW5kZXJlckNvbW1vbi5jb252ZXJ0TWF0cml4VG9BbmRyb2lkR3JhcGhpY3NNYXRy
aXgodHJhbnNmb3JtTWF0cml4KSwgaGFuZGxlciwKLSAgICAgICAgICAgIHl1dkNvbnZlcnRlciwg
dGV4dHVyZVJlZkNvdW50TW9uaXRvcik7Ci0gICAgaWYgKGZyYW1lUmVmTW9uaXRvciAhPSBudWxs
KSB7Ci0gICAgICBmcmFtZVJlZk1vbml0b3Iub25OZXdCdWZmZXIoYnVmZmVyKTsKLSAgICB9Ci0g
ICAgZmluYWwgVmlkZW9GcmFtZSBmcmFtZSA9IG5ldyBWaWRlb0ZyYW1lKGJ1ZmZlciwgZnJhbWVS
b3RhdGlvbiwgdGltZXN0YW1wTnMpOwotICAgIGxpc3RlbmVyLm9uRnJhbWUoZnJhbWUpOwotICAg
IGZyYW1lLnJlbGVhc2UoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWxlYXNlKCkgewotICAg
IGlmIChoYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpICE9IFRocmVhZC5jdXJyZW50VGhy
ZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRo
cmVhZC4iKTsKLSAgICB9Ci0gICAgaWYgKGlzVGV4dHVyZUluVXNlIHx8ICFpc1F1aXR0aW5nKSB7
Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlbGVh
c2UuIik7Ci0gICAgfQotICAgIHl1dkNvbnZlcnRlci5yZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmds
RGVsZXRlVGV4dHVyZXMoMSwgbmV3IGludFtdIHtvZXNUZXh0dXJlSWR9LCAwKTsKLSAgICBzdXJm
YWNlVGV4dHVyZS5yZWxlYXNlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gICAgaGFuZGxl
ci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gICAgaWYgKHRpbWVzdGFtcEFsaWduZXIgIT0gbnVsbCkg
ewotICAgICAgdGltZXN0YW1wQWxpZ25lci5kaXNwb3NlKCk7Ci0gICAgfQotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9hcGkvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVyLmphdmEgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0
Yy9TdXJmYWNlVmlld1JlbmRlcmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY2MmQyNzQzMmQ3NjQ3OGM2M2Q3ZmFlY2YwODY1YmY5Njk0Njc5NzYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvU3VyZmFjZVZpZXdS
ZW5kZXJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhj
ZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRy
b2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7
Ci0KLS8qKgotICogRGlzcGxheSB0aGUgdmlkZW8gc3RyZWFtIG9uIGEgU3VyZmFjZVZpZXcuCi0g
Ki8KLXB1YmxpYyBjbGFzcyBTdXJmYWNlVmlld1JlbmRlcmVyIGV4dGVuZHMgU3VyZmFjZVZpZXcK
LSAgICBpbXBsZW1lbnRzIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2ssIFZpZGVvU2luaywgUmVuZGVy
ZXJDb21tb24uUmVuZGVyZXJFdmVudHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEFHID0gIlN1cmZhY2VWaWV3UmVuZGVyZXIiOwotCi0gIC8vIENhY2hlZCByZXNvdXJjZSBuYW1l
LgotICBwcml2YXRlIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWU7Ci0gIHByaXZhdGUgZmluYWwg
UmVuZGVyZXJDb21tb24uVmlkZW9MYXlvdXRNZWFzdXJlIHZpZGVvTGF5b3V0TWVhc3VyZSA9Ci0g
ICAgICBuZXcgUmVuZGVyZXJDb21tb24uVmlkZW9MYXlvdXRNZWFzdXJlKCk7Ci0gIHByaXZhdGUg
ZmluYWwgU3VyZmFjZUVnbFJlbmRlcmVyIGVnbFJlbmRlcmVyOwotCi0gIC8vIENhbGxiYWNrIGZv
ciByZXBvcnRpbmcgcmVuZGVyZXIgZXZlbnRzLiBSZWFkLW9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRp
b24gc28gbm8gbG9jayByZXF1aXJlZC4KLSAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5SZW5kZXJl
ckV2ZW50cyByZW5kZXJlckV2ZW50czsKLQotICAvLyBBY2Nlc3NlZCBvbmx5IG9uIHRoZSBtYWlu
IHRocmVhZC4KLSAgcHJpdmF0ZSBpbnQgcm90YXRlZEZyYW1lV2lkdGg7Ci0gIHByaXZhdGUgaW50
IHJvdGF0ZWRGcmFtZUhlaWdodDsKLSAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZUZpeGVkU2l6ZTsK
LSAgcHJpdmF0ZSBpbnQgc3VyZmFjZVdpZHRoOwotICBwcml2YXRlIGludCBzdXJmYWNlSGVpZ2h0
OwotCi0gIC8qKgotICAgKiBTdGFuZGFyZCBWaWV3IGNvbnN0cnVjdG9yLiBJbiBvcmRlciB0byBy
ZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQoKS4KLSAgICovCi0gIHB1
YmxpYyBTdXJmYWNlVmlld1JlbmRlcmVyKENvbnRleHQgY29udGV4dCkgewotICAgIHN1cGVyKGNv
bnRleHQpOwotICAgIHRoaXMucmVzb3VyY2VOYW1lID0gZ2V0UmVzb3VyY2VOYW1lKCk7Ci0gICAg
ZWdsUmVuZGVyZXIgPSBuZXcgU3VyZmFjZUVnbFJlbmRlcmVyKHJlc291cmNlTmFtZSk7Ci0gICAg
Z2V0SG9sZGVyKCkuYWRkQ2FsbGJhY2sodGhpcyk7Ci0gICAgZ2V0SG9sZGVyKCkuYWRkQ2FsbGJh
Y2soZWdsUmVuZGVyZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFN0YW5kYXJkIFZpZXcgY29uc3Ry
dWN0b3IuIEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhpbmcsIHlvdSBtdXN0IGZpcnN0IGNhbGwg
aW5pdCgpLgotICAgKi8KLSAgcHVibGljIFN1cmZhY2VWaWV3UmVuZGVyZXIoQ29udGV4dCBjb250
ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0g
ICAgdGhpcy5yZXNvdXJjZU5hbWUgPSBnZXRSZXNvdXJjZU5hbWUoKTsKLSAgICBlZ2xSZW5kZXJl
ciA9IG5ldyBTdXJmYWNlRWdsUmVuZGVyZXIocmVzb3VyY2VOYW1lKTsKLSAgICBnZXRIb2xkZXIo
KS5hZGRDYWxsYmFjayh0aGlzKTsKLSAgICBnZXRIb2xkZXIoKS5hZGRDYWxsYmFjayhlZ2xSZW5k
ZXJlcik7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5n
IHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGlu
aXQoKSB0bwotICAgKiByZWluaXRpYWxpemUgdGhlIHJlbmRlcmVyIGFmdGVyIGEgcHJldmlvdXMg
aW5pdCgpL3JlbGVhc2UoKSBjeWNsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoRWdsQmFz
ZS5Db250ZXh0IHNoYXJlZENvbnRleHQsIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJl
bmRlcmVyRXZlbnRzKSB7Ci0gICAgaW5pdChzaGFyZWRDb250ZXh0LCByZW5kZXJlckV2ZW50cywg
RWdsQmFzZS5DT05GSUdfUExBSU4sIG5ldyBHbFJlY3REcmF3ZXIoKSk7Ci0gIH0KLQotICAvKioK
LSAgICogSW5pdGlhbGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5nIHJlc291cmNlcyB3aXRoIHxzaGFy
ZWRDb250ZXh0fC4gVGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxsIGJlIHVzZWQKLSAgICogZm9yIGRy
YXdpbmcgZnJhbWVzIG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxl
IGZvciBjYWxsaW5nIHJlbGVhc2UoKSBvbgotICAgKiB8ZHJhd2VyfC4gSXQgaXMgYWxsb3dlZCB0
byBjYWxsIGluaXQoKSB0byByZWluaXRpYWxpemUgdGhlIHJlbmRlcmVyIGFmdGVyIGEgcHJldmlv
dXMKLSAgICogaW5pdCgpL3JlbGVhc2UoKSBjeWNsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGlu
aXQoZmluYWwgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsCi0gICAgICBSZW5kZXJlckNv
bW1vbi5SZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50cywgZmluYWwgaW50W10gY29uZmlnQXR0
cmlidXRlcywKLSAgICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgIFRo
cmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB0aGlzLnJlbmRlcmVyRXZlbnRz
ID0gcmVuZGVyZXJFdmVudHM7Ci0gICAgcm90YXRlZEZyYW1lV2lkdGggPSAwOwotICAgIHJvdGF0
ZWRGcmFtZUhlaWdodCA9IDA7Ci0gICAgZWdsUmVuZGVyZXIuaW5pdChzaGFyZWRDb250ZXh0LCB0
aGlzIC8qIHJlbmRlcmVyRXZlbnRzICovLCBjb25maWdBdHRyaWJ1dGVzLCBkcmF3ZXIpOwotICB9
Ci0KLSAgLyoqCi0gICAqIEJsb2NrIHVudGlsIGFueSBwZW5kaW5nIGZyYW1lIGlzIHJldHVybmVk
IGFuZCBhbGwgR0wgcmVzb3VyY2VzIHJlbGVhc2VkLCBldmVuIGlmIGFuIGludGVycnVwdAotICAg
KiBvY2N1cnMuIElmIGFuIGludGVycnVwdCBvY2N1cnMgZHVyaW5nIHJlbGVhc2UoKSwgdGhlIGlu
dGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0LiBUaGlzIGZ1bmN0aW9uCi0gICAqIHNob3VsZCBiZSBj
YWxsZWQgYmVmb3JlIHRoZSBBY3Rpdml0eSBpcyBkZXN0cm95ZWQgYW5kIHRoZSBFR0xDb250ZXh0
IGlzIHN0aWxsIHZhbGlkLiBJZiB5b3UKLSAgICogZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLCB0
aGUgR0wgcmVzb3VyY2VzIG1pZ2h0IGxlYWsuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxlYXNl
KCkgewotICAgIGVnbFJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdp
c3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhIG5ldyB2aWRlbyBmcmFtZSBoYXMg
YmVlbiByZWNlaXZlZC4KLSAgICoKLSAgICogQHBhcmFtIGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0
byBiZSBpbnZva2VkLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIG9uIHRoZSByZW5kZXIg
dGhyZWFkLgotICAgKiAgICAgICAgICAgICAgICAgSXQgc2hvdWxkIGJlIGxpZ2h0d2VpZ2h0IGFu
ZCBtdXN0IG5vdCBjYWxsIHJlbW92ZUZyYW1lTGlzdGVuZXIuCi0gICAqIEBwYXJhbSBzY2FsZSAg
ICBUaGUgc2NhbGUgb2YgdGhlIEJpdG1hcCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLCBvciAwIGlm
IG5vIEJpdG1hcCBpcwotICAgKiAgICAgICAgICAgICAgICAgcmVxdWlyZWQuCi0gICAqIEBwYXJh
bSBkcmF3ZXIgICBDdXN0b20gZHJhd2VyIHRvIHVzZSBmb3IgdGhpcyBmcmFtZSBsaXN0ZW5lci4K
LSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEZyYW1lTGlzdGVuZXIoCi0gICAgICBFZ2xSZW5kZXJl
ci5GcmFtZUxpc3RlbmVyIGxpc3RlbmVyLCBmbG9hdCBzY2FsZSwgUmVuZGVyZXJDb21tb24uR2xE
cmF3ZXIgZHJhd2VyUGFyYW0pIHsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKGxp
c3RlbmVyLCBzY2FsZSwgZHJhd2VyUGFyYW0pOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVy
IGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGEgbmV3IHZpZGVvIGZyYW1lIGhhcyBiZWVu
IHJlY2VpdmVkLiBUaGlzIHZlcnNpb24gdXNlcwotICAgKiB0aGUgZHJhd2VyIG9mIHRoZSBFZ2xS
ZW5kZXJlciB0aGF0IHdhcyBwYXNzZWQgaW4gaW5pdC4KLSAgICoKLSAgICogQHBhcmFtIGxpc3Rl
bmVyIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZv
a2VkIG9uIHRoZSByZW5kZXIgdGhyZWFkLgotICAgKiAgICAgICAgICAgICAgICAgSXQgc2hvdWxk
IGJlIGxpZ2h0d2VpZ2h0IGFuZCBtdXN0IG5vdCBjYWxsIHJlbW92ZUZyYW1lTGlzdGVuZXIuCi0g
ICAqIEBwYXJhbSBzY2FsZSAgICBUaGUgc2NhbGUgb2YgdGhlIEJpdG1hcCBwYXNzZWQgdG8gdGhl
IGNhbGxiYWNrLCBvciAwIGlmIG5vIEJpdG1hcCBpcwotICAgKiAgICAgICAgICAgICAgICAgcmVx
dWlyZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRGcmFtZUxpc3RlbmVyKEVnbFJlbmRlcmVy
LkZyYW1lTGlzdGVuZXIgbGlzdGVuZXIsIGZsb2F0IHNjYWxlKSB7Ci0gICAgZWdsUmVuZGVyZXIu
YWRkRnJhbWVMaXN0ZW5lcihsaXN0ZW5lciwgc2NhbGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
cmVtb3ZlRnJhbWVMaXN0ZW5lcihFZ2xSZW5kZXJlci5GcmFtZUxpc3RlbmVyIGxpc3RlbmVyKSB7
Ci0gICAgZWdsUmVuZGVyZXIucmVtb3ZlRnJhbWVMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gIH0KLQot
ICAvKioKLSAgICogRW5hYmxlcyBmaXhlZCBzaXplIGZvciB0aGUgc3VyZmFjZS4gVGhpcyBwcm92
aWRlcyBiZXR0ZXIgcGVyZm9ybWFuY2UgYnV0IG1pZ2h0IGJlIGJ1Z2d5IG9uIHNvbWUKLSAgICog
ZGV2aWNlcy4gQnkgZGVmYXVsdCB0aGlzIGlzIHR1cm5lZCBvZmYuCi0gICAqLwotICBwdWJsaWMg
dm9pZCBzZXRFbmFibGVIYXJkd2FyZVNjYWxlcihib29sZWFuIGVuYWJsZWQpIHsKLSAgICBUaHJl
YWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZW5hYmxlRml4ZWRTaXplID0gZW5h
YmxlZDsKLSAgICB1cGRhdGVTdXJmYWNlU2l6ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBp
ZiB0aGUgdmlkZW8gc3RyZWFtIHNob3VsZCBiZSBtaXJyb3JlZCBvciBub3QuCi0gICAqLwotICBw
dWJsaWMgdm9pZCBzZXRNaXJyb3IoZmluYWwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBlZ2xSZW5k
ZXJlci5zZXRNaXJyb3IobWlycm9yKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgaG93IHRoZSB2
aWRlbyB3aWxsIGZpbGwgdGhlIGFsbG93ZWQgbGF5b3V0IGFyZWEuCi0gICAqLwotICBwdWJsaWMg
dm9pZCBzZXRTY2FsaW5nVHlwZShSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlw
ZSkgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB2aWRlb0xh
eW91dE1lYXN1cmUuc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICAgIHJlcXVlc3RMYXlv
dXQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNjYWxpbmdUeXBlKFJlbmRlcmVyQ29tbW9u
LlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWF0Y2hPcmllbnRhdGlvbiwKLSAgICAgIFJlbmRlcmVy
Q29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbikgewotICAg
IFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB2aWRlb0xheW91dE1lYXN1
cmUuc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uLCBzY2FsaW5nVHlw
ZU1pc21hdGNoT3JpZW50YXRpb24pOwotICAgIHJlcXVlc3RMYXlvdXQoKTsKLSAgfQotCi0gIC8q
KgotICAgKiBMaW1pdCByZW5kZXIgZnJhbWVyYXRlLgotICAgKgotICAgKiBAcGFyYW0gZnBzIExp
bWl0IHJlbmRlciBmcmFtZXJhdGUgdG8gdGhpcyB2YWx1ZSwgb3IgdXNlIEZsb2F0LlBPU0lUSVZF
X0lORklOSVRZIHRvIGRpc2FibGUgZnBzCi0gICAqICAgICAgICAgICAgcmVkdWN0aW9uLgotICAg
Ki8KLSAgcHVibGljIHZvaWQgc2V0RnBzUmVkdWN0aW9uKGZsb2F0IGZwcykgewotICAgIGVnbFJl
bmRlcmVyLnNldEZwc1JlZHVjdGlvbihmcHMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzYWJs
ZUZwc1JlZHVjdGlvbigpIHsKLSAgICBlZ2xSZW5kZXJlci5kaXNhYmxlRnBzUmVkdWN0aW9uKCk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXVzZVZpZGVvKCkgewotICAgIGVnbFJlbmRlcmVyLnBh
dXNlVmlkZW8oKTsKLSAgfQotCi0gIC8vIFZpZGVvU2luayBpbnRlcmZhY2UuCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBvbkZyYW1lKFZpZGVvRnJhbWUgZnJhbWUpIHsKLSAgICBlZ2xSZW5k
ZXJlci5vbkZyYW1lKGZyYW1lKTsKLSAgfQotCi0gIC8vIFZpZXcgbGF5b3V0IGludGVyZmFjZS4K
LSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uTWVhc3VyZShpbnQgd2lkdGhTcGVjLCBp
bnQgaGVpZ2h0U3BlYykgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsK
LSAgICBQb2ludCBzaXplID0KLSAgICAgICAgdmlkZW9MYXlvdXRNZWFzdXJlLm1lYXN1cmUod2lk
dGhTcGVjLCBoZWlnaHRTcGVjLCByb3RhdGVkRnJhbWVXaWR0aCwgcm90YXRlZEZyYW1lSGVpZ2h0
KTsKLSAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihzaXplLngsIHNpemUueSk7Ci0gICAgbG9nRCgi
b25NZWFzdXJlKCkuIE5ldyBzaXplOiAiICsgc2l6ZS54ICsgIngiICsgc2l6ZS55KTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQs
IGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAgICBUaHJlYWRV
dGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWdsUmVuZGVyZXIuc2V0TGF5b3V0QXNw
ZWN0UmF0aW8oKHJpZ2h0IC0gbGVmdCkgLyAoZmxvYXQpIChib3R0b20gLSB0b3ApKTsKLSAgICB1
cGRhdGVTdXJmYWNlU2l6ZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1cmZhY2VT
aXplKCkgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICBpZiAo
ZW5hYmxlRml4ZWRTaXplICYmIHJvdGF0ZWRGcmFtZVdpZHRoICE9IDAgJiYgcm90YXRlZEZyYW1l
SGVpZ2h0ICE9IDAgJiYgZ2V0V2lkdGgoKSAhPSAwCi0gICAgICAgICYmIGdldEhlaWdodCgpICE9
IDApIHsKLSAgICAgIGZpbmFsIGZsb2F0IGxheW91dEFzcGVjdFJhdGlvID0gZ2V0V2lkdGgoKSAv
IChmbG9hdCkgZ2V0SGVpZ2h0KCk7Ci0gICAgICBmaW5hbCBmbG9hdCBmcmFtZUFzcGVjdFJhdGlv
ID0gcm90YXRlZEZyYW1lV2lkdGggLyAoZmxvYXQpIHJvdGF0ZWRGcmFtZUhlaWdodDsKLSAgICAg
IGZpbmFsIGludCBkcmF3bkZyYW1lV2lkdGg7Ci0gICAgICBmaW5hbCBpbnQgZHJhd25GcmFtZUhl
aWdodDsKLSAgICAgIGlmIChmcmFtZUFzcGVjdFJhdGlvID4gbGF5b3V0QXNwZWN0UmF0aW8pIHsK
LSAgICAgICAgZHJhd25GcmFtZVdpZHRoID0gKGludCkgKHJvdGF0ZWRGcmFtZUhlaWdodCAqIGxh
eW91dEFzcGVjdFJhdGlvKTsKLSAgICAgICAgZHJhd25GcmFtZUhlaWdodCA9IHJvdGF0ZWRGcmFt
ZUhlaWdodDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyYXduRnJhbWVXaWR0aCA9IHJvdGF0
ZWRGcmFtZVdpZHRoOwotICAgICAgICBkcmF3bkZyYW1lSGVpZ2h0ID0gKGludCkgKHJvdGF0ZWRG
cmFtZVdpZHRoIC8gbGF5b3V0QXNwZWN0UmF0aW8pOwotICAgICAgfQotICAgICAgLy8gQXNwZWN0
IHJhdGlvIG9mIHRoZSBkcmF3biBmcmFtZSBhbmQgdGhlIHZpZXcgaXMgdGhlIHNhbWUuCi0gICAg
ICBmaW5hbCBpbnQgd2lkdGggPSBNYXRoLm1pbihnZXRXaWR0aCgpLCBkcmF3bkZyYW1lV2lkdGgp
OwotICAgICAgZmluYWwgaW50IGhlaWdodCA9IE1hdGgubWluKGdldEhlaWdodCgpLCBkcmF3bkZy
YW1lSGVpZ2h0KTsKLSAgICAgIGxvZ0QoInVwZGF0ZVN1cmZhY2VTaXplLiBMYXlvdXQgc2l6ZTog
IiArIGdldFdpZHRoKCkgKyAieCIgKyBnZXRIZWlnaHQoKSArICIsIGZyYW1lIHNpemU6ICIKLSAg
ICAgICAgICArIHJvdGF0ZWRGcmFtZVdpZHRoICsgIngiICsgcm90YXRlZEZyYW1lSGVpZ2h0ICsg
IiwgcmVxdWVzdGVkIHN1cmZhY2Ugc2l6ZTogIiArIHdpZHRoCi0gICAgICAgICAgKyAieCIgKyBo
ZWlnaHQgKyAiLCBvbGQgc3VyZmFjZSBzaXplOiAiICsgc3VyZmFjZVdpZHRoICsgIngiICsgc3Vy
ZmFjZUhlaWdodCk7Ci0gICAgICBpZiAod2lkdGggIT0gc3VyZmFjZVdpZHRoIHx8IGhlaWdodCAh
PSBzdXJmYWNlSGVpZ2h0KSB7Ci0gICAgICAgIHN1cmZhY2VXaWR0aCA9IHdpZHRoOwotICAgICAg
ICBzdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBnZXRIb2xkZXIoKS5zZXRGaXhlZFNp
emUod2lkdGgsIGhlaWdodCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN1cmZhY2VX
aWR0aCA9IHN1cmZhY2VIZWlnaHQgPSAwOwotICAgICAgZ2V0SG9sZGVyKCkuc2V0U2l6ZUZyb21M
YXlvdXQoKTsKLSAgICB9Ci0gIH0KLQotICAvLyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGludGVy
ZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKGZpbmFsIFN1
cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVh
ZCgpOwotICAgIHN1cmZhY2VXaWR0aCA9IHN1cmZhY2VIZWlnaHQgPSAwOwotICAgIHVwZGF0ZVN1
cmZhY2VTaXplKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3VyZmFjZURl
c3Ryb3llZChTdXJmYWNlSG9sZGVyIGhvbGRlcikge30KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkge30KLQotICBwcml2YXRlIFN0cmluZyBnZXRSZXNvdXJjZU5h
bWUoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBnZXRSZXNvdXJjZXMoKS5nZXRSZXNvdXJj
ZUVudHJ5TmFtZShnZXRJZCgpKTsKLSAgICB9IGNhdGNoIChOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBvc3QgYSB0YXNr
IHRvIGNsZWFyIHRoZSBTdXJmYWNlVmlldyB0byBhIHRyYW5zcGFyZW50IHVuaWZvcm0gY29sb3Iu
Ci0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhckltYWdlKCkgewotICAgIGVnbFJlbmRlcmVyLmNs
ZWFySW1hZ2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkZpcnN0RnJh
bWVSZW5kZXJlZCgpIHsKLSAgICBpZiAocmVuZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAg
cmVuZGVyZXJFdmVudHMub25GaXJzdEZyYW1lUmVuZGVyZWQoKTsKLSAgICB9Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKGludCB2aWRl
b1dpZHRoLCBpbnQgdmlkZW9IZWlnaHQsIGludCByb3RhdGlvbikgewotICAgIGlmIChyZW5kZXJl
ckV2ZW50cyAhPSBudWxsKSB7Ci0gICAgICByZW5kZXJlckV2ZW50cy5vbkZyYW1lUmVzb2x1dGlv
bkNoYW5nZWQodmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIHJvdGF0aW9uKTsKLSAgICB9Ci0gICAg
aW50IHJvdGF0ZWRXaWR0aCA9IHJvdGF0aW9uID09IDAgfHwgcm90YXRpb24gPT0gMTgwID8gdmlk
ZW9XaWR0aCA6IHZpZGVvSGVpZ2h0OwotICAgIGludCByb3RhdGVkSGVpZ2h0ID0gcm90YXRpb24g
PT0gMCB8fCByb3RhdGlvbiA9PSAxODAgPyB2aWRlb0hlaWdodCA6IHZpZGVvV2lkdGg7Ci0gICAg
Ly8gcnVuIGltbWVkaWF0ZWx5IGlmIHBvc3NpYmxlIGZvciB1aSB0aHJlYWQgdGVzdHMKLSAgICBw
b3N0T3JSdW4oKCkgLT4gewotICAgICAgcm90YXRlZEZyYW1lV2lkdGggPSByb3RhdGVkV2lkdGg7
Ci0gICAgICByb3RhdGVkRnJhbWVIZWlnaHQgPSByb3RhdGVkSGVpZ2h0OwotICAgICAgdXBkYXRl
U3VyZmFjZVNpemUoKTsKLSAgICAgIHJlcXVlc3RMYXlvdXQoKTsKLSAgICB9KTsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBwb3N0T3JSdW4oUnVubmFibGUgcikgewotICAgIGlmIChUaHJlYWQuY3Vy
cmVudFRocmVhZCgpID09IExvb3Blci5nZXRNYWluTG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAg
ICAgIHIucnVuKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBvc3Qocik7Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGxvZ0QoU3RyaW5nIHN0cmluZykgewotICAgIExvZ2dpbmcuZChUQUcs
IHJlc291cmNlTmFtZSArICI6ICIgKyBzdHJpbmcpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9UZXh0dXJlQnVmZmVySW1wbC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVGV4dHVyZUJ1ZmZl
ckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ3NTIxNjJkYzlkNDNh
MWRmZTk0MDlkNDkyMTMwMmJjOTNjZTMyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9UZXh0dXJlQnVmZmVySW1wbC5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFu
ZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxs
YWJsZTsKLQotLyoqCi0gKiBBbmRyb2lkIHRleHR1cmUgYnVmZmVyIHRoYXQgZ2x1ZXMgdG9nZXRo
ZXIgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0b2dldGhlciB3aXRoIGEgZ2VuZXJpYwotICog
cmVsZWFzZSBjYWxsYmFjay4gVG9JNDIwKCkgaXMgaW1wbGVtZW50ZWQgYnkgcHJvdmlkaW5nIGEg
SGFuZGxlciBhbmQgYSBZdXZDb252ZXJ0ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXh0dXJlQnVm
ZmVySW1wbCBpbXBsZW1lbnRzIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZlciB7Ci0gIGludGVyZmFj
ZSBSZWZDb3VudE1vbml0b3IgewotICAgIHZvaWQgb25SZXRhaW4oVGV4dHVyZUJ1ZmZlckltcGwg
dGV4dHVyZUJ1ZmZlcik7Ci0gICAgdm9pZCBvblJlbGVhc2UoVGV4dHVyZUJ1ZmZlckltcGwgdGV4
dHVyZUJ1ZmZlcik7Ci0gICAgdm9pZCBvbkRlc3Ryb3koVGV4dHVyZUJ1ZmZlckltcGwgdGV4dHVy
ZUJ1ZmZlcik7Ci0gIH0KLQotICAvLyBUaGlzIGlzIHRoZSBmdWxsIHJlc29sdXRpb24gdGhlIHRl
eHR1cmUgaGFzIGluIG1lbW9yeSBhZnRlciBhcHBseWluZyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0
cml4Ci0gIC8vIHRoYXQgbWlnaHQgaW5jbHVkZSBjcm9wcGluZy4gVGhpcyByZXNvbHV0aW9uIGlz
IHVzZWZ1bCB0byBrbm93IHdoZW4gc2FtcGxpbmcgdGhlIHRleHR1cmUgdG8KLSAgLy8gYXZvaWQg
ZG93bnNjYWxpbmcgYXJ0aWZhY3RzLgotICBwcml2YXRlIGZpbmFsIGludCB1bnNjYWxlZFdpZHRo
OwotICBwcml2YXRlIGZpbmFsIGludCB1bnNjYWxlZEhlaWdodDsKLSAgLy8gVGhpcyBpcyB0aGUg
cmVzb2x1dGlvbiB0aGF0IGhhcyBiZWVuIGFwcGxpZWQgYWZ0ZXIgY3JvcEFuZFNjYWxlKCkuCi0g
IHByaXZhdGUgZmluYWwgaW50IHdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBoZWlnaHQ7Ci0g
IHByaXZhdGUgZmluYWwgVHlwZSB0eXBlOwotICBwcml2YXRlIGZpbmFsIGludCBpZDsKLSAgcHJp
dmF0ZSBmaW5hbCBNYXRyaXggdHJhbnNmb3JtTWF0cml4OwotICBwcml2YXRlIGZpbmFsIEhhbmRs
ZXIgdG9JNDIwSGFuZGxlcjsKLSAgcHJpdmF0ZSBmaW5hbCBZdXZDb252ZXJ0ZXIgeXV2Q29udmVy
dGVyOwotICBwcml2YXRlIGZpbmFsIFJlZkNvdW50RGVsZWdhdGUgcmVmQ291bnREZWxlZ2F0ZTsK
LSAgcHJpdmF0ZSBmaW5hbCBSZWZDb3VudE1vbml0b3IgcmVmQ291bnRNb25pdG9yOwotCi0gIHB1
YmxpYyBUZXh0dXJlQnVmZmVySW1wbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFR5cGUgdHlwZSwg
aW50IGlkLCBNYXRyaXggdHJhbnNmb3JtTWF0cml4LAotICAgICAgSGFuZGxlciB0b0k0MjBIYW5k
bGVyLCBZdXZDb252ZXJ0ZXIgeXV2Q29udmVydGVyLCBATnVsbGFibGUgUnVubmFibGUgcmVsZWFz
ZUNhbGxiYWNrKSB7Ci0gICAgdGhpcyh3aWR0aCwgaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCB0eXBl
LCBpZCwgdHJhbnNmb3JtTWF0cml4LCB0b0k0MjBIYW5kbGVyLCB5dXZDb252ZXJ0ZXIsCi0gICAg
ICAgIG5ldyBSZWZDb3VudE1vbml0b3IoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
ICAgcHVibGljIHZvaWQgb25SZXRhaW4oVGV4dHVyZUJ1ZmZlckltcGwgdGV4dHVyZUJ1ZmZlcikg
e30KLQotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVsZWFz
ZShUZXh0dXJlQnVmZmVySW1wbCB0ZXh0dXJlQnVmZmVyKSB7fQotCi0gICAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25EZXN0cm95KFRleHR1cmVCdWZmZXJJbXBsIHRl
eHR1cmVCdWZmZXIpIHsKLSAgICAgICAgICAgIGlmIChyZWxlYXNlQ2FsbGJhY2sgIT0gbnVsbCkg
ewotICAgICAgICAgICAgICByZWxlYXNlQ2FsbGJhY2sucnVuKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgfQotCi0gIFRleHR1cmVCdWZmZXJJbXBsKGludCB3
aWR0aCwgaW50IGhlaWdodCwgVHlwZSB0eXBlLCBpbnQgaWQsIE1hdHJpeCB0cmFuc2Zvcm1NYXRy
aXgsCi0gICAgICBIYW5kbGVyIHRvSTQyMEhhbmRsZXIsIFl1dkNvbnZlcnRlciB5dXZDb252ZXJ0
ZXIsIFJlZkNvdW50TW9uaXRvciByZWZDb3VudE1vbml0b3IpIHsKLSAgICB0aGlzKHdpZHRoLCBo
ZWlnaHQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGlkLCB0cmFuc2Zvcm1NYXRyaXgsIHRvSTQyMEhh
bmRsZXIsIHl1dkNvbnZlcnRlciwKLSAgICAgICAgcmVmQ291bnRNb25pdG9yKTsKLSAgfQotCi0g
IHByaXZhdGUgVGV4dHVyZUJ1ZmZlckltcGwoaW50IHVuc2NhbGVkV2lkdGgsIGludCB1bnNjYWxl
ZEhlaWdodCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBUeXBlIHR5cGUsCi0gICAgICBpbnQgaWQs
IE1hdHJpeCB0cmFuc2Zvcm1NYXRyaXgsIEhhbmRsZXIgdG9JNDIwSGFuZGxlciwgWXV2Q29udmVy
dGVyIHl1dkNvbnZlcnRlciwKLSAgICAgIFJlZkNvdW50TW9uaXRvciByZWZDb3VudE1vbml0b3Ip
IHsKLSAgICB0aGlzLnVuc2NhbGVkV2lkdGggPSB1bnNjYWxlZFdpZHRoOwotICAgIHRoaXMudW5z
Y2FsZWRIZWlnaHQgPSB1bnNjYWxlZEhlaWdodDsKLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0g
ICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlz
LmlkID0gaWQ7Ci0gICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXg7Ci0g
ICAgdGhpcy50b0k0MjBIYW5kbGVyID0gdG9JNDIwSGFuZGxlcjsKLSAgICB0aGlzLnl1dkNvbnZl
cnRlciA9IHl1dkNvbnZlcnRlcjsKLSAgICB0aGlzLnJlZkNvdW50RGVsZWdhdGUgPSBuZXcgUmVm
Q291bnREZWxlZ2F0ZSgoKSAtPiByZWZDb3VudE1vbml0b3Iub25EZXN0cm95KHRoaXMpKTsKLSAg
ICB0aGlzLnJlZkNvdW50TW9uaXRvciA9IHJlZkNvdW50TW9uaXRvcjsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyLlR5cGUgZ2V0VHlwZSgpIHsK
LSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFRl
eHR1cmVJZCgpIHsKLSAgICByZXR1cm4gaWQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IE1hdHJpeCBnZXRUcmFuc2Zvcm1NYXRyaXgoKSB7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJp
eDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFdpZHRoKCkgewotICAgIHJl
dHVybiB3aWR0aDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldEhlaWdodCgp
IHsKLSAgICByZXR1cm4gaGVpZ2h0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWRl
b0ZyYW1lLkk0MjBCdWZmZXIgdG9JNDIwKCkgewotICAgIHJldHVybiBUaHJlYWRVdGlscy5pbnZv
a2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KAotICAgICAgICB0b0k0MjBIYW5kbGVyLCAoKSAtPiB5
dXZDb252ZXJ0ZXIuY29udmVydCh0aGlzKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgcmV0YWluKCkgewotICAgIHJlZkNvdW50TW9uaXRvci5vblJldGFpbih0aGlzKTsKLSAg
ICByZWZDb3VudERlbGVnYXRlLnJldGFpbigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgcmVmQ291bnRNb25pdG9yLm9uUmVsZWFzZSh0aGlzKTsK
LSAgICByZWZDb3VudERlbGVnYXRlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgVmlkZW9GcmFtZS5CdWZmZXIgY3JvcEFuZFNjYWxlKAotICAgICAgaW50IGNyb3BYLCBp
bnQgY3JvcFksIGludCBjcm9wV2lkdGgsIGludCBjcm9wSGVpZ2h0LCBpbnQgc2NhbGVXaWR0aCwg
aW50IHNjYWxlSGVpZ2h0KSB7Ci0gICAgZmluYWwgTWF0cml4IGNyb3BBbmRTY2FsZU1hdHJpeCA9
IG5ldyBNYXRyaXgoKTsKLSAgICAvLyBJbiBXZWJSVEMsIFk9MCBpcyB0aGUgdG9wIHJvdywgd2hp
bGUgaW4gT3BlbkdMIFk9MCBpcyB0aGUgYm90dG9tIHJvdy4gVGhpcyBtZWFucyB0aGF0IHRoZSBZ
Ci0gICAgLy8gZGlyZWN0aW9uIGlzIGVmZmVjdGl2ZWx5IHJldmVyc2VkLgotICAgIGZpbmFsIGlu
dCBjcm9wWUZyb21Cb3R0b20gPSBoZWlnaHQgLSAoY3JvcFkgKyBjcm9wSGVpZ2h0KTsKLSAgICBj
cm9wQW5kU2NhbGVNYXRyaXgucHJlVHJhbnNsYXRlKGNyb3BYIC8gKGZsb2F0KSB3aWR0aCwgY3Jv
cFlGcm9tQm90dG9tIC8gKGZsb2F0KSBoZWlnaHQpOwotICAgIGNyb3BBbmRTY2FsZU1hdHJpeC5w
cmVTY2FsZShjcm9wV2lkdGggLyAoZmxvYXQpIHdpZHRoLCBjcm9wSGVpZ2h0IC8gKGZsb2F0KSBo
ZWlnaHQpOwotCi0gICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtTWF0cml4KGNyb3BBbmRTY2FsZU1h
dHJpeCwKLSAgICAgICAgKGludCkgTWF0aC5yb3VuZCh1bnNjYWxlZFdpZHRoICogY3JvcFdpZHRo
IC8gKGZsb2F0KSB3aWR0aCksCi0gICAgICAgIChpbnQpIE1hdGgucm91bmQodW5zY2FsZWRIZWln
aHQgKiBjcm9wSGVpZ2h0IC8gKGZsb2F0KSBoZWlnaHQpLCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdo
dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUg
aW4gbWVtb3J5LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRvd25zY2FsaW5nLCBhbmQg
eW91Ci0gICAqIHNob3VsZCBzdGlsbCByZXNwZWN0IHRoZSB3aWR0aCBmcm9tIGdldFdpZHRoKCku
Ci0gICAqLwotICBwdWJsaWMgaW50IGdldFVuc2NhbGVkV2lkdGgoKSB7Ci0gICAgcmV0dXJuIHVu
c2NhbGVkV2lkdGg7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRo
ZSB0ZXh0dXJlIGluIG1lbW9yeS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkb3duc2Nh
bGluZywgYW5kIHlvdQotICAgKiBzaG91bGQgc3RpbGwgcmVzcGVjdCB0aGUgaGVpZ2h0IGZyb20g
Z2V0SGVpZ2h0KCkuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFVuc2NhbGVkSGVpZ2h0KCkgewot
ICAgIHJldHVybiB1bnNjYWxlZEhlaWdodDsKLSAgfQotCi0gIHB1YmxpYyBIYW5kbGVyIGdldFRv
STQyMEhhbmRsZXIoKSB7Ci0gICAgcmV0dXJuIHRvSTQyMEhhbmRsZXI7Ci0gIH0KLQotICBwdWJs
aWMgWXV2Q29udmVydGVyIGdldFl1dkNvbnZlcnRlcigpIHsKLSAgICByZXR1cm4geXV2Q29udmVy
dGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBUZXh0dXJlQnVmZmVySW1wbCB3
aXRoIGFuIGFwcGxpZWQgdHJhbnNmb3JtIG1hdHJpeCBhbmQgYSBuZXcgc2l6ZS4gVGhlCi0gICAq
IGV4aXN0aW5nIGJ1ZmZlciBpcyB1bmNoYW5nZWQuIFRoZSBnaXZlbiB0cmFuc2Zvcm0gbWF0cml4
IGlzIGFwcGxpZWQgZmlyc3Qgd2hlbiB0ZXh0dXJlCi0gICAqIGNvb3JkaW5hdGVzIGFyZSBzdGls
bCBpbiB0aGUgdW5tb2RpZmllZCBbMCwgMV0gcmFuZ2UuCi0gICAqLwotICBwdWJsaWMgVGV4dHVy
ZUJ1ZmZlckltcGwgYXBwbHlUcmFuc2Zvcm1NYXRyaXgoCi0gICAgICBNYXRyaXggdHJhbnNmb3Jt
TWF0cml4LCBpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpIHsKLSAgICByZXR1cm4gYXBwbHlU
cmFuc2Zvcm1NYXRyaXgodHJhbnNmb3JtTWF0cml4LCAvKiB1bnNjYWxlZFdpZHRoPSAqLyBuZXdX
aWR0aCwKLSAgICAgICAgLyogdW5zY2FsZWRIZWlnaHQ9ICovIG5ld0hlaWdodCwgLyogc2NhbGVk
V2lkdGg9ICovIG5ld1dpZHRoLAotICAgICAgICAvKiBzY2FsZWRIZWlnaHQ9ICovIG5ld0hlaWdo
dCk7Ci0gIH0KLQotICBwcml2YXRlIFRleHR1cmVCdWZmZXJJbXBsIGFwcGx5VHJhbnNmb3JtTWF0
cml4KE1hdHJpeCB0cmFuc2Zvcm1NYXRyaXgsIGludCB1bnNjYWxlZFdpZHRoLAotICAgICAgaW50
IHVuc2NhbGVkSGVpZ2h0LCBpbnQgc2NhbGVkV2lkdGgsIGludCBzY2FsZWRIZWlnaHQpIHsKLSAg
ICBmaW5hbCBNYXRyaXggbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnRyYW5zZm9ybU1hdHJp
eCk7Ci0gICAgbmV3TWF0cml4LnByZUNvbmNhdCh0cmFuc2Zvcm1NYXRyaXgpOwotICAgIHJldGFp
bigpOwotICAgIHJldHVybiBuZXcgVGV4dHVyZUJ1ZmZlckltcGwodW5zY2FsZWRXaWR0aCwgdW5z
Y2FsZWRIZWlnaHQsIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIHR5cGUsIGlkLAotICAgICAg
ICBuZXdNYXRyaXgsIHRvSTQyMEhhbmRsZXIsIHl1dkNvbnZlcnRlciwgbmV3IFJlZkNvdW50TW9u
aXRvcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvblJl
dGFpbihUZXh0dXJlQnVmZmVySW1wbCB0ZXh0dXJlQnVmZmVyKSB7Ci0gICAgICAgICAgICByZWZD
b3VudE1vbml0b3Iub25SZXRhaW4oVGV4dHVyZUJ1ZmZlckltcGwudGhpcyk7Ci0gICAgICAgICAg
fQotCi0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25SZWxlYXNl
KFRleHR1cmVCdWZmZXJJbXBsIHRleHR1cmVCdWZmZXIpIHsKLSAgICAgICAgICAgIHJlZkNvdW50
TW9uaXRvci5vblJlbGVhc2UoVGV4dHVyZUJ1ZmZlckltcGwudGhpcyk7Ci0gICAgICAgICAgfQot
Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25EZXN0cm95KFRl
eHR1cmVCdWZmZXJJbXBsIHRleHR1cmVCdWZmZXIpIHsKLSAgICAgICAgICAgIHJlbGVhc2UoKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0
Yy9UaW1lc3RhbXBBbGlnbmVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9UaW1lc3RhbXBBbGlnbmVyLmph
dmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNGJlZDRkOGZiYTQ0ODRkNWQxZWE1
ZTg0YTBhMWEyOGYyOTk1NGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvVGltZXN0YW1wQWxpZ25lci5qYXZhCisrKyAvZGV2L251bGwK
QEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi0vKioKLSAqIFRoZSBUaW1lc3RhbXBBbGlnbmVyIGNsYXNzIGhlbHBzIHRyYW5zbGF0aW5n
IGNhbWVyYSB0aW1lc3RhbXBzIGludG8gdGhlIHNhbWUgdGltZXNjYWxlIGFzIGlzCi0gKiB1c2Vk
IGJ5IHJ0Yzo6VGltZU5hbm9zKCkuIFNvbWUgY2FtZXJhcyBoYXZlIGJ1aWx0IGluIHRpbWVzdGFt
cGluZyB3aGljaCBpcyBtb3JlIGFjY3VyYXRlIHRoYW4KLSAqIHJlYWRpbmcgdGhlIHN5c3RlbSBj
bG9jaywgYnV0IHVzaW5nIGEgZGlmZmVyZW50IGVwb2NoIGFuZCB1bmtub3duIGNsb2NrIGRyaWZ0
LiBGcmFtZSB0aW1lc3RhbXBzCi0gKiBpbiB3ZWJydGMgc2hvdWxkIHVzZSBydGM6OlRpbWVOYW5v
cyAoc3lzdGVtIG1vbm90b25pYyB0aW1lKSwgYW5kIHRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmaWx0
ZXIKLSAqIHdoaWNoIGxldHMgdXMgdXNlIHRoZSBydGM6OlRpbWVOYW5vcyB0aW1lc2NhbGUsIGFu
ZCBhdCB0aGUgc2FtZSB0aW1lIHRha2UgYWR2YW50YWdlIG9mIGhpZ2hlcgotICogYWNjdXJhY3kg
b2YgdGhlIGNhbWVyYSBjbG9jay4gVGhpcyBjbGFzcyBpcyBhIHdyYXBwZXIgb24gdG9wIG9mIHJ0
Yzo6VGltZXN0YW1wQWxpZ25lci4KLSAqLwotcHVibGljIGNsYXNzIFRpbWVzdGFtcEFsaWduZXIg
ewotICAvKioKLSAgICogV3JhcHBlciBhcm91bmQgcnRjOjpUaW1lTmFub3MoKS4gVGhpcyBpcyBu
b3JtYWxseSBzYW1lIGFzIFN5c3RlbS5uYW5vVGltZSgpLCBidXQgY2FsbCB0aGlzCi0gICAqIGZ1
bmN0aW9uIHRvIGJlIHNhZmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGxvbmcgZ2V0UnRjVGlt
ZU5hbm9zKCkgewotICAgIHJldHVybiBuYXRpdmVSdGNUaW1lTmFub3MoKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9sYXRpbGUgbG9uZyBuYXRpdmVUaW1lc3RhbXBBbGlnbmVyID0gbmF0aXZlQ3JlYXRl
VGltZXN0YW1wQWxpZ25lcigpOwotCi0gIC8qKgotICAgKiBUcmFuc2xhdGVzIGNhbWVyYSB0aW1l
c3RhbXBzIHRvIHRoZSBzYW1lIHRpbWVzY2FsZSBhcyBpcyB1c2VkIGJ5IHJ0Yzo6VGltZU5hbm9z
KCkuCi0gICAqIHxjYW1lcmFUaW1lTnN8IGlzIGFzc3VtZWQgdG8gYmUgYWNjdXJhdGUsIGJ1dCB3
aXRoIGFuIHVua25vd24gZXBvY2ggYW5kIGNsb2NrIGRyaWZ0LiBSZXR1cm5zCi0gICAqIHRoZSB0
cmFuc2xhdGVkIHRpbWVzdGFtcC4KLSAgICovCi0gIHB1YmxpYyBsb25nIHRyYW5zbGF0ZVRpbWVz
dGFtcChsb25nIGNhbWVyYVRpbWVOcykgewotICAgIGNoZWNrTmF0aXZlQWxpZ25lckV4aXN0cygp
OwotICAgIHJldHVybiBuYXRpdmVUcmFuc2xhdGVUaW1lc3RhbXAobmF0aXZlVGltZXN0YW1wQWxp
Z25lciwgY2FtZXJhVGltZU5zKTsKLSAgfQotCi0gIC8qKiBEaXNwb3NlIG5hdGl2ZSB0aW1lc3Rh
bXAgYWxpZ25lci4gKi8KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBjaGVja05hdGl2
ZUFsaWduZXJFeGlzdHMoKTsKLSAgICBuYXRpdmVSZWxlYXNlVGltZXN0YW1wQWxpZ25lcihuYXRp
dmVUaW1lc3RhbXBBbGlnbmVyKTsKLSAgICBuYXRpdmVUaW1lc3RhbXBBbGlnbmVyID0gMDsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBjaGVja05hdGl2ZUFsaWduZXJFeGlzdHMoKSB7Ci0gICAgaWYg
KG5hdGl2ZVRpbWVzdGFtcEFsaWduZXIgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiVGltZXN0YW1wQWxpZ25lciBoYXMgYmVlbiBkaXNwb3NlZC4iKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVSdGNUaW1lTmFu
b3MoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlVGltZXN0YW1w
QWxpZ25lcigpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVSZWxlYXNlVGlt
ZXN0YW1wQWxpZ25lcihsb25nIHRpbWVzdGFtcEFsaWduZXIpOwotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgbG9uZyBuYXRpdmVUcmFuc2xhdGVUaW1lc3RhbXAobG9uZyB0aW1lc3RhbXBBbGlnbmVy
LCBsb25nIGNhbWVyYVRpbWVOcyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9UdXJuQ3Vz
dG9taXplci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVHVybkN1c3RvbWl6ZXIuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiZWRiN2RjYjMxYzljZTU2NjFkYzcwNmE3MDFhZTEzNzI0
NjNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9UdXJuQ3VzdG9taXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2YSB3
cmFwcGVyIGZvciBhIEMrKyBUdXJuQ3VzdG9taXplci4gKi8KLXB1YmxpYyBjbGFzcyBUdXJuQ3Vz
dG9taXplciB7Ci0gIHByaXZhdGUgbG9uZyBuYXRpdmVUdXJuQ3VzdG9taXplcjsKLQotICBwdWJs
aWMgVHVybkN1c3RvbWl6ZXIobG9uZyBuYXRpdmVUdXJuQ3VzdG9taXplcikgewotICAgIHRoaXMu
bmF0aXZlVHVybkN1c3RvbWl6ZXIgPSBuYXRpdmVUdXJuQ3VzdG9taXplcjsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgY2hlY2tUdXJuQ3VzdG9taXplckV4aXN0cygpOwot
ICAgIG5hdGl2ZUZyZWVUdXJuQ3VzdG9taXplcihuYXRpdmVUdXJuQ3VzdG9taXplcik7Ci0gICAg
bmF0aXZlVHVybkN1c3RvbWl6ZXIgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZl
IHZvaWQgbmF0aXZlRnJlZVR1cm5DdXN0b21pemVyKGxvbmcgdHVybkN1c3RvbWl6ZXIpOwotCi0g
IC8qKiBSZXR1cm4gYSBwb2ludGVyIHRvIHdlYnJ0Yzo6VHVybkN1c3RvbWl6ZXIuICovCi0gIEBD
YWxsZWRCeU5hdGl2ZQotICBsb25nIGdldE5hdGl2ZVR1cm5DdXN0b21pemVyKCkgewotICAgIGNo
ZWNrVHVybkN1c3RvbWl6ZXJFeGlzdHMoKTsKLSAgICByZXR1cm4gbmF0aXZlVHVybkN1c3RvbWl6
ZXI7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tUdXJuQ3VzdG9taXplckV4aXN0cygpIHsK
LSAgICBpZiAobmF0aXZlVHVybkN1c3RvbWl6ZXIgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbigiVHVybkN1c3RvbWl6ZXIgaGFzIGJlZW4gZGlzcG9zZWQuIik7
Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY3ZWI3YWIwODYyMDRlNGQ0ZmZjMDQ0NjBhMWQ3NTdlMmI0YzM5MTIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlk
ZW9DYXB0dXJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50
LkNvbnRleHQ7Ci0KLS8vIEJhc2UgaW50ZXJmYWNlIGZvciBhbGwgVmlkZW9DYXB0dXJlcnMgdG8g
aW1wbGVtZW50LgotcHVibGljIGludGVyZmFjZSBWaWRlb0NhcHR1cmVyIHsKLSAgLyoqCi0gICAq
IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdGhyZWFkLCB0
aGUgYW5kcm9pZCBhcHBsaWNhdGlvbiBjb250ZXh0LCBhbmQgdGhlCi0gICAqIGNhcHR1cmUgb2Jz
ZXJ2ZXIuIEl0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSBhbmQgYmVmb3JlIGFueSBzdGFydENh
cHR1cmUoKSByZXF1ZXN0LiBUaGUKLSAgICogY2FtZXJhIHRocmVhZCBpcyBndWFyYW50ZWVkIHRv
IGJlIHZhbGlkIHVudGlsIGRpc3Bvc2UoKSBpcyBjYWxsZWQuIElmIHRoZSBWaWRlb0NhcHR1cmVy
IHdhbnRzCi0gICAqIHRvIGRlbGl2ZXIgdGV4dHVyZSBmcmFtZXMsIGl0IHNob3VsZCBkbyB0aGlz
IGJ5IHJlbmRlcmluZyBvbiB0aGUgU3VyZmFjZVRleHR1cmUgaW4KLSAgICoge0Bjb2RlIHN1cmZh
Y2VUZXh0dXJlSGVscGVyfSwgcmVnaXN0ZXIgaXRzZWxmIGFzIGEgbGlzdGVuZXIsIGFuZCBmb3J3
YXJkIHRoZSBmcmFtZXMgdG8KLSAgICogQ2FwdHVyZXJPYnNlcnZlci5vbkZyYW1lQ2FwdHVyZWQo
KS4gVGhlIGNhbGxlciBzdGlsbCBoYXMgb3duZXJzaGlwIG9mIHtAY29kZQotICAgKiBzdXJmYWNl
VGV4dHVyZUhlbHBlcn0gYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBzdXJmYWNl
VGV4dHVyZUhlbHBlci5kaXNwb3NlKCkgaXMKLSAgICogY2FsbGVkLiBUaGlzIGFsc28gbWVhbnMg
dGhhdCB0aGUgY2FsbGVyIGNhbiByZXVzZSB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgdG8gaW5p
dGlhbGl6ZSBhIG5ldwotICAgKiBWaWRlb0NhcHR1cmVyIG9uY2UgdGhlIHByZXZpb3VzIFZpZGVv
Q2FwdHVyZXIgaGFzIGJlZW4gZGlzcG9zZWQuCi0gICAqLwotICB2b2lkIGluaXRpYWxpemUoU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGljYXRp
b25Db250ZXh0LAotICAgICAgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyKTsKLQot
ICAvKioKLSAgICogU3RhcnQgY2FwdHVyaW5nIGZyYW1lcyBpbiBhIGZvcm1hdCB0aGF0IGlzIGFz
IGNsb3NlIGFzIHBvc3NpYmxlIHRvIHtAY29kZSB3aWR0aCB4IGhlaWdodH0gYW5kCi0gICAqIHtA
Y29kZSBmcmFtZXJhdGV9LgotICAgKi8KLSAgdm9pZCBzdGFydENhcHR1cmUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLQotICAvKioKLSAgICogU3RvcCBjYXB0dXJpbmcu
IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJsb2NrIHVudGlsIGNhcHR1cmUgaXMgYWN0dWFsbHkgc3Rv
cHBlZC4KLSAgICovCi0gIHZvaWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb247Ci0KLSAgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IGZyYW1lcmF0ZSk7Ci0KLSAgLyoqCi0gICAqIFBlcmZvcm0gYW55IGZpbmFsIGNsZWFu
dXAgaGVyZS4gTm8gbW9yZSBjYXB0dXJpbmcgd2lsbCBiZSBkb25lIGFmdGVyIHRoaXMgY2FsbC4K
LSAgICovCi0gIHZvaWQgZGlzcG9zZSgpOwotCi0gIC8qKgotICAgKiBAcmV0dXJuIHRydWUgaWYt
YW5kLW9ubHktaWYgdGhpcyBpcyBhIHNjcmVlbiBjYXB0dXJlci4KLSAgICovCi0gIGJvb2xlYW4g
aXNTY3JlZW5jYXN0KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0NvZGVjSW5m
by5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9Db2RlY0luZm8uamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGRkOTI5NWZkNzM1NTFjZWRkYTQ1NTE1MDdmOTVjNDFjMWE5MmFiOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0
Yy9WaWRlb0NvZGVjSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5z
dXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWlt
cG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICog
UmVwcmVzZW50IGEgdmlkZW8gY29kZWMgYXMgZW5jb2RlZCBpbiBTRFAuCi0gKi8KLXB1YmxpYyBj
bGFzcyBWaWRlb0NvZGVjSW5mbyB7Ci0gIC8vIEtleXMgZm9yIEgyNjQgVmlkZW9Db2RlY0luZm8g
cHJvcGVydGllcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSDI2NF9GTVRQX1BST0ZJ
TEVfTEVWRUxfSUQgPSAicHJvZmlsZS1sZXZlbC1pZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
U3RyaW5nIEgyNjRfRk1UUF9MRVZFTF9BU1lNTUVUUllfQUxMT1dFRCA9ICJsZXZlbC1hc3ltbWV0
cnktYWxsb3dlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEgyNjRfRk1UUF9QQUNL
RVRJWkFUSU9OX01PREUgPSAicGFja2V0aXphdGlvbi1tb2RlIjsKLQotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIFN0cmluZyBIMjY0X1BST0ZJTEVfQ09OU1RSQUlORURfQkFTRUxJTkUgPSAiNDJlMCI7
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEgyNjRfUFJPRklMRV9DT05TVFJBSU5FRF9I
SUdIID0gIjY0MGMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X0xFVkVMXzNf
MSA9ICIxZiI7IC8vIDMxIGluIGhleC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSDI2
NF9DT05TVFJBSU5FRF9ISUdIXzNfMSA9Ci0gICAgICBIMjY0X1BST0ZJTEVfQ09OU1RSQUlORURf
SElHSCArIEgyNjRfTEVWRUxfM18xOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0
X0NPTlNUUkFJTkVEX0JBU0VMSU5FXzNfMSA9Ci0gICAgICBIMjY0X1BST0ZJTEVfQ09OU1RSQUlO
RURfQkFTRUxJTkUgKyBIMjY0X0xFVkVMXzNfMTsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIG5h
bWU7Ci0gIHB1YmxpYyBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtczsKLSAgQERlcHJl
Y2F0ZWQgcHVibGljIGZpbmFsIGludCBwYXlsb2FkOwotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBw
dWJsaWMgVmlkZW9Db2RlY0luZm8oU3RyaW5nIG5hbWUsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFy
YW1zKSB7Ci0gICAgdGhpcy5wYXlsb2FkID0gMDsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAg
IHRoaXMucGFyYW1zID0gcGFyYW1zOwotICB9Ci0KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIFZp
ZGVvQ29kZWNJbmZvKGludCBwYXlsb2FkLCBTdHJpbmcgbmFtZSwgTWFwPFN0cmluZywgU3RyaW5n
PiBwYXJhbXMpIHsKLSAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkOwotICAgIHRoaXMubmFtZSA9
IG5hbWU7Ci0gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIGJvb2xlYW4gZXF1YWxzKEBOdWxsYWJsZSBPYmplY3Qgb2JqKSB7Ci0gICAgaWYgKG9i
aiA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChvYmogPT0gdGhpcykKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFZpZGVvQ29kZWNJbmZv
KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZpZGVvQ29kZWNJbmZvIG90aGVySW5mbyA9
IChWaWRlb0NvZGVjSW5mbykgb2JqOwotICAgIHJldHVybiBuYW1lLmVxdWFsc0lnbm9yZUNhc2Uo
b3RoZXJJbmZvLm5hbWUpICYmIHBhcmFtcy5lcXVhbHMob3RoZXJJbmZvLnBhcmFtcyk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICBPYmplY3RbXSB2
YWx1ZXMgPSB7bmFtZS50b1VwcGVyQ2FzZShMb2NhbGUuUk9PVCksIHBhcmFtc307Ci0gICAgcmV0
dXJuIEFycmF5cy5oYXNoQ29kZSh2YWx1ZXMpOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0g
IFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgQENhbGxlZEJ5
TmF0aXZlCi0gIE1hcCBnZXRQYXJhbXMoKSB7Ci0gICAgcmV0dXJuIHBhcmFtczsKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9Db2RlY1N0YXR1cy5qYXZhIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJy
dGMvVmlkZW9Db2RlY1N0YXR1cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
ODZkNmZiZjY3NjFmYzdmMWM4NTAxOGQ3NjY2NDA0YTFlZWJhYjBhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvQ29kZWNTdGF0
dXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBTdGF0dXMgY29kZXMgcmVwb3J0ZWQg
YnkgdmlkZW8gZW5jb2RpbmcvZGVjb2RpbmcgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgYmUga2Vw
dCBpbiBzeW5jIHdpdGgKLSAqIHZpZGVvX2Vycm9yX2NvZGVzLmguCi0gKi8KLXB1YmxpYyBlbnVt
IFZpZGVvQ29kZWNTdGF0dXMgewotICBSRVFVRVNUX1NMSSgyKSwKLSAgTk9fT1VUUFVUKDEpLAot
ICBPSygwKSwKLSAgRVJST1IoLTEpLAotICBMRVZFTF9FWENFRURFRCgtMiksCi0gIE1FTU9SWSgt
MyksCi0gIEVSUl9QQVJBTUVURVIoLTQpLAotICBFUlJfU0laRSgtNSksCi0gIFRJTUVPVVQoLTYp
LAotICBVTklOSVRJQUxJWkVEKC03KSwKLSAgRVJSX1JFUVVFU1RfU0xJKC0xMiksCi0gIEZBTExC
QUNLX1NPRlRXQVJFKC0xMyksCi0gIFRBUkdFVF9CSVRSQVRFX09WRVJTSE9PVCgtMTQpOwotCi0g
IHByaXZhdGUgZmluYWwgaW50IG51bWJlcjsKLQotICBwcml2YXRlIFZpZGVvQ29kZWNTdGF0dXMo
aW50IG51bWJlcikgewotICAgIHRoaXMubnVtYmVyID0gbnVtYmVyOwotICB9Ci0KLSAgQENhbGxl
ZEJ5TmF0aXZlCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyKCkgewotICAgIHJldHVybiBudW1iZXI7
Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvRGVjb2Rlci5qYXZhIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29y
Zy93ZWJydGMvVmlkZW9EZWNvZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg3OWI2OTRiMjhmYTU2NGZiNGFjNjY4MGVkZGQ2NGI1ZDQ2ZGI2YmYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9EZWNvZGVy
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogSW50ZXJmYWNlIGZvciBhIHZpZGVvIGRl
Y29kZXIgdGhhdCBjYW4gYmUgdXNlZCBpbiBXZWJSVEMuIEFsbCBjYWxscyB0byB0aGUgY2xhc3Mg
d2lsbCBiZSBtYWRlIG9uCi0gKiBhIHNpbmdsZSBkZWNvZGluZyB0aHJlYWQuCi0gKi8KLXB1Ymxp
YyBpbnRlcmZhY2UgVmlkZW9EZWNvZGVyIHsKLSAgLyoqIFNldHRpbmdzIHBhc3NlZCB0byB0aGUg
ZGVjb2RlciBieSBXZWJSVEMuICovCi0gIHB1YmxpYyBjbGFzcyBTZXR0aW5ncyB7Ci0gICAgcHVi
bGljIGZpbmFsIGludCBudW1iZXJPZkNvcmVzOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgd2lkdGg7
Ci0gICAgcHVibGljIGZpbmFsIGludCBoZWlnaHQ7Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlNl
dHRpbmdzIikKLSAgICBwdWJsaWMgU2V0dGluZ3MoaW50IG51bWJlck9mQ29yZXMsIGludCB3aWR0
aCwgaW50IGhlaWdodCkgewotICAgICAgdGhpcy5udW1iZXJPZkNvcmVzID0gbnVtYmVyT2ZDb3Jl
czsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0
OwotICAgIH0KLSAgfQotCi0gIC8qKiBBZGRpdGlvbmFsIGluZm8gZm9yIGRlY29kaW5nLiAqLwot
ICBwdWJsaWMgY2xhc3MgRGVjb2RlSW5mbyB7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNN
aXNzaW5nRnJhbWVzOwotICAgIHB1YmxpYyBmaW5hbCBsb25nIHJlbmRlclRpbWVNczsKLQotICAg
IHB1YmxpYyBEZWNvZGVJbmZvKGJvb2xlYW4gaXNNaXNzaW5nRnJhbWVzLCBsb25nIHJlbmRlclRp
bWVNcykgewotICAgICAgdGhpcy5pc01pc3NpbmdGcmFtZXMgPSBpc01pc3NpbmdGcmFtZXM7Ci0g
ICAgICB0aGlzLnJlbmRlclRpbWVNcyA9IHJlbmRlclRpbWVNczsKLSAgICB9Ci0gIH0KLQotICBw
dWJsaWMgaW50ZXJmYWNlIENhbGxiYWNrIHsKLSAgICAvKioKLSAgICAgKiBDYWxsIHRvIHJldHVy
biBhIGRlY29kZWQgZnJhbWUuIENhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBmcmFtZSBEZWNvZGVkIGZyYW1lCi0gICAgICogQHBhcmFtIGRlY29kZVRp
bWVNcyBUaW1lIGl0IHRvb2sgdG8gZGVjb2RlIHRoZSBmcmFtZSBpbiBtaWxsaXNlY29uZHMgb3Ig
bnVsbCBpZiBub3QgYXZhaWxhYmxlCi0gICAgICogQHBhcmFtIHFwIFFQIHZhbHVlIG9mIHRoZSBk
ZWNvZGVkIGZyYW1lIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZQotICAgICAqLwotICAgIHZvaWQg
b25EZWNvZGVkRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSwgSW50ZWdlciBkZWNvZGVUaW1lTXMsIElu
dGVnZXIgcXApOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWNvZGVyIGltcGxlbWVudGF0aW9u
IGJhY2tpbmcgdGhpcyBpbnRlcmZhY2UgaXMgZWl0aGVyIDEpIGEgSmF2YQotICAgKiBkZWNvZGVy
IChlLmcuLCBhbiBBbmRyb2lkIHBsYXRmb3JtIGRlY29kZXIpLCBvciBhbHRlcm5hdGl2ZWx5IDIp
IGEgbmF0aXZlCi0gICAqIGRlY29kZXIgKGUuZy4sIGEgc29mdHdhcmUgZGVjb2RlciBvciBhIEMr
KyBkZWNvZGVyIGFkYXB0ZXIpLgotICAgKgotICAgKiBGb3IgY2FzZSAxKSwgY3JlYXRlTmF0aXZl
VmlkZW9EZWNvZGVyKCkgc2hvdWxkIHJldHVybiB6ZXJvLgotICAgKiBJbiB0aGlzIGNhc2UsIHdl
IGV4cGVjdCB0aGUgbmF0aXZlIGxpYnJhcnkgdG8gY2FsbCB0aGUgZGVjb2RlciB0aHJvdWdoCi0g
ICAqIEpOSSB1c2luZyB0aGUgSmF2YSBpbnRlcmZhY2UgZGVjbGFyZWQgYmVsb3cuCi0gICAqCi0g
ICAqIEZvciBjYXNlIDIpLCBjcmVhdGVOYXRpdmVWaWRlb0RlY29kZXIoKSBzaG91bGQgcmV0dXJu
IGEgbm9uLXplcm8gdmFsdWUuCi0gICAqIEluIHRoaXMgY2FzZSwgd2UgZXhwZWN0IHRoZSBuYXRp
dmUgbGlicmFyeSB0byB0cmVhdCB0aGUgcmV0dXJuZWQgdmFsdWUgYXMKLSAgICogYSByYXcgcG9p
bnRlciBvZiB0eXBlIHdlYnJ0Yzo6VmlkZW9EZWNvZGVyKiAob3duZXJzaGlwIGlzIHRyYW5zZmVy
cmVkIHRvCi0gICAqIHRoZSBjYWxsZXIpLiBUaGUgbmF0aXZlIGxpYnJhcnkgc2hvdWxkIHRoZW4g
ZGlyZWN0bHkgY2FsbCB0aGUKLSAgICogd2VicnRjOjpWaWRlb0RlY29kZXIgaW50ZXJmYWNlIHdp
dGhvdXQgZ29pbmcgdGhyb3VnaCBKTkkuIEFsbCBjYWxscyB0bwotICAgKiB0aGUgSmF2YSBpbnRl
cmZhY2UgbWV0aG9kcyBkZWNsYXJlZCBiZWxvdyBzaG91bGQgdGh1cyB0aHJvdyBhbgotICAgKiBV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi4KLSAgICovCi0gIEBDYWxsZWRCeU5hdGl2ZQot
ICBkZWZhdWx0IGxvbmcgY3JlYXRlTmF0aXZlVmlkZW9EZWNvZGVyKCkgewotICAgIHJldHVybiAw
OwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHRoZSBkZWNvZGluZyBwcm9jZXNzIHdp
dGggc3BlY2lmaWVkIHNldHRpbmdzLiBXaWxsIGJlIGNhbGxlZCBvbiB0aGUgZGVjb2RpbmcgdGhy
ZWFkCi0gICAqIGJlZm9yZSBhbnkgZGVjb2RlIGNhbGxzLgotICAgKi8KLSAgQENhbGxlZEJ5TmF0
aXZlIFZpZGVvQ29kZWNTdGF0dXMgaW5pdERlY29kZShTZXR0aW5ncyBzZXR0aW5ncywgQ2FsbGJh
Y2sgZGVjb2RlQ2FsbGJhY2spOwotICAvKioKLSAgICogQ2FsbGVkIHdoZW4gdGhlIGRlY29kZXIg
aXMgbm8gbG9uZ2VyIG5lZWRlZC4gQW55IG1vcmUgY2FsbHMgdG8gZGVjb2RlIHdpbGwgbm90IGJl
IG1hZGUuCi0gICAqLwotICBAQ2FsbGVkQnlOYXRpdmUgVmlkZW9Db2RlY1N0YXR1cyByZWxlYXNl
KCk7Ci0gIC8qKgotICAgKiBSZXF1ZXN0IHRoZSBkZWNvZGVyIHRvIGRlY29kZSBhIGZyYW1lLgot
ICAgKi8KLSAgQENhbGxlZEJ5TmF0aXZlIFZpZGVvQ29kZWNTdGF0dXMgZGVjb2RlKEVuY29kZWRJ
bWFnZSBmcmFtZSwgRGVjb2RlSW5mbyBpbmZvKTsKLSAgLyoqCi0gICAqIFRoZSBkZWNvZGVyIHNo
b3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBwcmVmZXJzIGxhdGUgZGVjb2RpbmcuIFRoYXQgaXMsIGl0
IGNhbiBub3QgZGVjb2RlCi0gICAqIGluZmluaXRlIG51bWJlciBvZiBmcmFtZXMgYmVmb3JlIHRo
ZSBkZWNvZGVkIGZyYW1lIGlzIGNvbnN1bWVkLgotICAgKi8KLSAgQENhbGxlZEJ5TmF0aXZlIGJv
b2xlYW4gZ2V0UHJlZmVyc0xhdGVEZWNvZGluZygpOwotICAvKioKLSAgICogU2hvdWxkIHJldHVy
biBhIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbi4gR2V0cyBjYWxsZWQg
b25jZSBhbmQgY2FjaGVkLiBNYXkgYmUKLSAgICogY2FsbGVkIGZyb20gYXJiaXRyYXJ5IHRocmVh
ZC4KLSAgICovCi0gIEBDYWxsZWRCeU5hdGl2ZSBTdHJpbmcgZ2V0SW1wbGVtZW50YXRpb25OYW1l
KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0RlY29kZXJGYWN0b3J5LmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9WaWRlb0RlY29kZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJkZDA5NjcwYmQ0YjA5ZmIwZmMzYTQwZWExMDk2OTU0M2Q3YWZiZmYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
VmlkZW9EZWNvZGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci0KLS8qKiBGYWN0b3J5IGZvciBjcmVhdGlu
ZyBWaWRlb0RlY29kZXJzLiAqLwotcHVibGljIGludGVyZmFjZSBWaWRlb0RlY29kZXJGYWN0b3J5
IHsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBWaWRlb0RlY29kZXIgZm9yIHRoZSBnaXZlbiBjb2Rl
Yy4gU3VwcG9ydHMgdGhlIHNhbWUgY29kZWNzIHN1cHBvcnRlZCBieQotICAgKiBWaWRlb0VuY29k
ZXJGYWN0b3J5LgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgQE51bGxhYmxlCi0gIGRlZmF1bHQg
VmlkZW9EZWNvZGVyIGNyZWF0ZURlY29kZXIoU3RyaW5nIGNvZGVjVHlwZSkgewotICAgIHRocm93
IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiRGVwcmVjYXRlZCBhbmQgbm90IGlt
cGxlbWVudGVkLiIpOwotICB9Ci0KLSAgLyoqIENyZWF0ZXMgYSBkZWNvZGVyIGZvciB0aGUgZ2l2
ZW4gdmlkZW8gY29kZWMuICovCi0gIEBOdWxsYWJsZQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgZGVm
YXVsdCBWaWRlb0RlY29kZXIgY3JlYXRlRGVjb2RlcihWaWRlb0NvZGVjSW5mbyBpbmZvKSB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZURlY29kZXIoaW5mby5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEVudW1lcmF0ZXMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHZpZGVvIGNvZGVjcy4KLSAgICov
Ci0gIEBDYWxsZWRCeU5hdGl2ZQotICBkZWZhdWx0IFZpZGVvQ29kZWNJbmZvW10gZ2V0U3VwcG9y
dGVkQ29kZWNzKCkgewotICAgIHJldHVybiBuZXcgVmlkZW9Db2RlY0luZm9bMF07Ci0gIH0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvRGVjb2RlckZhbGxiYWNrLmphdmEgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9WaWRlb0RlY29kZXJGYWxsYmFjay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkZGZhM2VjZDQwZjc4NjVmODZlZWUxZGFkYzMyYjVkYmRjMTQ2ZjBiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVv
RGVjb2RlckZhbGxiYWNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogQSBjb21iaW5l
ZCB2aWRlbyBkZWNvZGVyIHRoYXQgZmFsbHMgYmFjayBvbiBhIHNlY29uZGFyeSBkZWNvZGVyIGlm
IHRoZSBwcmltYXJ5IGRlY29kZXIgZmFpbHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb0RlY29k
ZXJGYWxsYmFjayBleHRlbmRzIFdyYXBwZWROYXRpdmVWaWRlb0RlY29kZXIgewotICBwcml2YXRl
IGZpbmFsIFZpZGVvRGVjb2RlciBmYWxsYmFjazsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb0RlY29k
ZXIgcHJpbWFyeTsKLQotICBwdWJsaWMgVmlkZW9EZWNvZGVyRmFsbGJhY2soVmlkZW9EZWNvZGVy
IGZhbGxiYWNrLCBWaWRlb0RlY29kZXIgcHJpbWFyeSkgewotICAgIHRoaXMuZmFsbGJhY2sgPSBm
YWxsYmFjazsKLSAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5OwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBsb25nIGNyZWF0ZU5hdGl2ZVZpZGVvRGVjb2RlcigpIHsKLSAgICByZXR1cm4g
bmF0aXZlQ3JlYXRlRGVjb2RlcihmYWxsYmFjaywgcHJpbWFyeSk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVEZWNvZGVyKFZpZGVvRGVjb2RlciBmYWxs
YmFjaywgVmlkZW9EZWNvZGVyIHByaW1hcnkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
VmlkZW9FbmNvZGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXIuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4ZWI4MTc2NzBjNmE1NjlkNGNlMTA2MTJkZGNlNDIx
ODA2MjE3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkv
b3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBvcmcud2VicnRjLkVu
Y29kZWRJbWFnZTsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGEgdmlkZW8gZW5jb2RlciB0aGF0
IGNhbiBiZSB1c2VkIHdpdGggV2ViUlRDLiBBbGwgY2FsbHMgd2lsbCBiZSBtYWRlIG9uIHRoZQot
ICogZW5jb2RpbmcgdGhyZWFkLiBUaGUgZW5jb2RlciBtYXkgYmUgY29uc3RydWN0ZWQgb24gYSBk
aWZmZXJlbnQgdGhyZWFkIGFuZCBjaGFuZ2luZyB0aHJlYWQgYWZ0ZXIKLSAqIGNhbGxpbmcgcmVs
ZWFzZSBpcyBhbGxvd2VkLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFZpZGVvRW5jb2RlciB7Ci0g
IC8qKiBTZXR0aW5ncyBwYXNzZWQgdG8gdGhlIGVuY29kZXIgYnkgV2ViUlRDLiAqLwotICBwdWJs
aWMgY2xhc3MgU2V0dGluZ3MgewotICAgIHB1YmxpYyBmaW5hbCBpbnQgbnVtYmVyT2ZDb3JlczsK
LSAgICBwdWJsaWMgZmluYWwgaW50IHdpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgaGVpZ2h0
OwotICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhcnRCaXRyYXRlOyAvLyBLaWxvYml0cyBwZXIgc2Vj
b25kLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgbWF4RnJhbWVyYXRlOwotICAgIHB1YmxpYyBmaW5h
bCBpbnQgbnVtYmVyT2ZTaW11bGNhc3RTdHJlYW1zOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFu
IGF1dG9tYXRpY1Jlc2l6ZU9uOwotICAgIHB1YmxpYyBmaW5hbCBDYXBhYmlsaXRpZXMgY2FwYWJp
bGl0aWVzOwotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvMTA3MjApOiBSZW1vdmUuCi0g
ICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgU2V0dGluZ3MoaW50IG51bWJlck9mQ29yZXMsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0YXJ0Qml0cmF0ZSwgaW50IG1heEZyYW1lcmF0ZSwK
LSAgICAgICAgaW50IG51bWJlck9mU2ltdWxjYXN0U3RyZWFtcywgYm9vbGVhbiBhdXRvbWF0aWNS
ZXNpemVPbikgewotICAgICAgdGhpcyhudW1iZXJPZkNvcmVzLCB3aWR0aCwgaGVpZ2h0LCBzdGFy
dEJpdHJhdGUsIG1heEZyYW1lcmF0ZSwgbnVtYmVyT2ZTaW11bGNhc3RTdHJlYW1zLAotICAgICAg
ICAgIGF1dG9tYXRpY1Jlc2l6ZU9uLCBuZXcgVmlkZW9FbmNvZGVyLkNhcGFiaWxpdGllcyhmYWxz
ZSAvKiBsb3NzTm90aWZpY2F0aW9uICovKSk7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZl
KCJTZXR0aW5ncyIpCi0gICAgcHVibGljIFNldHRpbmdzKGludCBudW1iZXJPZkNvcmVzLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBzdGFydEJpdHJhdGUsIGludCBtYXhGcmFtZXJhdGUsCi0g
ICAgICAgIGludCBudW1iZXJPZlNpbXVsY2FzdFN0cmVhbXMsIGJvb2xlYW4gYXV0b21hdGljUmVz
aXplT24sIENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMpIHsKLSAgICAgIHRoaXMubnVtYmVyT2ZD
b3JlcyA9IG51bWJlck9mQ29yZXM7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0
aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMuc3RhcnRCaXRyYXRlID0gc3RhcnRCaXRy
YXRlOwotICAgICAgdGhpcy5tYXhGcmFtZXJhdGUgPSBtYXhGcmFtZXJhdGU7Ci0gICAgICB0aGlz
Lm51bWJlck9mU2ltdWxjYXN0U3RyZWFtcyA9IG51bWJlck9mU2ltdWxjYXN0U3RyZWFtczsKLSAg
ICAgIHRoaXMuYXV0b21hdGljUmVzaXplT24gPSBhdXRvbWF0aWNSZXNpemVPbjsKLSAgICAgIHRo
aXMuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOwotICAgIH0KLSAgfQotCi0gIC8qKiBDYXBh
YmlsaXRpZXMgKGxvc3Mgbm90aWZpY2F0aW9uLCBldGMuKSBwYXNzZWQgdG8gdGhlIGVuY29kZXIg
YnkgV2ViUlRDLiAqLwotICBwdWJsaWMgY2xhc3MgQ2FwYWJpbGl0aWVzIHsKLSAgICAvKioKLSAg
ICAgKiBUaGUgcmVtb3RlIHNpZGUgaGFzIHN1cHBvcnQgZm9yIHRoZSBsb3NzIG5vdGlmaWNhdGlv
biBSVENQIGZlZWRiYWNrIG1lc3NhZ2UgZm9ybWF0LCBhbmQgd2lsbAotICAgICAqIGJlIHNlbmRp
bmcgdGhlc2UgZmVlZGJhY2sgbWVzc2FnZXMgaWYgbmVjZXNzYXJ5LgotICAgICAqLwotICAgIHB1
YmxpYyBmaW5hbCBib29sZWFuIGxvc3NOb3RpZmljYXRpb247Ci0KLSAgICBAQ2FsbGVkQnlOYXRp
dmUoIkNhcGFiaWxpdGllcyIpCi0gICAgcHVibGljIENhcGFiaWxpdGllcyhib29sZWFuIGxvc3NO
b3RpZmljYXRpb24pIHsKLSAgICAgIHRoaXMubG9zc05vdGlmaWNhdGlvbiA9IGxvc3NOb3RpZmlj
YXRpb247Ci0gICAgfQotICB9Ci0KLSAgLyoqIEFkZGl0aW9uYWwgaW5mbyBmb3IgZW5jb2Rpbmcu
ICovCi0gIHB1YmxpYyBjbGFzcyBFbmNvZGVJbmZvIHsKLSAgICBwdWJsaWMgZmluYWwgRW5jb2Rl
ZEltYWdlLkZyYW1lVHlwZVtdIGZyYW1lVHlwZXM7Ci0KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkVu
Y29kZUluZm8iKQotICAgIHB1YmxpYyBFbmNvZGVJbmZvKEVuY29kZWRJbWFnZS5GcmFtZVR5cGVb
XSBmcmFtZVR5cGVzKSB7Ci0gICAgICB0aGlzLmZyYW1lVHlwZXMgPSBmcmFtZVR5cGVzOwotICAg
IH0KLSAgfQotCi0gIC8vIFRPRE8oc2FrYWwpOiBBZGQgdmFsdWVzIHRvIHRoZXNlIGNsYXNzZXMg
YXMgbmVjZXNzYXJ5LgotICAvKiogQ29kZWMgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IGVuY29kZWQgZnJhbWUuICovCi0gIHB1YmxpYyBjbGFzcyBDb2RlY1NwZWNpZmljSW5mbyB7fQot
Ci0gIHB1YmxpYyBjbGFzcyBDb2RlY1NwZWNpZmljSW5mb1ZQOCBleHRlbmRzIENvZGVjU3BlY2lm
aWNJbmZvIHt9Ci0KLSAgcHVibGljIGNsYXNzIENvZGVjU3BlY2lmaWNJbmZvVlA5IGV4dGVuZHMg
Q29kZWNTcGVjaWZpY0luZm8ge30KLQotICBwdWJsaWMgY2xhc3MgQ29kZWNTcGVjaWZpY0luZm9I
MjY0IGV4dGVuZHMgQ29kZWNTcGVjaWZpY0luZm8ge30KLQotICAvKioKLSAgICogUmVwcmVzZW50
cyBiaXRyYXRlIGFsbG9jYXRlZCBmb3IgYW4gZW5jb2RlciB0byBwcm9kdWNlIGZyYW1lcy4gQml0
cmF0ZSBjYW4gYmUgZGl2aWRlZCBiZXR3ZWVuCi0gICAqIHNwYXRpYWwgYW5kIHRlbXBvcmFsIGxh
eWVycy4KLSAgICovCi0gIHB1YmxpYyBjbGFzcyBCaXRyYXRlQWxsb2NhdGlvbiB7Ci0gICAgLy8g
Rmlyc3QgaW5kZXggaXMgdGhlIHNwYXRpYWwgbGF5ZXIgYW5kIHNlY29uZCB0aGUgdGVtcG9yYWwg
bGF5ZXIuCi0gICAgcHVibGljIGZpbmFsIGludFtdW10gYml0cmF0ZXNCYnM7Ci0KLSAgICAvKioK
LSAgICAgKiBJbml0aWFsaXplcyB0aGUgYWxsb2NhdGlvbiB3aXRoIGEgdHdvIGRpbWVuc2lvbmFs
IGFycmF5IG9mIGJpdHJhdGVzLiBUaGUgZmlyc3QgaW5kZXggb2YgdGhlCi0gICAgICogYXJyYXkg
aXMgdGhlIHNwYXRpYWwgbGF5ZXIgYW5kIHRoZSBzZWNvbmQgaW5kZXggaW4gdGhlIHRlbXBvcmFs
IGxheWVyLgotICAgICAqLwotICAgIEBDYWxsZWRCeU5hdGl2ZSgiQml0cmF0ZUFsbG9jYXRpb24i
KQotICAgIHB1YmxpYyBCaXRyYXRlQWxsb2NhdGlvbihpbnRbXVtdIGJpdHJhdGVzQmJzKSB7Ci0g
ICAgICB0aGlzLmJpdHJhdGVzQmJzID0gYml0cmF0ZXNCYnM7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogR2V0cyB0aGUgdG90YWwgYml0cmF0ZSBhbGxvY2F0ZWQgZm9yIGFsbCBsYXllcnMuCi0g
ICAgICovCi0gICAgcHVibGljIGludCBnZXRTdW0oKSB7Ci0gICAgICBpbnQgc3VtID0gMDsKLSAg
ICAgIGZvciAoaW50W10gc3BhdGlhbExheWVyIDogYml0cmF0ZXNCYnMpIHsKLSAgICAgICAgZm9y
IChpbnQgYml0cmF0ZSA6IHNwYXRpYWxMYXllcikgewotICAgICAgICAgIHN1bSArPSBiaXRyYXRl
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3VtOwotICAgIH0KLSAgfQotCi0g
IC8qKiBTZXR0aW5ncyBmb3IgV2ViUlRDIHF1YWxpdHkgYmFzZWQgc2NhbGluZy4gKi8KLSAgcHVi
bGljIGNsYXNzIFNjYWxpbmdTZXR0aW5ncyB7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gb247
Ci0gICAgQE51bGxhYmxlIHB1YmxpYyBmaW5hbCBJbnRlZ2VyIGxvdzsKLSAgICBATnVsbGFibGUg
cHVibGljIGZpbmFsIEludGVnZXIgaGlnaDsKLQotICAgIC8qKgotICAgICAqIFNldHRpbmdzIHRv
IGRpc2FibGUgcXVhbGl0eSBiYXNlZCBzY2FsaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0
aWMgZmluYWwgU2NhbGluZ1NldHRpbmdzIE9GRiA9IG5ldyBTY2FsaW5nU2V0dGluZ3MoKTsKLQot
ICAgIC8qKgotICAgICAqIENyZWF0ZXMgc2V0dGluZ3MgdG8gZW5hYmxlIHF1YWxpdHkgYmFzZWQg
c2NhbGluZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb3cgQXZlcmFnZSBRUCBhdCB3aGljaCB0
byBzY2FsZSB1cCB0aGUgcmVzb2x1dGlvbi4KLSAgICAgKiBAcGFyYW0gaGlnaCBBdmVyYWdlIFFQ
IGF0IHdoaWNoIHRvIHNjYWxlIGRvd24gdGhlIHJlc29sdXRpb24uCi0gICAgICovCi0gICAgcHVi
bGljIFNjYWxpbmdTZXR0aW5ncyhpbnQgbG93LCBpbnQgaGlnaCkgewotICAgICAgdGhpcy5vbiA9
IHRydWU7Ci0gICAgICB0aGlzLmxvdyA9IGxvdzsKLSAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSBTY2FsaW5nU2V0dGluZ3MoKSB7Ci0gICAgICB0aGlzLm9uID0g
ZmFsc2U7Ci0gICAgICB0aGlzLmxvdyA9IG51bGw7Ci0gICAgICB0aGlzLmhpZ2ggPSBudWxsOwot
ICAgIH0KLQotICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg4MzApOiBCZWxvdyBjb25zdHJ1
Y3RvcnMgYXJlIGRlcHJlY2F0ZWQuCi0gICAgLy8gRGVmYXVsdCB0aHJlc2hvbGRzIGFyZSBnb2lu
ZyBhd2F5LCBzbyB0aHJlc2hvbGRzIGhhdmUgdG8gYmUgc2V0Ci0gICAgLy8gd2hlbiBzY2FsaW5n
IGlzIG9uLgotICAgIC8qKgotICAgICAqIENyZWF0ZXMgcXVhbGl0eSBiYXNlZCBzY2FsaW5nIHNl
dHRpbmcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb24gVHJ1ZSBpZiBxdWFsaXR5IHNjYWxpbmcg
aXMgdHVybmVkIG9uLgotICAgICAqLwotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIFNjYWxp
bmdTZXR0aW5ncyhib29sZWFuIG9uKSB7Ci0gICAgICB0aGlzLm9uID0gb247Ci0gICAgICB0aGlz
LmxvdyA9IG51bGw7Ci0gICAgICB0aGlzLmhpZ2ggPSBudWxsOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIENyZWF0ZXMgcXVhbGl0eSBiYXNlZCBzY2FsaW5nIHNldHRpbmdzIHdpdGggY3VzdG9t
IHRocmVzaG9sZHMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb24gVHJ1ZSBpZiBxdWFsaXR5IHNj
YWxpbmcgaXMgdHVybmVkIG9uLgotICAgICAqIEBwYXJhbSBsb3cgQXZlcmFnZSBRUCBhdCB3aGlj
aCB0byBzY2FsZSB1cCB0aGUgcmVzb2x1dGlvbi4KLSAgICAgKiBAcGFyYW0gaGlnaCBBdmVyYWdl
IFFQIGF0IHdoaWNoIHRvIHNjYWxlIGRvd24gdGhlIHJlc29sdXRpb24uCi0gICAgICovCi0gICAg
QERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgU2NhbGluZ1NldHRpbmdzKGJvb2xlYW4gb24sIGludCBs
b3csIGludCBoaWdoKSB7Ci0gICAgICB0aGlzLm9uID0gb247Ci0gICAgICB0aGlzLmxvdyA9IGxv
dzsKLSAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBvbiA/ICJbICIgKyBsb3cg
KyAiLCAiICsgaGlnaCArICIgXSIgOiAiT0ZGIjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICog
Qml0cmF0ZSBsaW1pdHMgZm9yIHJlc29sdXRpb24uCi0gICAqLwotICBwdWJsaWMgY2xhc3MgUmVz
b2x1dGlvbkJpdHJhdGVMaW1pdHMgewotICAgIC8qKgotICAgICAqIE1heGltdW0gc2l6ZSBvZiB2
aWRlbyBmcmFtZSwgaW4gcGl4ZWxzLCB0aGUgYml0cmF0ZSBsaW1pdHMgYXJlIGludGVuZGVkIGZv
ci4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGZyYW1lU2l6ZVBpeGVsczsKLQotICAg
IC8qKgotICAgICAqIFJlY29tbWVuZGVkIG1pbmltdW0gYml0cmF0ZSB0byBzdGFydCBlbmNvZGlu
Zy4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IG1pblN0YXJ0Qml0cmF0ZUJwczsKLQot
ICAgIC8qKgotICAgICAqIFJlY29tbWVuZGVkIG1pbmltdW0gYml0cmF0ZS4KLSAgICAgKi8KLSAg
ICBwdWJsaWMgZmluYWwgaW50IG1pbkJpdHJhdGVCcHM7Ci0KLSAgICAvKioKLSAgICAgKiBSZWNv
bW1lbmRlZCBtYXhpbXVtIGJpdHJhdGUuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBt
YXhCaXRyYXRlQnBzOwotCi0gICAgcHVibGljIFJlc29sdXRpb25CaXRyYXRlTGltaXRzKAotICAg
ICAgICBpbnQgZnJhbWVTaXplUGl4ZWxzLCBpbnQgbWluU3RhcnRCaXRyYXRlQnBzLCBpbnQgbWlu
Qml0cmF0ZUJwcywgaW50IG1heEJpdHJhdGVCcHMpIHsKLSAgICAgIHRoaXMuZnJhbWVTaXplUGl4
ZWxzID0gZnJhbWVTaXplUGl4ZWxzOwotICAgICAgdGhpcy5taW5TdGFydEJpdHJhdGVCcHMgPSBt
aW5TdGFydEJpdHJhdGVCcHM7Ci0gICAgICB0aGlzLm1pbkJpdHJhdGVCcHMgPSBtaW5CaXRyYXRl
QnBzOwotICAgICAgdGhpcy5tYXhCaXRyYXRlQnBzID0gbWF4Qml0cmF0ZUJwczsKLSAgICB9Ci0K
LSAgICBAQ2FsbGVkQnlOYXRpdmUoIlJlc29sdXRpb25CaXRyYXRlTGltaXRzIikKLSAgICBwdWJs
aWMgaW50IGdldEZyYW1lU2l6ZVBpeGVscygpIHsKLSAgICAgIHJldHVybiBmcmFtZVNpemVQaXhl
bHM7Ci0gICAgfQotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJSZXNvbHV0aW9uQml0cmF0ZUxpbWl0
cyIpCi0gICAgcHVibGljIGludCBnZXRNaW5TdGFydEJpdHJhdGVCcHMoKSB7Ci0gICAgICByZXR1
cm4gbWluU3RhcnRCaXRyYXRlQnBzOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5hdGl2ZSgiUmVz
b2x1dGlvbkJpdHJhdGVMaW1pdHMiKQotICAgIHB1YmxpYyBpbnQgZ2V0TWluQml0cmF0ZUJwcygp
IHsKLSAgICAgIHJldHVybiBtaW5CaXRyYXRlQnBzOwotICAgIH0KLQotICAgIEBDYWxsZWRCeU5h
dGl2ZSgiUmVzb2x1dGlvbkJpdHJhdGVMaW1pdHMiKQotICAgIHB1YmxpYyBpbnQgZ2V0TWF4Qml0
cmF0ZUJwcygpIHsKLSAgICAgIHJldHVybiBtYXhCaXRyYXRlQnBzOwotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyBpbnRlcmZhY2UgQ2FsbGJhY2sgewotICAgIC8qKgotICAgICAqIE9sZCBlbmNvZGVy
cyBhc3N1bWUgdGhhdCB0aGUgYnl0ZSBidWZmZXIgaGVsZCBieSB8ZnJhbWV8IGlzIG5vdCBhY2Nl
c3NlZCBhZnRlciB0aGUgY2FsbCB0bwotICAgICAqIHRoaXMgbWV0aG9kIHJldHVybnMuIElmIHRo
ZSBwaXBlbGluZSBkb3duc3RyZWFtIG5lZWRzIHRvIGhvbGQgb24gdG8gdGhlIGJ1ZmZlciwgaXQg
dGhlbiBoYXMKLSAgICAgKiB0byBtYWtlIGl0cyBvd24gY29weS4gV2Ugd2FudCB0byBtb3ZlIHRv
IGEgbW9kZWwgd2hlcmUgbm8gY29weWluZyBpcyBuZWVkZWQsIGFuZCBpbnN0ZWFkIHVzZQotICAg
ICAqIHJldGFpbigpL3JlbGVhc2UoKSB0byBzaWduYWwgdG8gdGhlIGVuY29kZXIgd2hlbiBpdCBp
cyBzYWZlIHRvIHJldXNlIHRoZSBidWZmZXIuCi0gICAgICoKLSAgICAgKiBPdmVyIHRoZSB0cmFu
c2l0aW9uLCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBjbGFzcyBzaG91bGQgdXNlIHRoZSBtYXli
ZVJldGFpbigpIG1ldGhvZCBpZgotICAgICAqIHRoZXkgd2FudCB0byBrZWVwIGEgcmVmZXJlbmNl
IHRvIHRoZSBidWZmZXIsIGFuZCBmYWxsIGJhY2sgdG8gY29weWluZyBpZiB0aGF0IG1ldGhvZCBy
ZXR1cm5zCi0gICAgICogZmFsc2UuCi0gICAgICovCi0gICAgdm9pZCBvbkVuY29kZWRGcmFtZShF
bmNvZGVkSW1hZ2UgZnJhbWUsIENvZGVjU3BlY2lmaWNJbmZvIGluZm8pOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFRoZSBlbmNvZGVyIGltcGxlbWVudGF0aW9uIGJhY2tpbmcgdGhpcyBpbnRlcmZhY2Ug
aXMgZWl0aGVyIDEpIGEgSmF2YQotICAgKiBlbmNvZGVyIChlLmcuLCBhbiBBbmRyb2lkIHBsYXRm
b3JtIGVuY29kZXIpLCBvciBhbHRlcm5hdGl2ZWx5IDIpIGEgbmF0aXZlCi0gICAqIGVuY29kZXIg
KGUuZy4sIGEgc29mdHdhcmUgZW5jb2RlciBvciBhIEMrKyBlbmNvZGVyIGFkYXB0ZXIpLgotICAg
KgotICAgKiBGb3IgY2FzZSAxKSwgY3JlYXRlTmF0aXZlVmlkZW9FbmNvZGVyKCkgc2hvdWxkIHJl
dHVybiB6ZXJvLgotICAgKiBJbiB0aGlzIGNhc2UsIHdlIGV4cGVjdCB0aGUgbmF0aXZlIGxpYnJh
cnkgdG8gY2FsbCB0aGUgZW5jb2RlciB0aHJvdWdoCi0gICAqIEpOSSB1c2luZyB0aGUgSmF2YSBp
bnRlcmZhY2UgZGVjbGFyZWQgYmVsb3cuCi0gICAqCi0gICAqIEZvciBjYXNlIDIpLCBjcmVhdGVO
YXRpdmVWaWRlb0VuY29kZXIoKSBzaG91bGQgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUuCi0gICAq
IEluIHRoaXMgY2FzZSwgd2UgZXhwZWN0IHRoZSBuYXRpdmUgbGlicmFyeSB0byB0cmVhdCB0aGUg
cmV0dXJuZWQgdmFsdWUgYXMKLSAgICogYSByYXcgcG9pbnRlciBvZiB0eXBlIHdlYnJ0Yzo6Vmlk
ZW9FbmNvZGVyKiAob3duZXJzaGlwIGlzIHRyYW5zZmVycmVkIHRvCi0gICAqIHRoZSBjYWxsZXIp
LiBUaGUgbmF0aXZlIGxpYnJhcnkgc2hvdWxkIHRoZW4gZGlyZWN0bHkgY2FsbCB0aGUKLSAgICog
d2VicnRjOjpWaWRlb0VuY29kZXIgaW50ZXJmYWNlIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBKTkku
IEFsbCBjYWxscyB0bwotICAgKiB0aGUgSmF2YSBpbnRlcmZhY2UgbWV0aG9kcyBkZWNsYXJlZCBi
ZWxvdyBzaG91bGQgdGh1cyB0aHJvdyBhbgotICAgKiBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbi4KLSAgICovCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBkZWZhdWx0IGxvbmcgY3JlYXRlTmF0
aXZlVmlkZW9FbmNvZGVyKCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZW5jb2RlciBpcyBiYWNrZWQgYnkgaGFyZHdhcmUuCi0gICAqLwot
ICBAQ2FsbGVkQnlOYXRpdmUKLSAgZGVmYXVsdCBib29sZWFuIGlzSGFyZHdhcmVFbmNvZGVyKCkg
ewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHRoZSBl
bmNvZGluZyBwcm9jZXNzLiBDYWxsIGJlZm9yZSBhbnkgY2FsbHMgdG8gZW5jb2RlLgotICAgKi8K
LSAgQENhbGxlZEJ5TmF0aXZlIFZpZGVvQ29kZWNTdGF0dXMgaW5pdEVuY29kZShTZXR0aW5ncyBz
ZXR0aW5ncywgQ2FsbGJhY2sgZW5jb2RlQ2FsbGJhY2spOwotCi0gIC8qKgotICAgKiBSZWxlYXNl
cyB0aGUgZW5jb2Rlci4gTm8gbW9yZSBjYWxscyB0byBlbmNvZGUgd2lsbCBiZSBtYWRlIGFmdGVy
IHRoaXMgY2FsbC4KLSAgICovCi0gIEBDYWxsZWRCeU5hdGl2ZSBWaWRlb0NvZGVjU3RhdHVzIHJl
bGVhc2UoKTsKLQotICAvKioKLSAgICogUmVxdWVzdHMgdGhlIGVuY29kZXIgdG8gZW5jb2RlIGEg
ZnJhbWUuCi0gICAqLwotICBAQ2FsbGVkQnlOYXRpdmUgVmlkZW9Db2RlY1N0YXR1cyBlbmNvZGUo
VmlkZW9GcmFtZSBmcmFtZSwgRW5jb2RlSW5mbyBpbmZvKTsKLQotICAvKiogU2V0cyB0aGUgYml0
cmF0ZSBhbGxvY2F0aW9uIGFuZCB0aGUgdGFyZ2V0IGZyYW1lcmF0ZSBmb3IgdGhlIGVuY29kZXIu
ICovCi0gIEBDYWxsZWRCeU5hdGl2ZSBWaWRlb0NvZGVjU3RhdHVzIHNldFJhdGVBbGxvY2F0aW9u
KEJpdHJhdGVBbGxvY2F0aW9uIGFsbG9jYXRpb24sIGludCBmcmFtZXJhdGUpOwotCi0gIC8qKiBB
bnkgZW5jb2RlciB0aGF0IHdhbnRzIHRvIHVzZSBXZWJSVEMgcHJvdmlkZWQgcXVhbGl0eSBzY2Fs
ZXIgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QuICovCi0gIEBDYWxsZWRCeU5hdGl2ZSBTY2Fs
aW5nU2V0dGluZ3MgZ2V0U2NhbGluZ1NldHRpbmdzKCk7Ci0KLSAgLyoqIFJldHVybnMgdGhlIGxp
c3Qgb2YgYml0cmF0ZSBsaW1pdHMuICovCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBkZWZhdWx0IFJl
c29sdXRpb25CaXRyYXRlTGltaXRzW10gZ2V0UmVzb2x1dGlvbkJpdHJhdGVMaW1pdHMoKSB7Ci0g
ICAgLy8gVE9ETyhzc2lsa2luKTogVXBkYXRlIGRvd25zdHJlYW0gcHJvamVjdHMgYW5kIHJlbW92
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotICAgIFJlc29sdXRpb25CaXRyYXRlTGltaXRzIGJp
dHJhdGVfbGltaXRzW10gPSB7fTsKLSAgICByZXR1cm4gYml0cmF0ZV9saW1pdHM7Ci0gIH0KLQot
ICAvKioKLSAgICogU2hvdWxkIHJldHVybiBhIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoZSBpbXBs
ZW1lbnRhdGlvbi4gR2V0cyBjYWxsZWQgb25jZSBhbmQgY2FjaGVkLiBNYXkgYmUKLSAgICogY2Fs
bGVkIGZyb20gYXJiaXRyYXJ5IHRocmVhZC4KLSAgICovCi0gIEBDYWxsZWRCeU5hdGl2ZSBTdHJp
bmcgZ2V0SW1wbGVtZW50YXRpb25OYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9W
aWRlb0VuY29kZXJGYWN0b3J5LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXJGYWN0b3J5
LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MGFhNzEwYWM5MjQ0MjNiMWE0
YzZhZmJkNDI0NmUxNTc4MTYxZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9FbmNvZGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2
L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci0K
LS8qKiBGYWN0b3J5IGZvciBjcmVhdGluZyBWaWRlb0VuY29kZXJzLiAqLwotcHVibGljIGludGVy
ZmFjZSBWaWRlb0VuY29kZXJGYWN0b3J5IHsKLSAgcHVibGljIGludGVyZmFjZSBWaWRlb0VuY29k
ZXJTZWxlY3RvciB7Ci0gICAgLyoqIENhbGxlZCB3aXRoIHRoZSBWaWRlb0NvZGVjSW5mbyBvZiB0
aGUgY3VycmVudGx5IHVzZWQgZW5jb2Rlci4gKi8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIlZpZGVv
RW5jb2RlclNlbGVjdG9yIikgdm9pZCBvbkN1cnJlbnRFbmNvZGVyKFZpZGVvQ29kZWNJbmZvIGlu
Zm8pOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgYXZhaWxhYmxl
IGJpdHJhdGUuIFJldHVybnMgbnVsbCBpZiB0aGUgZW5jb2RlciBzZWxlY3RvciBwcmVmZXJzIHRv
Ci0gICAgICoga2VlcCB0aGUgY3VycmVudCBlbmNvZGVyIG9yIGEgVmlkZW9Db2RlY0luZm8gaWYg
YSBuZXcgZW5jb2RlciBpcyBwcmVmZXJyZWQuCi0gICAgICovCi0gICAgQE51bGxhYmxlIEBDYWxs
ZWRCeU5hdGl2ZSgiVmlkZW9FbmNvZGVyU2VsZWN0b3IiKSBWaWRlb0NvZGVjSW5mbyBvbkF2YWls
YWJsZUJpdHJhdGUoaW50IGticHMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gdGhl
IGN1cnJlbnRseSB1c2VkIGVuY29kZXIgc2lnbmFsIGl0c2VsZiBhcyBicm9rZW4uIFJldHVybnMg
bnVsbCBpZiB0aGUgZW5jb2RlcgotICAgICAqIHNlbGVjdG9yIHByZWZlcnMgdG8ga2VlcCB0aGUg
Y3VycmVudCBlbmNvZGVyIG9yIGEgVmlkZW9Db2RlY0luZm8gaWYgYSBuZXcgZW5jb2RlciBpcwot
ICAgICAqIHByZWZlcnJlZC4KLSAgICAgKi8KLSAgICBATnVsbGFibGUgQENhbGxlZEJ5TmF0aXZl
KCJWaWRlb0VuY29kZXJTZWxlY3RvciIpIFZpZGVvQ29kZWNJbmZvIG9uRW5jb2RlckJyb2tlbigp
OwotICB9Ci0KLSAgLyoqIENyZWF0ZXMgYW4gZW5jb2RlciBmb3IgdGhlIGdpdmVuIHZpZGVvIGNv
ZGVjLiAqLwotICBATnVsbGFibGUgQENhbGxlZEJ5TmF0aXZlIFZpZGVvRW5jb2RlciBjcmVhdGVF
bmNvZGVyKFZpZGVvQ29kZWNJbmZvIGluZm8pOwotCi0gIC8qKgotICAgKiBFbnVtZXJhdGVzIHRo
ZSBsaXN0IG9mIHN1cHBvcnRlZCB2aWRlbyBjb2RlY3MuIFRoaXMgbWV0aG9kIHdpbGwgb25seSBi
ZSBjYWxsZWQgb25jZSBhbmQgdGhlCi0gICAqIHJlc3VsdCB3aWxsIGJlIGNhY2hlZC4KLSAgICov
Ci0gIEBDYWxsZWRCeU5hdGl2ZSBWaWRlb0NvZGVjSW5mb1tdIGdldFN1cHBvcnRlZENvZGVjcygp
OwotCi0gIC8qKgotICAgKiBFbnVtZXJhdGVzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCB2aWRlbyBj
b2RlY3MgdGhhdCBjYW4gYWxzbyBiZSB0YWdnZWQgd2l0aAotICAgKiBpbXBsZW1lbnRhdGlvbiBp
bmZvcm1hdGlvbi4gVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlIGFuZCB0aGUK
LSAgICogcmVzdWx0IHdpbGwgYmUgY2FjaGVkLgotICAgKi8KLSAgQENhbGxlZEJ5TmF0aXZlCi0g
IGRlZmF1bHQgVmlkZW9Db2RlY0luZm9bXSBnZXRJbXBsZW1lbnRhdGlvbnMoKSB7Ci0gICAgcmV0
dXJuIGdldFN1cHBvcnRlZENvZGVjcygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBW
aWRlb0VuY29kZXJTZWxlY3RvciBpZiBpbXBsZW1lbnRlZCBieSB0aGUgVmlkZW9FbmNvZGVyRmFj
dG9yeSwKLSAgICogbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBAQ2FsbGVkQnlOYXRpdmUKLSAg
ZGVmYXVsdCBWaWRlb0VuY29kZXJTZWxlY3RvciBnZXRFbmNvZGVyU2VsZWN0b3IoKSB7Ci0gICAg
cmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvRW5jb2Rl
ckZhbGxiYWNrLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXJGYWxsYmFjay5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTM2YjdjOTg5NDM1MjU3ZWRiZDIzYmVkNTk4
M2U5YzM5N2M4MmNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L2FwaS9vcmcvd2VicnRjL1ZpZGVvRW5jb2RlckZhbGxiYWNrLmphdmEKKysrIC9kZXYvbnVsbApA
QCAtMSwzNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLS8qKgotICogQSBjb21iaW5lZCB2aWRlbyBlbmNvZGVyIHRoYXQgZmFsbHMgYmFjayBvbiBh
IHNlY29uZGFyeSBlbmNvZGVyIGlmIHRoZSBwcmltYXJ5IGVuY29kZXIgZmFpbHMuCi0gKi8KLXB1
YmxpYyBjbGFzcyBWaWRlb0VuY29kZXJGYWxsYmFjayBleHRlbmRzIFdyYXBwZWROYXRpdmVWaWRl
b0VuY29kZXIgewotICBwcml2YXRlIGZpbmFsIFZpZGVvRW5jb2RlciBmYWxsYmFjazsKLSAgcHJp
dmF0ZSBmaW5hbCBWaWRlb0VuY29kZXIgcHJpbWFyeTsKLQotICBwdWJsaWMgVmlkZW9FbmNvZGVy
RmFsbGJhY2soVmlkZW9FbmNvZGVyIGZhbGxiYWNrLCBWaWRlb0VuY29kZXIgcHJpbWFyeSkgewot
ICAgIHRoaXMuZmFsbGJhY2sgPSBmYWxsYmFjazsKLSAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBsb25nIGNyZWF0ZU5hdGl2ZVZpZGVvRW5j
b2RlcigpIHsKLSAgICByZXR1cm4gbmF0aXZlQ3JlYXRlRW5jb2RlcihmYWxsYmFjaywgcHJpbWFy
eSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNIYXJkd2FyZUVuY29k
ZXIoKSB7Ci0gICAgcmV0dXJuIHByaW1hcnkuaXNIYXJkd2FyZUVuY29kZXIoKTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUVuY29kZXIoVmlkZW9FbmNv
ZGVyIGZhbGxiYWNrLCBWaWRlb0VuY29kZXIgcHJpbWFyeSk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3Jn
L3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9GaWxlUmVu
ZGVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVmODAzMDQ1OTNiYzZl
NzJhMGU3MzcyMzJjOTg1M2NjNjdlZjJmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJlci5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lk
Lm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWlt
cG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuQ291bnREb3duTGF0Y2g7Ci0KLS8qKgotICogQ2FuIGJlIHVzZWQgdG8gc2F2ZSB0aGUgdmlk
ZW8gZnJhbWVzIHRvIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb0ZpbGVSZW5kZXJlciBp
bXBsZW1lbnRzIFZpZGVvU2luayB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiVmlkZW9GaWxlUmVuZGVyZXIiOwotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlclRocmVhZCBy
ZW5kZXJUaHJlYWQ7Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxlciByZW5kZXJUaHJlYWRIYW5kbGVy
OwotICBwcml2YXRlIGZpbmFsIEhhbmRsZXJUaHJlYWQgZmlsZVRocmVhZDsKLSAgcHJpdmF0ZSBm
aW5hbCBIYW5kbGVyIGZpbGVUaHJlYWRIYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEZpbGVPdXRw
dXRTdHJlYW0gdmlkZW9PdXRGaWxlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBvdXRwdXRGaWxl
TmFtZTsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgb3V0cHV0RmlsZVdpZHRoOwotICBwcml2YXRlIGZp
bmFsIGludCBvdXRwdXRGaWxlSGVpZ2h0OwotICBwcml2YXRlIGZpbmFsIGludCBvdXRwdXRGcmFt
ZVNpemU7Ci0gIHByaXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBvdXRwdXRGcmFtZUJ1ZmZlcjsKLSAg
cHJpdmF0ZSBFZ2xCYXNlIGVnbEJhc2U7Ci0gIHByaXZhdGUgWXV2Q29udmVydGVyIHl1dkNvbnZl
cnRlcjsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVDb3VudDsKLQotICBwdWJsaWMgVmlkZW9GaWxlUmVu
ZGVyZXIoU3RyaW5nIG91dHB1dEZpbGUsIGludCBvdXRwdXRGaWxlV2lkdGgsIGludCBvdXRwdXRG
aWxlSGVpZ2h0LAotICAgICAgZmluYWwgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQpIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKChvdXRwdXRGaWxlV2lkdGggJSAyKSA9PSAxIHx8
IChvdXRwdXRGaWxlSGVpZ2h0ICUgMikgPT0gMSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbigiRG9lcyBub3Qgc3VwcG9ydCB1bmV2ZW4gd2lkdGggb3IgaGVpZ2h0
Iik7Ci0gICAgfQotCi0gICAgdGhpcy5vdXRwdXRGaWxlTmFtZSA9IG91dHB1dEZpbGU7Ci0gICAg
dGhpcy5vdXRwdXRGaWxlV2lkdGggPSBvdXRwdXRGaWxlV2lkdGg7Ci0gICAgdGhpcy5vdXRwdXRG
aWxlSGVpZ2h0ID0gb3V0cHV0RmlsZUhlaWdodDsKLQotICAgIG91dHB1dEZyYW1lU2l6ZSA9IG91
dHB1dEZpbGVXaWR0aCAqIG91dHB1dEZpbGVIZWlnaHQgKiAzIC8gMjsKLSAgICBvdXRwdXRGcmFt
ZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qob3V0cHV0RnJhbWVTaXplKTsKLQot
ICAgIHZpZGVvT3V0RmlsZSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dHB1dEZpbGUpOwotICAg
IHZpZGVvT3V0RmlsZS53cml0ZSgKLSAgICAgICAgKCJZVVY0TVBFRzIgQzQyMCBXIiArIG91dHB1
dEZpbGVXaWR0aCArICIgSCIgKyBvdXRwdXRGaWxlSGVpZ2h0ICsgIiBJcCBGMzA6MSBBMToxXG4i
KQotICAgICAgICAgICAgLmdldEJ5dGVzKENoYXJzZXQuZm9yTmFtZSgiVVMtQVNDSUkiKSkpOwot
Ci0gICAgcmVuZGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoVEFHICsgIlJlbmRlclRocmVh
ZCIpOwotICAgIHJlbmRlclRocmVhZC5zdGFydCgpOwotICAgIHJlbmRlclRocmVhZEhhbmRsZXIg
PSBuZXcgSGFuZGxlcihyZW5kZXJUaHJlYWQuZ2V0TG9vcGVyKCkpOwotCi0gICAgZmlsZVRocmVh
ZCA9IG5ldyBIYW5kbGVyVGhyZWFkKFRBRyArICJGaWxlVGhyZWFkIik7Ci0gICAgZmlsZVRocmVh
ZC5zdGFydCgpOwotICAgIGZpbGVUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoZmlsZVRocmVh
ZC5nZXRMb29wZXIoKSk7Ci0KLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1
cHRpYmx5KHJlbmRlclRocmVhZEhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBlZ2xCYXNlID0gRWdsQmFz
ZS5jcmVhdGUoc2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAg
ICAgICAgZWdsQmFzZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgICAgIGVnbEJh
c2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgeXV2Q29udmVydGVyID0gbmV3IFl1dkNvbnZlcnRl
cigpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgIGZyYW1lLnJldGFpbigpOwotICAgIHJl
bmRlclRocmVhZEhhbmRsZXIucG9zdCgoKSAtPiByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKGZy
YW1lKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZChW
aWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAgZmluYWwgVmlkZW9GcmFtZS5CdWZmZXIgYnVmZmVyID0g
ZnJhbWUuZ2V0QnVmZmVyKCk7Ci0KLSAgICAvLyBJZiB0aGUgZnJhbWUgaXMgcm90YXRlZCwgaXQg
d2lsbCBiZSBhcHBsaWVkIGFmdGVyIGNyb3BBbmRTY2FsZS4gVGhlcmVmb3JlLCBpZiB0aGUgZnJh
bWUgaXMKLSAgICAvLyByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMsIHN3YXAgd2lkdGggYW5kIGhlaWdo
dC4KLSAgICBmaW5hbCBpbnQgdGFyZ2V0V2lkdGggPSBmcmFtZS5nZXRSb3RhdGlvbigpICUgMTgw
ID09IDAgPyBvdXRwdXRGaWxlV2lkdGggOiBvdXRwdXRGaWxlSGVpZ2h0OwotICAgIGZpbmFsIGlu
dCB0YXJnZXRIZWlnaHQgPSBmcmFtZS5nZXRSb3RhdGlvbigpICUgMTgwID09IDAgPyBvdXRwdXRG
aWxlSGVpZ2h0IDogb3V0cHV0RmlsZVdpZHRoOwotCi0gICAgZmluYWwgZmxvYXQgZnJhbWVBc3Bl
Y3RSYXRpbyA9IChmbG9hdCkgYnVmZmVyLmdldFdpZHRoKCkgLyAoZmxvYXQpIGJ1ZmZlci5nZXRI
ZWlnaHQoKTsKLSAgICBmaW5hbCBmbG9hdCBmaWxlQXNwZWN0UmF0aW8gPSAoZmxvYXQpIHRhcmdl
dFdpZHRoIC8gKGZsb2F0KSB0YXJnZXRIZWlnaHQ7Ci0KLSAgICAvLyBDYWxjdWxhdGUgY3JvcHBp
bmcgdG8gZXF1YWxpemUgdGhlIGFzcGVjdCByYXRpby4KLSAgICBpbnQgY3JvcFdpZHRoID0gYnVm
ZmVyLmdldFdpZHRoKCk7Ci0gICAgaW50IGNyb3BIZWlnaHQgPSBidWZmZXIuZ2V0SGVpZ2h0KCk7
Ci0gICAgaWYgKGZpbGVBc3BlY3RSYXRpbyA+IGZyYW1lQXNwZWN0UmF0aW8pIHsKLSAgICAgIGNy
b3BIZWlnaHQgPSAoaW50KSAoY3JvcEhlaWdodCAqIChmcmFtZUFzcGVjdFJhdGlvIC8gZmlsZUFz
cGVjdFJhdGlvKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNyb3BXaWR0aCA9IChpbnQpIChjcm9w
V2lkdGggKiAoZmlsZUFzcGVjdFJhdGlvIC8gZnJhbWVBc3BlY3RSYXRpbykpOwotICAgIH0KLQot
ICAgIGZpbmFsIGludCBjcm9wWCA9IChidWZmZXIuZ2V0V2lkdGgoKSAtIGNyb3BXaWR0aCkgLyAy
OwotICAgIGZpbmFsIGludCBjcm9wWSA9IChidWZmZXIuZ2V0SGVpZ2h0KCkgLSBjcm9wSGVpZ2h0
KSAvIDI7Ci0KLSAgICBmaW5hbCBWaWRlb0ZyYW1lLkJ1ZmZlciBzY2FsZWRCdWZmZXIgPQotICAg
ICAgICBidWZmZXIuY3JvcEFuZFNjYWxlKGNyb3BYLCBjcm9wWSwgY3JvcFdpZHRoLCBjcm9wSGVp
Z2h0LCB0YXJnZXRXaWR0aCwgdGFyZ2V0SGVpZ2h0KTsKLSAgICBmcmFtZS5yZWxlYXNlKCk7Ci0K
LSAgICBmaW5hbCBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgaTQyMCA9IHNjYWxlZEJ1ZmZlci50b0k0
MjAoKTsKLSAgICBzY2FsZWRCdWZmZXIucmVsZWFzZSgpOwotCi0gICAgZmlsZVRocmVhZEhhbmRs
ZXIucG9zdCgoKSAtPiB7Ci0gICAgICBZdXZIZWxwZXIuSTQyMFJvdGF0ZShpNDIwLmdldERhdGFZ
KCksIGk0MjAuZ2V0U3RyaWRlWSgpLCBpNDIwLmdldERhdGFVKCksIGk0MjAuZ2V0U3RyaWRlVSgp
LAotICAgICAgICAgIGk0MjAuZ2V0RGF0YVYoKSwgaTQyMC5nZXRTdHJpZGVWKCksIG91dHB1dEZy
YW1lQnVmZmVyLCBpNDIwLmdldFdpZHRoKCksIGk0MjAuZ2V0SGVpZ2h0KCksCi0gICAgICAgICAg
ZnJhbWUuZ2V0Um90YXRpb24oKSk7Ci0gICAgICBpNDIwLnJlbGVhc2UoKTsKLQotICAgICAgdHJ5
IHsKLSAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKCJGUkFNRVxuIi5nZXRCeXRlcyhDaGFyc2V0
LmZvck5hbWUoIlVTLUFTQ0lJIikpKTsKLSAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKAotICAg
ICAgICAgICAgb3V0cHV0RnJhbWVCdWZmZXIuYXJyYXkoKSwgb3V0cHV0RnJhbWVCdWZmZXIuYXJy
YXlPZmZzZXQoKSwgb3V0cHV0RnJhbWVTaXplKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yIHdyaXRpbmcg
dmlkZW8gdG8gZGlzayIsIGUpOwotICAgICAgfQotICAgICAgZnJhbWVDb3VudCsrOwotICAgIH0p
OwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcy4gQWxsIGFscmVhZHkg
cG9zdGVkIGZyYW1lcyB3aWxsIGJlIHJlbmRlcmVkIGZpcnN0LgotICAgKi8KLSAgcHVibGljIHZv
aWQgcmVsZWFzZSgpIHsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBjbGVhbnVwQmFycmllciA9
IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QoKCkg
LT4gewotICAgICAgeXV2Q29udmVydGVyLnJlbGVhc2UoKTsKLSAgICAgIGVnbEJhc2UucmVsZWFz
ZSgpOwotICAgICAgcmVuZGVyVGhyZWFkLnF1aXQoKTsKLSAgICAgIGNsZWFudXBCYXJyaWVyLmNv
dW50RG93bigpOwotICAgIH0pOwotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5
KGNsZWFudXBCYXJyaWVyKTsKLSAgICBmaWxlVGhyZWFkSGFuZGxlci5wb3N0KCgpIC0+IHsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIHZpZGVvT3V0RmlsZS5jbG9zZSgpOwotICAgICAgICBMb2dnaW5n
LmQoVEFHLAotICAgICAgICAgICAgIlZpZGVvIHdyaXR0ZW4gdG8gZGlzayBhcyAiICsgb3V0cHV0
RmlsZU5hbWUgKyAiLiBUaGUgbnVtYmVyIG9mIGZyYW1lcyBpcyAiICsgZnJhbWVDb3VudAotICAg
ICAgICAgICAgICAgICsgIiBhbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGZyYW1lcyBhcmUgIiAr
IG91dHB1dEZpbGVXaWR0aCArICJ4IgotICAgICAgICAgICAgICAgICsgb3V0cHV0RmlsZUhlaWdo
dCArICIuIik7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBjbG9zaW5nIG91dHB1dCBmaWxlIiwgZSk7Ci0g
ICAgICB9Ci0gICAgICBmaWxlVGhyZWFkLnF1aXQoKTsKLSAgICB9KTsKLSAgICB0cnkgewotICAg
ICAgZmlsZVRocmVhZC5qb2luKCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24g
ZSkgewotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5pbnRlcnJ1cHQoKTsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJJbnRlcnJ1cHRlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgd3JpdGUgdG8g
ZGlzayB0byBjb21wbGV0ZS4iLCBlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcv
d2VicnRjL1ZpZGVvRnJhbWUuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvRnJhbWUuamF2YQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhMGQ0ZWVjYmUwODMxOTg5NzMwNTlhMTRjMDU1
MTg1NjZkYTRkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9WaWRlb0ZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzExRXh0
OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVm
ZmVyOwotCi0vKioKLSAqIEphdmEgdmVyc2lvbiBvZiB3ZWJydGM6OlZpZGVvRnJhbWUgYW5kIHdl
YnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlci4gQSBkaWZmZXJlbmNlIGZyb20gdGhlIEMrKwotICogdmVy
c2lvbiBpcyB0aGF0IG5vIGV4cGxpY2l0IHRhZyBpcyB1c2VkLCBhbmQgY2xpZW50cyBhcmUgZXhw
ZWN0ZWQgdG8gdXNlICdpbnN0YW5jZW9mJyB0byBmaW5kIHRoZQotICogcmlnaHQgc3ViY2xhc3Mg
b2YgdGhlIGJ1ZmZlci4gVGhpcyBhbGxvd3MgY2xpZW50cyB0byBjcmVhdGUgY3VzdG9tIFZpZGVv
RnJhbWUuQnVmZmVyIGluCi0gKiBhcmJpdHJhcnkgZm9ybWF0IGluIHRoZWlyIGN1c3RvbSBWaWRl
b1NvdXJjZXMsIGFuZCB0aGVuIGNhc3QgaXQgYmFjayB0byB0aGUgY29ycmVjdCBzdWJjbGFzcyBp
bgotICogdGhlaXIgY3VzdG9tIFZpZGVvU2lua3MuIEFsbCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBh
bHNvIGltcGxlbWVudCB0aGUgdG9JNDIwKCkgZnVuY3Rpb24sCi0gKiBjb252ZXJ0aW5nIGZyb20g
dGhlIHVuZGVybHlpbmcgcmVwcmVzZW50YXRpb24gaWYgbmVjZXNzYXJ5LiBJNDIwIGlzIHRoZSBt
b3N0IHdpZGVseSBhY2NlcHRlZAotICogZm9ybWF0IGFuZCBzZXJ2ZXMgYXMgYSBmYWxsYmFjayBm
b3IgdmlkZW8gc2lua3MgdGhhdCBjYW4gb25seSBoYW5kbGUgSTQyMCwgZS5nLiB0aGUgaW50ZXJu
YWwKLSAqIFdlYlJUQyBzb2Z0d2FyZSBlbmNvZGVycy4KLSAqLwotcHVibGljIGNsYXNzIFZpZGVv
RnJhbWUgaW1wbGVtZW50cyBSZWZDb3VudGVkIHsKLSAgLyoqCi0gICAqIEltcGxlbWVudHMgaW1h
Z2Ugc3RvcmFnZSBtZWRpdW0uIE1pZ2h0IGJlIGZvciBleGFtcGxlIGFuIE9wZW5HTCB0ZXh0dXJl
IG9yIGEgbWVtb3J5IHJlZ2lvbgotICAgKiBjb250YWluaW5nIEk0MjAtZGF0YS4KLSAgICoKLSAg
ICogPHA+UmVmZXJlbmNlIGNvdW50aW5nIGlzIG5lZWRlZCBzaW5jZSBhIHZpZGVvIGJ1ZmZlciBj
YW4gYmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVmlkZW9TaW5rcywKLSAgICogYW5kIHRoZSBi
dWZmZXIgbmVlZHMgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIFZpZGVvU291cmNlIGFzIHNvb24gYXMg
YWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEJ1ZmZl
ciBleHRlbmRzIFJlZkNvdW50ZWQgewotICAgIC8qKgotICAgICAqIFJlc29sdXRpb24gb2YgdGhl
IGJ1ZmZlciBpbiBwaXhlbHMuCi0gICAgICovCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJCdWZmZXIi
KSBpbnQgZ2V0V2lkdGgoKTsKLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkJ1ZmZlciIpIGludCBnZXRI
ZWlnaHQoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtZW1vcnktYmFja2VkIGZyYW1l
IGluIEk0MjAgZm9ybWF0LiBJZiB0aGUgcGl4ZWwgZGF0YSBpcyBpbiBhbm90aGVyIGZvcm1hdCwg
YQotICAgICAqIGNvbnZlcnNpb24gd2lsbCB0YWtlIHBsYWNlLiBBbGwgaW1wbGVtZW50YXRpb25z
IG11c3QgcHJvdmlkZSBhIGZhbGxiYWNrIHRvIEk0MjAgZm9yCi0gICAgICogY29tcGF0aWJpbGl0
eSB3aXRoIGUuZy4gdGhlIGludGVybmFsIFdlYlJUQyBzb2Z0d2FyZSBlbmNvZGVycy4KLSAgICAg
Ki8KLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkJ1ZmZlciIpIEk0MjBCdWZmZXIgdG9JNDIwKCk7Ci0K
LSAgICBAT3ZlcnJpZGUgQENhbGxlZEJ5TmF0aXZlKCJCdWZmZXIiKSB2b2lkIHJldGFpbigpOwot
ICAgIEBPdmVycmlkZSBAQ2FsbGVkQnlOYXRpdmUoIkJ1ZmZlciIpIHZvaWQgcmVsZWFzZSgpOwot
Ci0gICAgLyoqCi0gICAgICogQ3JvcHMgYSByZWdpb24gZGVmaW5lZCBieSB8Y3JvcHh8LCB8Y3Jv
cFl8LCB8Y3JvcFdpZHRofCBhbmQgfGNyb3BIZWlnaHR8LiBTY2FsZXMgaXQgdG8gc2l6ZQotICAg
ICAqIHxzY2FsZVdpZHRofCB4IHxzY2FsZUhlaWdodHwuCi0gICAgICovCi0gICAgQENhbGxlZEJ5
TmF0aXZlKCJCdWZmZXIiKQotICAgIEJ1ZmZlciBjcm9wQW5kU2NhbGUoCi0gICAgICAgIGludCBj
cm9wWCwgaW50IGNyb3BZLCBpbnQgY3JvcFdpZHRoLCBpbnQgY3JvcEhlaWdodCwgaW50IHNjYWxl
V2lkdGgsIGludCBzY2FsZUhlaWdodCk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJmYWNlIGZv
ciBJNDIwIGJ1ZmZlcnMuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEk0MjBCdWZmZXIgZXh0
ZW5kcyBCdWZmZXIgewotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBkaXJlY3QgQnl0ZUJ1ZmZl
ciBjb250YWluaW5nIFktcGxhbmUgZGF0YS4gVGhlIGJ1ZmZlciBjYXBhY2l0eSBpcyBhdCBsZWFz
dAotICAgICAqIGdldFN0cmlkZVkoKSAqIGdldEhlaWdodCgpIGJ5dGVzLiBUaGUgcG9zaXRpb24g
b2YgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBpZ25vcmVkIGFuZCBtdXN0Ci0gICAgICogYmUgMC4g
Q2FsbGVycyBtYXkgbXV0YXRlIHRoZSBCeXRlQnVmZmVyIChlZy4gdGhyb3VnaCByZWxhdGl2ZS1y
ZWFkIG9wZXJhdGlvbnMpLCBzbwotICAgICAqIGltcGxlbWVudGF0aW9ucyBtdXN0IHJldHVybiBh
IG5ldyBCeXRlQnVmZmVyIG9yIHNsaWNlIGZvciBlYWNoIGNhbGwuCi0gICAgICovCi0gICAgQENh
bGxlZEJ5TmF0aXZlKCJJNDIwQnVmZmVyIikgQnl0ZUJ1ZmZlciBnZXREYXRhWSgpOwotICAgIC8q
KgotICAgICAqIFJldHVybnMgYSBkaXJlY3QgQnl0ZUJ1ZmZlciBjb250YWluaW5nIFUtcGxhbmUg
ZGF0YS4gVGhlIGJ1ZmZlciBjYXBhY2l0eSBpcyBhdCBsZWFzdAotICAgICAqIGdldFN0cmlkZVUo
KSAqICgoZ2V0SGVpZ2h0KCkgKyAxKSAvIDIpIGJ5dGVzLiBUaGUgcG9zaXRpb24gb2YgdGhlIHJl
dHVybmVkIGJ1ZmZlciBpcyBpZ25vcmVkCi0gICAgICogYW5kIG11c3QgYmUgMC4gQ2FsbGVycyBt
YXkgbXV0YXRlIHRoZSBCeXRlQnVmZmVyIChlZy4gdGhyb3VnaCByZWxhdGl2ZS1yZWFkIG9wZXJh
dGlvbnMpLCBzbwotICAgICAqIGltcGxlbWVudGF0aW9ucyBtdXN0IHJldHVybiBhIG5ldyBCeXRl
QnVmZmVyIG9yIHNsaWNlIGZvciBlYWNoIGNhbGwuCi0gICAgICovCi0gICAgQENhbGxlZEJ5TmF0
aXZlKCJJNDIwQnVmZmVyIikgQnl0ZUJ1ZmZlciBnZXREYXRhVSgpOwotICAgIC8qKgotICAgICAq
IFJldHVybnMgYSBkaXJlY3QgQnl0ZUJ1ZmZlciBjb250YWluaW5nIFYtcGxhbmUgZGF0YS4gVGhl
IGJ1ZmZlciBjYXBhY2l0eSBpcyBhdCBsZWFzdAotICAgICAqIGdldFN0cmlkZVYoKSAqICgoZ2V0
SGVpZ2h0KCkgKyAxKSAvIDIpIGJ5dGVzLiBUaGUgcG9zaXRpb24gb2YgdGhlIHJldHVybmVkIGJ1
ZmZlciBpcyBpZ25vcmVkCi0gICAgICogYW5kIG11c3QgYmUgMC4gQ2FsbGVycyBtYXkgbXV0YXRl
IHRoZSBCeXRlQnVmZmVyIChlZy4gdGhyb3VnaCByZWxhdGl2ZS1yZWFkIG9wZXJhdGlvbnMpLCBz
bwotICAgICAqIGltcGxlbWVudGF0aW9ucyBtdXN0IHJldHVybiBhIG5ldyBCeXRlQnVmZmVyIG9y
IHNsaWNlIGZvciBlYWNoIGNhbGwuCi0gICAgICovCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJJNDIw
QnVmZmVyIikgQnl0ZUJ1ZmZlciBnZXREYXRhVigpOwotCi0gICAgQENhbGxlZEJ5TmF0aXZlKCJJ
NDIwQnVmZmVyIikgaW50IGdldFN0cmlkZVkoKTsKLSAgICBAQ2FsbGVkQnlOYXRpdmUoIkk0MjBC
dWZmZXIiKSBpbnQgZ2V0U3RyaWRlVSgpOwotICAgIEBDYWxsZWRCeU5hdGl2ZSgiSTQyMEJ1ZmZl
ciIpIGludCBnZXRTdHJpZGVWKCk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJmYWNlIGZvciBi
dWZmZXJzIHRoYXQgYXJlIHN0b3JlZCBhcyBhIHNpbmdsZSB0ZXh0dXJlLCBlaXRoZXIgaW4gT0VT
IG9yIFJHQiBmb3JtYXQuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIFRleHR1cmVCdWZmZXIg
ZXh0ZW5kcyBCdWZmZXIgewotICAgIGVudW0gVHlwZSB7Ci0gICAgICBPRVMoR0xFUzExRXh0LkdM
X1RFWFRVUkVfRVhURVJOQUxfT0VTKSwKLSAgICAgIFJHQihHTEVTMjAuR0xfVEVYVFVSRV8yRCk7
Ci0KLSAgICAgIHByaXZhdGUgZmluYWwgaW50IGdsVGFyZ2V0OwotCi0gICAgICBwcml2YXRlIFR5
cGUoZmluYWwgaW50IGdsVGFyZ2V0KSB7Ci0gICAgICAgIHRoaXMuZ2xUYXJnZXQgPSBnbFRhcmdl
dDsKLSAgICAgIH0KLQotICAgICAgcHVibGljIGludCBnZXRHbFRhcmdldCgpIHsKLSAgICAgICAg
cmV0dXJuIGdsVGFyZ2V0OwotICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgZ2V0VHlwZSgpOwot
ICAgIGludCBnZXRUZXh0dXJlSWQoKTsKLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSB0
cmFuc2Zvcm0gbWF0cml4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZnJhbWUuIFRoaXMgdHJhbnNmb3Jt
IG1hdHJpeCBtYXBzIDJECi0gICAgICogaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMgb2YgdGhlIGZv
cm0gKHMsIHQsIDEpIHdpdGggcyBhbmQgdCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFswLCAxXSB0
bwotICAgICAqIHRoZSBjb29yZGluYXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc2FtcGxlIHRo
YXQgbG9jYXRpb24gZnJvbSB0aGUgYnVmZmVyLgotICAgICAqLwotICAgIE1hdHJpeCBnZXRUcmFu
c2Zvcm1NYXRyaXgoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgQnVmZmVyIGJ1ZmZlcjsKLSAg
cHJpdmF0ZSBmaW5hbCBpbnQgcm90YXRpb247Ci0gIHByaXZhdGUgZmluYWwgbG9uZyB0aW1lc3Rh
bXBOczsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyBWaWRlb0ZyYW1lIGJhY2tlZCBi
eSB0aGUgZ2l2ZW4ge0Bjb2RlIGJ1ZmZlcn0uCi0gICAqCi0gICAqIEBub3RlIE93bmVyc2hpcCBv
ZiB0aGUgYnVmZmVyIG9iamVjdCBpcyB0cmFuZmVycmVkIHRvIHRoZSBuZXcgVmlkZW9GcmFtZS4K
LSAgICovCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgVmlkZW9GcmFtZShCdWZmZXIgYnVm
ZmVyLCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICBpZiAoYnVmZmVyID09
IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImJ1ZmZl
ciBub3QgYWxsb3dlZCB0byBiZSBudWxsIik7Ci0gICAgfQotICAgIGlmIChyb3RhdGlvbiAlIDkw
ICE9IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvdGF0
aW9uIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5MCIpOwotICAgIH0KLSAgICB0aGlzLmJ1ZmZlciA9
IGJ1ZmZlcjsKLSAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb247Ci0gICAgdGhpcy50aW1lc3Rh
bXBOcyA9IHRpbWVzdGFtcE5zOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBC
dWZmZXIgZ2V0QnVmZmVyKCkgewotICAgIHJldHVybiBidWZmZXI7Ci0gIH0KLQotICAvKioKLSAg
ICogUm90YXRpb24gb2YgdGhlIGZyYW1lIGluIGRlZ3JlZXMuCi0gICAqLwotICBAQ2FsbGVkQnlO
YXRpdmUKLSAgcHVibGljIGludCBnZXRSb3RhdGlvbigpIHsKLSAgICByZXR1cm4gcm90YXRpb247
Ci0gIH0KLQotICAvKioKLSAgICogVGltZXN0YW1wIG9mIHRoZSBmcmFtZSBpbiBuYW5vIHNlY29u
ZHMuCi0gICAqLwotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIGxvbmcgZ2V0VGltZXN0YW1w
TnMoKSB7Ci0gICAgcmV0dXJuIHRpbWVzdGFtcE5zOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRS
b3RhdGVkV2lkdGgoKSB7Ci0gICAgaWYgKHJvdGF0aW9uICUgMTgwID09IDApIHsKLSAgICAgIHJl
dHVybiBidWZmZXIuZ2V0V2lkdGgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlci5nZXRIZWln
aHQoKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0Um90YXRlZEhlaWdodCgpIHsKLSAgICBpZiAo
cm90YXRpb24gJSAxODAgPT0gMCkgewotICAgICAgcmV0dXJuIGJ1ZmZlci5nZXRIZWlnaHQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlci5nZXRXaWR0aCgpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHJldGFpbigpIHsKLSAgICBidWZmZXIucmV0YWluKCk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7
Ci0gICAgYnVmZmVyLnJlbGVhc2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
VmlkZW9GcmFtZURyYXdlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9GcmFtZURyYXdlci5qYXZh
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmMxYzRmYjBlMTQyZDU0NzhmNmJkNmQ0
MWRiZmM4NTFmYmVhNzA0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvRnJhbWVEcmF3ZXIuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDI0MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKLWltcG9ydCBhbmRyb2lkLmdyYXBo
aWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lk
LnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVy
OwotCi0vKioKLSAqIEhlbHBlciBjbGFzcyB0byBkcmF3IFZpZGVvRnJhbWVzLiBDYWxscyBlaXRo
ZXIgZHJhd2VyLmRyYXdPZXMsIGRyYXdlci5kcmF3UmdiLCBvcgotICogZHJhd2VyLmRyYXdZdXYg
ZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSBidWZmZXIuIFRoZSBmcmFtZSB3aWxsIGJlIHJl
bmRlcmVkIHdpdGggcm90YXRpb24KLSAqIHRha2VuIGludG8gYWNjb3VudC4gWW91IGNhbiBzdXBw
bHkgYW4gYWRkaXRpb25hbCByZW5kZXIgbWF0cml4IGZvciBjdXN0b20gdHJhbnNmb3JtYXRpb25z
LgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9GcmFtZURyYXdlciB7Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgU3RyaW5nIFRBRyA9ICJWaWRlb0ZyYW1lRHJhd2VyIjsKLSAgLyoqCi0gICAqIERyYXdz
IGEgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyLiBDYWxscyBlaXRoZXIgZHJhd2VyLmRyYXdPZXMg
b3IgZHJhd2VyLmRyYXdSZ2IKLSAgICogZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSBidWZm
ZXIuIFlvdSBjYW4gc3VwcGx5IGFuIGFkZGl0aW9uYWwgcmVuZGVyIG1hdHJpeC4gVGhpcyBpcwot
ICAgKiB1c2VkIG11bHRpcGxpZWQgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNmb3JtYXRpb24gbWF0
cml4IG9mIHRoZSBmcmFtZS4gKE0gPSByZW5kZXJNYXRyaXggKgotICAgKiB0cmFuc2Zvcm1hdGlv
bk1hdHJpeCkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkcmF3VGV4dHVyZShSZW5kZXJl
ckNvbW1vbi5HbERyYXdlciBkcmF3ZXIsIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZlciBidWZmZXIs
Ci0gICAgICBNYXRyaXggcmVuZGVyTWF0cml4LCBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVp
Z2h0LCBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLAotICAgICAgaW50IHZpZXdwb3J0V2lk
dGgsIGludCB2aWV3cG9ydEhlaWdodCkgewotICAgIE1hdHJpeCBmaW5hbE1hdHJpeCA9IG5ldyBN
YXRyaXgoYnVmZmVyLmdldFRyYW5zZm9ybU1hdHJpeCgpKTsKLSAgICBmaW5hbE1hdHJpeC5wcmVD
b25jYXQocmVuZGVyTWF0cml4KTsKLSAgICBmbG9hdFtdIGZpbmFsR2xNYXRyaXggPSBSZW5kZXJl
ckNvbW1vbi5jb252ZXJ0TWF0cml4RnJvbUFuZHJvaWRHcmFwaGljc01hdHJpeChmaW5hbE1hdHJp
eCk7Ci0gICAgc3dpdGNoIChidWZmZXIuZ2V0VHlwZSgpKSB7Ci0gICAgICBjYXNlIE9FUzoKLSAg
ICAgICAgZHJhd2VyLmRyYXdPZXMoYnVmZmVyLmdldFRleHR1cmVJZCgpLCBmaW5hbEdsTWF0cml4
LCBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgdmlld3BvcnRYLAotICAgICAgICAgICAgdmlld3Bv
cnRZLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBSR0I6Ci0gICAgICAgIGRyYXdlci5kcmF3UmdiKGJ1ZmZlci5nZXRUZXh0dXJlSWQo
KSwgZmluYWxHbE1hdHJpeCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHZpZXdwb3J0WCwKLSAg
ICAgICAgICAgIHZpZXdwb3J0WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJVbmtub3duIHRleHR1cmUgdHlwZS4iKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAg
ICogSGVscGVyIGNsYXNzIGZvciB1cGxvYWRpbmcgWVVWIGJ5dGVidWZmZXIgZnJhbWVzIHRvIHRl
eHR1cmVzIHRoYXQgaGFuZGxlcyBzdHJpZGUgPiB3aWR0aC4gVGhpcwotICAgKiBjbGFzcyBrZWVw
cyBhbiBpbnRlcm5hbCBCeXRlQnVmZmVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25z
IGZvciBpbnRlcm1lZGlhdGUgY29waWVzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3Mg
WXV2VXBsb2FkZXIgewotICAgIC8vIEludGVybWVkaWF0ZSBjb3B5IGJ1ZmZlciBmb3IgdXBsb2Fk
aW5nIHl1diBmcmFtZXMgdGhhdCBhcmUgbm90IHBhY2tlZCwgaS5lLiBzdHJpZGUgPiB3aWR0aC4K
LSAgICAvLyBUT0RPKG1hZ2plZCk6IEludmVzdGlnYXRlIHdoZW4gR0xfVU5QQUNLX1JPV19MRU5H
VEggaXMgYXZhaWxhYmxlLCBvciBtYWtlIGEgY3VzdG9tIHNoYWRlcgotICAgIC8vIHRoYXQgaGFu
ZGxlcyBzdHJpZGUgYW5kIGNvbXBhcmUgcGVyZm9ybWFuY2Ugd2l0aCBpbnRlcm1lZGlhdGUgY29w
eS4KLSAgICBATnVsbGFibGUgcHJpdmF0ZSBCeXRlQnVmZmVyIGNvcHlCdWZmZXI7Ci0gICAgQE51
bGxhYmxlIHByaXZhdGUgaW50W10geXV2VGV4dHVyZXM7Ci0KLSAgICAvKioKLSAgICAgKiBVcGxv
YWQgfHBsYW5lc3wgaW50byBPcGVuR0wgdGV4dHVyZXMsIHRha2luZyBzdHJpZGUgaW50byBjb25z
aWRlcmF0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBBcnJheSBvZiB0aHJlZSB0ZXh0dXJl
IGluZGljZXMgY29ycmVzcG9uZGluZyB0byBZLSwgVS0sIGFuZCBWLXBsYW5lIHJlc3BlY3RpdmVs
eS4KLSAgICAgKi8KLSAgICBATnVsbGFibGUKLSAgICBwdWJsaWMgaW50W10gdXBsb2FkWXV2RGF0
YShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludFtdIHN0cmlkZXMsIEJ5dGVCdWZmZXJbXSBwbGFu
ZXMpIHsKLSAgICAgIGZpbmFsIGludFtdIHBsYW5lV2lkdGhzID0gbmV3IGludFtdIHt3aWR0aCwg
d2lkdGggLyAyLCB3aWR0aCAvIDJ9OwotICAgICAgZmluYWwgaW50W10gcGxhbmVIZWlnaHRzID0g
bmV3IGludFtdIHtoZWlnaHQsIGhlaWdodCAvIDIsIGhlaWdodCAvIDJ9OwotICAgICAgLy8gTWFr
ZSBhIGZpcnN0IHBhc3MgdG8gc2VlIGlmIHdlIG5lZWQgYSB0ZW1wb3JhcnkgY29weSBidWZmZXIu
Ci0gICAgICBpbnQgY29weUNhcGFjaXR5TmVlZGVkID0gMDsKLSAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmIChzdHJpZGVzW2ldID4gcGxhbmVXaWR0aHNbaV0p
IHsKLSAgICAgICAgICBjb3B5Q2FwYWNpdHlOZWVkZWQgPSBNYXRoLm1heChjb3B5Q2FwYWNpdHlO
ZWVkZWQsIHBsYW5lV2lkdGhzW2ldICogcGxhbmVIZWlnaHRzW2ldKTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgICAgLy8gQWxsb2NhdGUgY29weSBidWZmZXIgaWYgbmVjZXNzYXJ5LgotICAgICAg
aWYgKGNvcHlDYXBhY2l0eU5lZWRlZCA+IDAKLSAgICAgICAgICAmJiAoY29weUJ1ZmZlciA9PSBu
dWxsIHx8IGNvcHlCdWZmZXIuY2FwYWNpdHkoKSA8IGNvcHlDYXBhY2l0eU5lZWRlZCkpIHsKLSAg
ICAgICAgY29weUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoY29weUNhcGFjaXR5
TmVlZGVkKTsKLSAgICAgIH0KLSAgICAgIC8vIE1ha2Ugc3VyZSBZVVYgdGV4dHVyZXMgYXJlIGFs
bG9jYXRlZC4KLSAgICAgIGlmICh5dXZUZXh0dXJlcyA9PSBudWxsKSB7Ci0gICAgICAgIHl1dlRl
eHR1cmVzID0gbmV3IGludFszXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKysp
IHsKLSAgICAgICAgICB5dXZUZXh0dXJlc1tpXSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBVcGxvYWQg
ZWFjaCBwbGFuZS4KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAg
IEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICAg
IEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB5dXZUZXh0dXJlc1tp
XSk7Ci0gICAgICAgIC8vIEdMRVMgb25seSBhY2NlcHRzIHBhY2tlZCBkYXRhLCBpLmUuIHN0cmlk
ZSA9PSBwbGFuZVdpZHRoLgotICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIHBhY2tlZEJ5dGVCdWZm
ZXI7Ci0gICAgICAgIGlmIChzdHJpZGVzW2ldID09IHBsYW5lV2lkdGhzW2ldKSB7Ci0gICAgICAg
ICAgLy8gSW5wdXQgaXMgcGFja2VkIGFscmVhZHkuCi0gICAgICAgICAgcGFja2VkQnl0ZUJ1ZmZl
ciA9IHBsYW5lc1tpXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBZdXZIZWxwZXIuY29w
eVBsYW5lKAotICAgICAgICAgICAgICBwbGFuZXNbaV0sIHN0cmlkZXNbaV0sIGNvcHlCdWZmZXIs
IHBsYW5lV2lkdGhzW2ldLCBwbGFuZVdpZHRoc1tpXSwgcGxhbmVIZWlnaHRzW2ldKTsKLSAgICAg
ICAgICBwYWNrZWRCeXRlQnVmZmVyID0gY29weUJ1ZmZlcjsKLSAgICAgICAgfQotICAgICAgICBH
TEVTMjAuZ2xUZXhJbWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfTFVN
SU5BTkNFLCBwbGFuZVdpZHRoc1tpXSwKLSAgICAgICAgICAgIHBsYW5lSGVpZ2h0c1tpXSwgMCwg
R0xFUzIwLkdMX0xVTUlOQU5DRSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHBhY2tlZEJ5dGVC
dWZmZXIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHl1dlRleHR1cmVzOwotICAgIH0KLQotICAg
IEBOdWxsYWJsZQotICAgIHB1YmxpYyBpbnRbXSB1cGxvYWRGcm9tQnVmZmVyKFZpZGVvRnJhbWUu
STQyMEJ1ZmZlciBidWZmZXIpIHsKLSAgICAgIGludFtdIHN0cmlkZXMgPSB7YnVmZmVyLmdldFN0
cmlkZVkoKSwgYnVmZmVyLmdldFN0cmlkZVUoKSwgYnVmZmVyLmdldFN0cmlkZVYoKX07Ci0gICAg
ICBCeXRlQnVmZmVyW10gcGxhbmVzID0ge2J1ZmZlci5nZXREYXRhWSgpLCBidWZmZXIuZ2V0RGF0
YVUoKSwgYnVmZmVyLmdldERhdGFWKCl9OwotICAgICAgcmV0dXJuIHVwbG9hZFl1dkRhdGEoYnVm
ZmVyLmdldFdpZHRoKCksIGJ1ZmZlci5nZXRIZWlnaHQoKSwgc3RyaWRlcywgcGxhbmVzKTsKLSAg
ICB9Ci0KLSAgICBATnVsbGFibGUKLSAgICBwdWJsaWMgaW50W10gZ2V0WXV2VGV4dHVyZXMoKSB7
Ci0gICAgICByZXR1cm4geXV2VGV4dHVyZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVs
ZWFzZXMgY2FjaGVkIHJlc291cmNlcy4gVXBsb2FkZXIgY2FuIHN0aWxsIGJlIHVzZWQgYW5kIHRo
ZSByZXNvdXJjZXMgd2lsbCBiZSByZWFsbG9jYXRlZAotICAgICAqIG9uIGZpcnN0IHVzZS4KLSAg
ICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgY29weUJ1ZmZlciA9IG51
bGw7Ci0gICAgICBpZiAoeXV2VGV4dHVyZXMgIT0gbnVsbCkgewotICAgICAgICBHTEVTMjAuZ2xE
ZWxldGVUZXh0dXJlcygzLCB5dXZUZXh0dXJlcywgMCk7Ci0gICAgICAgIHl1dlRleHR1cmVzID0g
bnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgZGlzdGFu
Y2UoZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEpIHsKLSAgICByZXR1cm4g
KGludCkgTWF0aC5yb3VuZChNYXRoLmh5cG90KHgxIC0geDAsIHkxIC0geTApKTsKLSAgfQotCi0g
IC8vIFRoZXNlIHBvaW50cyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHBh
cnQgb2YgdGhlIGZyYW1lIHdlIGFyZSByZW5kZXJpbmcuCi0gIGZpbmFsIHN0YXRpYyBmbG9hdFtd
IHNyY1BvaW50cyA9Ci0gICAgICBuZXcgZmxvYXRbXSB7MGYgLyogeDAgKi8sIDBmIC8qIHkwICov
LCAxZiAvKiB4MSAqLywgMGYgLyogeTEgKi8sIDBmIC8qIHgyICovLCAxZiAvKiB5MiAqL307Ci0g
IHByaXZhdGUgZmluYWwgZmxvYXRbXSBkc3RQb2ludHMgPSBuZXcgZmxvYXRbNl07Ci0gIHByaXZh
dGUgZmluYWwgUG9pbnQgcmVuZGVyU2l6ZSA9IG5ldyBQb2ludCgpOwotICBwcml2YXRlIGludCBy
ZW5kZXJXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgcmVuZGVySGVpZ2h0OwotCi0gIC8vIENhbGN1bGF0
ZSB0aGUgZnJhbWUgc2l6ZSBhZnRlciB8cmVuZGVyTWF0cml4fCBpcyBhcHBsaWVkLiBTdG9yZXMg
dGhlIG91dHB1dCBpbiBtZW1iZXIgdmFyaWFibGVzCi0gIC8vIHxyZW5kZXJXaWR0aHwgYW5kIHxy
ZW5kZXJIZWlnaHR8IHRvIGF2b2lkIGFsbG9jYXRpb25zIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGZvciBldmVyeQotICAvLyBmcmFtZS4KLSAgcHJpdmF0ZSB2b2lkIGNhbGN1bGF0ZVRy
YW5zZm9ybWVkUmVuZGVyU2l6ZSgKLSAgICAgIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWln
aHQsIEBOdWxsYWJsZSBNYXRyaXggcmVuZGVyTWF0cml4KSB7Ci0gICAgaWYgKHJlbmRlck1hdHJp
eCA9PSBudWxsKSB7Ci0gICAgICByZW5kZXJXaWR0aCA9IGZyYW1lV2lkdGg7Ci0gICAgICByZW5k
ZXJIZWlnaHQgPSBmcmFtZUhlaWdodDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVHJh
bnNmb3JtIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIChpbiB0aGUgcmFuZ2UgWzAsIDFdKSBhY2Nv
cmRpbmcgdG8gfHJlbmRlck1hdHJpeHwuCi0gICAgcmVuZGVyTWF0cml4Lm1hcFBvaW50cyhkc3RQ
b2ludHMsIHNyY1BvaW50cyk7Ci0KLSAgICAvLyBNdWx0aXBseSB3aXRoIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IHRvIGdldCB0aGUgcG9zaXRpb25zIGluIHRlcm1zIG9mIHBpeGVscy4KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgZHN0UG9pbnRzW2kgKiAyICsgMF0gKj0g
ZnJhbWVXaWR0aDsKLSAgICAgIGRzdFBvaW50c1tpICogMiArIDFdICo9IGZyYW1lSGVpZ2h0Owot
ICAgIH0KLQotICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcyBvZiB0aGUgdHJhbnNm
b3JtZWQgcmVjdGFuZ2xlIGluIHRlcm1zIG9mIHBpeGVscy4KLSAgICByZW5kZXJXaWR0aCA9IGRp
c3RhbmNlKGRzdFBvaW50c1swXSwgZHN0UG9pbnRzWzFdLCBkc3RQb2ludHNbMl0sIGRzdFBvaW50
c1szXSk7Ci0gICAgcmVuZGVySGVpZ2h0ID0gZGlzdGFuY2UoZHN0UG9pbnRzWzBdLCBkc3RQb2lu
dHNbMV0sIGRzdFBvaW50c1s0XSwgZHN0UG9pbnRzWzVdKTsKLSAgfQotCi0gIHByaXZhdGUgZmlu
YWwgWXV2VXBsb2FkZXIgeXV2VXBsb2FkZXIgPSBuZXcgWXV2VXBsb2FkZXIoKTsKLSAgLy8gVGhp
cyB2YXJpYWJsZSB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgY2hlY2tpbmcgcmVmZXJlbmNlIGVxdWFs
aXR5IGFuZCBpcyB1c2VkIGZvciBjYWNoaW5nIEk0MjAKLSAgLy8gdGV4dHVyZXMuCi0gIEBOdWxs
YWJsZSBwcml2YXRlIFZpZGVvRnJhbWUgbGFzdEk0MjBGcmFtZTsKLSAgcHJpdmF0ZSBmaW5hbCBN
YXRyaXggcmVuZGVyTWF0cml4ID0gbmV3IE1hdHJpeCgpOwotCi0gIHB1YmxpYyB2b2lkIGRyYXdG
cmFtZShWaWRlb0ZyYW1lIGZyYW1lLCBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIpIHsK
LSAgICBkcmF3RnJhbWUoZnJhbWUsIGRyYXdlciwgbnVsbCAvKiBhZGRpdGlvbmFsUmVuZGVyTWF0
cml4ICovKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRyYXdGcmFtZSgKLSAgICAgIFZpZGVvRnJh
bWUgZnJhbWUsIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlciwgTWF0cml4IGFkZGl0aW9u
YWxSZW5kZXJNYXRyaXgpIHsKLSAgICBkcmF3RnJhbWUoZnJhbWUsIGRyYXdlciwgYWRkaXRpb25h
bFJlbmRlck1hdHJpeCwgMCAvKiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3BvcnRZICovLAotICAg
ICAgICBmcmFtZS5nZXRSb3RhdGVkV2lkdGgoKSwgZnJhbWUuZ2V0Um90YXRlZEhlaWdodCgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIGRyYXdGcmFtZShWaWRlb0ZyYW1lIGZyYW1lLCBSZW5kZXJl
ckNvbW1vbi5HbERyYXdlciBkcmF3ZXIsCi0gICAgICBATnVsbGFibGUgTWF0cml4IGFkZGl0aW9u
YWxSZW5kZXJNYXRyaXgsIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFksIGludCB2aWV3cG9y
dFdpZHRoLAotICAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgZmluYWwgaW50IHdpZHRo
ID0gZnJhbWUuZ2V0Um90YXRlZFdpZHRoKCk7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IGZyYW1l
LmdldFJvdGF0ZWRIZWlnaHQoKTsKLSAgICBjYWxjdWxhdGVUcmFuc2Zvcm1lZFJlbmRlclNpemUo
d2lkdGgsIGhlaWdodCwgYWRkaXRpb25hbFJlbmRlck1hdHJpeCk7Ci0gICAgaWYgKHJlbmRlcldp
ZHRoIDw9IDAgfHwgcmVuZGVySGVpZ2h0IDw9IDApIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJJ
bGxlZ2FsIGZyYW1lIHNpemU6ICIgKyByZW5kZXJXaWR0aCArICJ4IiArIHJlbmRlckhlaWdodCk7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgYm9vbGVhbiBpc1RleHR1cmVGcmFt
ZSA9IGZyYW1lLmdldEJ1ZmZlcigpIGluc3RhbmNlb2YgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVy
OwotICAgIHJlbmRlck1hdHJpeC5yZXNldCgpOwotICAgIHJlbmRlck1hdHJpeC5wcmVUcmFuc2xh
dGUoMC41ZiwgMC41Zik7Ci0gICAgaWYgKCFpc1RleHR1cmVGcmFtZSkgewotICAgICAgcmVuZGVy
TWF0cml4LnByZVNjYWxlKDFmLCAtMWYpOyAvLyBJNDIwLWZyYW1lcyBhcmUgdXBzaWRlIGRvd24K
LSAgICB9Ci0gICAgcmVuZGVyTWF0cml4LnByZVJvdGF0ZShmcmFtZS5nZXRSb3RhdGlvbigpKTsK
LSAgICByZW5kZXJNYXRyaXgucHJlVHJhbnNsYXRlKC0wLjVmLCAtMC41Zik7Ci0gICAgaWYgKGFk
ZGl0aW9uYWxSZW5kZXJNYXRyaXggIT0gbnVsbCkgewotICAgICAgcmVuZGVyTWF0cml4LnByZUNv
bmNhdChhZGRpdGlvbmFsUmVuZGVyTWF0cml4KTsKLSAgICB9Ci0KLSAgICBpZiAoaXNUZXh0dXJl
RnJhbWUpIHsKLSAgICAgIGxhc3RJNDIwRnJhbWUgPSBudWxsOwotICAgICAgZHJhd1RleHR1cmUo
ZHJhd2VyLCAoVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyKSBmcmFtZS5nZXRCdWZmZXIoKSwgcmVu
ZGVyTWF0cml4LCByZW5kZXJXaWR0aCwKLSAgICAgICAgICByZW5kZXJIZWlnaHQsIHZpZXdwb3J0
WCwgdmlld3BvcnRZLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIC8vIE9ubHkgdXBsb2FkIHRoZSBJNDIwIGRhdGEgdG8gdGV4dHVyZXMgb25jZSBw
ZXIgZnJhbWUsIGlmIHdlIGFyZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMKLSAgICAgIC8vIHdpdGgg
dGhlIHNhbWUgZnJhbWUuCi0gICAgICBpZiAoZnJhbWUgIT0gbGFzdEk0MjBGcmFtZSkgewotICAg
ICAgICBsYXN0STQyMEZyYW1lID0gZnJhbWU7Ci0gICAgICAgIGZpbmFsIFZpZGVvRnJhbWUuSTQy
MEJ1ZmZlciBpNDIwQnVmZmVyID0gZnJhbWUuZ2V0QnVmZmVyKCkudG9JNDIwKCk7Ci0gICAgICAg
IHl1dlVwbG9hZGVyLnVwbG9hZEZyb21CdWZmZXIoaTQyMEJ1ZmZlcik7Ci0gICAgICAgIGk0MjBC
dWZmZXIucmVsZWFzZSgpOwotICAgICAgfQotCi0gICAgICBkcmF3ZXIuZHJhd1l1dih5dXZVcGxv
YWRlci5nZXRZdXZUZXh0dXJlcygpLAotICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLmNvbnZlcnRN
YXRyaXhGcm9tQW5kcm9pZEdyYXBoaWNzTWF0cml4KHJlbmRlck1hdHJpeCksIHJlbmRlcldpZHRo
LAotICAgICAgICAgIHJlbmRlckhlaWdodCwgdmlld3BvcnRYLCB2aWV3cG9ydFksIHZpZXdwb3J0
V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9GcmFt
ZS5CdWZmZXIgcHJlcGFyZUJ1ZmZlckZvclZpZXdwb3J0U2l6ZSgKLSAgICAgIFZpZGVvRnJhbWUu
QnVmZmVyIGJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgYnVmZmVyLnJldGFp
bigpOwotICAgIHJldHVybiBidWZmZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkg
ewotICAgIHl1dlVwbG9hZGVyLnJlbGVhc2UoKTsKLSAgICBsYXN0STQyMEZyYW1lID0gbnVsbDsK
LSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9Qcm9jZXNzb3IuamF2YSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9v
cmcvd2VicnRjL1ZpZGVvUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE5YTJiMzgyYzk2MzQ5NmJlMmY1ZTczMDQ4OGNiYTAzNzhmMWVkMjQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9Qcm9j
ZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTkgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5v
dGF0aW9uLk51bGxhYmxlOwotCi0vKioKLSAqIExpZ2h0d2VpZ2h0IGFic3RyYWN0aW9uIGZvciBh
biBvYmplY3QgdGhhdCBjYW4gcmVjZWl2ZSB2aWRlbyBmcmFtZXMsIHByb2Nlc3MgdGhlbSwgYW5k
IHBhc3MgdGhlbQotICogb24gdG8gYW5vdGhlciBvYmplY3QuIFRoaXMgb2JqZWN0IGlzIGFsc28g
YWxsb3dlZCB0byBvYnNlcnZlIGNhcHR1cmVyIHN0YXJ0L3N0b3AuCi0gKi8KLXB1YmxpYyBpbnRl
cmZhY2UgVmlkZW9Qcm9jZXNzb3IgZXh0ZW5kcyBDYXB0dXJlck9ic2VydmVyIHsKLSAgcHVibGlj
IHN0YXRpYyBjbGFzcyBGcmFtZUFkYXB0YXRpb25QYXJhbWV0ZXJzIHsKLSAgICBwdWJsaWMgZmlu
YWwgaW50IGNyb3BYOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgY3JvcFk7Ci0gICAgcHVibGljIGZp
bmFsIGludCBjcm9wV2lkdGg7Ci0gICAgcHVibGljIGZpbmFsIGludCBjcm9wSGVpZ2h0OwotICAg
IHB1YmxpYyBmaW5hbCBpbnQgc2NhbGVXaWR0aDsKLSAgICBwdWJsaWMgZmluYWwgaW50IHNjYWxl
SGVpZ2h0OwotICAgIHB1YmxpYyBmaW5hbCBsb25nIHRpbWVzdGFtcE5zOwotICAgIHB1YmxpYyBm
aW5hbCBib29sZWFuIGRyb3A7Ci0KLSAgICBwdWJsaWMgRnJhbWVBZGFwdGF0aW9uUGFyYW1ldGVy
cyhpbnQgY3JvcFgsIGludCBjcm9wWSwgaW50IGNyb3BXaWR0aCwgaW50IGNyb3BIZWlnaHQsCi0g
ICAgICAgIGludCBzY2FsZVdpZHRoLCBpbnQgc2NhbGVIZWlnaHQsIGxvbmcgdGltZXN0YW1wTnMs
IGJvb2xlYW4gZHJvcCkgewotICAgICAgdGhpcy5jcm9wWCA9IGNyb3BYOwotICAgICAgdGhpcy5j
cm9wWSA9IGNyb3BZOwotICAgICAgdGhpcy5jcm9wV2lkdGggPSBjcm9wV2lkdGg7Ci0gICAgICB0
aGlzLmNyb3BIZWlnaHQgPSBjcm9wSGVpZ2h0OwotICAgICAgdGhpcy5zY2FsZVdpZHRoID0gc2Nh
bGVXaWR0aDsKLSAgICAgIHRoaXMuc2NhbGVIZWlnaHQgPSBzY2FsZUhlaWdodDsKLSAgICAgIHRo
aXMudGltZXN0YW1wTnMgPSB0aW1lc3RhbXBOczsKLSAgICAgIHRoaXMuZHJvcCA9IGRyb3A7Ci0g
ICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgaXMgYSBjaGFuY2UgdG8gYWNjZXNzIGFuIHVu
YWRhcHRlZCBmcmFtZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXBwbGllcyB0aGUKLSAg
ICogYWRhcHRhdGlvbiBhbmQgZm9yd2FyZHMgdGhlIGZyYW1lIHRvIHtAbGluayAjb25GcmFtZUNh
cHR1cmVkKFZpZGVvRnJhbWUpfS4KLSAgICovCi0gIGRlZmF1bHQgdm9pZCBvbkZyYW1lQ2FwdHVy
ZWQoVmlkZW9GcmFtZSBmcmFtZSwgRnJhbWVBZGFwdGF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJz
KSB7Ci0gICAgVmlkZW9GcmFtZSBhZGFwdGVkRnJhbWUgPSBhcHBseUZyYW1lQWRhcHRhdGlvblBh
cmFtZXRlcnMoZnJhbWUsIHBhcmFtZXRlcnMpOwotICAgIGlmIChhZGFwdGVkRnJhbWUgIT0gbnVs
bCkgewotICAgICAgb25GcmFtZUNhcHR1cmVkKGFkYXB0ZWRGcmFtZSk7Ci0gICAgICBhZGFwdGVk
RnJhbWUucmVsZWFzZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHNpbmsg
dGhhdCByZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gdGhpcyBwcm9jZXNzb3IuIE51bGwgY2FuIGJl
IHBhc3NlZCBpbiB0byB1bnJlZ2lzdGVyCi0gICAqIGEgc2luay4KLSAgICovCi0gIHZvaWQgc2V0
U2luayhATnVsbGFibGUgVmlkZW9TaW5rIHNpbmspOwotCi0gIC8qKgotICAgKiBBcHBsaWVzIHRo
ZSBmcmFtZSBhZGFwdGF0aW9uIHBhcmFtZXRlcnMgdG8gYSBmcmFtZS4gUmV0dXJucyBudWxsIGlm
IHRoZSBmcmFtZSBpcyBtZWFudCB0byBiZQotICAgKiBkcm9wcGVkLiBSZXR1cm5zIGEgbmV3IGZy
YW1lLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIHJldHVybmVk
IGZyYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBATnVsbGFibGUgVmlkZW9GcmFtZSBhcHBs
eUZyYW1lQWRhcHRhdGlvblBhcmFtZXRlcnMoCi0gICAgICBWaWRlb0ZyYW1lIGZyYW1lLCBGcmFt
ZUFkYXB0YXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIHsKLSAgICBpZiAocGFyYW1ldGVycy5k
cm9wKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBmaW5hbCBWaWRlb0ZyYW1l
LkJ1ZmZlciBhZGFwdGVkQnVmZmVyID0KLSAgICAgICAgZnJhbWUuZ2V0QnVmZmVyKCkuY3JvcEFu
ZFNjYWxlKHBhcmFtZXRlcnMuY3JvcFgsIHBhcmFtZXRlcnMuY3JvcFksIHBhcmFtZXRlcnMuY3Jv
cFdpZHRoLAotICAgICAgICAgICAgcGFyYW1ldGVycy5jcm9wSGVpZ2h0LCBwYXJhbWV0ZXJzLnNj
YWxlV2lkdGgsIHBhcmFtZXRlcnMuc2NhbGVIZWlnaHQpOwotICAgIHJldHVybiBuZXcgVmlkZW9G
cmFtZShhZGFwdGVkQnVmZmVyLCBmcmFtZS5nZXRSb3RhdGlvbigpLCBwYXJhbWV0ZXJzLnRpbWVz
dGFtcE5zKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9TaW5rLmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9WaWRlb1NpbmsuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWEwYTZjNzE5Yzk2ZGU2NDhiMDQ1MzkyMzFkMmNlNjlhYjg2NjYyMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9WaWRlb1Npbmsu
amF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBKYXZhIHZlcnNpb24gb2YgcnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVmlkZW9TaW5rIHsKLSAgLyoq
Ci0gICAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgY2FsbCBmcmFtZS5yZXRhaW4oKSBpZiB0aGV5
IG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgZnJhbWUgYWZ0ZXIKLSAgICogdGhpcyBm
dW5jdGlvbiByZXR1cm5zLiBFYWNoIGNhbGwgdG8gcmV0YWluKCkgc2hvdWxkIGJlIGZvbGxvd2Vk
IGJ5IGEgY2FsbCB0byBmcmFtZS5yZWxlYXNlKCkKLSAgICogd2hlbiB0aGUgcmVmZXJlbmNlIGlz
IG5vIGxvbmdlciBuZWVkZWQuCi0gICAqLwotICBAQ2FsbGVkQnlOYXRpdmUgdm9pZCBvbkZyYW1l
KFZpZGVvRnJhbWUgZnJhbWUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9Tb3Vy
Y2UuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVvU291cmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIwYmZmZDZmZjFkYmY5OGU4MGM2NDQ1NTRmMzYyZjc1OWYyNGFkM2MuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
VmlkZW9Tb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLnN1cHBv
cnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLQotLyoqCi0gKiBKYXZhIHdyYXBwZXIgb2YgbmF0aXZl
IEFuZHJvaWRWaWRlb1RyYWNrU291cmNlLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9Tb3VyY2Ug
ZXh0ZW5kcyBNZWRpYVNvdXJjZSB7Ci0gIC8qKiBTaW1wbGUgYXNwZWN0IHJhdGlvIGNsYXMgZm9y
IHVzZSBpbiBjb25zdHJhaW5pbmcgb3V0cHV0IGZvcm1hdC4gKi8KLSAgcHVibGljIHN0YXRpYyBj
bGFzcyBBc3BlY3RSYXRpbyB7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBBc3BlY3RSYXRpbyBV
TkRFRklORUQgPSBuZXcgQXNwZWN0UmF0aW8oLyogd2lkdGg9ICovIDAsIC8qIGhlaWdodD0gKi8g
MCk7Ci0KLSAgICBwdWJsaWMgZmluYWwgaW50IHdpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBpbnQg
aGVpZ2h0OwotCi0gICAgcHVibGljIEFzcGVjdFJhdGlvKGludCB3aWR0aCwgaW50IGhlaWdodCkg
ewotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBOYXRpdmVBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZSBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmpl
Y3QgdmlkZW9Qcm9jZXNzb3JMb2NrID0gbmV3IE9iamVjdCgpOwotICBATnVsbGFibGUgcHJpdmF0
ZSBWaWRlb1Byb2Nlc3NvciB2aWRlb1Byb2Nlc3NvcjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2Fw
dHVyZXJSdW5uaW5nOwotCi0gIHByaXZhdGUgZmluYWwgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJl
ck9ic2VydmVyID0gbmV3IENhcHR1cmVyT2JzZXJ2ZXIoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgb25DYXB0dXJlclN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBu
YXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZS5zZXRTdGF0ZShzdWNjZXNzKTsKLSAgICAgIHN5
bmNocm9uaXplZCAodmlkZW9Qcm9jZXNzb3JMb2NrKSB7Ci0gICAgICAgIGlzQ2FwdHVyZXJSdW5u
aW5nID0gc3VjY2VzczsKLSAgICAgICAgaWYgKHZpZGVvUHJvY2Vzc29yICE9IG51bGwpIHsKLSAg
ICAgICAgICB2aWRlb1Byb2Nlc3Nvci5vbkNhcHR1cmVyU3RhcnRlZChzdWNjZXNzKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
Q2FwdHVyZXJTdG9wcGVkKCkgewotICAgICAgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2Uu
c2V0U3RhdGUoLyogaXNMaXZlPSAqLyBmYWxzZSk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHZpZGVv
UHJvY2Vzc29yTG9jaykgewotICAgICAgICBpc0NhcHR1cmVyUnVubmluZyA9IGZhbHNlOwotICAg
ICAgICBpZiAodmlkZW9Qcm9jZXNzb3IgIT0gbnVsbCkgewotICAgICAgICAgIHZpZGVvUHJvY2Vz
c29yLm9uQ2FwdHVyZXJTdG9wcGVkKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkZyYW1lQ2FwdHVyZWQoVmlkZW9GcmFtZSBm
cmFtZSkgewotICAgICAgZmluYWwgVmlkZW9Qcm9jZXNzb3IuRnJhbWVBZGFwdGF0aW9uUGFyYW1l
dGVycyBwYXJhbWV0ZXJzID0KLSAgICAgICAgICBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJj
ZS5hZGFwdEZyYW1lKGZyYW1lKTsKLSAgICAgIHN5bmNocm9uaXplZCAodmlkZW9Qcm9jZXNzb3JM
b2NrKSB7Ci0gICAgICAgIGlmICh2aWRlb1Byb2Nlc3NvciAhPSBudWxsKSB7Ci0gICAgICAgICAg
dmlkZW9Qcm9jZXNzb3Iub25GcmFtZUNhcHR1cmVkKGZyYW1lLCBwYXJhbWV0ZXJzKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgVmlkZW9GcmFtZSBhZGFw
dGVkRnJhbWUgPSBWaWRlb1Byb2Nlc3Nvci5hcHBseUZyYW1lQWRhcHRhdGlvblBhcmFtZXRlcnMo
ZnJhbWUsIHBhcmFtZXRlcnMpOwotICAgICAgaWYgKGFkYXB0ZWRGcmFtZSAhPSBudWxsKSB7Ci0g
ICAgICAgIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLm9uRnJhbWVDYXB0dXJlZChhZGFw
dGVkRnJhbWUpOwotICAgICAgICBhZGFwdGVkRnJhbWUucmVsZWFzZSgpOwotICAgICAgfQotICAg
IH0KLSAgfTsKLQotICBwdWJsaWMgVmlkZW9Tb3VyY2UobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAg
ICBzdXBlcihuYXRpdmVTb3VyY2UpOwotICAgIHRoaXMubmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tT
b3VyY2UgPSBuZXcgTmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UobmF0aXZlU291cmNlKTsK
LSAgfQotCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSBmcmFt
ZXMgdG8gYmUgc2NhbGVkIGRvd24gdG8gdGhlIHJlcXVlc3RlZCByZXNvbHV0aW9uLiBBbHNvLAot
ICAgKiBmcmFtZXMgd2lsbCBiZSBjcm9wcGVkIHRvIG1hdGNoIHRoZSByZXF1ZXN0ZWQgYXNwZWN0
IHJhdGlvLCBhbmQgZnJhbWVzIHdpbGwgYmUgZHJvcHBlZCB0byBtYXRjaAotICAgKiB0aGUgcmVx
dWVzdGVkIGZwcy4gVGhlIHJlcXVlc3RlZCBhc3BlY3QgcmF0aW8gaXMgb3JpZW50YXRpb24gYWdu
b3N0aWMgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgdG8KLSAgICogbWFpbnRhaW4gdGhlIGlucHV0IG9y
aWVudGF0aW9uLCBzbyBpdCBkb2Vzbid0IG1hdHRlciBpZiBlLmcuIDEyODB4NzIwIG9yIDcyMHgx
MjgwIGlzIHJlcXVlc3RlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkYXB0T3V0cHV0Rm9ybWF0
KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZwcykgewotICAgIGZpbmFsIGludCBtYXhTaWRl
ID0gTWF0aC5tYXgod2lkdGgsIGhlaWdodCk7Ci0gICAgZmluYWwgaW50IG1pblNpZGUgPSBNYXRo
Lm1pbih3aWR0aCwgaGVpZ2h0KTsKLSAgICBhZGFwdE91dHB1dEZvcm1hdChtYXhTaWRlLCBtaW5T
aWRlLCBtaW5TaWRlLCBtYXhTaWRlLCBmcHMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNhbWUgYXMg
YWJvdmUsIGJ1dCBhbGxvd3Mgc2V0dGluZyB0d28gZGlmZmVyZW50IHRhcmdldCByZXNvbHV0aW9u
cyBkZXBlbmRpbmcgb24gaW5jb21pbmcKLSAgICogZnJhbWUgb3JpZW50YXRpb24uIFRoaXMgZ2l2
ZXMgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbCBhbmQgY2FuIGUuZy4gYmUgdXNlZCB0byBmb3Jj
ZSBsYW5kc2NhcGUKLSAgICogdmlkZW8gdG8gYmUgY3JvcHBlZCB0byBwb3J0cmFpdCB2aWRlby4K
LSAgICovCi0gIHB1YmxpYyB2b2lkIGFkYXB0T3V0cHV0Rm9ybWF0KAotICAgICAgaW50IGxhbmRz
Y2FwZVdpZHRoLCBpbnQgbGFuZHNjYXBlSGVpZ2h0LCBpbnQgcG9ydHJhaXRXaWR0aCwgaW50IHBv
cnRyYWl0SGVpZ2h0LCBpbnQgZnBzKSB7Ci0gICAgYWRhcHRPdXRwdXRGb3JtYXQobmV3IEFzcGVj
dFJhdGlvKGxhbmRzY2FwZVdpZHRoLCBsYW5kc2NhcGVIZWlnaHQpLAotICAgICAgICAvKiBtYXhM
YW5kc2NhcGVQaXhlbENvdW50PSAqLyBsYW5kc2NhcGVXaWR0aCAqIGxhbmRzY2FwZUhlaWdodCwK
LSAgICAgICAgbmV3IEFzcGVjdFJhdGlvKHBvcnRyYWl0V2lkdGgsIHBvcnRyYWl0SGVpZ2h0KSwK
LSAgICAgICAgLyogbWF4UG9ydHJhaXRQaXhlbENvdW50PSAqLyBwb3J0cmFpdFdpZHRoICogcG9y
dHJhaXRIZWlnaHQsIGZwcyk7Ci0gIH0KLQotICAvKiogU2FtZSBhcyBhYm92ZSwgd2l0aCBldmVu
IG1vcmUgY29udHJvbCBhcyBlYWNoIGNvbnN0cmFpbnQgaXMgb3B0aW9uYWwuICovCi0gIHB1Ymxp
YyB2b2lkIGFkYXB0T3V0cHV0Rm9ybWF0KEFzcGVjdFJhdGlvIHRhcmdldExhbmRzY2FwZUFzcGVj
dFJhdGlvLAotICAgICAgQE51bGxhYmxlIEludGVnZXIgbWF4TGFuZHNjYXBlUGl4ZWxDb3VudCwg
QXNwZWN0UmF0aW8gdGFyZ2V0UG9ydHJhaXRBc3BlY3RSYXRpbywKLSAgICAgIEBOdWxsYWJsZSBJ
bnRlZ2VyIG1heFBvcnRyYWl0UGl4ZWxDb3VudCwgQE51bGxhYmxlIEludGVnZXIgbWF4RnBzKSB7
Ci0gICAgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuYWRhcHRPdXRwdXRGb3JtYXQodGFy
Z2V0TGFuZHNjYXBlQXNwZWN0UmF0aW8sCi0gICAgICAgIG1heExhbmRzY2FwZVBpeGVsQ291bnQs
IHRhcmdldFBvcnRyYWl0QXNwZWN0UmF0aW8sIG1heFBvcnRyYWl0UGl4ZWxDb3VudCwgbWF4RnBz
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElzU2NyZWVuY2FzdChib29sZWFuIGlzU2NyZWVu
Y2FzdCkgewotICAgIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLnNldElzU2NyZWVuY2Fz
dChpc1NjcmVlbmNhc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhvb2sgZm9yIGluamVjdGluZyBh
IGN1c3RvbSB2aWRlbyBwcm9jZXNzb3IgYmVmb3JlIGZyYW1lcyBhcmUgcGFzc2VkIG9udG8gV2Vi
UlRDLiBUaGUgZnJhbWVzCi0gICAqIHdpbGwgYmUgY3JvcHBlZCBhbmQgc2NhbGVkIGRlcGVuZGlu
ZyBvbiBDUFUgYW5kIG5ldHdvcmsgY29uZGl0aW9ucyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRv
Ci0gICAqIHRoZSB2aWRlbyBwcm9jZXNzb3IuIEZyYW1lcyB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0
aGUgdmlkZW8gcHJvY2Vzc29yIG9uIHRoZSBzYW1lIHRocmVhZCB0aGV5Ci0gICAqIGFyZSBwYXNz
ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSB2aWRlbyBwcm9jZXNzb3IgaXMgYWxsb3dlZCB0byBkZWxp
dmVyIHRoZSBwcm9jZXNzZWQgZnJhbWVzCi0gICAqIGJhY2sgb24gYW55IHRocmVhZC4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIHNldFZpZGVvUHJvY2Vzc29yKEBOdWxsYWJsZSBWaWRlb1Byb2Nlc3Nv
ciBuZXdWaWRlb1Byb2Nlc3NvcikgewotICAgIHN5bmNocm9uaXplZCAodmlkZW9Qcm9jZXNzb3JM
b2NrKSB7Ci0gICAgICBpZiAodmlkZW9Qcm9jZXNzb3IgIT0gbnVsbCkgewotICAgICAgICB2aWRl
b1Byb2Nlc3Nvci5zZXRTaW5rKC8qIHNpbms9ICovIG51bGwpOwotICAgICAgICBpZiAoaXNDYXB0
dXJlclJ1bm5pbmcpIHsKLSAgICAgICAgICB2aWRlb1Byb2Nlc3Nvci5vbkNhcHR1cmVyU3RvcHBl
ZCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB2aWRlb1Byb2Nlc3NvciA9IG5ld1ZpZGVv
UHJvY2Vzc29yOwotICAgICAgaWYgKG5ld1ZpZGVvUHJvY2Vzc29yICE9IG51bGwpIHsKLSAgICAg
ICAgbmV3VmlkZW9Qcm9jZXNzb3Iuc2V0U2luaygKLSAgICAgICAgICAgIChmcmFtZSkKLSAgICAg
ICAgICAgICAgICAtPiBydW5XaXRoUmVmZXJlbmNlKCgpIC0+IG5hdGl2ZUFuZHJvaWRWaWRlb1Ry
YWNrU291cmNlLm9uRnJhbWVDYXB0dXJlZChmcmFtZSkpKTsKLSAgICAgICAgaWYgKGlzQ2FwdHVy
ZXJSdW5uaW5nKSB7Ci0gICAgICAgICAgbmV3VmlkZW9Qcm9jZXNzb3Iub25DYXB0dXJlclN0YXJ0
ZWQoLyogc3VjY2Vzcz0gKi8gdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBwdWJsaWMgQ2FwdHVyZXJPYnNlcnZlciBnZXRDYXB0dXJlck9ic2VydmVyKCkgewotICAg
IHJldHVybiBjYXB0dXJlck9ic2VydmVyOwotICB9Ci0KLSAgLyoqIFJldHVybnMgYSBwb2ludGVy
IHRvIHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZS4gKi8KLSAgbG9uZyBnZXROYXRp
dmVWaWRlb1RyYWNrU291cmNlKCkgewotICAgIHJldHVybiBnZXROYXRpdmVNZWRpYVNvdXJjZSgp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgc2V0
VmlkZW9Qcm9jZXNzb3IoLyogbmV3VmlkZW9Qcm9jZXNzb3I9ICovIG51bGwpOwotICAgIHN1cGVy
LmRpc3Bvc2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvVmlkZW9UcmFjay5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvYXBpL29yZy93ZWJydGMvVmlkZW9UcmFjay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1NTkzZDQyNGYzMTVmYTJkZTgxNDc5ZTcyNGIwOGU1YjE3ZWM2NWZkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1ZpZGVv
VHJhY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5JZGVudGl0eUhh
c2hNYXA7Ci0KLS8qKiBKYXZhIHZlcnNpb24gb2YgVmlkZW9UcmFja0ludGVyZmFjZS4gKi8KLXB1
YmxpYyBjbGFzcyBWaWRlb1RyYWNrIGV4dGVuZHMgTWVkaWFTdHJlYW1UcmFjayB7Ci0gIHByaXZh
dGUgZmluYWwgSWRlbnRpdHlIYXNoTWFwPFZpZGVvU2luaywgTG9uZz4gc2lua3MgPSBuZXcgSWRl
bnRpdHlIYXNoTWFwPFZpZGVvU2luaywgTG9uZz4oKTsKLQotICBwdWJsaWMgVmlkZW9UcmFjayhs
b25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgc3VwZXIobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEFkZHMgYSBWaWRlb1NpbmsgdG8gdGhlIHRyYWNrLgotICAgKgotICAgKiBBIHRyYWNr
IGNhbiBoYXZlIGFueSBudW1iZXIgb2YgVmlkZW9TaW5rcy4gVmlkZW9TaW5rcyB3aWxsIHJlcGxh
Y2UKLSAgICogcmVuZGVyZXJzLiBIb3dldmVyLCBjb252ZXJ0aW5nIG9sZCBzdHlsZSB0ZXh0dXJl
IGZyYW1lcyB3aWxsIGludm9sdmUgY29zdGx5Ci0gICAqIGNvbnZlcnNpb24gdG8gSTQyMCBzbyBp
dCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXBncmFkZSBiZWZvcmUgYWxsIHlvdXIKLSAgICogc291
cmNlcyBwcm9kdWNlIFZpZGVvRnJhbWVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2luayhW
aWRlb1Npbmsgc2luaykgewotICAgIGlmIChzaW5rID09IG51bGwpIHsKLSAgICAgIHRocm93IG5l
dyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBWaWRlb1NpbmsgaXMgbm90IGFsbG93ZWQg
dG8gYmUgbnVsbCIpOwotICAgIH0KLSAgICAvLyBXZSBhbGxvdyBjYWxsaW5nIGFkZFNpbmsoKSB3
aXRoIHRoZSBzYW1lIHNpbmsgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUg
QysrCi0gICAgLy8gVmlkZW9UcmFjazo6QWRkT3JVcGRhdGVTaW5rKCkuCi0gICAgaWYgKCFzaW5r
cy5jb250YWluc0tleShzaW5rKSkgewotICAgICAgZmluYWwgbG9uZyBuYXRpdmVTaW5rID0gbmF0
aXZlV3JhcFNpbmsoc2luayk7Ci0gICAgICBzaW5rcy5wdXQoc2luaywgbmF0aXZlU2luayk7Ci0g
ICAgICBuYXRpdmVBZGRTaW5rKGdldE5hdGl2ZU1lZGlhU3RyZWFtVHJhY2soKSwgbmF0aXZlU2lu
ayk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBWaWRlb1NpbmsgZnJvbSB0
aGUgdHJhY2suCi0gICAqCi0gICAqIElmIHRoZSBWaWRlb1Npbmsgd2FzIG5vdCBhdHRhY2hlZCB0
byB0aGUgdHJhY2ssIHRoaXMgaXMgYSBuby1vcC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92
ZVNpbmsoVmlkZW9TaW5rIHNpbmspIHsKLSAgICBmaW5hbCBMb25nIG5hdGl2ZVNpbmsgPSBzaW5r
cy5yZW1vdmUoc2luayk7Ci0gICAgaWYgKG5hdGl2ZVNpbmsgIT0gbnVsbCkgewotICAgICAgbmF0
aXZlUmVtb3ZlU2luayhnZXROYXRpdmVNZWRpYVN0cmVhbVRyYWNrKCksIG5hdGl2ZVNpbmspOwot
ICAgICAgbmF0aXZlRnJlZVNpbmsobmF0aXZlU2luayk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgZm9yIChsb25nIG5hdGl2ZVNpbmsg
OiBzaW5rcy52YWx1ZXMoKSkgewotICAgICAgbmF0aXZlUmVtb3ZlU2luayhnZXROYXRpdmVNZWRp
YVN0cmVhbVRyYWNrKCksIG5hdGl2ZVNpbmspOwotICAgICAgbmF0aXZlRnJlZVNpbmsobmF0aXZl
U2luayk7Ci0gICAgfQotICAgIHNpbmtzLmNsZWFyKCk7Ci0gICAgc3VwZXIuZGlzcG9zZSgpOwot
ICB9Ci0KLSAgLyoqIFJldHVybnMgYSBwb2ludGVyIHRvIHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVy
ZmFjZS4gKi8KLSAgbG9uZyBnZXROYXRpdmVWaWRlb1RyYWNrKCkgewotICAgIHJldHVybiBnZXRO
YXRpdmVNZWRpYVN0cmVhbVRyYWNrKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
dm9pZCBuYXRpdmVBZGRTaW5rKGxvbmcgdHJhY2ssIGxvbmcgbmF0aXZlU2luayk7Ci0gIHByaXZh
dGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVJlbW92ZVNpbmsobG9uZyB0cmFjaywgbG9uZyBu
YXRpdmVTaW5rKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlV3JhcFNpbmso
VmlkZW9TaW5rIHNpbmspOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVGcmVl
U2luayhsb25nIHNpbmspOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvV3JhcHBlZE5hdGl2
ZVZpZGVvRGVjb2Rlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvV3JhcHBlZE5hdGl2ZVZpZGVvRGVjb2Rl
ci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzBjNjY0OTE1NGRhODM3YTk3
MzVjMmJkZWU1NDI0OWVmMDIwYjU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1dyYXBwZWROYXRpdmVWaWRlb0RlY29kZXIuamF2YQor
KysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogV3JhcHMgYSBuYXRpdmUgd2VicnRjOjpWaWRl
b0RlY29kZXIuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXcmFwcGVkTmF0aXZlVmlkZW9E
ZWNvZGVyIGltcGxlbWVudHMgVmlkZW9EZWNvZGVyIHsKLSAgQE92ZXJyaWRlIHB1YmxpYyBhYnN0
cmFjdCBsb25nIGNyZWF0ZU5hdGl2ZVZpZGVvRGVjb2RlcigpOwotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgZmluYWwgVmlkZW9Db2RlY1N0YXR1cyBpbml0RGVjb2RlKFNldHRpbmdzIHNldHRpbmdz
LCBDYWxsYmFjayBkZWNvZGVDYWxsYmFjaykgewotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9w
ZXJhdGlvbkV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkLiIpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBmaW5hbCBWaWRlb0NvZGVjU3RhdHVzIHJlbGVhc2UoKSB7Ci0gICAgdGhyb3cg
bmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQuIik7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIFZpZGVvQ29kZWNTdGF0dXMgZGVjb2Rl
KEVuY29kZWRJbWFnZSBmcmFtZSwgRGVjb2RlSW5mbyBpbmZvKSB7Ci0gICAgdGhyb3cgbmV3IFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQuIik7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gZ2V0UHJlZmVyc0xhdGVEZWNvZGlu
ZygpIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIk5vdCBp
bXBsZW1lbnRlZC4iKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgU3RyaW5n
IGdldEltcGxlbWVudGF0aW9uTmFtZSgpIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZC4iKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBp
L29yZy93ZWJydGMvV3JhcHBlZE5hdGl2ZVZpZGVvRW5jb2Rlci5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
V3JhcHBlZE5hdGl2ZVZpZGVvRW5jb2Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZDA5MDhhNmFjOGVmZWU5YjcwOWRiNjA1NGJlMDU1YzZhYWUzM2UwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1dyYXBwZWRO
YXRpdmVWaWRlb0VuY29kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogV3Jh
cHMgYSBuYXRpdmUgd2VicnRjOjpWaWRlb0VuY29kZXIuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBj
bGFzcyBXcmFwcGVkTmF0aXZlVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgVmlkZW9FbmNvZGVyIHsK
LSAgQE92ZXJyaWRlIHB1YmxpYyBhYnN0cmFjdCBsb25nIGNyZWF0ZU5hdGl2ZVZpZGVvRW5jb2Rl
cigpOwotICBAT3ZlcnJpZGUgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNIYXJkd2FyZUVuY29k
ZXIoKTsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIFZpZGVvQ29kZWNTdGF0dXMgaW5p
dEVuY29kZShTZXR0aW5ncyBzZXR0aW5ncywgQ2FsbGJhY2sgZW5jb2RlQ2FsbGJhY2spIHsKLSAg
ICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRl
ZC4iKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgVmlkZW9Db2RlY1N0YXR1
cyByZWxlYXNlKCkgewotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv
bigiTm90IGltcGxlbWVudGVkLiIpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBmaW5h
bCBWaWRlb0NvZGVjU3RhdHVzIGVuY29kZShWaWRlb0ZyYW1lIGZyYW1lLCBFbmNvZGVJbmZvIGlu
Zm8pIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIk5vdCBp
bXBsZW1lbnRlZC4iKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgVmlkZW9D
b2RlY1N0YXR1cyBzZXRSYXRlQWxsb2NhdGlvbihCaXRyYXRlQWxsb2NhdGlvbiBhbGxvY2F0aW9u
LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhj
ZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQuIik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IGZpbmFsIFNjYWxpbmdTZXR0aW5ncyBnZXRTY2FsaW5nU2V0dGluZ3MoKSB7Ci0gICAgdGhyb3cg
bmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQuIik7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRJbXBsZW1lbnRhdGlv
bk5hbWUoKSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJO
b3QgaW1wbGVtZW50ZWQuIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL1l1dkNv
bnZlcnRlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBlMmQ1MDU1ZjcyZjk2YThmNzA5MGM3YjNlMjBhMDVmYzMzYTIw
ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93
ZWJydGMvWXV2Q29udmVydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0
IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0ZyYW1lLkk0MjBC
dWZmZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0ZyYW1lLlRleHR1cmVCdWZmZXI7Ci0KLS8q
KgotICogQ2xhc3MgZm9yIGNvbnZlcnRpbmcgT0VTIHRleHR1cmVzIHRvIGEgWVVWIEJ5dGVCdWZm
ZXIuIEl0IGNhbiBiZSBjb25zdHJ1Y3RlZCBvbiBhbnkgdGhyZWFkLCBidXQKLSAqIHNob3VsZCBv
bmx5IGJlIG9wZXJhdGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkIHdpdGggYW4gYWN0aXZlIEVHTCBj
b250ZXh0LgotICovCi1wdWJsaWMgY2xhc3MgWXV2Q29udmVydGVyIHsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1NIQURFUiA9Ci0gICAgICAvLyBEaWZmZXJlbmNlIGlu
IHRleHR1cmUgY29vcmRpbmF0ZSBjb3JyZXNwb25kaW5nIHRvIG9uZQotICAgICAgLy8gc3ViLXBp
eGVsIGluIHRoZSB4IGRpcmVjdGlvbi4KLSAgICAgICJ1bmlmb3JtIHZlYzIgeFVuaXQ7XG4iCi0g
ICAgICAvLyBDb2xvciBjb252ZXJzaW9uIGNvZWZmaWNpZW50cywgaW5jbHVkaW5nIGNvbnN0YW50
IHRlcm0KLSAgICAgICsgInVuaWZvcm0gdmVjNCBjb2VmZnM7XG4iCi0gICAgICArICJcbiIKLSAg
ICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgIC8vIFNpbmNlIHRoZSBhbHBoYSByZWFkIGZy
b20gdGhlIHRleHR1cmUgaXMgYWx3YXlzIDEsIHRoaXMgY291bGQKLSAgICAgIC8vIGJlIHdyaXR0
ZW4gYXMgYSBtYXQ0IHggdmVjNCBtdWx0aXBseS4gSG93ZXZlciwgdGhhdCBzZWVtcyB0bwotICAg
ICAgLy8gZ2l2ZSBhIHdvcnNlIGZyYW1lcmF0ZSwgcG9zc2libHkgYmVjYXVzZSB0aGUgYWRkaXRp
b25hbAotICAgICAgLy8gbXVsdGlwbGllcyBieSAxLjAgY29uc3VtZSByZXNvdXJjZXMuIFRPRE8o
bmlzc2UpOiBDb3VsZCBhbHNvCi0gICAgICAvLyB0cnkgdG8gZG8gaXQgYXMgYSB2ZWMzIHggbWF0
M3g0LCBmb2xsb3dlZCBieSBhbiBhZGQgaW4gb2YgYQotICAgICAgLy8gY29uc3RhbnQgdmVjdG9y
LgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuciA9IGNvZWZmcy5hICsgZG90KGNvZWZmcy5yZ2Is
XG4iCi0gICAgICArICIgICAgICBzYW1wbGUodGMgLSAxLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAg
ICAgICsgIiAgZ2xfRnJhZ0NvbG9yLmcgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgot
ICAgICAgKyAiICAgICAgc2FtcGxlKHRjIC0gMC41ICogeFVuaXQpLnJnYik7XG4iCi0gICAgICAr
ICIgIGdsX0ZyYWdDb2xvci5iID0gY29lZmZzLmEgKyBkb3QoY29lZmZzLnJnYixcbiIKLSAgICAg
ICsgIiAgICAgIHNhbXBsZSh0YyArIDAuNSAqIHhVbml0KS5yZ2IpO1xuIgotICAgICAgKyAiICBn
bF9GcmFnQ29sb3IuYSA9IGNvZWZmcy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIg
ICAgICBzYW1wbGUodGMgKyAxLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2hhZGVyQ2FsbGJhY2tzIGltcGxlbWVudHMgR2xHZW5l
cmljRHJhd2VyLlNoYWRlckNhbGxiYWNrcyB7Ci0gICAgLy8gWSdVVjQ0NCB0byBSR0I4ODgsIHNl
ZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ZVVYjWSVFMiU4MCVCMlVWNDQ0X3RvX1JH
Qjg4OF9jb252ZXJzaW9uCi0gICAgLy8gV2UgdXNlIHRoZSBJVFUtUiBCVC42MDEgY29lZmZpY2ll
bnRzIGZvciBZLCBVIGFuZCBWLgotICAgIC8vIFRoZSB2YWx1ZXMgaW4gV2lraXBlZGlhIGFyZSBp
bmFjY3VyYXRlLCB0aGUgYWNjdXJhdGUgdmFsdWVzIGRlcml2ZWQgZnJvbSB0aGUgc3BlYyBhcmU6
Ci0gICAgLy8gWSA9IDAuMjk5ICogUiArIDAuNTg3ICogRyArIDAuMTE0ICogQgotICAgIC8vIFUg
PSAtMC4xNjg3MzYgKiBSIC0gMC4zMzEyNjQgKiBHICsgMC41ICogQiArIDAuNQotICAgIC8vIFYg
PSAwLjUgKiBSIC0gMC40MTg2ODggKiBHIC0gMC4wODEzMTI0ICogQiArIDAuNQotICAgIC8vIFRv
IG1hcCB0aGUgWS12YWx1ZXMgdG8gcmFuZ2UgWzE2LTIzNV0gYW5kIFUtIGFuZCBWLXZhbHVlcyB0
byByYW5nZSBbMTYtMjQwXSwgdGhlIG1hdHJpeCBoYXMKLSAgICAvLyBiZWVuIG11bHRpcGxpZWQg
d2l0aCBtYXRyaXg6Ci0gICAgLy8ge3syMTkgLyAyNTUsIDAsIDAsIDE2IC8gMjU1fSwKLSAgICAv
LyB7MCwgMjI0IC8gMjU1LCAwLCAxNiAvIDI1NX0sCi0gICAgLy8gezAsIDAsIDIyNCAvIDI1NSwg
MTYgLyAyNTV9LAotICAgIC8vIHswLCAwLCAwLCAxfX0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBmbG9hdFtdIHlDb2VmZnMgPQotICAgICAgICBuZXcgZmxvYXRbXSB7MC4yNTY3ODhmLCAwLjUw
NDEyOWYsIDAuMDk3OTA1OWYsIDAuMDYyNzQ1MWZ9OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFs
IGZsb2F0W10gdUNvZWZmcyA9Ci0gICAgICAgIG5ldyBmbG9hdFtdIHstMC4xNDgyMjNmLCAtMC4y
OTA5OTNmLCAwLjQzOTIxNmYsIDAuNTAxOTYxZn07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
ZmxvYXRbXSB2Q29lZmZzID0KLSAgICAgICAgbmV3IGZsb2F0W10gezAuNDM5MjE2ZiwgLTAuMzY3
Nzg4ZiwgLTAuMDcxNDI3NGYsIDAuNTAxOTYxZn07Ci0KLSAgICBwcml2YXRlIGludCB4VW5pdExv
YzsKLSAgICBwcml2YXRlIGludCBjb2VmZnNMb2M7Ci0KLSAgICBwcml2YXRlIGZsb2F0W10gY29l
ZmZzOwotICAgIHByaXZhdGUgZmxvYXQgc3RlcFNpemU7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQ
bGFuZVkoKSB7Ci0gICAgICBjb2VmZnMgPSB5Q29lZmZzOwotICAgICAgc3RlcFNpemUgPSAxLjBm
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBsYW5lVSgpIHsKLSAgICAgIGNvZWZmcyA9
IHVDb2VmZnM7Ci0gICAgICBzdGVwU2l6ZSA9IDIuMGY7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgc2V0UGxhbmVWKCkgewotICAgICAgY29lZmZzID0gdkNvZWZmczsKLSAgICAgIHN0ZXBTaXpl
ID0gMi4wZjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbk5ld1No
YWRlcihHbFNoYWRlciBzaGFkZXIpIHsKLSAgICAgIHhVbml0TG9jID0gc2hhZGVyLmdldFVuaWZv
cm1Mb2NhdGlvbigieFVuaXQiKTsKLSAgICAgIGNvZWZmc0xvYyA9IHNoYWRlci5nZXRVbmlmb3Jt
TG9jYXRpb24oImNvZWZmcyIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2
b2lkIG9uUHJlcGFyZVNoYWRlcihHbFNoYWRlciBzaGFkZXIsIGZsb2F0W10gdGV4TWF0cml4LCBp
bnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgICBpbnQgdmlld3BvcnRXaWR0
aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgICBHTEVTMjAuZ2xVbmlmb3JtNGZ2KGNvZWZm
c0xvYywgLyogY291bnQ9ICovIDEsIGNvZWZmcywgLyogb2Zmc2V0PSAqLyAwKTsKLSAgICAgIC8v
IE1hdHJpeCAqICgxOzA7MDswKSAvICh3aWR0aCAvIHN0ZXBTaXplKS4gTm90ZSB0aGF0IE9wZW5H
TCB1c2VzIGNvbHVtbiBtYWpvciBvcmRlci4KLSAgICAgIEdMRVMyMC5nbFVuaWZvcm0yZigKLSAg
ICAgICAgICB4VW5pdExvYywgc3RlcFNpemUgKiB0ZXhNYXRyaXhbMF0gLyBmcmFtZVdpZHRoLCBz
dGVwU2l6ZSAqIHRleE1hdHJpeFsxXSAvIGZyYW1lV2lkdGgpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgZmluYWwgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlciB0aHJlYWRDaGVja2VyID0gbmV3
IFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIoKTsKLSAgcHJpdmF0ZSBmaW5hbCBHbFRleHR1cmVG
cmFtZUJ1ZmZlciBpNDIwVGV4dHVyZUZyYW1lQnVmZmVyID0KLSAgICAgIG5ldyBHbFRleHR1cmVG
cmFtZUJ1ZmZlcihHTEVTMjAuR0xfUkdCQSk7Ci0gIHByaXZhdGUgZmluYWwgU2hhZGVyQ2FsbGJh
Y2tzIHNoYWRlckNhbGxiYWNrcyA9IG5ldyBTaGFkZXJDYWxsYmFja3MoKTsKLSAgcHJpdmF0ZSBm
aW5hbCBHbEdlbmVyaWNEcmF3ZXIgZHJhd2VyID0gbmV3IEdsR2VuZXJpY0RyYXdlcihGUkFHTUVO
VF9TSEFERVIsIHNoYWRlckNhbGxiYWNrcyk7Ci0gIHByaXZhdGUgZmluYWwgVmlkZW9GcmFtZURy
YXdlciB2aWRlb0ZyYW1lRHJhd2VyOwotCi0gIC8qKgotICAgKiBUaGlzIGNsYXNzIHNob3VsZCBi
ZSBjb25zdHJ1Y3RlZCBvbiBhIHRocmVhZCB0aGF0IGhhcyBhbiBhY3RpdmUgRUdMIGNvbnRleHQu
Ci0gICAqLwotICBwdWJsaWMgWXV2Q29udmVydGVyKCkgewotICAgIHRoaXMobmV3IFZpZGVvRnJh
bWVEcmF3ZXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgWXV2Q29udmVydGVyKFZpZGVvRnJhbWVEcmF3
ZXIgdmlkZW9GcmFtZURyYXdlcikgewotICAgIHRoaXMudmlkZW9GcmFtZURyYXdlciA9IHZpZGVv
RnJhbWVEcmF3ZXI7Ci0gICAgdGhyZWFkQ2hlY2tlci5kZXRhY2hUaHJlYWQoKTsKLSAgfQotCi0g
IC8qKiBDb252ZXJ0cyB0aGUgdGV4dHVyZSBidWZmZXIgdG8gSTQyMC4gKi8KLSAgcHVibGljIEk0
MjBCdWZmZXIgY29udmVydChUZXh0dXJlQnVmZmVyIGlucHV0VGV4dHVyZUJ1ZmZlcikgewotICAg
IHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLQotICAgIFRleHR1cmVCdWZm
ZXIgcHJlcGFyZWRCdWZmZXIgPSAoVGV4dHVyZUJ1ZmZlcikgdmlkZW9GcmFtZURyYXdlci5wcmVw
YXJlQnVmZmVyRm9yVmlld3BvcnRTaXplKAotICAgICAgICBpbnB1dFRleHR1cmVCdWZmZXIsIGlu
cHV0VGV4dHVyZUJ1ZmZlci5nZXRXaWR0aCgpLCBpbnB1dFRleHR1cmVCdWZmZXIuZ2V0SGVpZ2h0
KCkpOwotCi0gICAgLy8gV2UgZHJhdyBpbnRvIGEgYnVmZmVyIGxhaWQgb3V0IGxpa2UKLSAgICAv
LwotICAgIC8vICAgICstLS0tLS0tLS0rCi0gICAgLy8gICAgfCAgICAgICAgIHwKLSAgICAvLyAg
ICB8ICBZICAgICAgfAotICAgIC8vICAgIHwgICAgICAgICB8Ci0gICAgLy8gICAgfCAgICAgICAg
IHwKLSAgICAvLyAgICArLS0tLSstLS0tKwotICAgIC8vICAgIHwgVSAgfCBWICB8Ci0gICAgLy8g
ICAgfCAgICB8ICAgIHwKLSAgICAvLyAgICArLS0tLSstLS0tKwotICAgIC8vCi0gICAgLy8gSW4g
bWVtb3J5LCB3ZSB1c2UgdGhlIHNhbWUgc3RyaWRlIGZvciBhbGwgb2YgWSwgVSBhbmQgVi4gVGhl
Ci0gICAgLy8gVSBkYXRhIHN0YXJ0cyBhdCBvZmZzZXQgfGhlaWdodHwgKiB8c3RyaWRlfCBmcm9t
IHRoZSBZIGRhdGEsCi0gICAgLy8gYW5kIHRoZSBWIGRhdGEgc3RhcnRzIGF0IGF0IG9mZnNldCB8
c3RyaWRlLzJ8IGZyb20gdGhlIFUKLSAgICAvLyBkYXRhLCB3aXRoIHJvd3Mgb2YgVSBhbmQgViBk
YXRhIGFsdGVybmF0aW5nLgotICAgIC8vCi0gICAgLy8gTm93LCBpdCB3b3VsZCBoYXZlIG1hZGUg
c2Vuc2UgdG8gYWxsb2NhdGUgYSBwaXhlbCBidWZmZXIgd2l0aAotICAgIC8vIGEgc2luZ2xlIGJ5
dGUgcGVyIHBpeGVsIChFR0wxMC5FR0xfQ09MT1JfQlVGRkVSX1RZUEUsCi0gICAgLy8gRUdMMTAu
RUdMX0xVTUlOQU5DRV9CVUZGRVIsKSwgYnV0IHRoYXQgc2VlbXMgdG8gYmUKLSAgICAvLyB1bnN1
cHBvcnRlZCBieSBkZXZpY2VzLiBTbyBkbyB0aGUgZm9sbG93aW5nIGhhY2s6IEFsbG9jYXRlIGFu
Ci0gICAgLy8gUkdCQSBidWZmZXIsIG9mIHdpZHRoIHxzdHJpZGV8LzQuIFRvIHJlbmRlciBlYWNo
IG9mIHRoZXNlCi0gICAgLy8gbGFyZ2UgcGl4ZWxzLCBzYW1wbGUgdGhlIHRleHR1cmUgYXQgNCBk
aWZmZXJlbnQgeCBjb29yZGluYXRlcwotICAgIC8vIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0
aGUgZm91ciBjb21wb25lbnRzLgotICAgIC8vCi0gICAgLy8gU2luY2UgdGhlIFYgZGF0YSBuZWVk
cyB0byBzdGFydCBvbiBhIGJvdW5kYXJ5IG9mIHN1Y2ggYQotICAgIC8vIGxhcmdlciBwaXhlbCwg
aXQgaXMgbm90IHN1ZmZpY2llbnQgdGhhdCB8c3RyaWRlfCBpcyBldmVuLCBpdAotICAgIC8vIGhh
cyB0byBiZSBhIG11bHRpcGxlIG9mIDggcGl4ZWxzLgotICAgIGZpbmFsIGludCBmcmFtZVdpZHRo
ID0gcHJlcGFyZWRCdWZmZXIuZ2V0V2lkdGgoKTsKLSAgICBmaW5hbCBpbnQgZnJhbWVIZWlnaHQg
PSBwcmVwYXJlZEJ1ZmZlci5nZXRIZWlnaHQoKTsKLSAgICBmaW5hbCBpbnQgc3RyaWRlID0gKChm
cmFtZVdpZHRoICsgNykgLyA4KSAqIDg7Ci0gICAgZmluYWwgaW50IHV2SGVpZ2h0ID0gKGZyYW1l
SGVpZ2h0ICsgMSkgLyAyOwotICAgIC8vIFRvdGFsIGhlaWdodCBvZiB0aGUgY29tYmluZWQgbWVt
b3J5IGxheW91dC4KLSAgICBmaW5hbCBpbnQgdG90YWxIZWlnaHQgPSBmcmFtZUhlaWdodCArIHV2
SGVpZ2h0OwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgaTQyMEJ5dGVCdWZmZXIgPSBKbmlDb21tb24u
bmF0aXZlQWxsb2NhdGVCeXRlQnVmZmVyKHN0cmlkZSAqIHRvdGFsSGVpZ2h0KTsKLSAgICAvLyBW
aWV3cG9ydCB3aWR0aCBpcyBkaXZpZGVkIGJ5IGZvdXIgc2luY2Ugd2UgYXJlIHNxdWVlemluZyBp
biBmb3VyIGNvbG9yIGJ5dGVzIGluIGVhY2ggUkdCQQotICAgIC8vIHBpeGVsLgotICAgIGZpbmFs
IGludCB2aWV3cG9ydFdpZHRoID0gc3RyaWRlIC8gNDsKLQotICAgIC8vIFByb2R1Y2UgYSBmcmFt
ZSBidWZmZXIgc3RhcnRpbmcgYXQgdG9wLWxlZnQgY29ybmVyLCBub3QgYm90dG9tLWxlZnQuCi0g
ICAgZmluYWwgTWF0cml4IHJlbmRlck1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKLSAgICByZW5kZXJN
YXRyaXgucHJlVHJhbnNsYXRlKDAuNWYsIDAuNWYpOwotICAgIHJlbmRlck1hdHJpeC5wcmVTY2Fs
ZSgxZiwgLTFmKTsKLSAgICByZW5kZXJNYXRyaXgucHJlVHJhbnNsYXRlKC0wLjVmLCAtMC41Zik7
Ci0KLSAgICBpNDIwVGV4dHVyZUZyYW1lQnVmZmVyLnNldFNpemUodmlld3BvcnRXaWR0aCwgdG90
YWxIZWlnaHQpOwotCi0gICAgLy8gQmluZCBvdXIgZnJhbWVidWZmZXIuCi0gICAgR0xFUzIwLmds
QmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgaTQyMFRleHR1cmVGcmFtZUJ1
ZmZlci5nZXRGcmFtZUJ1ZmZlcklkKCkpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigi
Z2xCaW5kRnJhbWVidWZmZXIiKTsKLQotICAgIC8vIERyYXcgWS4KLSAgICBzaGFkZXJDYWxsYmFj
a3Muc2V0UGxhbmVZKCk7Ci0gICAgVmlkZW9GcmFtZURyYXdlci5kcmF3VGV4dHVyZShkcmF3ZXIs
IHByZXBhcmVkQnVmZmVyLCByZW5kZXJNYXRyaXgsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LAot
ICAgICAgICAvKiB2aWV3cG9ydFg9ICovIDAsIC8qIHZpZXdwb3J0WT0gKi8gMCwgdmlld3BvcnRX
aWR0aCwKLSAgICAgICAgLyogdmlld3BvcnRIZWlnaHQ9ICovIGZyYW1lSGVpZ2h0KTsKLQotICAg
IC8vIERyYXcgVS4KLSAgICBzaGFkZXJDYWxsYmFja3Muc2V0UGxhbmVVKCk7Ci0gICAgVmlkZW9G
cmFtZURyYXdlci5kcmF3VGV4dHVyZShkcmF3ZXIsIHByZXBhcmVkQnVmZmVyLCByZW5kZXJNYXRy
aXgsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LAotICAgICAgICAvKiB2aWV3cG9ydFg9ICovIDAs
IC8qIHZpZXdwb3J0WT0gKi8gZnJhbWVIZWlnaHQsIHZpZXdwb3J0V2lkdGggLyAyLAotICAgICAg
ICAvKiB2aWV3cG9ydEhlaWdodD0gKi8gdXZIZWlnaHQpOwotCi0gICAgLy8gRHJhdyBWLgotICAg
IHNoYWRlckNhbGxiYWNrcy5zZXRQbGFuZVYoKTsKLSAgICBWaWRlb0ZyYW1lRHJhd2VyLmRyYXdU
ZXh0dXJlKGRyYXdlciwgcHJlcGFyZWRCdWZmZXIsIHJlbmRlck1hdHJpeCwgZnJhbWVXaWR0aCwg
ZnJhbWVIZWlnaHQsCi0gICAgICAgIC8qIHZpZXdwb3J0WD0gKi8gdmlld3BvcnRXaWR0aCAvIDIs
IC8qIHZpZXdwb3J0WT0gKi8gZnJhbWVIZWlnaHQsIHZpZXdwb3J0V2lkdGggLyAyLAotICAgICAg
ICAvKiB2aWV3cG9ydEhlaWdodD0gKi8gdXZIZWlnaHQpOwotCi0gICAgR0xFUzIwLmdsUmVhZFBp
eGVscygwLCAwLCBpNDIwVGV4dHVyZUZyYW1lQnVmZmVyLmdldFdpZHRoKCksIGk0MjBUZXh0dXJl
RnJhbWVCdWZmZXIuZ2V0SGVpZ2h0KCksCi0gICAgICAgIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAu
R0xfVU5TSUdORURfQllURSwgaTQyMEJ5dGVCdWZmZXIpOwotCi0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJZdXZDb252ZXJ0ZXIuY29udmVydCIpOwotCi0gICAgLy8gUmVzdG9yZSBub3Jt
YWwgZnJhbWVidWZmZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9G
UkFNRUJVRkZFUiwgMCk7Ci0KLSAgICAvLyBQcmVwYXJlIFksIFUsIGFuZCBWIEJ5dGVCdWZmZXIg
c2xpY2VzLgotICAgIGZpbmFsIGludCB5UG9zID0gMDsKLSAgICBmaW5hbCBpbnQgdVBvcyA9IHlQ
b3MgKyBzdHJpZGUgKiBmcmFtZUhlaWdodDsKLSAgICAvLyBSb3dzIG9mIFUgYW5kIFYgYWx0ZXJu
YXRlIGluIHRoZSBidWZmZXIsIHNvIFYgZGF0YSBzdGFydHMgYWZ0ZXIgdGhlIGZpcnN0IHJvdyBv
ZiBVLgotICAgIGZpbmFsIGludCB2UG9zID0gdVBvcyArIHN0cmlkZSAvIDI7Ci0KLSAgICBpNDIw
Qnl0ZUJ1ZmZlci5wb3NpdGlvbih5UG9zKTsKLSAgICBpNDIwQnl0ZUJ1ZmZlci5saW1pdCh5UG9z
ICsgc3RyaWRlICogZnJhbWVIZWlnaHQpOwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVkgPSBp
NDIwQnl0ZUJ1ZmZlci5zbGljZSgpOwotCi0gICAgaTQyMEJ5dGVCdWZmZXIucG9zaXRpb24odVBv
cyk7Ci0gICAgLy8gVGhlIGxhc3Qgcm93IGRvZXMgbm90IGhhdmUgcGFkZGluZy4KLSAgICBmaW5h
bCBpbnQgdXZTaXplID0gc3RyaWRlICogKHV2SGVpZ2h0IC0gMSkgKyBzdHJpZGUgLyAyOwotICAg
IGk0MjBCeXRlQnVmZmVyLmxpbWl0KHVQb3MgKyB1dlNpemUpOwotICAgIGZpbmFsIEJ5dGVCdWZm
ZXIgZGF0YVUgPSBpNDIwQnl0ZUJ1ZmZlci5zbGljZSgpOwotCi0gICAgaTQyMEJ5dGVCdWZmZXIu
cG9zaXRpb24odlBvcyk7Ci0gICAgaTQyMEJ5dGVCdWZmZXIubGltaXQodlBvcyArIHV2U2l6ZSk7
Ci0gICAgZmluYWwgQnl0ZUJ1ZmZlciBkYXRhViA9IGk0MjBCeXRlQnVmZmVyLnNsaWNlKCk7Ci0K
LSAgICBwcmVwYXJlZEJ1ZmZlci5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gSmF2YUk0MjBCdWZm
ZXIud3JhcChmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgZGF0YVksIHN0cmlkZSwgZGF0YVUsIHN0
cmlkZSwgZGF0YVYsIHN0cmlkZSwKLSAgICAgICAgKCkgLT4geyBKbmlDb21tb24ubmF0aXZlRnJl
ZUJ5dGVCdWZmZXIoaTQyMEJ5dGVCdWZmZXIpOyB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJl
bGVhc2UoKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAg
IGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgaTQyMFRleHR1cmVGcmFtZUJ1ZmZlci5yZWxlYXNlKCk7
Ci0gICAgdmlkZW9GcmFtZURyYXdlci5yZWxlYXNlKCk7Ci0gICAgLy8gQWxsb3cgdGhpcyBjbGFz
cyB0byBiZSByZXVzZWQuCi0gICAgdGhyZWFkQ2hlY2tlci5kZXRhY2hUaHJlYWQoKTsKLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMvWXV2SGVscGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9Z
dXZIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiZDdkY2JiNDRi
NjI2ODhlOWM3Nzk2YTM2YjI2MmQzNDI1MjNmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9ZdXZIZWxwZXIuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0vKiogV3JhcHMgbGlieXV2
IG1ldGhvZHMgdG8gSmF2YS4gQWxsIHBhc3NlZCBieXRlIGJ1ZmZlcnMgbXVzdCBiZSBkaXJlY3Qg
Ynl0ZSBidWZmZXJzLiAqLwotcHVibGljIGNsYXNzIFl1dkhlbHBlciB7Ci0gIC8qKiBIZWxwZXIg
bWV0aG9kIGZvciBjb3B5aW5nIEk0MjAgdG8gdGlnaHRseSBwYWNrZWQgZGVzdGluYXRpb24gYnVm
ZmVyLiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgSTQyMENvcHkoQnl0ZUJ1ZmZlciBzcmNZLCBp
bnQgc3JjU3RyaWRlWSwgQnl0ZUJ1ZmZlciBzcmNVLCBpbnQgc3JjU3RyaWRlVSwKLSAgICAgIEJ5
dGVCdWZmZXIgc3JjViwgaW50IHNyY1N0cmlkZVYsIEJ5dGVCdWZmZXIgZHN0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpIHsKLSAgICBmaW5hbCBpbnQgY2hyb21hSGVpZ2h0ID0gKGhlaWdodCArIDEp
IC8gMjsKLSAgICBmaW5hbCBpbnQgY2hyb21hV2lkdGggPSAod2lkdGggKyAxKSAvIDI7Ci0KLSAg
ICBmaW5hbCBpbnQgbWluU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICsgY2hyb21hV2lkdGggKiBjaHJv
bWFIZWlnaHQgKiAyOwotICAgIGlmIChkc3QuY2FwYWNpdHkoKSA8IG1pblNpemUpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkV4cGVjdGVkIGRlc3RpbmF0aW9u
IGJ1ZmZlciBjYXBhY2l0eSB0byBiZSBhdCBsZWFzdCAiCi0gICAgICAgICAgKyBtaW5TaXplICsg
IiB3YXMgIiArIGRzdC5jYXBhY2l0eSgpKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBpbnQgc3RhcnRZ
ID0gMDsKLSAgICBmaW5hbCBpbnQgc3RhcnRVID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgZmluYWwg
aW50IHN0YXJ0ViA9IHN0YXJ0VSArIGNocm9tYUhlaWdodCAqIGNocm9tYVdpZHRoOwotCi0gICAg
ZHN0LnBvc2l0aW9uKHN0YXJ0WSk7Ci0gICAgZmluYWwgQnl0ZUJ1ZmZlciBkc3RZID0gZHN0LnNs
aWNlKCk7Ci0gICAgZHN0LnBvc2l0aW9uKHN0YXJ0VSk7Ci0gICAgZmluYWwgQnl0ZUJ1ZmZlciBk
c3RVID0gZHN0LnNsaWNlKCk7Ci0gICAgZHN0LnBvc2l0aW9uKHN0YXJ0Vik7Ci0gICAgZmluYWwg
Qnl0ZUJ1ZmZlciBkc3RWID0gZHN0LnNsaWNlKCk7Ci0KLSAgICBuYXRpdmVJNDIwQ29weShzcmNZ
LCBzcmNTdHJpZGVZLCBzcmNVLCBzcmNTdHJpZGVVLCBzcmNWLCBzcmNTdHJpZGVWLCBkc3RZLCB3
aWR0aCwgZHN0VSwKLSAgICAgICAgY2hyb21hV2lkdGgsIGRzdFYsIGNocm9tYVdpZHRoLCB3aWR0
aCwgaGVpZ2h0KTsKLSAgfQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIGZvciBjb3B5aW5nIEk0MjAg
dG8gdGlnaHRseSBwYWNrZWQgTlYxMiBkZXN0aW5hdGlvbiBidWZmZXIuICovCi0gIHB1YmxpYyBz
dGF0aWMgdm9pZCBJNDIwVG9OVjEyKEJ5dGVCdWZmZXIgc3JjWSwgaW50IHNyY1N0cmlkZVksIEJ5
dGVCdWZmZXIgc3JjVSwgaW50IHNyY1N0cmlkZVUsCi0gICAgICBCeXRlQnVmZmVyIHNyY1YsIGlu
dCBzcmNTdHJpZGVWLCBCeXRlQnVmZmVyIGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0g
ICAgZmluYWwgaW50IGNocm9tYVdpZHRoID0gKHdpZHRoICsgMSkgLyAyOwotICAgIGZpbmFsIGlu
dCBjaHJvbWFIZWlnaHQgPSAoaGVpZ2h0ICsgMSkgLyAyOwotCi0gICAgZmluYWwgaW50IG1pblNp
emUgPSB3aWR0aCAqIGhlaWdodCArIGNocm9tYVdpZHRoICogY2hyb21hSGVpZ2h0ICogMjsKLSAg
ICBpZiAoZHN0LmNhcGFjaXR5KCkgPCBtaW5TaXplKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKCJFeHBlY3RlZCBkZXN0aW5hdGlvbiBidWZmZXIgY2FwYWNpdHkg
dG8gYmUgYXQgbGVhc3QgIgotICAgICAgICAgICsgbWluU2l6ZSArICIgd2FzICIgKyBkc3QuY2Fw
YWNpdHkoKSk7Ci0gICAgfQotCi0gICAgZmluYWwgaW50IHN0YXJ0WSA9IDA7Ci0gICAgZmluYWwg
aW50IHN0YXJ0VVYgPSBoZWlnaHQgKiB3aWR0aDsKLQotICAgIGRzdC5wb3NpdGlvbihzdGFydFkp
OwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZHN0WSA9IGRzdC5zbGljZSgpOwotICAgIGRzdC5wb3Np
dGlvbihzdGFydFVWKTsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdFVWID0gZHN0LnNsaWNlKCk7
Ci0KLSAgICBuYXRpdmVJNDIwVG9OVjEyKHNyY1ksIHNyY1N0cmlkZVksIHNyY1UsIHNyY1N0cmlk
ZVUsIHNyY1YsIHNyY1N0cmlkZVYsIGRzdFksIHdpZHRoLCBkc3RVViwKLSAgICAgICAgY2hyb21h
V2lkdGggKiAyLCB3aWR0aCwgaGVpZ2h0KTsKLSAgfQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIGZv
ciByb3RhdGluZyBJNDIwIHRvIHRpZ2h0bHkgcGFja2VkIGRlc3RpbmF0aW9uIGJ1ZmZlci4gKi8K
LSAgcHVibGljIHN0YXRpYyB2b2lkIEk0MjBSb3RhdGUoQnl0ZUJ1ZmZlciBzcmNZLCBpbnQgc3Jj
U3RyaWRlWSwgQnl0ZUJ1ZmZlciBzcmNVLCBpbnQgc3JjU3RyaWRlVSwKLSAgICAgIEJ5dGVCdWZm
ZXIgc3JjViwgaW50IHNyY1N0cmlkZVYsIEJ5dGVCdWZmZXIgZHN0LCBpbnQgc3JjV2lkdGgsIGlu
dCBzcmNIZWlnaHQsCi0gICAgICBpbnQgcm90YXRpb25Nb2RlKSB7Ci0gICAgZmluYWwgaW50IGRz
dFdpZHRoID0gcm90YXRpb25Nb2RlICUgMTgwID09IDAgPyBzcmNXaWR0aCA6IHNyY0hlaWdodDsK
LSAgICBmaW5hbCBpbnQgZHN0SGVpZ2h0ID0gcm90YXRpb25Nb2RlICUgMTgwID09IDAgPyBzcmNI
ZWlnaHQgOiBzcmNXaWR0aDsKLQotICAgIGZpbmFsIGludCBkc3RDaHJvbWFIZWlnaHQgPSAoZHN0
SGVpZ2h0ICsgMSkgLyAyOwotICAgIGZpbmFsIGludCBkc3RDaHJvbWFXaWR0aCA9IChkc3RXaWR0
aCArIDEpIC8gMjsKLQotICAgIGZpbmFsIGludCBtaW5TaXplID0gZHN0V2lkdGggKiBkc3RIZWln
aHQgKyBkc3RDaHJvbWFXaWR0aCAqIGRzdENocm9tYUhlaWdodCAqIDI7Ci0gICAgaWYgKGRzdC5j
YXBhY2l0eSgpIDwgbWluU2l6ZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiRXhwZWN0ZWQgZGVzdGluYXRpb24gYnVmZmVyIGNhcGFjaXR5IHRvIGJlIGF0IGxl
YXN0ICIKLSAgICAgICAgICArIG1pblNpemUgKyAiIHdhcyAiICsgZHN0LmNhcGFjaXR5KCkpOwot
ICAgIH0KLQotICAgIGZpbmFsIGludCBzdGFydFkgPSAwOwotICAgIGZpbmFsIGludCBzdGFydFUg
PSBkc3RIZWlnaHQgKiBkc3RXaWR0aDsKLSAgICBmaW5hbCBpbnQgc3RhcnRWID0gc3RhcnRVICsg
ZHN0Q2hyb21hSGVpZ2h0ICogZHN0Q2hyb21hV2lkdGg7Ci0KLSAgICBkc3QucG9zaXRpb24oc3Rh
cnRZKTsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdFkgPSBkc3Quc2xpY2UoKTsKLSAgICBkc3Qu
cG9zaXRpb24oc3RhcnRVKTsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdFUgPSBkc3Quc2xpY2Uo
KTsKLSAgICBkc3QucG9zaXRpb24oc3RhcnRWKTsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdFYg
PSBkc3Quc2xpY2UoKTsKLQotICAgIG5hdGl2ZUk0MjBSb3RhdGUoc3JjWSwgc3JjU3RyaWRlWSwg
c3JjVSwgc3JjU3RyaWRlVSwgc3JjViwgc3JjU3RyaWRlViwgZHN0WSwgZHN0V2lkdGgsIGRzdFUs
Ci0gICAgICAgIGRzdENocm9tYVdpZHRoLCBkc3RWLCBkc3RDaHJvbWFXaWR0aCwgc3JjV2lkdGgs
IHNyY0hlaWdodCwgcm90YXRpb25Nb2RlKTsKLSAgfQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIGZv
ciBjb3B5aW5nIGEgc2luZ2xlIGNvbG91ciBwbGFuZS4gKi8KLSAgcHVibGljIHN0YXRpYyB2b2lk
IGNvcHlQbGFuZSgKLSAgICAgIEJ5dGVCdWZmZXIgc3JjLCBpbnQgc3JjU3RyaWRlLCBCeXRlQnVm
ZmVyIGRzdCwgaW50IGRzdFN0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgbmF0
aXZlQ29weVBsYW5lKHNyYywgc3JjU3RyaWRlLCBkc3QsIGRzdFN0cmlkZSwgd2lkdGgsIGhlaWdo
dCk7Ci0gIH0KLQotICAvKiogQ29udmVydHMgQUJHUiBsaXR0bGUgZW5kaWFuIChyZ2JhIGluIG1l
bW9yeSkgdG8gSTQyMC4gKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIEFCR1JUb0k0MjAoQnl0ZUJ1
ZmZlciBzcmMsIGludCBzcmNTdHJpZGUsIEJ5dGVCdWZmZXIgZHN0WSwgaW50IGRzdFN0cmlkZVks
Ci0gICAgICBCeXRlQnVmZmVyIGRzdFUsIGludCBkc3RTdHJpZGVVLCBCeXRlQnVmZmVyIGRzdFYs
IGludCBkc3RTdHJpZGVWLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBuYXRpdmVBQkdS
VG9JNDIwKAotICAgICAgICBzcmMsIHNyY1N0cmlkZSwgZHN0WSwgZHN0U3RyaWRlWSwgZHN0VSwg
ZHN0U3RyaWRlVSwgZHN0ViwgZHN0U3RyaWRlViwgd2lkdGgsIGhlaWdodCk7Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIHZvaWQgSTQyMENvcHkoQnl0ZUJ1ZmZlciBzcmNZLCBpbnQgc3JjU3RyaWRl
WSwgQnl0ZUJ1ZmZlciBzcmNVLCBpbnQgc3JjU3RyaWRlVSwKLSAgICAgIEJ5dGVCdWZmZXIgc3Jj
ViwgaW50IHNyY1N0cmlkZVYsIEJ5dGVCdWZmZXIgZHN0WSwgaW50IGRzdFN0cmlkZVksIEJ5dGVC
dWZmZXIgZHN0VSwKLSAgICAgIGludCBkc3RTdHJpZGVVLCBCeXRlQnVmZmVyIGRzdFYsIGludCBk
c3RTdHJpZGVWLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBuYXRpdmVJNDIwQ29weShz
cmNZLCBzcmNTdHJpZGVZLCBzcmNVLCBzcmNTdHJpZGVVLCBzcmNWLCBzcmNTdHJpZGVWLCBkc3RZ
LCBkc3RTdHJpZGVZLCBkc3RVLAotICAgICAgICBkc3RTdHJpZGVVLCBkc3RWLCBkc3RTdHJpZGVW
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBJNDIwVG9OVjEy
KEJ5dGVCdWZmZXIgc3JjWSwgaW50IHNyY1N0cmlkZVksIEJ5dGVCdWZmZXIgc3JjVSwgaW50IHNy
Y1N0cmlkZVUsCi0gICAgICBCeXRlQnVmZmVyIHNyY1YsIGludCBzcmNTdHJpZGVWLCBCeXRlQnVm
ZmVyIGRzdFksIGludCBkc3RTdHJpZGVZLCBCeXRlQnVmZmVyIGRzdFVWLAotICAgICAgaW50IGRz
dFN0cmlkZVVWLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBuYXRpdmVJNDIwVG9OVjEy
KHNyY1ksIHNyY1N0cmlkZVksIHNyY1UsIHNyY1N0cmlkZVUsIHNyY1YsIHNyY1N0cmlkZVYsIGRz
dFksIGRzdFN0cmlkZVksIGRzdFVWLAotICAgICAgICBkc3RTdHJpZGVVViwgd2lkdGgsIGhlaWdo
dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgSTQyMFJvdGF0ZShCeXRlQnVmZmVyIHNy
Y1ksIGludCBzcmNTdHJpZGVZLCBCeXRlQnVmZmVyIHNyY1UsIGludCBzcmNTdHJpZGVVLAotICAg
ICAgQnl0ZUJ1ZmZlciBzcmNWLCBpbnQgc3JjU3RyaWRlViwgQnl0ZUJ1ZmZlciBkc3RZLCBpbnQg
ZHN0U3RyaWRlWSwgQnl0ZUJ1ZmZlciBkc3RVLAotICAgICAgaW50IGRzdFN0cmlkZVUsIEJ5dGVC
dWZmZXIgZHN0ViwgaW50IGRzdFN0cmlkZVYsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCwK
LSAgICAgIGludCByb3RhdGlvbk1vZGUpIHsKLSAgICBuYXRpdmVJNDIwUm90YXRlKHNyY1ksIHNy
Y1N0cmlkZVksIHNyY1UsIHNyY1N0cmlkZVUsIHNyY1YsIHNyY1N0cmlkZVYsIGRzdFksIGRzdFN0
cmlkZVksIGRzdFUsCi0gICAgICAgIGRzdFN0cmlkZVUsIGRzdFYsIGRzdFN0cmlkZVYsIHNyY1dp
ZHRoLCBzcmNIZWlnaHQsIHJvdGF0aW9uTW9kZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgdm9pZCBuYXRpdmVDb3B5UGxhbmUoCi0gICAgICBCeXRlQnVmZmVyIHNyYywgaW50IHNy
Y1N0cmlkZSwgQnl0ZUJ1ZmZlciBkc3QsIGludCBkc3RTdHJpZGUsIGludCB3aWR0aCwgaW50IGhl
aWdodCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUk0MjBDb3B5KEJ5dGVC
dWZmZXIgc3JjWSwgaW50IHNyY1N0cmlkZVksIEJ5dGVCdWZmZXIgc3JjVSwKLSAgICAgIGludCBz
cmNTdHJpZGVVLCBCeXRlQnVmZmVyIHNyY1YsIGludCBzcmNTdHJpZGVWLCBCeXRlQnVmZmVyIGRz
dFksIGludCBkc3RTdHJpZGVZLAotICAgICAgQnl0ZUJ1ZmZlciBkc3RVLCBpbnQgZHN0U3RyaWRl
VSwgQnl0ZUJ1ZmZlciBkc3RWLCBpbnQgZHN0U3RyaWRlViwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlSTQyMFRvTlYxMihCeXRlQnVm
ZmVyIHNyY1ksIGludCBzcmNTdHJpZGVZLCBCeXRlQnVmZmVyIHNyY1UsCi0gICAgICBpbnQgc3Jj
U3RyaWRlVSwgQnl0ZUJ1ZmZlciBzcmNWLCBpbnQgc3JjU3RyaWRlViwgQnl0ZUJ1ZmZlciBkc3RZ
LCBpbnQgZHN0U3RyaWRlWSwKLSAgICAgIEJ5dGVCdWZmZXIgZHN0VVYsIGludCBkc3RTdHJpZGVV
ViwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQg
bmF0aXZlSTQyMFJvdGF0ZShCeXRlQnVmZmVyIHNyY1ksIGludCBzcmNTdHJpZGVZLCBCeXRlQnVm
ZmVyIHNyY1UsCi0gICAgICBpbnQgc3JjU3RyaWRlVSwgQnl0ZUJ1ZmZlciBzcmNWLCBpbnQgc3Jj
U3RyaWRlViwgQnl0ZUJ1ZmZlciBkc3RZLCBpbnQgZHN0U3RyaWRlWSwKLSAgICAgIEJ5dGVCdWZm
ZXIgZHN0VSwgaW50IGRzdFN0cmlkZVUsIEJ5dGVCdWZmZXIgZHN0ViwgaW50IGRzdFN0cmlkZVYs
IGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCwKLSAgICAgIGludCByb3RhdGlvbk1vZGUpOwot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBQkdSVG9JNDIwKEJ5dGVCdWZmZXIg
c3JjLCBpbnQgc3JjU3RyaWRlLCBCeXRlQnVmZmVyIGRzdFksCi0gICAgICBpbnQgZHN0U3RyaWRl
WSwgQnl0ZUJ1ZmZlciBkc3RVLCBpbnQgZHN0U3RyaWRlVSwgQnl0ZUJ1ZmZlciBkc3RWLCBpbnQg
ZHN0U3RyaWRlViwgaW50IHdpZHRoLAotICAgICAgaW50IGhlaWdodCk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9hdWRpby9BdWRpb0RldmljZU1vZHVsZS5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvYXBpL29yZy93ZWJydGMv
YXVkaW8vQXVkaW9EZXZpY2VNb2R1bGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTAyYzY4Y2M5YWJlYmFmOTkxMTViY2UxZDQzNDdiNWIyYWJlOTJkYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9hcGkvb3JnL3dlYnJ0Yy9hdWRpby9BdWRp
b0RldmljZU1vZHVsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLmF1ZGlvOwotCi0vKioKLSAqIFRoaXMg
aW50ZXJmYWNlIGlzIGEgdGhpbiB3cmFwcGVyIG9uIHRvcCBvZiBhIG5hdGl2ZSBDKysgd2VicnRj
OjpBdWRpb0RldmljZU1vZHVsZSAoQURNKS4gVGhlCi0gKiByZWFzb24gZm9yIGJhc2luZyBpdCBv
biBhIG5hdGl2ZSBBRE0gaW5zdGVhZCBvZiBhIHB1cmUgSmF2YSBpbnRlcmZhY2UgaXMgdGhhdCB3
ZSBoYXZlIHR3byBuYXRpdmUKLSAqIEFuZHJvaWQgaW1wbGVtZW50YXRpb25zIChPcGVuU0xFUyBh
bmQgQUF1ZGlvKSB0aGF0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gd3JhcCB0aHJvdWdoIEpOSS4K
LSAqCi0gKiA8cD5Ob3RlOiBUaGlzIGNsYXNzIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFu
ZCBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEF1ZGlv
RGV2aWNlTW9kdWxlIHsKLSAgLyoqCi0gICAqIFJldHVybnMgYSBDKysgcG9pbnRlciB0byBhIHdl
YnJ0Yzo6QXVkaW9EZXZpY2VNb2R1bGUuIENhbGxlciBkb2VzIF9ub3RfIHRha2Ugb3duZXJzaGlw
IGFuZAotICAgKiBsaWZldGltZSBpcyBoYW5kbGVkIHRocm91Z2ggdGhlIHJlbGVhc2UoKSBjYWxs
LgotICAgKi8KLSAgbG9uZyBnZXROYXRpdmVBdWRpb0RldmljZU1vZHVsZVBvaW50ZXIoKTsKLQot
ICAvKioKLSAgICogUmVsZWFzZSByZXNvdXJjZXMgZm9yIHRoaXMgQXVkaW9EZXZpY2VNb2R1bGUs
IGluY2x1ZGluZyBuYXRpdmUgcmVzb3VyY2VzLiBUaGUgb2JqZWN0IHNob3VsZCBub3QKLSAgICog
YmUgdXNlZCBhZnRlciB0aGlzIGNhbGwuCi0gICAqLwotICB2b2lkIHJlbGVhc2UoKTsKLQotICAv
KiogQ29udHJvbCBtdXRpbmcvdW5tdXRpbmcgdGhlIHNwZWFrZXIuICovCi0gIHZvaWQgc2V0U3Bl
YWtlck11dGUoYm9vbGVhbiBtdXRlKTsKLQotICAvKiogQ29udHJvbCBtdXRpbmcvdW5tdXRpbmcg
dGhlIG1pY3JvcGhvbmUuICovCi0gIHZvaWQgc2V0TWljcm9waG9uZU11dGUoYm9vbGVhbiBtdXRl
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2FwaS9vcmcvd2VicnRjL2F1ZGlvL0phdmFBdWRpb0RldmljZU1vZHVs
ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvYXBpL29yZy93ZWJydGMvYXVkaW8vSmF2YUF1ZGlvRGV2aWNlTW9kdWxlLmphdmEKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTZmMzVkNGNkNjljNjM5ZTU0NjMxMDdlODNl
ZDMwZjc5MWRmMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
YXBpL29yZy93ZWJydGMvYXVkaW8vSmF2YUF1ZGlvRGV2aWNlTW9kdWxlLmphdmEKKysrIC9kZXYv
bnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjLmF1ZGlvOwotCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5KbmlDb21tb247
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi0vKioKLSAqIEF1ZGlvRGV2aWNlTW9kdWxl
IGltcGxlbWVudGVkIHVzaW5nIGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQgYXMgaW5wdXQgYW5k
Ci0gKiBhbmRyb2lkLm1lZGlhLkF1ZGlvVHJhY2sgYXMgb3V0cHV0LgotICovCi1wdWJsaWMgY2xh
c3MgSmF2YUF1ZGlvRGV2aWNlTW9kdWxlIGltcGxlbWVudHMgQXVkaW9EZXZpY2VNb2R1bGUgewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkphdmFBdWRpb0RldmljZU1vZHVs
ZSI7Ci0KLSAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGJ1aWxkZXIoQ29udGV4dCBjb250ZXh0KSB7
Ci0gICAgcmV0dXJuIG5ldyBCdWlsZGVyKGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAg
ICBwcml2YXRlIGZpbmFsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0gICAgcHJpdmF0ZSBp
bnQgaW5wdXRTYW1wbGVSYXRlOwotICAgIHByaXZhdGUgaW50IG91dHB1dFNhbXBsZVJhdGU7Ci0g
ICAgcHJpdmF0ZSBpbnQgYXVkaW9Tb3VyY2UgPSBXZWJSdGNBdWRpb1JlY29yZC5ERUZBVUxUX0FV
RElPX1NPVVJDRTsKLSAgICBwcml2YXRlIGludCBhdWRpb0Zvcm1hdCA9IFdlYlJ0Y0F1ZGlvUmVj
b3JkLkRFRkFVTFRfQVVESU9fRk9STUFUOwotICAgIHByaXZhdGUgQXVkaW9UcmFja0Vycm9yQ2Fs
bGJhY2sgYXVkaW9UcmFja0Vycm9yQ2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBBdWRpb1JlY29yZEVy
cm9yQ2FsbGJhY2sgYXVkaW9SZWNvcmRFcnJvckNhbGxiYWNrOwotICAgIHByaXZhdGUgU2FtcGxl
c1JlYWR5Q2FsbGJhY2sgc2FtcGxlc1JlYWR5Q2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBBdWRpb1Ry
YWNrU3RhdGVDYWxsYmFjayBhdWRpb1RyYWNrU3RhdGVDYWxsYmFjazsKLSAgICBwcml2YXRlIEF1
ZGlvUmVjb3JkU3RhdGVDYWxsYmFjayBhdWRpb1JlY29yZFN0YXRlQ2FsbGJhY2s7Ci0gICAgcHJp
dmF0ZSBib29sZWFuIHVzZUhhcmR3YXJlQWNvdXN0aWNFY2hvQ2FuY2VsZXIgPSBpc0J1aWx0SW5B
Y291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpOwotICAgIHByaXZhdGUgYm9vbGVhbiB1c2VI
YXJkd2FyZU5vaXNlU3VwcHJlc3NvciA9IGlzQnVpbHRJbk5vaXNlU3VwcHJlc3NvclN1cHBvcnRl
ZCgpOwotICAgIHByaXZhdGUgYm9vbGVhbiB1c2VTdGVyZW9JbnB1dDsKLSAgICBwcml2YXRlIGJv
b2xlYW4gdXNlU3RlcmVvT3V0cHV0OwotCi0gICAgcHJpdmF0ZSBCdWlsZGVyKENvbnRleHQgY29u
dGV4dCkgewotICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICAgIHRoaXMuYXVkaW9N
YW5hZ2VyID0gKEF1ZGlvTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQu
QVVESU9fU0VSVklDRSk7Ci0gICAgICB0aGlzLmlucHV0U2FtcGxlUmF0ZSA9IFdlYlJ0Y0F1ZGlv
TWFuYWdlci5nZXRTYW1wbGVSYXRlKGF1ZGlvTWFuYWdlcik7Ci0gICAgICB0aGlzLm91dHB1dFNh
bXBsZVJhdGUgPSBXZWJSdGNBdWRpb01hbmFnZXIuZ2V0U2FtcGxlUmF0ZShhdWRpb01hbmFnZXIp
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGRlZmF1
bHQgaGFuZGxpbmcgb2YgcXVlcnlpbmcgdGhlIG5hdGl2ZSBzYW1wbGUgcmF0ZSBzaGFsbCBiZQot
ICAgICAqIG92ZXJyaWRkZW4uIENhbiBiZSB1c2VmdWwgb24gc29tZSBkZXZpY2VzIHdoZXJlIHRo
ZSBhdmFpbGFibGUgQW5kcm9pZCBBUElzIGFyZSBrbm93biB0bwotICAgICAqIHJldHVybiBpbnZh
bGlkIHJlc3VsdHMuCi0gICAgICovCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0U2FtcGxlUmF0ZShp
bnQgc2FtcGxlUmF0ZSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIklucHV0L091dHB1dCBzYW1w
bGUgcmF0ZSBvdmVycmlkZGVuIHRvOiAiICsgc2FtcGxlUmF0ZSk7Ci0gICAgICB0aGlzLmlucHV0
U2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0gICAgICB0aGlzLm91dHB1dFNhbXBsZVJhdGUgPSBz
YW1wbGVSYXRlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
Q2FsbCB0aGlzIG1ldGhvZCB0byBzcGVjaWZpY2FsbHkgb3ZlcnJpZGUgaW5wdXQgc2FtcGxlIHJh
dGUuCi0gICAgICovCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0SW5wdXRTYW1wbGVSYXRlKGludCBp
bnB1dFNhbXBsZVJhdGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJJbnB1dCBzYW1wbGUgcmF0
ZSBvdmVycmlkZGVuIHRvOiAiICsgaW5wdXRTYW1wbGVSYXRlKTsKLSAgICAgIHRoaXMuaW5wdXRT
YW1wbGVSYXRlID0gaW5wdXRTYW1wbGVSYXRlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBzcGVjaWZpY2FsbHkgb3ZlcnJp
ZGUgb3V0cHV0IHNhbXBsZSByYXRlLgotICAgICAqLwotICAgIHB1YmxpYyBCdWlsZGVyIHNldE91
dHB1dFNhbXBsZVJhdGUoaW50IG91dHB1dFNhbXBsZVJhdGUpIHsKLSAgICAgIExvZ2dpbmcuZChU
QUcsICJPdXRwdXQgc2FtcGxlIHJhdGUgb3ZlcnJpZGRlbiB0bzogIiArIG91dHB1dFNhbXBsZVJh
dGUpOwotICAgICAgdGhpcy5vdXRwdXRTYW1wbGVSYXRlID0gb3V0cHV0U2FtcGxlUmF0ZTsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGwgdGhpcyB0byBj
aGFuZ2UgdGhlIGF1ZGlvIHNvdXJjZS4gVGhlIGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgdGhl
IHZhbHVlcyBmcm9tCi0gICAgICogYW5kcm9pZC5tZWRpYS5NZWRpYVJlY29yZGVyLkF1ZGlvU291
cmNlLiBUaGUgZGVmYXVsdCBpcyBBdWRpb1NvdXJjZS5WT0lDRV9DT01NVU5JQ0FUSU9OLgotICAg
ICAqLwotICAgIHB1YmxpYyBCdWlsZGVyIHNldEF1ZGlvU291cmNlKGludCBhdWRpb1NvdXJjZSkg
ewotICAgICAgdGhpcy5hdWRpb1NvdXJjZSA9IGF1ZGlvU291cmNlOwotICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbCB0aGlzIHRvIGNoYW5nZSB0aGUgYXVk
aW8gZm9ybWF0LiBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIG9uZSBvZiB0aGUgdmFsdWVzIGZyb20K
LSAgICAgKiBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0IEVOQ09ESU5HX1BDTV84QklULCBFTkNP
RElOR19QQ01fMTZCSVQgb3IgRU5DT0RJTkdfUENNX0ZMT0FULgotICAgICAqIERlZmF1bHQgYXVk
aW8gZGF0YSBmb3JtYXQgaXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAgICAqIEd1YXJhbnRl
ZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzLgotICAgICAqLwotICAgIHB1YmxpYyBC
dWlsZGVyIHNldEF1ZGlvRm9ybWF0KGludCBhdWRpb0Zvcm1hdCkgewotICAgICAgdGhpcy5hdWRp
b0Zvcm1hdCA9IGF1ZGlvRm9ybWF0OwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogU2V0IGEgY2FsbGJhY2sgdG8gcmV0cmlldmUgZXJyb3JzIGZyb20gdGhlIEF1
ZGlvVHJhY2suCi0gICAgICovCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0QXVkaW9UcmFja0Vycm9y
Q2FsbGJhY2soQXVkaW9UcmFja0Vycm9yQ2FsbGJhY2sgYXVkaW9UcmFja0Vycm9yQ2FsbGJhY2sp
IHsKLSAgICAgIHRoaXMuYXVkaW9UcmFja0Vycm9yQ2FsbGJhY2sgPSBhdWRpb1RyYWNrRXJyb3JD
YWxsYmFjazsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNl
dCBhIGNhbGxiYWNrIHRvIHJldHJpZXZlIGVycm9ycyBmcm9tIHRoZSBBdWRpb1JlY29yZC4KLSAg
ICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRBdWRpb1JlY29yZEVycm9yQ2FsbGJhY2soQXVk
aW9SZWNvcmRFcnJvckNhbGxiYWNrIGF1ZGlvUmVjb3JkRXJyb3JDYWxsYmFjaykgewotICAgICAg
dGhpcy5hdWRpb1JlY29yZEVycm9yQ2FsbGJhY2sgPSBhdWRpb1JlY29yZEVycm9yQ2FsbGJhY2s7
Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgYSBjYWxs
YmFjayB0byBsaXN0ZW4gdG8gdGhlIHJhdyBhdWRpbyBpbnB1dCBmcm9tIHRoZSBBdWRpb1JlY29y
ZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRTYW1wbGVzUmVhZHlDYWxsYmFjayhT
YW1wbGVzUmVhZHlDYWxsYmFjayBzYW1wbGVzUmVhZHlDYWxsYmFjaykgewotICAgICAgdGhpcy5z
YW1wbGVzUmVhZHlDYWxsYmFjayA9IHNhbXBsZXNSZWFkeUNhbGxiYWNrOwotICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IGEgY2FsbGJhY2sgdG8gcmV0cmll
dmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgQXVkaW9UcmFjayBvbiB3aGVuIGF1ZGlvIHN0YXJ0cyBh
bmQgc3RvcC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRBdWRpb1RyYWNrU3RhdGVD
YWxsYmFjayhBdWRpb1RyYWNrU3RhdGVDYWxsYmFjayBhdWRpb1RyYWNrU3RhdGVDYWxsYmFjaykg
ewotICAgICAgdGhpcy5hdWRpb1RyYWNrU3RhdGVDYWxsYmFjayA9IGF1ZGlvVHJhY2tTdGF0ZUNh
bGxiYWNrOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0
IGEgY2FsbGJhY2sgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgQXVkaW9SZWNvcmQg
b24gd2hlbiBhdWRpbyBzdGFydHMgYW5kIHN0b3BzLgotICAgICAqLwotICAgIHB1YmxpYyBCdWls
ZGVyIHNldEF1ZGlvUmVjb3JkU3RhdGVDYWxsYmFjayhBdWRpb1JlY29yZFN0YXRlQ2FsbGJhY2sg
YXVkaW9SZWNvcmRTdGF0ZUNhbGxiYWNrKSB7Ci0gICAgICB0aGlzLmF1ZGlvUmVjb3JkU3RhdGVD
YWxsYmFjayA9IGF1ZGlvUmVjb3JkU3RhdGVDYWxsYmFjazsKLSAgICAgIHJldHVybiB0aGlzOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnRyb2wgaWYgdGhlIGJ1aWx0LWluIEhXIG5vaXNl
IHN1cHByZXNzb3Igc2hvdWxkIGJlIHVzZWQgb3Igbm90LiBUaGUgZGVmYXVsdCBpcyBvbiBpZiBp
dCBpcwotICAgICAqIHN1cHBvcnRlZC4gSXQgaXMgcG9zc2libGUgdG8gcXVlcnkgc3VwcG9ydCBi
eSBjYWxsaW5nIGlzQnVpbHRJbk5vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpLgotICAgICAqLwot
ICAgIHB1YmxpYyBCdWlsZGVyIHNldFVzZUhhcmR3YXJlTm9pc2VTdXBwcmVzc29yKGJvb2xlYW4g
dXNlSGFyZHdhcmVOb2lzZVN1cHByZXNzb3IpIHsKLSAgICAgIGlmICh1c2VIYXJkd2FyZU5vaXNl
U3VwcHJlc3NvciAmJiAhaXNCdWlsdEluTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsKLSAg
ICAgICAgTG9nZ2luZy5lKFRBRywgIkhXIE5TIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgdXNl
SGFyZHdhcmVOb2lzZVN1cHByZXNzb3IgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHRoaXMudXNl
SGFyZHdhcmVOb2lzZVN1cHByZXNzb3IgPSB1c2VIYXJkd2FyZU5vaXNlU3VwcHJlc3NvcjsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnRyb2wgaWYgdGhl
IGJ1aWx0LWluIEhXIGFjb3VzdGljIGVjaG8gY2FuY2VsZXIgc2hvdWxkIGJlIHVzZWQgb3Igbm90
LiBUaGUgZGVmYXVsdCBpcyBvbiBpZgotICAgICAqIGl0IGlzIHN1cHBvcnRlZC4gSXQgaXMgcG9z
c2libGUgdG8gcXVlcnkgc3VwcG9ydCBieSBjYWxsaW5nCi0gICAgICogaXNCdWlsdEluQWNvdXN0
aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBz
ZXRVc2VIYXJkd2FyZUFjb3VzdGljRWNob0NhbmNlbGVyKGJvb2xlYW4gdXNlSGFyZHdhcmVBY291
c3RpY0VjaG9DYW5jZWxlcikgewotICAgICAgaWYgKHVzZUhhcmR3YXJlQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXIgJiYgIWlzQnVpbHRJbkFjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkpIHsKLSAg
ICAgICAgTG9nZ2luZy5lKFRBRywgIkhXIEFFQyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIHVz
ZUhhcmR3YXJlQWNvdXN0aWNFY2hvQ2FuY2VsZXIgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHRo
aXMudXNlSGFyZHdhcmVBY291c3RpY0VjaG9DYW5jZWxlciA9IHVzZUhhcmR3YXJlQWNvdXN0aWNF
Y2hvQ2FuY2VsZXI7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBDb250cm9sIGlmIHN0ZXJlbyBpbnB1dCBzaG91bGQgYmUgdXNlZCBvciBub3QuIFRoZSBkZWZh
dWx0IGlzIG1vbm8uCi0gICAgICovCi0gICAgcHVibGljIEJ1aWxkZXIgc2V0VXNlU3RlcmVvSW5w
dXQoYm9vbGVhbiB1c2VTdGVyZW9JbnB1dCkgewotICAgICAgdGhpcy51c2VTdGVyZW9JbnB1dCA9
IHVzZVN0ZXJlb0lucHV0OwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogQ29udHJvbCBpZiBzdGVyZW8gb3V0cHV0IHNob3VsZCBiZSB1c2VkIG9yIG5vdC4gVGhl
IGRlZmF1bHQgaXMgbW9uby4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRVc2VTdGVy
ZW9PdXRwdXQoYm9vbGVhbiB1c2VTdGVyZW9PdXRwdXQpIHsKLSAgICAgIHRoaXMudXNlU3RlcmVv
T3V0cHV0ID0gdXNlU3RlcmVvT3V0cHV0OwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQ29uc3RydWN0IGFuIEF1ZGlvRGV2aWNlTW9kdWxlIGJhc2VkIG9uIHRo
ZSBzdXBwbGllZCBhcmd1bWVudHMuIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwCi0gICAgICog
YW5kIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHJlbGVhc2UoKS4KLSAgICAgKi8KLSAgICBw
dWJsaWMgQXVkaW9EZXZpY2VNb2R1bGUgY3JlYXRlQXVkaW9EZXZpY2VNb2R1bGUoKSB7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLCAiY3JlYXRlQXVkaW9EZXZpY2VNb2R1bGUiKTsKLSAgICAgIGlmICh1
c2VIYXJkd2FyZU5vaXNlU3VwcHJlc3NvcikgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSFcg
TlMgd2lsbCBiZSB1c2VkLiIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzQnVpbHRJ
bk5vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywg
Ik92ZXJyaWRpbmcgZGVmYXVsdCBiZWhhdmlvcjsgbm93IHVzaW5nIFdlYlJUQyBOUyEiKTsKLSAg
ICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSFcgTlMgd2lsbCBub3QgYmUgdXNlZC4i
KTsKLSAgICAgIH0KLSAgICAgIGlmICh1c2VIYXJkd2FyZUFjb3VzdGljRWNob0NhbmNlbGVyKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJIVyBBRUMgd2lsbCBiZSB1c2VkLiIpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKGlzQnVpbHRJbkFjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9y
dGVkKCkpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiT3ZlcnJpZGluZyBkZWZhdWx0IGJl
aGF2aW9yOyBub3cgdXNpbmcgV2ViUlRDIEFFQyEiKTsKLSAgICAgICAgfQotICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiSFcgQUVDIHdpbGwgbm90IGJlIHVzZWQuIik7Ci0gICAgICB9Ci0gICAgICBm
aW5hbCBXZWJSdGNBdWRpb1JlY29yZCBhdWRpb0lucHV0ID0gbmV3IFdlYlJ0Y0F1ZGlvUmVjb3Jk
KGNvbnRleHQsIGF1ZGlvTWFuYWdlciwgYXVkaW9Tb3VyY2UsCi0gICAgICAgICAgYXVkaW9Gb3Jt
YXQsIGF1ZGlvUmVjb3JkRXJyb3JDYWxsYmFjaywgYXVkaW9SZWNvcmRTdGF0ZUNhbGxiYWNrLCBz
YW1wbGVzUmVhZHlDYWxsYmFjaywKLSAgICAgICAgICB1c2VIYXJkd2FyZUFjb3VzdGljRWNob0Nh
bmNlbGVyLCB1c2VIYXJkd2FyZU5vaXNlU3VwcHJlc3Nvcik7Ci0gICAgICBmaW5hbCBXZWJSdGNB
dWRpb1RyYWNrIGF1ZGlvT3V0cHV0ID0gbmV3IFdlYlJ0Y0F1ZGlvVHJhY2soCi0gICAgICAgICAg
Y29udGV4dCwgYXVkaW9NYW5hZ2VyLCBhdWRpb1RyYWNrRXJyb3JDYWxsYmFjaywgYXVkaW9UcmFj
a1N0YXRlQ2FsbGJhY2spOwotICAgICAgcmV0dXJuIG5ldyBKYXZhQXVkaW9EZXZpY2VNb2R1bGUo
Y29udGV4dCwgYXVkaW9NYW5hZ2VyLCBhdWRpb0lucHV0LCBhdWRpb091dHB1dCwKLSAgICAgICAg
ICBpbnB1dFNhbXBsZVJhdGUsIG91dHB1dFNhbXBsZVJhdGUsIHVzZVN0ZXJlb0lucHV0LCB1c2VT
dGVyZW9PdXRwdXQpOwotICAgIH0KLSAgfQotCi0gIC8qIEF1ZGlvUmVjb3JkICovCi0gIC8vIEF1
ZGlvIHJlY29yZGluZyBlcnJvciBoYW5kbGVyIGZ1bmN0aW9ucy4KLSAgcHVibGljIGVudW0gQXVk
aW9SZWNvcmRTdGFydEVycm9yQ29kZSB7Ci0gICAgQVVESU9fUkVDT1JEX1NUQVJUX0VYQ0VQVElP
TiwKLSAgICBBVURJT19SRUNPUkRfU1RBUlRfU1RBVEVfTUlTTUFUQ0gsCi0gIH0KLQotICBwdWJs
aWMgc3RhdGljIGludGVyZmFjZSBBdWRpb1JlY29yZEVycm9yQ2FsbGJhY2sgewotICAgIHZvaWQg
b25XZWJSdGNBdWRpb1JlY29yZEluaXRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgICB2
b2lkIG9uV2ViUnRjQXVkaW9SZWNvcmRTdGFydEVycm9yKEF1ZGlvUmVjb3JkU3RhcnRFcnJvckNv
ZGUgZXJyb3JDb2RlLCBTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIG9uV2ViUnRjQXVk
aW9SZWNvcmRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgfQotCi0gIC8qKiBDYWxsZWQg
d2hlbiBhdWRpbyByZWNvcmRpbmcgc3RhcnRzIGFuZCBzdG9wcy4gKi8KLSAgcHVibGljIHN0YXRp
YyBpbnRlcmZhY2UgQXVkaW9SZWNvcmRTdGF0ZUNhbGxiYWNrIHsKLSAgICB2b2lkIG9uV2ViUnRj
QXVkaW9SZWNvcmRTdGFydCgpOwotICAgIHZvaWQgb25XZWJSdGNBdWRpb1JlY29yZFN0b3AoKTsK
LSAgfQotCi0gIC8qKgotICAgKiBDb250YWlucyBhdWRpbyBzYW1wbGUgaW5mb3JtYXRpb24uCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEF1ZGlvU2FtcGxlcyB7Ci0gICAgLyoqIFNlZSB7
QGxpbmsgQXVkaW9SZWNvcmQjZ2V0QXVkaW9Gb3JtYXQoKX0gKi8KLSAgICBwcml2YXRlIGZpbmFs
IGludCBhdWRpb0Zvcm1hdDsKLSAgICAvKiogU2VlIHtAbGluayBBdWRpb1JlY29yZCNnZXRDaGFu
bmVsQ291bnQoKX0gKi8KLSAgICBwcml2YXRlIGZpbmFsIGludCBjaGFubmVsQ291bnQ7Ci0gICAg
LyoqIFNlZSB7QGxpbmsgQXVkaW9SZWNvcmQjZ2V0U2FtcGxlUmF0ZSgpfSAqLwotICAgIHByaXZh
dGUgZmluYWwgaW50IHNhbXBsZVJhdGU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGJ5dGVbXSBkYXRh
OwotCi0gICAgcHVibGljIEF1ZGlvU2FtcGxlcyhpbnQgYXVkaW9Gb3JtYXQsIGludCBjaGFubmVs
Q291bnQsIGludCBzYW1wbGVSYXRlLCBieXRlW10gZGF0YSkgewotICAgICAgdGhpcy5hdWRpb0Zv
cm1hdCA9IGF1ZGlvRm9ybWF0OwotICAgICAgdGhpcy5jaGFubmVsQ291bnQgPSBjaGFubmVsQ291
bnQ7Ci0gICAgICB0aGlzLnNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwotICAgICAgdGhpcy5kYXRh
ID0gZGF0YTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEF1ZGlvRm9ybWF0KCkgewotICAg
ICAgcmV0dXJuIGF1ZGlvRm9ybWF0OwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0Q2hhbm5l
bENvdW50KCkgewotICAgICAgcmV0dXJuIGNoYW5uZWxDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50IGdldFNhbXBsZVJhdGUoKSB7Ci0gICAgICByZXR1cm4gc2FtcGxlUmF0ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgYnl0ZVtdIGdldERhdGEoKSB7Ci0gICAgICByZXR1cm4gZGF0YTsKLSAg
ICB9Ci0gIH0KLQotICAvKiogQ2FsbGVkIHdoZW4gbmV3IGF1ZGlvIHNhbXBsZXMgYXJlIHJlYWR5
LiBUaGlzIHNob3VsZCBvbmx5IGJlIHNldCBmb3IgZGVidWcgcHVycG9zZXMgKi8KLSAgcHVibGlj
IHN0YXRpYyBpbnRlcmZhY2UgU2FtcGxlc1JlYWR5Q2FsbGJhY2sgewotICAgIHZvaWQgb25XZWJS
dGNBdWRpb1JlY29yZFNhbXBsZXNSZWFkeShBdWRpb1NhbXBsZXMgc2FtcGxlcyk7Ci0gIH0KLQot
ICAvKiBBdWRpb1RyYWNrICovCi0gIC8vIEF1ZGlvIHBsYXlvdXQvdHJhY2sgZXJyb3IgaGFuZGxl
ciBmdW5jdGlvbnMuCi0gIHB1YmxpYyBlbnVtIEF1ZGlvVHJhY2tTdGFydEVycm9yQ29kZSB7Ci0g
ICAgQVVESU9fVFJBQ0tfU1RBUlRfRVhDRVBUSU9OLAotICAgIEFVRElPX1RSQUNLX1NUQVJUX1NU
QVRFX01JU01BVENILAotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQXVkaW9UcmFj
a0Vycm9yQ2FsbGJhY2sgewotICAgIHZvaWQgb25XZWJSdGNBdWRpb1RyYWNrSW5pdEVycm9yKFN0
cmluZyBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgb25XZWJSdGNBdWRpb1RyYWNrU3RhcnRFcnJv
cihBdWRpb1RyYWNrU3RhcnRFcnJvckNvZGUgZXJyb3JDb2RlLCBTdHJpbmcgZXJyb3JNZXNzYWdl
KTsKLSAgICB2b2lkIG9uV2ViUnRjQXVkaW9UcmFja0Vycm9yKFN0cmluZyBlcnJvck1lc3NhZ2Up
OwotICB9Ci0KLSAgLyoqIENhbGxlZCB3aGVuIGF1ZGlvIHBsYXlvdXQgc3RhcnRzIGFuZCBzdG9w
cy4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQXVkaW9UcmFja1N0YXRlQ2FsbGJhY2sg
ewotICAgIHZvaWQgb25XZWJSdGNBdWRpb1RyYWNrU3RhcnQoKTsKLSAgICB2b2lkIG9uV2ViUnRj
QXVkaW9UcmFja1N0b3AoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhl
IGRldmljZSBzdXBwb3J0cyBidWlsdC1pbiBIVyBBRUMsIGFuZCB0aGUgVVVJRCBpcyBhcHByb3Zl
ZCAoc29tZSBVVUlEcyBjYW4KLSAgICogYmUgZXhjbHVkZWQpLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBib29sZWFuIGlzQnVpbHRJbkFjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkgewot
ICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBv
cnRlZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1
cHBvcnRzIGJ1aWx0LWluIEhXIE5TLCBhbmQgdGhlIFVVSUQgaXMgYXBwcm92ZWQgKHNvbWUgVVVJ
RHMgY2FuIGJlCi0gICAqIGV4Y2x1ZGVkKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVh
biBpc0J1aWx0SW5Ob2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0
Y0F1ZGlvRWZmZWN0cy5pc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpOwotICB9Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2Vy
IGF1ZGlvTWFuYWdlcjsKLSAgcHJpdmF0ZSBmaW5hbCBXZWJSdGNBdWRpb1JlY29yZCBhdWRpb0lu
cHV0OwotICBwcml2YXRlIGZpbmFsIFdlYlJ0Y0F1ZGlvVHJhY2sgYXVkaW9PdXRwdXQ7Ci0gIHBy
aXZhdGUgZmluYWwgaW50IGlucHV0U2FtcGxlUmF0ZTsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgb3V0
cHV0U2FtcGxlUmF0ZTsKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHVzZVN0ZXJlb0lucHV0Owot
ICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdXNlU3RlcmVvT3V0cHV0OwotCi0gIHByaXZhdGUgZmlu
YWwgT2JqZWN0IG5hdGl2ZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgbG9uZyBuYXRp
dmVBdWRpb0RldmljZU1vZHVsZTsKLQotICBwcml2YXRlIEphdmFBdWRpb0RldmljZU1vZHVsZShD
b250ZXh0IGNvbnRleHQsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIsCi0gICAgICBXZWJSdGNB
dWRpb1JlY29yZCBhdWRpb0lucHV0LCBXZWJSdGNBdWRpb1RyYWNrIGF1ZGlvT3V0cHV0LCBpbnQg
aW5wdXRTYW1wbGVSYXRlLAotICAgICAgaW50IG91dHB1dFNhbXBsZVJhdGUsIGJvb2xlYW4gdXNl
U3RlcmVvSW5wdXQsIGJvb2xlYW4gdXNlU3RlcmVvT3V0cHV0KSB7Ci0gICAgdGhpcy5jb250ZXh0
ID0gY29udGV4dDsKLSAgICB0aGlzLmF1ZGlvTWFuYWdlciA9IGF1ZGlvTWFuYWdlcjsKLSAgICB0
aGlzLmF1ZGlvSW5wdXQgPSBhdWRpb0lucHV0OwotICAgIHRoaXMuYXVkaW9PdXRwdXQgPSBhdWRp
b091dHB1dDsKLSAgICB0aGlzLmlucHV0U2FtcGxlUmF0ZSA9IGlucHV0U2FtcGxlUmF0ZTsKLSAg
ICB0aGlzLm91dHB1dFNhbXBsZVJhdGUgPSBvdXRwdXRTYW1wbGVSYXRlOwotICAgIHRoaXMudXNl
U3RlcmVvSW5wdXQgPSB1c2VTdGVyZW9JbnB1dDsKLSAgICB0aGlzLnVzZVN0ZXJlb091dHB1dCA9
IHVzZVN0ZXJlb091dHB1dDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgbG9uZyBnZXRO
YXRpdmVBdWRpb0RldmljZU1vZHVsZVBvaW50ZXIoKSB7Ci0gICAgc3luY2hyb25pemVkIChuYXRp
dmVMb2NrKSB7Ci0gICAgICBpZiAobmF0aXZlQXVkaW9EZXZpY2VNb2R1bGUgPT0gMCkgewotICAg
ICAgICBuYXRpdmVBdWRpb0RldmljZU1vZHVsZSA9IG5hdGl2ZUNyZWF0ZUF1ZGlvRGV2aWNlTW9k
dWxlKGNvbnRleHQsIGF1ZGlvTWFuYWdlciwgYXVkaW9JbnB1dCwKLSAgICAgICAgICAgIGF1ZGlv
T3V0cHV0LCBpbnB1dFNhbXBsZVJhdGUsIG91dHB1dFNhbXBsZVJhdGUsIHVzZVN0ZXJlb0lucHV0
LCB1c2VTdGVyZW9PdXRwdXQpOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hdGl2ZUF1ZGlvRGV2
aWNlTW9kdWxlOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxl
YXNlKCkgewotICAgIHN5bmNocm9uaXplZCAobmF0aXZlTG9jaykgewotICAgICAgaWYgKG5hdGl2
ZUF1ZGlvRGV2aWNlTW9kdWxlICE9IDApIHsKLSAgICAgICAgSm5pQ29tbW9uLm5hdGl2ZVJlbGVh
c2VSZWYobmF0aXZlQXVkaW9EZXZpY2VNb2R1bGUpOwotICAgICAgICBuYXRpdmVBdWRpb0Rldmlj
ZU1vZHVsZSA9IDA7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIHNldFNwZWFrZXJNdXRlKGJvb2xlYW4gbXV0ZSkgewotICAgIExvZ2dpbmcuZChUQUcs
ICJzZXRTcGVha2VyTXV0ZTogIiArIG11dGUpOwotICAgIGF1ZGlvT3V0cHV0LnNldFNwZWFrZXJN
dXRlKG11dGUpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldE1pY3JvcGhv
bmVNdXRlKGJvb2xlYW4gbXV0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzZXRNaWNyb3Bob25l
TXV0ZTogIiArIG11dGUpOwotICAgIGF1ZGlvSW5wdXQuc2V0TWljcm9waG9uZU11dGUobXV0ZSk7
Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVBdWRpb0Rl
dmljZU1vZHVsZShDb250ZXh0IGNvbnRleHQsCi0gICAgICBBdWRpb01hbmFnZXIgYXVkaW9NYW5h
Z2VyLCBXZWJSdGNBdWRpb1JlY29yZCBhdWRpb0lucHV0LCBXZWJSdGNBdWRpb1RyYWNrIGF1ZGlv
T3V0cHV0LAotICAgICAgaW50IGlucHV0U2FtcGxlUmF0ZSwgaW50IG91dHB1dFNhbXBsZVJhdGUs
IGJvb2xlYW4gdXNlU3RlcmVvSW5wdXQsIGJvb2xlYW4gdXNlU3RlcmVvT3V0cHV0KTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL2FwaS9vcmcvd2VicnRjL2F1ZGlvL0xlZ2FjeUF1ZGlvRGV2aWNlTW9kdWxlLmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9h
cGkvb3JnL3dlYnJ0Yy9hdWRpby9MZWdhY3lBdWRpb0RldmljZU1vZHVsZS5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTBkMGQ2MWY5NDI5Mjk4YzZkMjFlNjBmNmNiY2M0NzQ0
M2ZhMDU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2FwaS9v
cmcvd2VicnRjL2F1ZGlvL0xlZ2FjeUF1ZGlvRGV2aWNlTW9kdWxlLmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSw0NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGMuYXVkaW87Ci0KLWltcG9ydCBvcmcud2VicnRjLnZvaWNlZW5naW5lLldlYlJ0Y0F1ZGlvUmVj
b3JkOwotaW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUuV2ViUnRjQXVkaW9UcmFjazsKLQot
LyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGxlZ2FjeSBBdWRpb0RldmljZU1vZHVs
ZSB0aGF0IGlzIGN1cnJlbnRseSBoYXJkY29kZWQgaW50byBDKysgV2ViUlRDLgotICogSXQgd2ls
bCByZXR1cm4gYSBudWxsIG5hdGl2ZSBBdWRpb0RldmljZU1vZHVsZSBwb2ludGVyLCBsZWFkaW5n
IHRvIGFuIGludGVybmFsIG9iamVjdCBiZWluZwotICogY3JlYXRlZCBpbnNpZGUgV2ViUlRDIHRo
YXQgaXMgY29udHJvbGxlZCBieSBzdGF0aWMgY2FsbHMgdG8gdGhlIGNsYXNzZXMgdW5kZXIgdGhl
IHZvaWNlZW5naW5lCi0gKiBwYWNrYWdlLiBQbGVhc2UgdXNlIHRoZSBuZXcgSmF2YUF1ZGlvRGV2
aWNlTW9kdWxlIGluc3RlYWQgb2YgdGhpcyBjbGFzcy4KLSAqLwotQERlcHJlY2F0ZWQKLXB1Ymxp
YyBjbGFzcyBMZWdhY3lBdWRpb0RldmljZU1vZHVsZSBpbXBsZW1lbnRzIEF1ZGlvRGV2aWNlTW9k
dWxlIHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBsb25nIGdldE5hdGl2ZUF1ZGlvRGV2aWNlTW9k
dWxlUG9pbnRlcigpIHsKLSAgICAvLyBSZXR1cm5pbmcgYSBudWxsIHBvaW50ZXIgd2lsbCBtYWtl
IFdlYlJUQyBjb25zdHJ1Y3QgdGhlIGJ1aWx0LWluIGxlZ2FjeSBBdWRpb0RldmljZU1vZHVsZSBm
b3IKLSAgICAvLyBBbmRyb2lkIGludGVybmFsbHkuCi0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAvLyBBbGwgY29udHJvbCBm
b3IgdGhpcyBBRE0gZ29lcyB0aHJvdWdoIHN0YXRpYyBnbG9iYWwgbWV0aG9kcyBhbmQgdGhlIEMr
KyBvYmplY3QgaXMgb3duZWQKLSAgICAvLyBpbnRlcm5hbGx5IGJ5IFdlYlJUQy4KLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZXRTcGVha2VyTXV0ZShib29sZWFuIG11dGUpIHsK
LSAgICBXZWJSdGNBdWRpb1RyYWNrLnNldFNwZWFrZXJNdXRlKG11dGUpOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldE1pY3JvcGhvbmVNdXRlKGJvb2xlYW4gbXV0ZSkgewot
ICAgIFdlYlJ0Y0F1ZGlvUmVjb3JkLnNldE1pY3JvcGhvbmVNdXRlKG11dGUpOwotICB9Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVu
dGF0aW9udGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzVkZjk2OGYxMzdlYWFjNTc3YjU2NzFlNWVkYmZmMzllNWM0MzQ4ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9B
bmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCEtLQot
ICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLS0tPgotCi08bWFuaWZlc3QKLSAgICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9z
Y2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgIHhtbG5zOnRvb2xzPSJo
dHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS90b29scyIKLSAgICAgIHBhY2thZ2U9Im9yZy53ZWJy
dGMiPgotICAgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNh
bWVyYSIgLz4KLSAgICA8dXNlcy1mZWF0dXJlIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5oYXJkd2Fy
ZS5jYW1lcmEuYXV0b2ZvY3VzIiAvPgotICAgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpnbEVzVmVy
c2lvbj0iMHgwMDAyMDAwMCIgYW5kcm9pZDpyZXF1aXJlZD0idHJ1ZSIgLz4KLQotICAgIDx1c2Vz
LXNkayBhbmRyb2lkOm1pblNka1ZlcnNpb249IjE2IiBhbmRyb2lkOnRhcmdldFNka1ZlcnNpb249
IjIxIiAvPgotCi0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVy
bWlzc2lvbi5DQU1FUkEiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFu
ZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiIC8+Ci0gICAgPHVzZXMtcGVy
bWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8iIC8+
Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5J
TlRFUk5FVCIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5w
ZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UiLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9u
IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19ORVRXT1JLX1NUQVRFIiAv
PgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24u
Q0hBTkdFX05FVFdPUktfU1RBVEUiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5h
bWU9ImFuZHJvaWQucGVybWlzc2lvbi5SVU5fSU5TVFJVTUVOVEFUSU9OIiAvPgotCi0gICAgPGFw
cGxpY2F0aW9uPgotICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50
ZXN0LnJ1bm5lciIgLz4KLSAgICA8L2FwcGxpY2F0aW9uPgotCi0gICAgPGluc3RydW1lbnRhdGlv
biBhbmRyb2lkOm5hbWU9Im9yZy5jaHJvbWl1bS5iYXNlLnRlc3QuQmFzZUNocm9taXVtQW5kcm9p
ZEpVbml0UnVubmVyIgotICAgICAgICB0b29sczppZ25vcmU9Ik1pc3NpbmdQcmVmaXgiCi0gICAg
ICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0ib3JnLndlYnJ0YyIKLSAgICAgICAgYW5kcm9pZDps
YWJlbD0iVGVzdHMgZm9yIFdlYlJUQyBBbmRyb2lkIFNESyIvPgotPC9tYW5pZmVzdD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL2FudC5wcm9wZXJ0aWVzIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVz
dHMvYW50LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDUzNTM4
NjVkNWNiM2ZlNjNhNWFhNzYzZjEzYWRlMWMwM2M3OGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvYW50LnByb3BlcnRpZXMK
KysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyB1c2VkIHRvIG92
ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIHVzZWQgYnkgdGhlIEFudCBidWlsZCBzeXN0ZW0uCi0jCi0j
IFRoaXMgZmlsZSBtdXN0IGJlIGNoZWNrZWQgaW50byBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcywg
YXMgaXQgaXMKLSMgaW50ZWdyYWwgdG8gdGhlIGJ1aWxkIHN5c3RlbSBvZiB5b3VyIHByb2plY3Qu
Ci0KLSMgVGhpcyBmaWxlIGlzIG9ubHkgdXNlZCBieSB0aGUgQW50IHNjcmlwdC4KLQotIyBZb3Ug
Y2FuIHVzZSB0aGlzIHRvIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIHN1Y2ggYXMKLSMgICdzb3Vy
Y2UuZGlyJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIgamF2YSBzb3VyY2UgZm9sZGVyIGFuZAot
IyAgJ291dC5kaXInIGZvciB0aGUgbG9jYXRpb24gb2YgeW91ciBvdXRwdXQgZm9sZGVyLgotCi0j
IFlvdSBjYW4gYWxzbyB1c2UgaXQgZGVmaW5lIGhvdyB0aGUgcmVsZWFzZSBidWlsZHMgYXJlIHNp
Z25lZCBieSBkZWNsYXJpbmcKLSMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIyAgJ2tleS5z
dG9yZScgZm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGtleXN0b3JlIGFuZAotIyAgJ2tleS5hbGlh
cycgZm9yIHRoZSBuYW1lIG9mIHRoZSBrZXkgdG8gdXNlLgotIyBUaGUgcGFzc3dvcmQgd2lsbCBi
ZSBhc2tlZCBkdXJpbmcgdGhlIGJ1aWxkIHdoZW4geW91IHVzZSB0aGUgJ3JlbGVhc2UnIHRhcmdl
dC4KLQotc291cmNlLmRpcj0uLi9qYXZhL3Rlc3Rjb21tb24vc3JjO3NyYwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL2J1aWxkLnhtbCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2lu
c3RydW1lbnRhdGlvbnRlc3RzL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2I0Y2I3YWM5NDg5MTU4ZDJmYzRjZTcwODA0NzNhMmUzMmNiYjhkMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9idWls
ZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgbmFtZT0ibGliamluZ2xlX3BlZXJjb25uZWN0
aW9uX2FuZHJvaWRfdW5pdHRlc3QiIGRlZmF1bHQ9ImhlbHAiPgotCi0gICAgPCEtLSBUaGUgbG9j
YWwucHJvcGVydGllcyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgYnkgdGhlICdhbmRyb2lk
JyB0b29sLgotICAgICAgICAgSXQgY29udGFpbnMgdGhlIHBhdGggdG8gdGhlIFNESy4gSXQgc2hv
dWxkICpOT1QqIGJlIGNoZWNrZWQgaW50bwotICAgICAgICAgVmVyc2lvbiBDb250cm9sIFN5c3Rl
bXMuIC0tPgotICAgIDxwcm9wZXJ0eSBmaWxlPSJsb2NhbC5wcm9wZXJ0aWVzIiAvPgotCi0gICAg
PCEtLSBUaGUgYW50LnByb3BlcnRpZXMgZmlsZSBjYW4gYmUgY3JlYXRlZCBieSB5b3UuIEl0IGlz
IG9ubHkgZWRpdGVkIGJ5IHRoZQotICAgICAgICAgJ2FuZHJvaWQnIHRvb2wgdG8gYWRkIHByb3Bl
cnRpZXMgdG8gaXQuCi0gICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGFuZ2Ugc29tZSBB
bnQgc3BlY2lmaWMgYnVpbGQgcHJvcGVydGllcy4KLSAgICAgICAgIEhlcmUgYXJlIHNvbWUgcHJv
cGVydGllcyB5b3UgbWF5IHdhbnQgdG8gY2hhbmdlL3VwZGF0ZToKLQotICAgICAgICAgc291cmNl
LmRpcgotICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiBEZWZh
dWx0IGlzICdzcmMnLgotICAgICAgICAgb3V0LmRpcgotICAgICAgICAgICAgIFRoZSBuYW1lIG9m
IHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBEZWZhdWx0IGlzICdiaW4nLgotCi0gICAgICAgICBGb3Ig
b3RoZXIgb3ZlcnJpZGFibGUgcHJvcGVydGllcywgbG9vayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBydWxlcwotICAgICAgICAgZmlsZXMgaW4gdGhlIFNESywgYXQgdG9vbHMvYW50L2J1aWxkLnht
bAotCi0gICAgICAgICBQcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIFNESyBsb2NhdGlvbiBvciB0
aGUgcHJvamVjdCB0YXJnZXQgc2hvdWxkCi0gICAgICAgICBiZSB1cGRhdGVkIHVzaW5nIHRoZSAn
YW5kcm9pZCcgdG9vbCB3aXRoIHRoZSAndXBkYXRlJyBhY3Rpb24uCi0KLSAgICAgICAgIFRoaXMg
ZmlsZSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlvdXIKLSAg
ICAgICAgIGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgYmUgY2hlY2tlZCBpbnRvIFZlcnNpb24gQ29u
dHJvbCBTeXN0ZW1zLgotCi0gICAgICAgICAtLT4KLSAgICA8cHJvcGVydHkgZmlsZT0iYW50LnBy
b3BlcnRpZXMiIC8+Ci0KLSAgICA8IS0tIGlmIHNkay5kaXIgd2FzIG5vdCBzZXQgZnJvbSBvbmUg
b2YgdGhlIHByb3BlcnR5IGZpbGUsIHRoZW4KLSAgICAgICAgIGdldCBpdCBmcm9tIHRoZSBBTkRS
T0lEX0hPTUUgZW52IHZhci4KLSAgICAgICAgIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB3ZSBs
b2FkIHByb2plY3QucHJvcGVydGllcyBzaW5jZQotICAgICAgICAgdGhlIHByb2d1YXJkIGNvbmZp
ZyBjYW4gdXNlIHNkay5kaXIgLS0+Ci0gICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+
Ci0gICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ic2RrLmRpciIgdmFsdWU9IiR7ZW52LkFORFJPSURf
U0RLX1JPT1R9Ij4KLSAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJlbnYuQU5EUk9JRF9TREtfUk9P
VCIgLz4KLSAgICA8L2NvbmRpdGlvbj4KLQotICAgIDwhLS0gVGhlIHByb2plY3QucHJvcGVydGll
cyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgYnkgdGhlICdhbmRyb2lkJwotICAgICAgICAg
dG9vbCwgYXMgd2VsbCBhcyBBRFQuCi0KLSAgICAgICAgIFRoaXMgY29udGFpbnMgcHJvamVjdCBz
cGVjaWZpYyBwcm9wZXJ0aWVzIHN1Y2ggYXMgcHJvamVjdCB0YXJnZXQsIGFuZCBsaWJyYXJ5Ci0g
ICAgICAgICBkZXBlbmRlbmNpZXMuIExvd2VyIGxldmVsIGJ1aWxkIHByb3BlcnRpZXMgYXJlIHN0
b3JlZCBpbiBhbnQucHJvcGVydGllcwotICAgICAgICAgKG9yIGluIC5jbGFzc3BhdGggZm9yIEVj
bGlwc2UgcHJvamVjdHMpLgotCi0gICAgICAgICBUaGlzIGZpbGUgaXMgYW4gaW50ZWdyYWwgcGFy
dCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB5b3VyCi0gICAgICAgICBhcHBsaWNhdGlvbiBhbmQg
c2hvdWxkIGJlIGNoZWNrZWQgaW50byBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4gLS0+Ci0gICAg
PGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InByb2plY3QucHJvcGVydGllcyIgLz4KLQotICAgIDwh
LS0gcXVpY2sgY2hlY2sgb24gc2RrLmRpciAtLT4KLSAgICA8ZmFpbAotICAgICAgICAgICAgbWVz
c2FnZT0ic2RrLmRpciBpcyBtaXNzaW5nLiBNYWtlIHN1cmUgdG8gZ2VuZXJhdGUgbG9jYWwucHJv
cGVydGllcyB1c2luZyAnYW5kcm9pZCB1cGRhdGUgcHJvamVjdCcgb3IgdG8gaW5qZWN0IGl0IHRo
cm91Z2ggdGhlIEFORFJPSURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCi0gICAgICAgICAg
ICB1bmxlc3M9InNkay5kaXIiCi0gICAgLz4KLQotICAgIDwhLS0KLSAgICAgICAgSW1wb3J0IHBl
ciBwcm9qZWN0IGN1c3RvbSBidWlsZCBydWxlcyBpZiBwcmVzZW50IGF0IHRoZSByb290IG9mIHRo
ZSBwcm9qZWN0LgotICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSB0byBwdXQgY3VzdG9tIGludGVy
bWVkaWFyeSB0YXJnZXRzIHN1Y2ggYXM6Ci0gICAgICAgICAgICAtcHJlLWJ1aWxkCi0gICAgICAg
ICAgICAtcHJlLWNvbXBpbGUKLSAgICAgICAgICAgIC1wb3N0LWNvbXBpbGUgKFRoaXMgaXMgdHlw
aWNhbGx5IHVzZWQgZm9yIGNvZGUgb2JmdXNjYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb21waWxlZCBjb2RlIGxvY2F0aW9uOiAke291dC5jbGFzc2VzLmFic29sdXRlLmRpcn0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgaW4gcGxhY2Us
IG92ZXJyaWRlICR7b3V0LmRleC5pbnB1dC5hYnNvbHV0ZS5kaXJ9KQotICAgICAgICAgICAgLXBv
c3QtcGFja2FnZQotICAgICAgICAgICAgLXBvc3QtYnVpbGQKLSAgICAgICAgICAgIC1wcmUtY2xl
YW4KLSAgICAtLT4KLSAgICA8aW1wb3J0IGZpbGU9ImN1c3RvbV9ydWxlcy54bWwiIG9wdGlvbmFs
PSJ0cnVlIiAvPgotCi0gICAgPCEtLSBJbXBvcnQgdGhlIGFjdHVhbCBidWlsZCBmaWxlLgotCi0g
ICAgICAgICBUbyBjdXN0b21pemUgZXhpc3RpbmcgdGFyZ2V0cywgdGhlcmUgYXJlIHR3byBvcHRp
b25zOgotICAgICAgICAgLSBDdXN0b21pemUgb25seSBvbmUgdGFyZ2V0OgotICAgICAgICAgICAg
IC0gY29weS9wYXN0ZSB0aGUgdGFyZ2V0IGludG8gdGhpcyBmaWxlLCAqYmVmb3JlKiB0aGUKLSAg
ICAgICAgICAgICAgIDxpbXBvcnQ+IHRhc2suCi0gICAgICAgICAgICAgLSBjdXN0b21pemUgaXQg
dG8geW91ciBuZWVkcy4KLSAgICAgICAgIC0gQ3VzdG9taXplIHRoZSB3aG9sZSBjb250ZW50IG9m
IGJ1aWxkLnhtbAotICAgICAgICAgICAgIC0gY29weS9wYXN0ZSB0aGUgY29udGVudCBvZiB0aGUg
cnVsZXMgZmlsZXMgKG1pbnVzIHRoZSB0b3Agbm9kZSkKLSAgICAgICAgICAgICAgIGludG8gdGhp
cyBmaWxlLCByZXBsYWNpbmcgdGhlIDxpbXBvcnQ+IHRhc2suCi0gICAgICAgICAgICAgLSBjdXN0
b21pemUgdG8geW91ciBuZWVkcy4KLQotICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioK
LSAgICAgICAgICoqKioqKiBJTVBPUlRBTlQgKioqKioqCi0gICAgICAgICAqKioqKioqKioqKioq
KioqKioqKioqKgotICAgICAgICAgSW4gYWxsIGNhc2VzIHlvdSBtdXN0IHVwZGF0ZSB0aGUgdmFs
dWUgb2YgdmVyc2lvbi10YWcgYmVsb3cgdG8gcmVhZCAnY3VzdG9tJyBpbnN0ZWFkIG9mIGFuIGlu
dGVnZXIsCi0gICAgICAgICBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgeW91ciBmaWxlIGJlIG92
ZXJyaWRkZW4gYnkgdG9vbHMgc3VjaCBhcyAiYW5kcm9pZCB1cGRhdGUgcHJvamVjdCIKLSAgICAt
LT4KLSAgICA8IS0tIHZlcnNpb24tdGFnOiAxIC0tPgotICAgIDxpbXBvcnQgZmlsZT0iJHtzZGsu
ZGlyfS90b29scy9hbnQvYnVpbGQueG1sIiAvPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0
cnVtZW50YXRpb250ZXN0cy9sb2dnYWJsZV90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvbG9n
Z2FibGVfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWExMTA3NTIxNmZh
YWFjY2Y4OGVlOTljNjNiYzNjYTMwMzMyNmMzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9sb2dnYWJsZV90ZXN0LmNjCisr
KyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1
ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBqbmkgewotCi1KTklfRlVOQ1RJT05fREVDTEFSQVRJT04odm9pZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBMb2dnYWJsZVRlc3RfbmF0aXZlTG9nSW5mb1Rlc3RNZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGpjbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBqc3RyaW5nIGpfbWVzc2FnZSkg
ewotICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KLSAgICAgIEphdmFUb05hdGl2ZVN0cmluZyhqbmks
IEphdmFQYXJhbVJlZjxqc3RyaW5nPihqX21lc3NhZ2UpKTsKLSAgUlRDX0xPRyhMU19JTkZPKSA8
PCBtZXNzYWdlOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9wcm9qZWN0LnByb3BlcnRpZXMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0
cnVtZW50YXRpb250ZXN0cy9wcm9qZWN0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE2Y2E1MzNmZTM1NmIzMTIzY2QzMzZkYzAyNzE1ZjI3MWIxYjQ3NGIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVz
dHMvcHJvamVjdC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyBU
aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgQW5kcm9pZCBUb29scy4KLSMg
RG8gbm90IG1vZGlmeSB0aGlzIGZpbGUgLS0gWU9VUiBDSEFOR0VTIFdJTEwgQkUgRVJBU0VEIQot
IwotIyBUaGlzIGZpbGUgbXVzdCBiZSBjaGVja2VkIGluIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1z
LgotIwotIyBUbyBjdXN0b21pemUgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBBbnQgYnVpbGQgc3lz
dGVtIGVkaXQKLSMgImFudC5wcm9wZXJ0aWVzIiwgYW5kIG92ZXJyaWRlIHZhbHVlcyB0byBhZGFw
dCB0aGUgc2NyaXB0IHRvIHlvdXIKLSMgcHJvamVjdCBzdHJ1Y3R1cmUuCi0jCi0jIFRvIGVuYWJs
ZSBQcm9HdWFyZCB0byBzaHJpbmsgYW5kIG9iZnVzY2F0ZSB5b3VyIGNvZGUsIHVuY29tbWVudCB0
aGlzIChhdmFpbGFibGUgcHJvcGVydGllczogc2RrLmRpciwgdXNlci5ob21lKToKLSNwcm9ndWFy
ZC5jb25maWc9JHtzZGsuZGlyfS90b29scy9wcm9ndWFyZC9wcm9ndWFyZC1hbmRyb2lkLnR4dDpw
cm9ndWFyZC1wcm9qZWN0LnR4dAotCi0jIFByb2plY3QgdGFyZ2V0LgotdGFyZ2V0PWFuZHJvaWQt
MjIKLQotamF2YS5jb21waWxlcmFyZ3M9LVhsaW50OmFsbCAtV2Vycm9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0
cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9BbmRyb2lkVmlkZW9EZWNvZGVySW5zdHJ1
bWVudGF0aW9uVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvQW5k
cm9pZFZpZGVvRGVjb2Rlckluc3RydW1lbnRhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODQxOTZiY2JkNzAyZmRiNWQ4ZjJiZDI1NzU1MjkzYjRjYTQzOGEwMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRp
b250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9BbmRyb2lkVmlkZW9EZWNvZGVySW5zdHJ1bWVudGF0aW9u
VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNz
ZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRO
b3ROdWxsOwotCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1p
bXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5CbG9ja2luZ1F1ZXVlOwot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWU7Ci1pbXBvcnQg
amF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2Uu
dGVzdC5wYXJhbXMuQmFzZUpVbml0NFJ1bm5lckRlbGVnYXRlOwotaW1wb3J0IG9yZy5jaHJvbWl1
bS5iYXNlLnRlc3QucGFyYW1zLlBhcmFtZXRlckFubm90YXRpb25zLkNsYXNzUGFyYW1ldGVyOwot
aW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QucGFyYW1zLlBhcmFtZXRlckFubm90YXRpb25z
LlVzZVJ1bm5lckRlbGVnYXRlOwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QucGFyYW1z
LlBhcmFtZXRlclNldDsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LnBhcmFtcy5QYXJh
bWV0ZXJpemVkUnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVu
aXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5u
ZXIuUnVuV2l0aDsKLQotLyoqIFVuaXQgdGVzdHMgZm9yIHtAbGluayBBbmRyb2lkVmlkZW9EZWNv
ZGVyfS4gKi8KLUBSdW5XaXRoKFBhcmFtZXRlcml6ZWRSdW5uZXIuY2xhc3MpCi1AVXNlUnVubmVy
RGVsZWdhdGUoQmFzZUpVbml0NFJ1bm5lckRlbGVnYXRlLmNsYXNzKQotcHVibGljIGZpbmFsIGNs
YXNzIEFuZHJvaWRWaWRlb0RlY29kZXJJbnN0cnVtZW50YXRpb25UZXN0IHsKLSAgQENsYXNzUGFy
YW1ldGVyIHByaXZhdGUgc3RhdGljIExpc3Q8UGFyYW1ldGVyU2V0PiBDTEFTU19QQVJBTVMgPSBu
ZXcgQXJyYXlMaXN0PD4oKTsKLQotICBzdGF0aWMgewotICAgIENMQVNTX1BBUkFNUy5hZGQobmV3
IFBhcmFtZXRlclNldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlKC8qIGNvZGVj
TmFtZT0gKi8gIlZQOCIsIGZhbHNlIC8qIHVzZUVnbENvbnRleHQgKi8pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgLm5hbWUoIlZQOFdpdGhvdXRFZ2xDb250ZXh0IikpOwotICAgIENMQVNTX1BB
UkFNUy5hZGQobmV3IFBhcmFtZXRlclNldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLnZh
bHVlKC8qIGNvZGVjTmFtZT0gKi8gIlZQOCIsIHRydWUgLyogdXNlRWdsQ29udGV4dCAqLykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAubmFtZSgiVlA4V2l0aEVnbENvbnRleHQiKSk7Ci0gICAg
Q0xBU1NfUEFSQU1TLmFkZChuZXcgUGFyYW1ldGVyU2V0KCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAudmFsdWUoLyogY29kZWNOYW1lPSAqLyAiSDI2NCIsIGZhbHNlIC8qIHVzZUVnbENvbnRl
eHQgKi8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgLm5hbWUoIkgyNjRXaXRob3V0RWdsQ29u
dGV4dCIpKTsKLSAgICBDTEFTU19QQVJBTVMuYWRkKG5ldyBQYXJhbWV0ZXJTZXQoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgIC52YWx1ZSgvKiBjb2RlY05hbWU9ICovICJIMjY0IiwgdHJ1ZSAv
KiB1c2VFZ2xDb250ZXh0ICovKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5uYW1lKCJIMjY0
V2l0aEVnbENvbnRleHQiKSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFZpZGVvQ29kZWNJbmZv
IGNvZGVjVHlwZTsKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHVzZUVnbENvbnRleHQ7Ci0KLSAg
cHVibGljIEFuZHJvaWRWaWRlb0RlY29kZXJJbnN0cnVtZW50YXRpb25UZXN0KFN0cmluZyBjb2Rl
Y05hbWUsIGJvb2xlYW4gdXNlRWdsQ29udGV4dCkgewotICAgIGlmIChjb2RlY05hbWUuZXF1YWxz
KCJIMjY0IikpIHsKLSAgICAgIHRoaXMuY29kZWNUeXBlID0gSDI2NFV0aWxzLkRFRkFVTFRfSDI2
NF9CQVNFTElORV9QUk9GSUxFX0NPREVDOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmNvZGVj
VHlwZSA9IG5ldyBWaWRlb0NvZGVjSW5mbyhjb2RlY05hbWUsIG5ldyBIYXNoTWFwPD4oKSk7Ci0g
ICAgfQotICAgIHRoaXMudXNlRWdsQ29udGV4dCA9IHVzZUVnbENvbnRleHQ7Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFuZHJvaWRWaWRlb0RlY29kZXJJbnN0
cnVtZW50YXRpb25UZXN0IjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF9GUkFN
RV9DT1VOVCA9IDEwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF9GUkFNRV9XSURU
SCA9IDY0MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFU1RfRlJBTUVfSEVJR0hUID0g
MzYwOwotICBwcml2YXRlIFZpZGVvRnJhbWUuSTQyMEJ1ZmZlcltdIFRFU1RfRlJBTUVTOwotCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gRU5BQkxFX0lOVEVMX1ZQOF9FTkNPREVSID0g
dHJ1ZTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFCTEVfSDI2NF9ISUdIX1BS
T0ZJTEUgPSB0cnVlOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBWaWRlb0VuY29kZXIuU2V0dGlu
Z3MgRU5DT0RFUl9TRVRUSU5HUyA9Ci0gICAgICBuZXcgVmlkZW9FbmNvZGVyLlNldHRpbmdzKDEg
LyogY29yZSAqLywgVEVTVF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRV9IRUlHSFQsIDMwMCAvKiBr
YnBzICovLAotICAgICAgICAgIDMwIC8qIGZwcyAqLywgMSAvKiBudW1iZXJPZlNpbXVsY2FzdFN0
cmVhbXMgKi8sIHRydWUgLyogYXV0b21hdGljUmVzaXplT24gKi8sCi0gICAgICAgICAgLyogY2Fw
YWJpbGl0aWVzPSAqLyBuZXcgVmlkZW9FbmNvZGVyLkNhcGFiaWxpdGllcyhmYWxzZSAvKiBsb3Nz
Tm90aWZpY2F0aW9uICovKSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFQ09ERV9U
SU1FT1VUX01TID0gMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVmlkZW9EZWNvZGVyLlNl
dHRpbmdzIFNFVFRJTkdTID0KLSAgICAgIG5ldyBWaWRlb0RlY29kZXIuU2V0dGluZ3MoMSAvKiBj
b3JlICovLCBURVNUX0ZSQU1FX1dJRFRILCBURVNUX0ZSQU1FX0hFSUdIVCk7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgY2xhc3MgTW9ja0RlY29kZUNhbGxiYWNrIGltcGxlbWVudHMgVmlkZW9EZWNvZGVy
LkNhbGxiYWNrIHsKLSAgICBwcml2YXRlIEJsb2NraW5nUXVldWU8VmlkZW9GcmFtZT4gZnJhbWVR
dWV1ZSA9IG5ldyBMaW5rZWRCbG9ja2luZ1F1ZXVlPD4oKTsKLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uRGVjb2RlZEZyYW1lKFZpZGVvRnJhbWUgZnJhbWUsIEludGVnZXIgZGVj
b2RlVGltZU1zLCBJbnRlZ2VyIHFwKSB7Ci0gICAgICBhc3NlcnROb3ROdWxsKGZyYW1lKTsKLSAg
ICAgIGZyYW1lUXVldWUub2ZmZXIoZnJhbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFz
c2VydEZyYW1lRGVjb2RlZChFbmNvZGVkSW1hZ2UgdGVzdEltYWdlLCBWaWRlb0ZyYW1lLkk0MjBC
dWZmZXIgdGVzdEJ1ZmZlcikgewotICAgICAgVmlkZW9GcmFtZSBkZWNvZGVkRnJhbWUgPSBwb2xs
KCk7Ci0gICAgICBWaWRlb0ZyYW1lLkJ1ZmZlciBkZWNvZGVkQnVmZmVyID0gZGVjb2RlZEZyYW1l
LmdldEJ1ZmZlcigpOwotICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RJbWFnZS5lbmNvZGVkV2lkdGgs
IGRlY29kZWRCdWZmZXIuZ2V0V2lkdGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdEltYWdl
LmVuY29kZWRIZWlnaHQsIGRlY29kZWRCdWZmZXIuZ2V0SGVpZ2h0KCkpOwotICAgICAgLy8gVE9E
TyhzYWthbCk6IERlY29kZXIgbG9vc2VzIHRoZSBuYW5vc2Vjb25kIHByZWNpc2lvbi4gVGhpcyBp
cyBub3QgYSBwcm9ibGVtIGluIHByYWN0aWNlCi0gICAgICAvLyBiZWNhdXNlIEMrKyBFbmNvZGVk
SW1hZ2Ugc3RvcmVzIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzLgotICAgICAgYXNzZXJ0
RXF1YWxzKHRlc3RJbWFnZS5jYXB0dXJlVGltZU5zIC8gMTAwMCwgZGVjb2RlZEZyYW1lLmdldFRp
bWVzdGFtcE5zKCkgLyAxMDAwKTsKLSAgICAgIGFzc2VydEVxdWFscyh0ZXN0SW1hZ2Uucm90YXRp
b24sIGRlY29kZWRGcmFtZS5nZXRSb3RhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmlk
ZW9GcmFtZSBwb2xsKCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgVmlkZW9GcmFtZSBmcmFtZSA9
IGZyYW1lUXVldWUucG9sbChERUNPREVfVElNRU9VVF9NUywgVGltZVVuaXQuTUlMTElTRUNPTkRT
KTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbCgiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBmcmFt
ZSB0byBiZSBkZWNvZGVkLiIsIGZyYW1lKTsKLSAgICAgICAgcmV0dXJuIGZyYW1lOwotICAgICAg
fSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBWaWRlb0ZyYW1lLkk0MjBCdWZmZXJbXSBnZW5lcmF0ZVRlc3RGcmFtZXMoKSB7Ci0gICAgVmlk
ZW9GcmFtZS5JNDIwQnVmZmVyW10gcmVzdWx0ID0gbmV3IFZpZGVvRnJhbWUuSTQyMEJ1ZmZlcltU
RVNUX0ZSQU1FX0NPVU5UXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFRFU1RfRlJBTUVfQ09V
TlQ7IGkrKykgewotICAgICAgcmVzdWx0W2ldID0gSmF2YUk0MjBCdWZmZXIuYWxsb2NhdGUoVEVT
VF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRV9IRUlHSFQpOwotICAgICAgLy8gVE9ETyhzYWthbCk6
IEdlbmVyYXRlIGNvbnRlbnQgZm9yIHRoZSB0ZXN0IGZyYW1lcy4KLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgRW5jb2RlZEltYWdlW10gZW5jb2RlZFRl
c3RGcmFtZXMgPSBuZXcgRW5jb2RlZEltYWdlW1RFU1RfRlJBTUVfQ09VTlRdOwotICBwcml2YXRl
IEVnbEJhc2UxNCBlZ2xCYXNlOwotCi0gIHByaXZhdGUgVmlkZW9EZWNvZGVyRmFjdG9yeSBjcmVh
dGVEZWNvZGVyRmFjdG9yeShFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCkgewotICAgIHJldHVy
biBuZXcgSGFyZHdhcmVWaWRlb0RlY29kZXJGYWN0b3J5KGVnbENvbnRleHQpOwotICB9Ci0KLSAg
cHJpdmF0ZSBATnVsbGFibGUgVmlkZW9EZWNvZGVyIGNyZWF0ZURlY29kZXIoKSB7Ci0gICAgVmlk
ZW9EZWNvZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgY3JlYXRlRGVjb2RlckZhY3Rvcnko
dXNlRWdsQ29udGV4dCA/IGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSA6IG51bGwpOwotICAg
IHJldHVybiBmYWN0b3J5LmNyZWF0ZURlY29kZXIoY29kZWNUeXBlKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBlbmNvZGVUZXN0RnJhbWVzKCkgewotICAgIFZpZGVvRW5jb2RlckZhY3RvcnkgZW5j
b2RlckZhY3RvcnkgPSBuZXcgSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KAotICAgICAgICBl
Z2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIEVOQUJMRV9JTlRFTF9WUDhfRU5DT0RFUiwgRU5B
QkxFX0gyNjRfSElHSF9QUk9GSUxFKTsKLSAgICBWaWRlb0VuY29kZXIgZW5jb2RlciA9IGVuY29k
ZXJGYWN0b3J5LmNyZWF0ZUVuY29kZXIoY29kZWNUeXBlKTsKLSAgICBIYXJkd2FyZVZpZGVvRW5j
b2RlclRlc3QuTW9ja0VuY29kZXJDYWxsYmFjayBlbmNvZGVDYWxsYmFjayA9Ci0gICAgICAgIG5l
dyBIYXJkd2FyZVZpZGVvRW5jb2RlclRlc3QuTW9ja0VuY29kZXJDYWxsYmFjaygpOwotICAgIGFz
c2VydEVxdWFscyhWaWRlb0NvZGVjU3RhdHVzLk9LLCBlbmNvZGVyLmluaXRFbmNvZGUoRU5DT0RF
Ul9TRVRUSU5HUywgZW5jb2RlQ2FsbGJhY2spKTsKLQotICAgIGxvbmcgbGFzdFRpbWVzdGFtcE5z
ID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFRFU1RfRlJBTUVfQ09VTlQ7IGkrKykgewot
ICAgICAgbGFzdFRpbWVzdGFtcE5zICs9IFRpbWVVbml0LlNFQ09ORFMudG9OYW5vcygxKSAvIEVO
Q09ERVJfU0VUVElOR1MubWF4RnJhbWVyYXRlOwotICAgICAgVmlkZW9FbmNvZGVyLkVuY29kZUlu
Zm8gaW5mbyA9IG5ldyBWaWRlb0VuY29kZXIuRW5jb2RlSW5mbygKLSAgICAgICAgICBuZXcgRW5j
b2RlZEltYWdlLkZyYW1lVHlwZVtdIHtFbmNvZGVkSW1hZ2UuRnJhbWVUeXBlLlZpZGVvRnJhbWVE
ZWx0YX0pOwotICAgICAgSGFyZHdhcmVWaWRlb0VuY29kZXJUZXN0LnRlc3RFbmNvZGVGcmFtZSgK
LSAgICAgICAgICBlbmNvZGVyLCBuZXcgVmlkZW9GcmFtZShURVNUX0ZSQU1FU1tpXSwgMCAvKiBy
b3RhdGlvbiAqLywgbGFzdFRpbWVzdGFtcE5zKSwgaW5mbyk7Ci0gICAgICBlbmNvZGVkVGVzdEZy
YW1lc1tpXSA9IGVuY29kZUNhbGxiYWNrLnBvbGwoKTsKLSAgICB9Ci0KLSAgICBhc3NlcnRFcXVh
bHMoVmlkZW9Db2RlY1N0YXR1cy5PSywgZW5jb2Rlci5yZWxlYXNlKCkpOwotICB9Ci0KLSAgQEJl
Zm9yZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBOYXRpdmVMaWJyYXJ5LmluaXRpYWxp
emUobmV3IE5hdGl2ZUxpYnJhcnkuRGVmYXVsdExvYWRlcigpLCBUZXN0Q29uc3RhbnRzLk5BVElW
RV9MSUJSQVJZKTsKLQotICAgIFRFU1RfRlJBTUVTID0gZ2VuZXJhdGVUZXN0RnJhbWVzKCk7Ci0K
LSAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGVFZ2wxNChFZ2xCYXNlLkNPTkZJR19QTEFJTik7
Ci0gICAgZWdsQmFzZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgZWdsQmFzZS5t
YWtlQ3VycmVudCgpOwotCi0gICAgZW5jb2RlVGVzdEZyYW1lcygpOwotICB9Ci0KLSAgQEFmdGVy
Ci0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9
Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZSgp
IHsKLSAgICBWaWRlb0RlY29kZXIgZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoVmlkZW9Db2RlY1N0YXR1cy5PSywgZGVjb2Rlci5pbml0RGVjb2RlKFNFVFRJTkdT
LCBudWxsIC8qIGRlY29kZUNhbGxiYWNrICovKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFZpZGVvQ29k
ZWNTdGF0dXMuT0ssIGRlY29kZXIucmVsZWFzZSgpKTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERlY29kZSgpIHsKLSAgICBWaWRlb0RlY29kZXIgZGVj
b2RlciA9IGNyZWF0ZURlY29kZXIoKTsKLSAgICBNb2NrRGVjb2RlQ2FsbGJhY2sgY2FsbGJhY2sg
PSBuZXcgTW9ja0RlY29kZUNhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFZpZGVvQ29kZWNT
dGF0dXMuT0ssIGRlY29kZXIuaW5pdERlY29kZShTRVRUSU5HUywgY2FsbGJhY2spKTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgVEVTVF9GUkFNRV9DT1VOVDsgaSsrKSB7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoVmlkZW9Db2RlY1N0YXR1cy5PSywKLSAgICAgICAgICBkZWNvZGVyLmRlY29kZShl
bmNvZGVkVGVzdEZyYW1lc1tpXSwKLSAgICAgICAgICAgICAgbmV3IFZpZGVvRGVjb2Rlci5EZWNv
ZGVJbmZvKGZhbHNlIC8qIGlzTWlzc2luZ0ZyYW1lcyAqLywgMCAvKiByZW5kZXJUaW1lTXMgKi8p
KSk7Ci0gICAgICBjYWxsYmFjay5hc3NlcnRGcmFtZURlY29kZWQoZW5jb2RlZFRlc3RGcmFtZXNb
aV0sIFRFU1RfRlJBTUVTW2ldKTsKLSAgICB9Ci0KLSAgICBhc3NlcnRFcXVhbHMoVmlkZW9Db2Rl
Y1N0YXR1cy5PSywgZGVjb2Rlci5yZWxlYXNlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVt
ZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9CdWlsdGluQXVkaW9Db2RlY3NGYWN0b3J5RmFj
dG9yeVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL0J1aWx0aW5B
dWRpb0NvZGVjc0ZhY3RvcnlGYWN0b3J5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzNmVlMGU5MzJlMWNjMjAyYWZkZGQxZDliYTdmZTM0ZWU1Nzc1MTc5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3Rz
L3NyYy9vcmcvd2VicnRjL0J1aWx0aW5BdWRpb0NvZGVjc0ZhY3RvcnlGYWN0b3J5VGVzdC5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuY29tbW9uLnRydXRo
LlRydXRoLmFzc2VydFRoYXQ7Ci0KLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0ZXJz
LlNtYWxsVGVzdDsKLQotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0
LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5qdW5p
dC5ydW5uZXJzLkpVbml0NDsKLQotQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQotcHVibGljIGZpbmFs
IGNsYXNzIEJ1aWx0aW5BdWRpb0NvZGVjc0ZhY3RvcnlGYWN0b3J5VGVzdCB7Ci0gIEBCZWZvcmUK
LSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgU3lzdGVtLmxvYWRMaWJyYXJ5KFRlc3RDb25z
dGFudHMuTkFUSVZFX0xJQlJBUlkpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0QXVkaW9FbmNvZGVyRmFjdG9yeUZhY3RvcnlUZXN0KCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgQnVpbHRpbkF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5IGZhY3Rvcnkg
PSBuZXcgQnVpbHRpbkF1ZGlvRW5jb2RlckZhY3RvcnlGYWN0b3J5KCk7Ci0gICAgbG9uZyBhZWYg
PSAwOwotICAgIHRyeSB7Ci0gICAgICBhZWYgPSBmYWN0b3J5LmNyZWF0ZU5hdGl2ZUF1ZGlvRW5j
b2RlckZhY3RvcnkoKTsKLSAgICAgIGFzc2VydFRoYXQoYWVmKS5pc05vdEVxdWFsVG8oMCk7Ci0g
ICAgfSBmaW5hbGx5IHsKLSAgICAgIGlmIChhZWYgIT0gMCkgewotICAgICAgICBKbmlDb21tb24u
bmF0aXZlUmVsZWFzZVJlZihhZWYpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBUZXN0Ci0g
IEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEF1ZGlvRGVjb2RlckZhY3RvcnlGYWN0b3J5
VGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEJ1aWx0aW5BdWRpb0RlY29kZXJGYWN0b3J5
RmFjdG9yeSBmYWN0b3J5ID0gbmV3IEJ1aWx0aW5BdWRpb0RlY29kZXJGYWN0b3J5RmFjdG9yeSgp
OwotICAgIGxvbmcgYWRmID0gMDsKLSAgICB0cnkgewotICAgICAgYWRmID0gZmFjdG9yeS5jcmVh
dGVOYXRpdmVBdWRpb0RlY29kZXJGYWN0b3J5KCk7Ci0gICAgICBhc3NlcnRUaGF0KGFkZikuaXNO
b3RFcXVhbFRvKDApOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBpZiAoYWRmICE9IDApIHsKLSAg
ICAgICAgSm5pQ29tbW9uLm5hdGl2ZVJlbGVhc2VSZWYoYWRmKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVy
YTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3Ny
Yy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRlc3QuamF2YQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4MzYxZTMzNGJjOGU4NTgzMjY4OGQ0ZWZhYWZh
MDFiMGU3Y2FiZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9p
bnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ0J5
dGVCdWZmZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuSW5zdHJ1bWVudGF0aW9u
UmVnaXN0cnk7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5MYXJnZVRlc3Q7
Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5NZWRpdW1UZXN0OwotaW1wb3J0
IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IG9yZy5jaHJv
bWl1bS5iYXNlLnRlc3QuQmFzZUpVbml0NENsYXNzUnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5B
ZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0Owot
aW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotQFJ1bldpdGgoQmFzZUpVbml0NENs
YXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1
ZmZlclRlc3QgewotICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmExQ2FwdHVyZXJV
c2luZ0J5dGVCdWZmZXJUZXN0IjsKLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0T2JqZWN0
RmFjdG9yeSBleHRlbmRzIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMuVGVzdE9iamVj
dEZhY3RvcnkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ2FwdHVyaW5n
VG9UZXh0dXJlKCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBDYW1lcmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKSB7Ci0g
ICAgICByZXR1cm4gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4dCBnZXRBcHBDb250ZXh0KCkgewotICAgICAgcmV0
dXJuIEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENvbnRleHQoKTsKLSAgICB9Ci0K
LSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBPYmplY3QgcmF3T3BlbkNhbWVyYShTdHJpbmcgY2FtZXJhTmFtZSkgewotICAgICAg
cmV0dXJuIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oQ2FtZXJhMUVudW1lcmF0b3IuZ2V0
Q2FtZXJhSW5kZXgoY2FtZXJhTmFtZSkpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdz
KCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmF3Q2xvc2VD
YW1lcmEoT2JqZWN0IGNhbWVyYSkgewotICAgICAgKChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSkg
Y2FtZXJhKS5yZWxlYXNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmFWaWRlb0Nh
cHR1cmVyVGVzdEZpeHR1cmVzIGZpeHR1cmVzOwotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQg
c2V0VXAoKSB7Ci0gICAgZml4dHVyZXMgPSBuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0
dXJlcyhuZXcgVGVzdE9iamVjdEZhY3RvcnkoKSk7Ci0gIH0KLQotICBAQWZ0ZXIKLSAgcHVibGlj
IHZvaWQgdGVhckRvd24oKSB7Ci0gICAgZml4dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFRl
c3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJB
bmREaXNwb3NlKCk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RDcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMuY3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKTsKLSAgfQotCi0gIC8v
IFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZy
YW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyBh
ICJkZWZhdWx0IiBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhl
IEMrKyBsYXllci4KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENy
ZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFy
ZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBmcm9u
dCBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5k
IHRoZSBDKysgbGF5ZXIuCi0gIEBUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RTdGFydEZyb250RmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigp
OwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBh
bmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJl
bmRlcmVyIHVzaW5nIHRoZSBiYWNrIGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVz
dHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQFRlc3QKLSAgQE1lZGl1bVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNpbmdD
YXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRlZmF1
bHQgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8vIGxh
dGVyIGJlIHN3aXRjaGVkIHRvIGFub3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3RoIHRo
ZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0U3dpdGNoVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuc3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBAVGVzdAotICBA
TWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVmlkZW9DYXB0dXJlclRvU3BlY2lm
aWNDYW1lcmFOYW1lKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5zd2l0Y2hDYW1lcmEodHJ1ZSAvKiBzcGVjaWZ5Q2FtZXJhTmFtZSAqLyk7Ci0gIH0KLQotICBA
VGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhRXZlbnRzKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFFdmVudHNJbnZv
a2VkKCk7Ci0gIH0KLQotICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGF0dGVtcHRpbmcgdG8g
Y2FsbCBlLmcuIHN3aXRjaENhbWVyYSgpIGFmdGVyIGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgot
ICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhQ2FsbHNBZnRl
clN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVy
YUNhbGxzQWZ0ZXJTdG9wKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgVmlkZW9T
b3VyY2UgdGhhdCB0aGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBjb25uZWN0ZWQgdG8gY2FuCi0g
IC8vIGJlIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQg
dGhlIEMrKyBsYXllci4KLSAgQFRlc3QKLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
U3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZml4dHVyZXMuc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQgcmVzb2x1dGlv
bnMuCi0gIC8vIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBUZXN0
Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRS
ZXNvbHV0aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
c3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRl
c3Qgd2hhdCBoYXBwZW5zIGlmIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBjYXB0dXJl
ciBoYXZlCi0gIC8vIGJlZW4gc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0
IG9yIHVzZSB0aGUgQysrIGxheWVyLgotICBAVGVzdAotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qg
dGhhdCB3ZSBjYW4gY2FwdHVyZSBmcmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJl
bmRlcmVyLCBzdG9wIGNhcHR1cmluZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMu
IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBp
cyB0aGF0IHdlCi0gIC8vIGFsc28gdGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2Fw
dHVyZXIgcGFydHMuCi0gIEBUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RS
ZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhp
cyB0ZXN0IHRoYXQgZnJhbWVzIGZvcndhcmRlZCB0byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBh
ZGFwdE91dHB1dEZvcm1hdCBpcwotICAvLyBjYWxsZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5k
IEMrKyBwYXJ0cyBvZiBvZiB0aGUgc3RhY2suCi0gIEBUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RTY2FsZUNhbWVyYU91dHB1dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuc2NhbGVDYW1lcmFPdXRwdXQoKTsKLSAgfQotCi0gIC8vIFRo
aXMgdGVzdCB0aGF0IGZyYW1lcyBmb3J3YXJkZWQgdG8gYSByZW5kZXJlciBpcyBjcm9wcGVkIHRv
IGEgbmV3IG9yaWVudGF0aW9uIGlmCi0gIC8vIGFkYXB0T3V0cHV0Rm9ybWF0IGlzIGNhbGxlZCBp
biBzdWNoIGEgd2F5LiBUaGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFydHMgb2Ygb2YgdGhl
IHN0YWNrLgotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JvcENh
bWVyYU91dHB1dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
Y3JvcENhbWVyYU91dHB1dCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgYW4gZXJyb3Ig
aXMgcmVwb3J0ZWQgaWYgdGhlIGNhbWVyYSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyB3aGVuIENh
bWVyYVZpZGVvQ2FwdHVyZXIgaXMgc3RhcnRlZC4KLSAgQFRlc3QKLSAgQExhcmdlVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVh
ZHlPcGVuKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVy
IGNhbiBiZSBzdGFydGVkLCBldmVuIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAg
Ly8gaWYgdGhlIGNhbWVyYSBpcyBjbG9zZWQgd2hpbGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBy
ZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBUZXN0Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0Fs
cmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENh
bWVyYVZpZGVvQ2FwdHVyZXIuc3RvcCBjYW4gYmUgY2FsbGVkIHdoaWxlIENhbWVyYVZpZGVvQ2Fw
dHVyZXIgaXMKLSAgLy8gcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBAVGVzdAotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9w
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxl
Q2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVu
dGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVz
dC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVy
VXNpbmdUZXh0dXJlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Zjcx
OTE1YzM4NzQ2MDMzNDFkMTYyZjEyNDQzYWZiMmNkNzgzN2QyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2Vi
cnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDIxMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnN1cHBv
cnQudGVzdC5JbnN0cnVtZW50YXRpb25SZWdpc3RyeTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQu
dGVzdC5maWx0ZXJzLkxhcmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0
ZXJzLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFs
bFRlc3Q7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5CYXNlSlVuaXQ0Q2xhc3NSdW5u
ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1p
bXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwot
Ci1AUnVuV2l0aChCYXNlSlVuaXQ0Q2xhc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgQ2Ft
ZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVzdCB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFH
ID0gIkNhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QiOwotCi0gIHByaXZhdGUgc3RhdGlj
IGNsYXNzIFRlc3RPYmplY3RGYWN0b3J5IGV4dGVuZHMgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RG
aXh0dXJlcy5UZXN0T2JqZWN0RmFjdG9yeSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENh
bWVyYUVudW1lcmF0b3IgZ2V0Q2FtZXJhRW51bWVyYXRvcigpIHsKLSAgICAgIHJldHVybiBuZXcg
Q2FtZXJhMUVudW1lcmF0b3IoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
Q29udGV4dCBnZXRBcHBDb250ZXh0KCkgewotICAgICAgcmV0dXJuIEluc3RydW1lbnRhdGlvblJl
Z2lzdHJ5LmdldFRhcmdldENvbnRleHQoKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5n
cygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgcmF3T3Bl
bkNhbWVyYShTdHJpbmcgY2FtZXJhTmFtZSkgewotICAgICAgcmV0dXJuIGFuZHJvaWQuaGFyZHdh
cmUuQ2FtZXJhLm9wZW4oQ2FtZXJhMUVudW1lcmF0b3IuZ2V0Q2FtZXJhSW5kZXgoY2FtZXJhTmFt
ZSkpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmF3Q2xvc2VDYW1lcmEoT2JqZWN0IGNhbWVyYSkg
ewotICAgICAgKChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSkgY2FtZXJhKS5yZWxlYXNlKCk7Ci0g
ICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzIGZp
eHR1cmVzOwotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgZml4dHVy
ZXMgPSBuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhuZXcgVGVzdE9iamVjdEZh
Y3RvcnkoKSk7Ci0gIH0KLQotICBAQWZ0ZXIKLSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0g
ICAgZml4dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCk7Ci0gIH0KLQot
ICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOb25FeGlzdGlu
Z0NhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3Jl
YXRlTm9uRXhpc3RpbmdDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBj
YW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0g
IC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyBhICJkZWZhdWx0IiBjYXB0dXJlci4K
LSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQFRlc3QK
LSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUNhcHR1cmVyQW5kUmVuZGVy
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0
dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBj
YW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8g
YSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBmcm9udCBmYWNpbmcgdmlkZW8gY2FwdHVy
ZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBU
ZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEZyb250RmFjaW5nVmlk
ZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
Y3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFy
ZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBiYWNr
IGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQg
dGhlIEMrKyBsYXllci4KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpOwot
ICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRlZmF1bHQgY2FtZXJhIGNhbiBiZSBzdGFy
dGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8vIGxhdGVyIGJlIHN3aXRjaGVkIHRvIGFu
b3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxh
eWVyLgotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVmlk
ZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
c3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0U3dpdGNoVmlkZW9DYXB0dXJlclRvU3BlY2lmaWNDYW1lcmFOYW1lKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zd2l0Y2hDYW1lcmEodHJ1ZSAv
KiBzcGVjaWZ5Q2FtZXJhTmFtZSAqLyk7Ci0gIH0KLQotICBAVGVzdAotICBATWVkaXVtVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhRXZlbnRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFFdmVudHNJbnZva2VkKCk7Ci0gIH0KLQotICAvLyBU
ZXN0IHdoYXQgaGFwcGVucyB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBlLmcuIHN3aXRjaENhbWVy
YSgpIGFmdGVyIGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgotICBAVGVzdAotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCk7Ci0g
IH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgVmlkZW9Tb3VyY2UgdGhhdCB0aGUgQ2FtZXJh
VmlkZW9DYXB0dXJlciBpcyBjb25uZWN0ZWQgdG8gY2FuCi0gIC8vIGJlIHN0b3BwZWQgYW5kIHJl
c3RhcnRlZC4gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQFRl
c3QKLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RvcFJlc3RhcnRWaWRlb1NvdXJj
ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RvcFJlc3Rh
cnRWaWRlb1NvdXJjZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBj
YW4gYmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQgcmVzb2x1dGlvbnMuCi0gIC8vIEl0IGRvZXMgbm90
IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBUZXN0Ci0gIEBMYXJnZVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRTdG9wV2l0aERpZmZlcmVu
dFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qgd2hhdCBoYXBwZW5zIGlmIGJ1
ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBjYXB0dXJlciBoYXZlCi0gIC8vIGJlZW4gc3Rv
cHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUgQysrIGxheWVy
LgotICBAVGVzdAotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJM
YXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1cm5C
dWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB3ZSBjYW4gY2FwdHVyZSBm
cmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJlbmRlcmVyLCBzdG9wIGNhcHR1cmlu
ZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMuIFRoZSBkaWZmZXJlbmNlIGJldHdl
ZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBpcyB0aGF0IHdlCi0gIC8vIGFsc28g
dGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2FwdHVyZXIgcGFydHMuCi0gIEBUZXN0
Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlRW5kVG9F
bmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1
ZmZlckxhdGVFbmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhRXZl
bnRzSGFuZGxlci5vbkVycm9yIGlzIHRyaWdnZXJlZCBpZiB2aWRlbyBidWZmZXJzIGFyZSBub3Qg
cmV0dXJuZWQgdG8KLSAgLy8gdGhlIGNhcHR1cmVyLgotICBAVGVzdAotICBATGFyZ2VUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUZyZWV6ZWRF
dmVudE9uQnVmZmVyU3RhcnZhdGlvbigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgZnJh
bWVzIGZvcndhcmRlZCB0byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBhZGFwdE91dHB1dEZvcm1h
dCBpcwotICAvLyBjYWxsZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5kIEMrKyBwYXJ0cyBvZiBv
ZiB0aGUgc3RhY2suCi0gIEBUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RT
Y2FsZUNhbWVyYU91dHB1dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4
dHVyZXMuc2NhbGVDYW1lcmFPdXRwdXQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGZy
YW1lcyBmb3J3YXJkZWQgdG8gYSByZW5kZXJlciBpcyBjcm9wcGVkIHRvIGEgbmV3IG9yaWVudGF0
aW9uIGlmCi0gIC8vIGFkYXB0T3V0cHV0Rm9ybWF0IGlzIGNhbGxlZCBpbiBzdWNoIGEgd2F5LiBU
aGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFydHMgb2Ygb2YgdGhlIHN0YWNrLgotICBAVGVz
dAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JvcENhbWVyYU91dHB1dCgpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JvcENhbWVyYU91dHB1
dCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYg
dGhlIGNhbWVyYSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyB3aGVuIENhbWVyYVZpZGVvQ2FwdHVy
ZXIgaXMgc3RhcnRlZC4KLSAgQFRlc3QKLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCk7Ci0gIH0K
LQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyIGNhbiBiZSBzdGFydGVk
LCBldmVuIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gaWYgdGhlIGNhbWVy
YSBpcyBjbG9zZWQgd2hpbGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyByZS10cnlpbmcgdG8gc3Rh
cnQuCi0gIEBUZXN0Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVD
YW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xv
c2VDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVy
ZXIuc3RvcCBjYW4gYmUgY2FsbGVkIHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMKLSAgLy8g
cmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5
T3BlbkFuZFN0b3AoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3Jj
L29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMv
c3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlMzUxYmRmNWRmN2FkZmRiYWRhZTE5Y2M5MzViYjc2NTc1OGU5YTdmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlv
bnRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRlc3QuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDMzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi1pbXBvcnQg
YW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29u
dGV4dDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0
aW9uOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2U7Ci1pbXBv
cnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9p
ZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQu
c3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0
Lkluc3RydW1lbnRhdGlvblJlZ2lzdHJ5OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZp
bHRlcnMuTGFyZ2VUZXN0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMuTWVk
aXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0ZXJzLlNtYWxsVGVzdDsK
LWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBvcmcu
Y2hyb21pdW0uYmFzZS50ZXN0LkJhc2VKVW5pdDRDbGFzc1J1bm5lcjsKLWltcG9ydCBvcmcuanVu
aXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVz
dDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLUBUYXJnZXRBcGkoMjEpCi1A
UnVuV2l0aChCYXNlSlVuaXQ0Q2xhc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgQ2FtZXJh
MkNhcHR1cmVyVGVzdCB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYTJDYXB0
dXJlclRlc3QiOwotCi0gIC8qKgotICAgKiBTaW1wbGUgY2FtZXJhMiBpbXBsZW1lbnRhdGlvbiB0
aGF0IG9ubHkga25vd3MgaG93IHRvIG9wZW4gdGhlIGNhbWVyYSBhbmQgY2xvc2UgaXQuCi0gICAq
LwotICBwcml2YXRlIGNsYXNzIFNpbXBsZUNhbWVyYTIgewotICAgIGZpbmFsIENhbWVyYU1hbmFn
ZXIgY2FtZXJhTWFuYWdlcjsKLSAgICBmaW5hbCBMb29wZXJUaHJlYWQgbG9vcGVyVGhyZWFkOwot
ICAgIGZpbmFsIENvdW50RG93bkxhdGNoIG9wZW5Eb25lU2lnbmFsOwotICAgIGZpbmFsIE9iamVj
dCBjYW1lcmFEZXZpY2VMb2NrOwotICAgIEBOdWxsYWJsZSBDYW1lcmFEZXZpY2UgY2FtZXJhRGV2
aWNlOyAvLyBHdWFyZGVkIGJ5IGNhbWVyYURldmljZUxvY2sKLSAgICBib29sZWFuIG9wZW5TdWNj
ZWVkZWQ7IC8vIEd1YXJkZWQgYnkgY2FtZXJhRGV2aWNlTG9jawotCi0gICAgcHJpdmF0ZSBjbGFz
cyBMb29wZXJUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgICAgZmluYWwgQ291bnREb3duTGF0
Y2ggc3RhcnRlZFNpZ25hbCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICAgIHByaXZhdGUg
SGFuZGxlciBoYW5kbGVyOwotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgTG9vcGVyLnByZXBhcmUoKTsKLSAgICAgICAgaGFuZGxlciA9IG5ldyBI
YW5kbGVyKCk7Ci0gICAgICAgIHN0YXJ0ZWRTaWduYWwuY291bnREb3duKCk7Ci0gICAgICAgIExv
b3Blci5sb29wKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdhaXRUb1N0YXJ0KCkg
ewotICAgICAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShzdGFydGVkU2lnbmFs
KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVxdWVzdFN0b3AoKSB7Ci0gICAgICAg
IGhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgSGFu
ZGxlciBnZXRIYW5kbGVyKCkgewotICAgICAgICByZXR1cm4gaGFuZGxlcjsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIENhbWVyYVN0YXRlQ2FsbGJhY2sgZXh0ZW5kcyBDYW1l
cmFEZXZpY2UuU3RhdGVDYWxsYmFjayB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIG9uQ2xvc2VkKENhbWVyYURldmljZSBjYW1lcmFEZXZpY2UpIHsKLSAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgIlNpbXBsZSBjYW1lcmEyIGNsb3NlZC4iKTsKLQotICAgICAgICBzeW5jaHJvbml6
ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgICBTaW1wbGVDYW1lcmEyLnRoaXMuY2Ft
ZXJhRGV2aWNlID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIG9uRGlzY29ubmVjdGVkKENhbWVyYURldmljZSBjYW1lcmFEZXZp
Y2UpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlNpbXBsZSBjYW1lcmEyIGRpc2Nvbm5lY3Rl
ZC4iKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAg
ICAgICBTaW1wbGVDYW1lcmEyLnRoaXMuY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoQ2Ft
ZXJhRGV2aWNlIGNhbWVyYURldmljZSwgaW50IGVycm9yQ29kZSkgewotICAgICAgICBMb2dnaW5n
LncoVEFHLCAiU2ltcGxlIGNhbWVyYTIgZXJyb3I6ICIgKyBlcnJvckNvZGUpOwotCi0gICAgICAg
IHN5bmNocm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNpbXBsZUNhbWVy
YTIudGhpcy5jYW1lcmFEZXZpY2UgPSBjYW1lcmFEZXZpY2U7Ci0gICAgICAgICAgb3BlblN1Y2Nl
ZWRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgb3BlbkRvbmVTaWduYWwuY291bnRE
b3duKCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25P
cGVuZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZSkgewotICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiU2ltcGxlIGNhbWVyYTIgb3BlbmVkLiIpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAoY2Ft
ZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5jYW1lcmFEZXZp
Y2UgPSBjYW1lcmFEZXZpY2U7Ci0gICAgICAgICAgb3BlblN1Y2NlZWRlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvcGVuRG9uZVNpZ25hbC5jb3VudERvd24oKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBTaW1wbGVDYW1lcmEyKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGRldmljZU5h
bWUpIHsKLSAgICAgIGNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRT
eXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICAgICAgbG9vcGVyVGhyZWFk
ID0gbmV3IExvb3BlclRocmVhZCgpOwotICAgICAgbG9vcGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAg
ICBsb29wZXJUaHJlYWQud2FpdFRvU3RhcnQoKTsKLSAgICAgIGNhbWVyYURldmljZUxvY2sgPSBu
ZXcgT2JqZWN0KCk7Ci0gICAgICBvcGVuRG9uZVNpZ25hbCA9IG5ldyBDb3VudERvd25MYXRjaCgx
KTsKLSAgICAgIGNhbWVyYURldmljZSA9IG51bGw7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiT3Bl
bmluZyBzaW1wbGUgY2FtZXJhMi4iKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNhbWVyYU1hbmFn
ZXIub3BlbkNhbWVyYShkZXZpY2VOYW1lLCBuZXcgQ2FtZXJhU3RhdGVDYWxsYmFjaygpLCBsb29w
ZXJUaHJlYWQuZ2V0SGFuZGxlcigpKTsKLSAgICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgIGZhaWwoIlNpbXBsZSBjYW1lcmEyIENhbWVyYUFjY2Vzc0V4Y2Vw
dGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRB
RywgIldhaXRpbmcgZm9yIHNpbXBsZSBjYW1lcmEyIHRvIG9wZW4uIik7Ci0gICAgICBUaHJlYWRV
dGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShvcGVuRG9uZVNpZ25hbCk7Ci0gICAgICBzeW5jaHJv
bml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgaWYgKCFvcGVuU3VjY2VlZGVkKSB7
Ci0gICAgICAgICAgZmFpbCgiT3BlbmluZyBzaW1wbGUgY2FtZXJhMiBmYWlsZWQuIik7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICAg
IExvZ2dpbmcuZChUQUcsICJDbG9zaW5nIHNpbXBsZSBjYW1lcmEyLiIpOwotICAgICAgc3luY2hy
b25pemVkIChjYW1lcmFEZXZpY2VMb2NrKSB7Ci0gICAgICAgIGlmIChjYW1lcmFEZXZpY2UgIT0g
bnVsbCkgewotICAgICAgICAgIGNhbWVyYURldmljZS5jbG9zZSgpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0KLSAgICAgIGxvb3BlclRocmVhZC5yZXF1ZXN0U3RvcCgpOwotICAgICAgVGhyZWFkVXRp
bHMuam9pblVuaW50ZXJydXB0aWJseShsb29wZXJUaHJlYWQpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgY2xhc3MgVGVzdE9iamVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRlb0NhcHR1cmVy
VGVzdEZpeHR1cmVzLlRlc3RPYmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgQ2FtZXJhRW51bWVyYXRvciBnZXRDYW1lcmFFbnVtZXJhdG9yKCkgewotICAgICAgcmV0dXJu
IG5ldyBDYW1lcmEyRW51bWVyYXRvcihnZXRBcHBDb250ZXh0KCkpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKSB7Ci0gICAgICByZXR1
cm4gSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotICAgIH0KLQot
ICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIE9iamVjdCByYXdPcGVuQ2FtZXJhKFN0cmluZyBjYW1lcmFOYW1lKSB7Ci0gICAgICBy
ZXR1cm4gbmV3IFNpbXBsZUNhbWVyYTIoZ2V0QXBwQ29udGV4dCgpLCBjYW1lcmFOYW1lKTsKLSAg
ICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpIHsKLSAgICAg
ICgoU2ltcGxlQ2FtZXJhMikgY2FtZXJhKS5jbG9zZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZh
dGUgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyBmaXh0dXJlczsKLQotICBAQmVmb3Jl
Ci0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIGZpeHR1cmVzID0gbmV3IENhbWVyYVZpZGVv
Q2FwdHVyZXJUZXN0Rml4dHVyZXMobmV3IFRlc3RPYmplY3RGYWN0b3J5KCkpOwotICB9Ci0KLSAg
QEFmdGVyCi0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIGZpeHR1cmVzLmRpc3Bvc2Uo
KTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0
ZUFuZERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVz
LmNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJh
KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVk
IGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8g
cmVuZGVyZXIgdXNpbmcgYSAiZGVmYXVsdCIgY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGgg
dGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RDcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAg
fQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRo
YXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJl
ciB1c2luZyB0aGUgZnJvbnQgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBi
b3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBAVGVzdAotICBATWVkaXVtVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRGcm9udEZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUZyb250RmFjaW5nQ2Fw
dHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEg
Y2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRv
IGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyB0aGUgYmFjayBmYWNpbmcgdmlkZW8gY2FwdHVy
ZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBU
ZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEJhY2tGYWNpbmdWaWRl
b0NhcHR1cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5j
cmVhdGVCYWNrRmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IHRoZSBkZWZhdWx0IGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgY2Ft
ZXJhIGNhbgotICAvLyBsYXRlciBiZSBzd2l0Y2hlZCB0byBhbm90aGVyIGNhbWVyYS4KLSAgLy8g
SXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQFRlc3QKLSAgQE1l
ZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN3aXRjaFZpZGVvQ2FwdHVyZXIoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN3aXRjaENhbWVyYSgpOwotICB9
Ci0KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN3aXRjaFZpZGVv
Q2FwdHVyZXJUb1NwZWNpZmljQ2FtZXJhTmFtZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMuc3dpdGNoQ2FtZXJhKHRydWUgLyogc3BlY2lmeUNhbWVyYU5hbWUg
Ki8pOwotICB9Ci0KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENh
bWVyYUV2ZW50cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
Y2FtZXJhRXZlbnRzSW52b2tlZCgpOwotICB9Ci0KLSAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hl
biBhdHRlbXB0aW5nIHRvIGNhbGwgZS5nLiBzd2l0Y2hDYW1lcmEoKSBhZnRlciBjYW1lcmEgaGFz
IGJlZW4gc3RvcHBlZC4KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dENhbWVyYUNhbGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBmaXh0dXJlcy5jYW1lcmFDYWxsc0FmdGVyU3RvcCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0
IHRoYXQgdGhlIFZpZGVvU291cmNlIHRoYXQgdGhlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgY29u
bmVjdGVkIHRvIGNhbgotICAvLyBiZSBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQuIEl0IHRlc3RzIGJv
dGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBUZXN0Ci0gIEBMYXJnZVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdFN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKTsKLSAg
fQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYXQgZGlm
ZmVyZW50IHJlc29sdXRpb25zLgotICAvLyBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUgQysr
IGxheWVyLgotICBAVGVzdAotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFN0
b3BXaXRoRGlmZmVyZW50UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpeHR1cmVzLnN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpOwotICB9
Ci0KLSAgLy8gVGhpcyB0ZXN0IHdoYXQgaGFwcGVucyBpZiBidWZmZXJzIGFyZSByZXR1cm5lZCBh
ZnRlciB0aGUgY2FwdHVyZXIgaGF2ZQotICAvLyBiZWVuIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4g
SXQgZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQFRlc3QKLSAgQExhcmdl
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZSgpOwotICB9Ci0K
LSAgLy8gVGhpcyB0ZXN0IHRoYXQgd2UgY2FuIGNhcHR1cmUgZnJhbWVzLCBrZWVwIHRoZSBmcmFt
ZXMgaW4gYSBsb2NhbCByZW5kZXJlciwgc3RvcCBjYXB0dXJpbmcsCi0gIC8vIGFuZCB0aGVuIHJl
dHVybiB0aGUgZnJhbWVzLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0ZXN0IHRlc3RSZXR1
cm5CdWZmZXJMYXRlKCkgaXMgdGhhdCB3ZQotICAvLyBhbHNvIHRlc3QgdGhlIEpOSSBhbmQgQysr
IEFuZHJvaWRWaWRlb0NhcHR1cmVyIHBhcnRzLgotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZUVuZFRvRW5kKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKTsK
LSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENhbWVyYUV2ZW50c0hhbmRsZXIub25FcnJvciBp
cyB0cmlnZ2VyZWQgaWYgdmlkZW8gYnVmZmVycyBhcmUgbm90IHJldHVybmVkIHRvCi0gIC8vIHRo
ZSBjYXB0dXJlci4KLSAgQFRlc3QKLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2Ft
ZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0aW9uKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRp
b24oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGZyYW1lcyBmb3J3YXJkZWQgdG8gYSBy
ZW5kZXJlciBpcyBzY2FsZWQgaWYgYWRhcHRPdXRwdXRGb3JtYXQgaXMKLSAgLy8gY2FsbGVkLiBU
aGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFydHMgb2Ygb2YgdGhlIHN0YWNrLgotICBAVGVz
dAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2NhbGVDYW1lcmFPdXRwdXQoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnNjYWxlQ2FtZXJhT3V0
cHV0KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBmcmFtZXMgZm9yd2FyZGVkIHRvIGEg
cmVuZGVyZXIgaXMgY3JvcHBlZCB0byBhIG5ldyBvcmllbnRhdGlvbiBpZgotICAvLyBhZGFwdE91
dHB1dEZvcm1hdCBpcyBjYWxsZWQgaW4gc3VjaCBhIHdheS4gVGhpcyB0ZXN0IGJvdGggSmF2YSBh
bmQgQysrIHBhcnRzIG9mIG9mIHRoZSBzdGFjay4KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdENyb3BDYW1lcmFPdXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGZpeHR1cmVzLmNyb3BDYW1lcmFPdXRwdXQoKTsKLSAgfQotCi0gIC8vIFRo
aXMgdGVzdCB0aGF0IGFuIGVycm9yIGlzIHJlcG9ydGVkIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFk
eSBvcGVuZWQKLSAgLy8gd2hlbiBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIHN0YXJ0ZWQuCi0gIEBU
ZXN0Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0Fs
cmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5z
dGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRo
YXQgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW4gYmUgc3RhcnRlZCwgZXZlbiBpZiB0aGUgY2FtZXJh
IGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIGlmIHRoZSBjYW1lcmEgaXMgY2xvc2VkIHdoaWxlIENh
bWVyYVZpZGVvQ2FwdHVyZXIgaXMgcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBAVGVzdAotICBATGFy
Z2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFu
ZENsb3NlQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCk7Ci0gIH0KLQot
ICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyLnN0b3AgY2FuIGJlIGNhbGxl
ZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzCi0gIC8vIHJlLXRyeWluZyB0byBzdGFydC4K
LSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1l
cmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCk7Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYVZp
ZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcv
d2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMuamF2YQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTZiNzQ0MDc0ZTgxYzFjNTA5ZTkwZTVhZWRjZTk2YTgzOTdkY2Q5
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50
YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVz
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQu
YXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNl
OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3Rh
dGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250
ZXh0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0
IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1l
cmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLlZp
ZGVvRnJhbWU7Ci0KLWNsYXNzIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMgewotICBz
dGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVz
IjsKLSAgLy8gRGVmYXVsdCB2YWx1ZXMgdXNlZCBmb3Igc3RhcnRpbmcgY2FwdHVyaW5nCi0gIHN0
YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9XSURUSCA9IDY0MDsKLSAgc3RhdGljIGZpbmFsIGludCBE
RUZBVUxUX0hFSUdIVCA9IDQ4MDsKLSAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0ZQUyA9IDE1
OwotCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIFJlbmRlcmVyQ2FsbGJhY2tzIGltcGxlbWVudHMg
VmlkZW9TaW5rIHsKLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBmcmFtZUxvY2sgPSBuZXcgT2Jq
ZWN0KCk7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVuZGVyZWQ7Ci0gICAgcHJpdmF0ZSBpbnQg
d2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25GcmFtZShWaWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KGZyYW1lTG9jaykgewotICAgICAgICArK2ZyYW1lc1JlbmRlcmVkOwotICAgICAgICB3aWR0aCA9
IGZyYW1lLmdldFJvdGF0ZWRXaWR0aCgpOwotICAgICAgICBoZWlnaHQgPSBmcmFtZS5nZXRSb3Rh
dGVkSGVpZ2h0KCk7Ci0gICAgICAgIGZyYW1lTG9jay5ub3RpZnkoKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwdWJsaWMgaW50IGZyYW1lV2lkdGgoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZy
YW1lTG9jaykgewotICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHVibGljIGludCBmcmFtZUhlaWdodCgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2Nr
KSB7Ci0gICAgICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IGludCB3YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBuZXh0IGZyYW1lIHRv
IHJlbmRlciIpOwotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgZmlu
YWwgaW50IGZyYW1lc1JlbmRlcmVkU3RhcnQgPSBmcmFtZXNSZW5kZXJlZDsKLSAgICAgICAgd2hp
bGUgKGZyYW1lc1JlbmRlcmVkID09IGZyYW1lc1JlbmRlcmVkU3RhcnQpIHsKLSAgICAgICAgICBm
cmFtZUxvY2sud2FpdCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmcmFtZXNSZW5kZXJl
ZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBGYWtlQXN5
bmNSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvU2luayB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0
PFZpZGVvRnJhbWU+IHBlbmRpbmdGcmFtZXMgPSBuZXcgQXJyYXlMaXN0PFZpZGVvRnJhbWU+KCk7
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkZyYW1lKFZpZGVvRnJhbWUgZnJh
bWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0ZyYW1lcykgewotICAgICAgICBmcmFt
ZS5yZXRhaW4oKTsKLSAgICAgICAgcGVuZGluZ0ZyYW1lcy5hZGQoZnJhbWUpOwotICAgICAgICBw
ZW5kaW5nRnJhbWVzLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFdhaXQg
dW50aWwgYXQgbGVhc3Qgb25lIGZyYW1lIGhhdmUgYmVlbiByZWNlaXZlZCwgYmVmb3JlIHJldHVy
bmluZyB0aGVtLgotICAgIHB1YmxpYyBMaXN0PFZpZGVvRnJhbWU+IHdhaXRGb3JQZW5kaW5nRnJh
bWVzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJXYWl0aW5nIGZvciBwZW5kaW5nIGZyYW1lcyIpOwotICAgICAgc3luY2hyb25pemVkIChwZW5k
aW5nRnJhbWVzKSB7Ci0gICAgICAgIHdoaWxlIChwZW5kaW5nRnJhbWVzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgIHBlbmRpbmdGcmFtZXMud2FpdCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBuZXcgQXJyYXlMaXN0PFZpZGVvRnJhbWU+KHBlbmRpbmdGcmFtZXMpOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIEZha2VDYXB0dXJlck9ic2VydmVyIGlt
cGxlbWVudHMgQ2FwdHVyZXJPYnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzQ2FwdHVy
ZWQ7Ci0gICAgcHJpdmF0ZSBATnVsbGFibGUgVmlkZW9GcmFtZSB2aWRlb0ZyYW1lOwotICAgIGZp
bmFsIHByaXZhdGUgT2JqZWN0IGZyYW1lTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBmaW5hbCBw
cml2YXRlIE9iamVjdCBjYXB0dXJlclN0YXJ0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2
YXRlIEJvb2xlYW4gY2FwdHVyZXJTdGFydFJlc3VsdDsKLSAgICBmaW5hbCBwcml2YXRlIExpc3Q8
TG9uZz4gdGltZXN0YW1wcyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2Vzcykgewot
ICAgICAgTG9nZ2luZy5kKFRBRywgIm9uQ2FwdHVyZXJTdGFydGVkOiAiICsgc3VjY2Vzcyk7Ci0K
LSAgICAgIHN5bmNocm9uaXplZCAoY2FwdHVyZXJTdGFydExvY2spIHsKLSAgICAgICAgY2FwdHVy
ZXJTdGFydFJlc3VsdCA9IHN1Y2Nlc3M7Ci0gICAgICAgIGNhcHR1cmVyU3RhcnRMb2NrLm5vdGlm
eUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uQ2FwdHVyZXJTdG9wcGVkKCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIm9uQ2FwdHVyZXJT
dG9wcGVkIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25GcmFt
ZUNhcHR1cmVkKFZpZGVvRnJhbWUgZnJhbWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVM
b2NrKSB7Ci0gICAgICAgICsrZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICAgIGlmICh2aWRlb0ZyYW1l
ICE9IG51bGwpIHsKLSAgICAgICAgICB2aWRlb0ZyYW1lLnJlbGVhc2UoKTsKLSAgICAgICAgfQot
ICAgICAgICB2aWRlb0ZyYW1lID0gZnJhbWU7Ci0gICAgICAgIHZpZGVvRnJhbWUucmV0YWluKCk7
Ci0gICAgICAgIHRpbWVzdGFtcHMuYWRkKHZpZGVvRnJhbWUuZ2V0VGltZXN0YW1wTnMoKSk7Ci0g
ICAgICAgIGZyYW1lTG9jay5ub3RpZnkoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
Ym9vbGVhbiB3YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciB0aGUgY2FwdHVyZXIgdG8g
c3RhcnQiKTsKLSAgICAgIHN5bmNocm9uaXplZCAoY2FwdHVyZXJTdGFydExvY2spIHsKLSAgICAg
ICAgd2hpbGUgKGNhcHR1cmVyU3RhcnRSZXN1bHQgPT0gbnVsbCkgewotICAgICAgICAgIGNhcHR1
cmVyU3RhcnRMb2NrLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2FwdHVyZXJT
dGFydFJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHdhaXRGb3JOZXh0
Q2FwdHVyZWRGcmFtZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dn
aW5nLmQoVEFHLCAiV2FpdGluZyBmb3IgdGhlIG5leHQgY2FwdHVyZWQgZnJhbWUiKTsKLSAgICAg
IHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIGZpbmFsIGludCBmcmFtZXNDYXB0
dXJlZFN0YXJ0ID0gZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICAgIHdoaWxlIChmcmFtZXNDYXB0dXJl
ZCA9PSBmcmFtZXNDYXB0dXJlZFN0YXJ0KSB7Ci0gICAgICAgICAgZnJhbWVMb2NrLndhaXQoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgaW50IGZyYW1lV2lkdGgoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9j
aykgewotICAgICAgICByZXR1cm4gdmlkZW9GcmFtZS5nZXRCdWZmZXIoKS5nZXRXaWR0aCgpOwot
ICAgICAgfQotICAgIH0KLQotICAgIGludCBmcmFtZUhlaWdodCgpIHsKLSAgICAgIHN5bmNocm9u
aXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiB2aWRlb0ZyYW1lLmdldEJ1ZmZlcigp
LmdldEhlaWdodCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcmVsZWFzZUZyYW1lKCkg
ewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHZpZGVvRnJh
bWUgIT0gbnVsbCkgewotICAgICAgICAgIHZpZGVvRnJhbWUucmVsZWFzZSgpOwotICAgICAgICAg
IHZpZGVvRnJhbWUgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgTGlz
dDxMb25nPiBnZXRDb3B5QW5kUmVzZXRMaXN0T2Z0aW1lU3RhbXBzKCkgewotICAgICAgc3luY2hy
b25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgQXJyYXlMaXN0PExvbmc+IGxpc3QgPSBuZXcg
QXJyYXlMaXN0PExvbmc+KHRpbWVzdGFtcHMpOwotICAgICAgICB0aW1lc3RhbXBzLmNsZWFyKCk7
Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBj
bGFzcyBDYW1lcmFFdmVudHMgaW1wbGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYUV2
ZW50c0hhbmRsZXIgewotICAgIHB1YmxpYyBib29sZWFuIG9uQ2FtZXJhT3BlbmluZ0NhbGxlZDsK
LSAgICBwdWJsaWMgYm9vbGVhbiBvbkZpcnN0RnJhbWVBdmFpbGFibGVDYWxsZWQ7Ci0gICAgcHJp
dmF0ZSBmaW5hbCBPYmplY3Qgb25DYW1lcmFGcmVlemVkTG9jayA9IG5ldyBPYmplY3QoKTsKLSAg
ICBwcml2YXRlIFN0cmluZyBvbkNhbWVyYUZyZWV6ZWREZXNjcmlwdGlvbjsKLSAgICBwcml2YXRl
IGZpbmFsIE9iamVjdCBjYW1lcmFDbG9zZWRMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZh
dGUgYm9vbGVhbiBjYW1lcmFDbG9zZWQgPSB0cnVlOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25DYW1lcmFFcnJvcihTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbikgewotICAgICAg
TG9nZ2luZy53KFRBRywgIkNhbWVyYSBlcnJvcjogIiArIGVycm9yRGVzY3JpcHRpb24pOwotICAg
ICAgY2FtZXJhQ2xvc2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZCgpIHt9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkNhbWVyYUZyZWV6ZWQoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pIHsKLSAg
ICAgIHN5bmNocm9uaXplZCAob25DYW1lcmFGcmVlemVkTG9jaykgewotICAgICAgICBvbkNhbWVy
YUZyZWV6ZWREZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247Ci0gICAgICAgIG9uQ2FtZXJh
RnJlZXplZExvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgb25DYW1lcmFPcGVuaW5nKFN0cmluZyBjYW1lcmFOYW1lKSB7Ci0g
ICAgICBvbkNhbWVyYU9wZW5pbmdDYWxsZWQgPSB0cnVlOwotICAgICAgc3luY2hyb25pemVkIChj
YW1lcmFDbG9zZWRMb2NrKSB7Ci0gICAgICAgIGNhbWVyYUNsb3NlZCA9IGZhbHNlOwotICAgICAg
fQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRmlyc3RGcmFtZUF2
YWlsYWJsZSgpIHsKLSAgICAgIG9uRmlyc3RGcmFtZUF2YWlsYWJsZUNhbGxlZCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFDbG9zZWQoKSB7
Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUNsb3NlZExvY2spIHsKLSAgICAgICAgY2FtZXJh
Q2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgY2FtZXJhQ2xvc2VkTG9jay5ub3RpZnlBbGwoKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHdhaXRGb3JDYW1lcmFGcmVlemVkKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0
aW5nIGZvciB0aGUgY2FtZXJhIHRvIGZyZWV6ZSIpOwotICAgICAgc3luY2hyb25pemVkIChvbkNh
bWVyYUZyZWV6ZWRMb2NrKSB7Ci0gICAgICAgIHdoaWxlIChvbkNhbWVyYUZyZWV6ZWREZXNjcmlw
dGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgb25DYW1lcmFGcmVlemVkTG9jay53YWl0KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG9uQ2FtZXJhRnJlZXplZERlc2NyaXB0aW9uOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdhaXRGb3JDYW1lcmFDbG9zZWQoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgc3luY2hyb25pemVkIChjYW1lcmFDbG9z
ZWRMb2NrKSB7Ci0gICAgICAgIHdoaWxlICghY2FtZXJhQ2xvc2VkKSB7Ci0gICAgICAgICAgTG9n
Z2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBjYW1lcmEgdG8gY2xvc2UuIik7Ci0gICAgICAg
ICAgY2FtZXJhQ2xvc2VkTG9jay53YWl0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICAvKioKLSAgICogQ2xhc3MgdG8gY29sbGVjdCBhbGwgY2xhc3NlcyByZWxhdGVkIHRv
IHNpbmdsZSBjYXB0dXJlciBpbnN0YW5jZS4KLSAgICovCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNz
IENhcHR1cmVySW5zdGFuY2UgewotICAgIHB1YmxpYyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNhcHR1
cmVyOwotICAgIHB1YmxpYyBDYW1lcmFFdmVudHMgY2FtZXJhRXZlbnRzOwotICAgIHB1YmxpYyBT
dXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICBwdWJsaWMgRmFr
ZUNhcHR1cmVyT2JzZXJ2ZXIgb2JzZXJ2ZXI7Ci0gICAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1h
dD4gc3VwcG9ydGVkRm9ybWF0czsKLSAgICBwdWJsaWMgQ2FwdHVyZUZvcm1hdCBmb3JtYXQ7Ci0g
IH0KLQotICAvKioKLSAgICogQ2xhc3MgdXNlZCBmb3IgY29sbGVjdGluZyBhIFZpZGVvU291cmNl
LCBhIFZpZGVvVHJhY2sgYW5kIGEgcmVuZGVyZXIuIFRoZSBjbGFzcwotICAgKiBpcyB1c2VkIGZv
ciB0ZXN0aW5nIGxvY2FsIHJlbmRlcmluZyBmcm9tIGEgY2FwdHVyZXIuCi0gICAqLwotICBzdGF0
aWMgcHJpdmF0ZSBjbGFzcyBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHsKLSAgICBwdWJsaWMgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgcHVibGljIFZpZGVv
U291cmNlIHNvdXJjZTsKLSAgICBwdWJsaWMgVmlkZW9UcmFjayB0cmFjazsKLSAgICBwdWJsaWMg
UmVuZGVyZXJDYWxsYmFja3MgcmVuZGVyZXJDYWxsYmFja3M7Ci0gICAgcHVibGljIEZha2VBc3lu
Y1JlbmRlcmVyIGZha2VBc3luY1JlbmRlcmVyOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IHN0
YXRpYyBjbGFzcyBUZXN0T2JqZWN0RmFjdG9yeSB7Ci0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRv
ciBjYW1lcmFFbnVtZXJhdG9yOwotCi0gICAgVGVzdE9iamVjdEZhY3RvcnkoKSB7Ci0gICAgICBj
YW1lcmFFbnVtZXJhdG9yID0gZ2V0Q2FtZXJhRW51bWVyYXRvcigpOwotICAgIH0KLQotICAgIHB1
YmxpYyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgICBTdHJpbmcg
bmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRs
ZXIpIHsKLSAgICAgIHJldHVybiBjYW1lcmFFbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKG5hbWUs
IGV2ZW50c0hhbmRsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBATnVsbGFibGUgU3RyaW5nIGdl
dE5hbWVPZkZyb250RmFjaW5nRGV2aWNlKCkgewotICAgICAgZm9yIChTdHJpbmcgZGV2aWNlTmFt
ZSA6IGNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKSkgewotICAgICAgICBpZiAoY2Ft
ZXJhRW51bWVyYXRvci5pc0Zyb250RmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgICAgcmV0
dXJuIGRldmljZU5hbWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfQotCi0gICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0TmFtZU9mQmFja0ZhY2lu
Z0RldmljZSgpIHsKLSAgICAgIGZvciAoU3RyaW5nIGRldmljZU5hbWUgOiBjYW1lcmFFbnVtZXJh
dG9yLmdldERldmljZU5hbWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbWVyYUVudW1lcmF0b3IuaXNC
YWNrRmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgICAgcmV0dXJuIGRldmljZU5hbWU7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVi
bGljIGJvb2xlYW4gaGF2ZVR3b0NhbWVyYXMoKSB7Ci0gICAgICByZXR1cm4gY2FtZXJhRW51bWVy
YXRvci5nZXREZXZpY2VOYW1lcygpLmxlbmd0aCA+PSAyOwotICAgIH0KLQotICAgIHB1YmxpYyBi
b29sZWFuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkgewotICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwg
d2UgcGxhbiB0byBvbmx5IHN1cHBvcnQgY2FwdHVyaW5nIHRvIHRleHR1cmUsIHNvIGRlZmF1bHQg
dG8gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYWJzdHJhY3QgcHVibGlj
IENhbWVyYUVudW1lcmF0b3IgZ2V0Q2FtZXJhRW51bWVyYXRvcigpOwotICAgIGFic3RyYWN0IHB1
YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKTsKLQotICAgIC8vIENhbWVyYVZpZGVvQ2FwdHVy
ZXIgQVBJIGlzIHRvbyBzbG93IGZvciBzb21lIG9mIG91ciB0ZXN0cyB3aGVyZSB3ZSBuZWVkIHRv
IG9wZW4gYSBjb21wZXRpbmcKLSAgICAvLyBjYW1lcmEuIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQg
aW5zdGVhZC4KLSAgICBhYnN0cmFjdCBwdWJsaWMgT2JqZWN0IHJhd09wZW5DYW1lcmEoU3RyaW5n
IGNhbWVyYU5hbWUpOwotICAgIGFic3RyYWN0IHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9i
amVjdCBjYW1lcmEpOwotICB9Ci0KLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgcGVl
ckNvbm5lY3Rpb25GYWN0b3J5OwotICBwcml2YXRlIFRlc3RPYmplY3RGYWN0b3J5IHRlc3RPYmpl
Y3RGYWN0b3J5OwotCi0gIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMoVGVzdE9iamVj
dEZhY3RvcnkgdGVzdE9iamVjdEZhY3RvcnkpIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3Rvcnku
aW5pdGlhbGl6ZSgKLSAgICAgICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0aW9u
T3B0aW9ucy5idWlsZGVyKHRlc3RPYmplY3RGYWN0b3J5LmdldEFwcENvbnRleHQoKSkKLSAgICAg
ICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRzLk5BVElWRV9MSUJSQVJZ
KQotICAgICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsKLQotICAgIHRo
aXMucGVlckNvbm5lY3Rpb25GYWN0b3J5ID0gUGVlckNvbm5lY3Rpb25GYWN0b3J5LmJ1aWxkZXIo
KS5jcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTsKLSAgICB0aGlzLnRlc3RPYmplY3RGYWN0
b3J5ID0gdGVzdE9iamVjdEZhY3Rvcnk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkg
ewotICAgIHRoaXMucGVlckNvbm5lY3Rpb25GYWN0b3J5LmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8v
IEludGVybmFsIGhlbHBlciBtZXRob2RzCi0gIHByaXZhdGUgQ2FwdHVyZXJJbnN0YW5jZSBjcmVh
dGVDYXB0dXJlcihTdHJpbmcgbmFtZSwgYm9vbGVhbiBpbml0aWFsaXplKSB7Ci0gICAgQ2FwdHVy
ZXJJbnN0YW5jZSBpbnN0YW5jZSA9IG5ldyBDYXB0dXJlckluc3RhbmNlKCk7Ci0gICAgaW5zdGFu
Y2UuY2FtZXJhRXZlbnRzID0gbmV3IENhbWVyYUV2ZW50cygpOwotICAgIGluc3RhbmNlLmNhcHR1
cmVyID0gdGVzdE9iamVjdEZhY3RvcnkuY3JlYXRlQ2FwdHVyZXIobmFtZSwgaW5zdGFuY2UuY2Ft
ZXJhRXZlbnRzKTsKLSAgICBpbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VU
ZXh0dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3Qi
IC8qIHRocmVhZE5hbWUgKi8sIG51bGwgLyogc2hhcmVkQ29udGV4dCAqLyk7Ci0gICAgaW5zdGFu
Y2Uub2JzZXJ2ZXIgPSBuZXcgRmFrZUNhcHR1cmVyT2JzZXJ2ZXIoKTsKLSAgICBpZiAoaW5pdGlh
bGl6ZSkgewotICAgICAgaW5zdGFuY2UuY2FwdHVyZXIuaW5pdGlhbGl6ZSgKLSAgICAgICAgICBp
bnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlciwgdGVzdE9iamVjdEZhY3RvcnkuZ2V0QXBwQ29u
dGV4dCgpLCBpbnN0YW5jZS5vYnNlcnZlcik7Ci0gICAgfQotICAgIGluc3RhbmNlLnN1cHBvcnRl
ZEZvcm1hdHMgPSB0ZXN0T2JqZWN0RmFjdG9yeS5jYW1lcmFFbnVtZXJhdG9yLmdldFN1cHBvcnRl
ZEZvcm1hdHMobmFtZSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHJpdmF0ZSBD
YXB0dXJlckluc3RhbmNlIGNyZWF0ZUNhcHR1cmVyKGJvb2xlYW4gaW5pdGlhbGl6ZSkgewotICAg
IFN0cmluZyBuYW1lID0gdGVzdE9iamVjdEZhY3RvcnkuY2FtZXJhRW51bWVyYXRvci5nZXREZXZp
Y2VOYW1lcygpWzBdOwotICAgIHJldHVybiBjcmVhdGVDYXB0dXJlcihuYW1lLCBpbml0aWFsaXpl
KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmUoQ2FwdHVyZXJJbnN0YW5jZSBp
bnN0YW5jZSkgewotICAgIHN0YXJ0Q2FwdHVyZShpbnN0YW5jZSwgMCk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgc3RhcnRDYXB0dXJlKENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2UsIGludCBmb3Jt
YXRJbmRleCkgewotICAgIGZpbmFsIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9y
bWF0IGZvcm1hdCA9Ci0gICAgICAgIGluc3RhbmNlLnN1cHBvcnRlZEZvcm1hdHMuZ2V0KGZvcm1h
dEluZGV4KTsKLQotICAgIGluc3RhbmNlLmNhcHR1cmVyLnN0YXJ0Q2FwdHVyZShmb3JtYXQud2lk
dGgsIGZvcm1hdC5oZWlnaHQsIGZvcm1hdC5mcmFtZXJhdGUubWF4KTsKLSAgICBpbnN0YW5jZS5m
b3JtYXQgPSBmb3JtYXQ7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZGlzcG9zZUNhcHR1cmVyKENh
cHR1cmVySW5zdGFuY2UgaW5zdGFuY2UpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgaW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBpbnN0YW5jZS5jYW1lcmFF
dmVudHMud2FpdEZvckNhbWVyYUNsb3NlZCgpOwotICAgIGluc3RhbmNlLmNhcHR1cmVyLmRpc3Bv
c2UoKTsKLSAgICBpbnN0YW5jZS5vYnNlcnZlci5yZWxlYXNlRnJhbWUoKTsKLSAgICBpbnN0YW5j
ZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcigKLSAgICAgIENh
bWVyYVZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIsIFZpZGVvU2luayByZW5kZXJlckNhbGxiYWNrcykg
ewotICAgIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9IG5l
dyBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKCk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5z
dXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAg
ICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwgLyog
c2hhcmVkQ29udGV4dCAqLyk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5zb3VyY2UgPQot
ICAgICAgICBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UoLyogaXNTY3Jl
ZW5jYXN0PSAqLyBmYWxzZSk7Ci0gICAgY2FwdHVyZXIuaW5pdGlhbGl6ZSh2aWRlb1RyYWNrV2l0
aFJlbmRlcmVyLnN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgICB0ZXN0T2JqZWN0RmFjdG9y
eS5nZXRBcHBDb250ZXh0KCksIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNlLmdldENhcHR1
cmVyT2JzZXJ2ZXIoKSk7Ci0gICAgY2FwdHVyZXIuc3RhcnRDYXB0dXJlKERFRkFVTFRfV0lEVEgs
IERFRkFVTFRfSEVJR0hULCBERUZBVUxUX0ZQUyk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJl
ci50cmFjayA9Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVWaWRlb1RyYWNr
KCJkdW1teSIsIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNlKTsKLSAgICB2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyLnRyYWNrLmFkZFNpbmsocmVuZGVyZXJDYWxsYmFja3MpOwotICAgIHJldHVy
biB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoQ2FtZXJhVmlkZW9DYXB0dXJl
ciBjYXB0dXJlcikgewotICAgIFJlbmRlcmVyQ2FsbGJhY2tzIHJlbmRlcmVyQ2FsbGJhY2tzID0g
bmV3IFJlbmRlcmVyQ2FsbGJhY2tzKCk7Ci0gICAgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRl
b1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJl
cihjYXB0dXJlciwgcmVuZGVyZXJDYWxsYmFja3MpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIucmVuZGVyZXJDYWxsYmFja3MgPSByZW5kZXJlckNhbGxiYWNrczsKLSAgICByZXR1cm4gdmlk
ZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9UcmFja1dpdGhSZW5k
ZXJlciBjcmVhdGVWaWRlb1RyYWNrV2l0aEZha2VBc3luY1JlbmRlcmVyKAotICAgICAgQ2FtZXJh
VmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIEZha2VBc3luY1JlbmRlcmVyIGZha2VBc3lu
Y1JlbmRlcmVyID0gbmV3IEZha2VBc3luY1JlbmRlcmVyKCk7Ci0gICAgVmlkZW9UcmFja1dpdGhS
ZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFj
a1dpdGhSZW5kZXJlcihjYXB0dXJlciwgZmFrZUFzeW5jUmVuZGVyZXIpOwotICAgIHZpZGVvVHJh
Y2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIgPSBmYWtlQXN5bmNSZW5kZXJlcjsKLSAg
ICByZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBk
aXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIpIHsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnRyYWNrLmRp
c3Bvc2UoKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5kaXNwb3NlKCk7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgd2FpdFVudGlsSWRsZShDYXB0dXJlckluc3RhbmNlIGNhcHR1
cmVySW5zdGFuY2UpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ291
bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBjYXB0dXJl
ckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5wb3N0KG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAgIGJhcnJpZXIu
YXdhaXQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVDYXB0dXJlckFuZFJlbmRlcihT
dHJpbmcgbmFtZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAobmFtZSA9
PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiU2tpcHBpbmcgdmlkZW8gY2FwdHVyZXIg
dGVzdCBiZWNhdXNlIGRldmljZSBuYW1lIGlzIG51bGwuIik7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRl
Q2FwdHVyZXIobmFtZSwgZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmluYWwgVmlkZW9U
cmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRl
VmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyKTsKLSAgICBh
c3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZv
ck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJ
bnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIodmlkZW9UcmFja1dp
dGhSZW5kZXJlcik7Ci0gIH0KLQotICAvLyBUZXN0IG1ldGhvZHMKLSAgcHVibGljIHZvaWQgY3Jl
YXRlQ2FwdHVyZXJBbmREaXNwb3NlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBkaXNwb3NlQ2FwdHVyZXIoY3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIGRpc3Bvc2VDYXB0dXJlcihj
cmVhdGVDYXB0dXJlcigibm9uLWV4aXN0aW5nIGNhbWVyYSIsIGZhbHNlIC8qIGluaXRpYWxpemUg
Ki8pKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGZhaWwoIkV4cGVjdGVkIGlsbGVnYWwgYXJndW1lbnQgZXhj
ZXB0aW9uIHdoZW4gY3JlYXRpbmcgbm9uLWV4aXN0aW5nIGNhbWVyYS4iKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRlc3RPYmplY3RGYWN0b3J5LmNhbWVyYUVudW1l
cmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXTsKLSAgICBjcmVhdGVDYXB0dXJlckFuZFJlbmRlcihu
YW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUZyb250RmFjaW5nQ2FwdHVyZXJBbmRS
ZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGNyZWF0ZUNhcHR1cmVy
QW5kUmVuZGVyKHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVPZkZyb250RmFjaW5nRGV2aWNlKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlQmFja0ZhY2luZ0NhcHR1cmVyQW5kUmVuZGVy
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBjcmVhdGVDYXB0dXJlckFuZFJl
bmRlcih0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNrRmFjaW5nRGV2aWNlKCkpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBzd2l0Y2hDYW1lcmEoZmFsc2UgLyogc3BlY2lmeUNhbWVyYU5hbWUgKi8pOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKGJvb2xlYW4gc3BlY2lmeUNhbWVyYU5h
bWUpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKCF0ZXN0T2JqZWN0RmFj
dG9yeS5oYXZlVHdvQ2FtZXJhcygpKSB7Ci0gICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgVEFH
LCAiU2tpcHBpbmcgdGVzdCBzd2l0Y2ggdmlkZW8gY2FwdHVyZXIgYmVjYXVzZSB0aGUgZGV2aWNl
IGRvZXNuJ3QgaGF2ZSB0d28gY2FtZXJhcy4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJl
cihmYWxzZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRl
cmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIpOwotICAgIC8vIFdhaXQgZm9yIHRo
ZSBjYW1lcmEgdG8gc3RhcnQgc28gd2UgY2FuIHN3aXRjaCBpdAotICAgIGFzc2VydFRydWUodmlk
ZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9S
ZW5kZXIoKSA+IDApOwotCi0gICAgLy8gQXJyYXkgd2l0aCBvbmUgZWxlbWVudCB0byBhdm9pZCBm
aW5hbCBwcm9ibGVtIGluIG5lc3RlZCBjbGFzc2VzLgotICAgIGZpbmFsIGJvb2xlYW5bXSBjYW1l
cmFTd2l0Y2hTdWNjZXNzZnVsID0gbmV3IGJvb2xlYW5bMV07Ci0gICAgZmluYWwgQ291bnREb3du
TGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBmaW5hbCBDYW1lcmFW
aWRlb0NhcHR1cmVyLkNhbWVyYVN3aXRjaEhhbmRsZXIgY2FtZXJhU3dpdGNoSGFuZGxlciA9Ci0g
ICAgICAgIG5ldyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYVN3aXRjaEhhbmRsZXIoKSB7Ci0g
ICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFTd2l0Y2hE
b25lKGJvb2xlYW4gaXNGcm9udENhbWVyYSkgewotICAgICAgICAgICAgY2FtZXJhU3dpdGNoU3Vj
Y2Vzc2Z1bFswXSA9IHRydWU7Ci0gICAgICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNh
bWVyYVN3aXRjaEVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICBj
YW1lcmFTd2l0Y2hTdWNjZXNzZnVsWzBdID0gZmFsc2U7Ci0gICAgICAgICAgICBiYXJyaWVyLmNv
dW50RG93bigpOwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICBpZiAoc3BlY2lmeUNhbWVy
YU5hbWUpIHsKLSAgICAgIFN0cmluZyBleHBlY3RlZENhbWVyYU5hbWUgPSB0ZXN0T2JqZWN0RmFj
dG9yeS5jYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMV07Ci0gICAgICBjYXB0dXJl
ckluc3RhbmNlLmNhcHR1cmVyLnN3aXRjaENhbWVyYShjYW1lcmFTd2l0Y2hIYW5kbGVyLCBleHBl
Y3RlZENhbWVyYU5hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjYXB0dXJlckluc3RhbmNlLmNh
cHR1cmVyLnN3aXRjaENhbWVyYShjYW1lcmFTd2l0Y2hIYW5kbGVyKTsKLSAgICB9Ci0gICAgLy8g
V2FpdCB1bnRpbCB0aGUgY2FtZXJhIGhhcyBiZWVuIHN3aXRjaGVkLgotICAgIGJhcnJpZXIuYXdh
aXQoKTsKLQotICAgIC8vIENoZWNrIHJlc3VsdC4KLSAgICBhc3NlcnRUcnVlKGNhbWVyYVN3aXRj
aFN1Y2Nlc3NmdWxbMF0pOwotICAgIC8vIEVuc3VyZSB0aGF0IGZyYW1lcyBhcmUgcmVjZWl2ZWQu
Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tz
LndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNh
cHR1cmVySW5zdGFuY2UpOwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2FtZXJhRXZlbnRzSW52
b2tlZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJ
bnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFs
aXplICovKTsKLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgLy8gTWFr
ZSBzdXJlIGNhbWVyYSBpcyBzdGFydGVkIGFuZCBmaXJzdCBmcmFtZSBpcyByZWNlaXZlZCBhbmQg
dGhlbiBzdG9wIGl0LgotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53
YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIu
d2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVy
SW5zdGFuY2UpOwotCi0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLmNhbWVyYUV2ZW50
cy5vbkNhbWVyYU9wZW5pbmdDYWxsZWQpOwotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5j
ZS5jYW1lcmFFdmVudHMub25GaXJzdEZyYW1lQXZhaWxhYmxlQ2FsbGVkKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIGNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVh
dGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIHN0YXJ0Q2FwdHVyZShjYXB0
dXJlckluc3RhbmNlKTsKLSAgICAvLyBNYWtlIHN1cmUgY2FtZXJhIGlzIHN0YXJ0ZWQgYW5kIHRo
ZW4gc3RvcCBpdC4KLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2Fp
dEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0
b3BDYXB0dXJlKCk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5yZWxlYXNlRnJhbWUo
KTsKLQotICAgIC8vIFdlIGNhbid0IGNoYW5nZSB8Y2FwdHVyZXJ8IGF0IHRoaXMgcG9pbnQsIGJ1
dCB3ZSBzaG91bGQgbm90IGNyYXNoLgotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3dp
dGNoQ2FtZXJhKG51bGwgLyogc3dpdGNoRXZlbnRzSGFuZGxlciAqLyk7Ci0gICAgY2FwdHVyZXJJ
bnN0YW5jZS5jYXB0dXJlci5jaGFuZ2VDYXB0dXJlRm9ybWF0KERFRkFVTFRfV0lEVEgsIERFRkFV
TFRfSEVJR0hULCBERUZBVUxUX0ZQUyk7Ci0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJ
bnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdG9wUmVzdGFydFZpZGVvU291cmNlKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNl
IGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihmYWxzZSAvKiBpbml0aWFsaXplICov
KTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFu
Y2UuY2FwdHVyZXIpOwotCi0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJl
bmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKE1lZGlhU291cmNlLlN0YXRlLkxJVkUsIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIu
c291cmNlLnN0YXRlKCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2Fw
dHVyZSgpOwotICAgIGFzc2VydEVxdWFscyhNZWRpYVNvdXJjZS5TdGF0ZS5FTkRFRCwgdmlkZW9U
cmFja1dpdGhSZW5kZXJlci5zb3VyY2Uuc3RhdGUoKSk7Ci0KLSAgICBzdGFydENhcHR1cmUoY2Fw
dHVyZXJJbnN0YW5jZSk7Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJl
bmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKE1lZGlhU291cmNlLlN0YXRlLkxJVkUsIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIu
c291cmNlLnN0YXRlKCkpOwotCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2Up
OwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRp
b25zKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlcklu
c3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxp
emUgKi8pOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIHN0YXJ0
Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlLCBpKTsKLSAgICAgIGFzc2VydFRydWUoY2FwdHVyZXJJ
bnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgICAgY2FwdHVy
ZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLQotICAgICAg
Ly8gQ2hlY2sgdGhlIGZyYW1lIHNpemUuIFRoZSBhY3R1YWwgd2lkdGggYW5kIGhlaWdodCBkZXBl
bmQgb24gaG93IHRoZSBjYXB0dXJlciBpcyBtb3VudGVkLgotICAgICAgZmluYWwgYm9vbGVhbiBp
ZGVudGljYWxSZXNvbHV0aW9uID0KLSAgICAgICAgICAoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZl
ci5mcmFtZVdpZHRoKCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQud2lkdGgKLSAgICAgICAg
ICAgICAgJiYgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZUhlaWdodCgpID09IGNhcHR1
cmVySW5zdGFuY2UuZm9ybWF0LmhlaWdodCk7Ci0gICAgICBmaW5hbCBib29sZWFuIGZsaXBwZWRS
ZXNvbHV0aW9uID0KLSAgICAgICAgICAoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZVdp
ZHRoKCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuaGVpZ2h0Ci0gICAgICAgICAgICAgICYm
IGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVIZWlnaHQoKSA9PSBjYXB0dXJlckluc3Rh
bmNlLmZvcm1hdC53aWR0aCk7Ci0gICAgICBpZiAoIWlkZW50aWNhbFJlc29sdXRpb24gJiYgIWZs
aXBwZWRSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGZhaWwoIldyb25nIHJlc29sdXRpb24sIGdvdDog
IiArIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVXaWR0aCgpICsgIngiCi0gICAgICAg
ICAgICArIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVIZWlnaHQoKSArICIgZXhwZWN0
ZWQ6ICIKLSAgICAgICAgICAgICsgY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQud2lkdGggKyAieCIg
KyBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC5oZWlnaHQgKyAiIG9yICIKLSAgICAgICAgICAgICsg
Y2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuaGVpZ2h0ICsgIngiICsgY2FwdHVyZXJJbnN0YW5jZS5m
b3JtYXQud2lkdGgpOwotICAgICAgfQotCi0gICAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVy
LnN0b3BDYXB0dXJlKCk7Ci0gICAgICBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLnJlbGVhc2VG
cmFtZSgpOwotICAgIH0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCByZXR1cm5CdWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2Ug
PSBjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIHN0YXJ0Q2FwdHVy
ZShjYXB0dXJlckluc3RhbmNlKTsKLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2Jz
ZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLQotICAgIGNhcHR1cmVySW5zdGFuY2Uu
b2JzZXJ2ZXIud2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJJbnN0YW5j
ZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIExpc3Q8TG9uZz4gbGlzdE9mdGltZXN0YW1w
cyA9IGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZ2V0Q29weUFuZFJlc2V0TGlzdE9mdGltZVN0
YW1wcygpOwotICAgIGFzc2VydFRydWUobGlzdE9mdGltZXN0YW1wcy5zaXplKCkgPj0gMSk7Ci0K
LSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSwgMSk7Ci0gICAgY2FwdHVyZXJJbnN0
YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCk7Ci0gICAgY2FwdHVyZXJJbnN0
YW5jZS5vYnNlcnZlci5yZWxlYXNlRnJhbWUoKTsKLQotICAgIGNhcHR1cmVySW5zdGFuY2Uub2Jz
ZXJ2ZXIud2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5j
YXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotCi0gICAgbGlzdE9mdGltZXN0YW1wcyA9IGNhcHR1cmVy
SW5zdGFuY2Uub2JzZXJ2ZXIuZ2V0Q29weUFuZFJlc2V0TGlzdE9mdGltZVN0YW1wcygpOwotICAg
IGFzc2VydFRydWUobGlzdE9mdGltZXN0YW1wcy5zaXplKCkgPj0gMSk7Ci0KLSAgICBkaXNwb3Nl
Q2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXR1cm5C
dWZmZXJMYXRlRW5kVG9FbmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZp
bmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGZh
bHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIg
dmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoRmFr
ZUFzeW5jUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgLy8gV2FpdCBm
b3IgYXQgbGVhc3Qgb25lIGZyYW1lIHRoYXQgaGFzIG5vdCBiZWVuIHJldHVybmVkLgotICAgIGFz
c2VydEZhbHNlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIud2FpdEZv
clBlbmRpbmdGcmFtZXMoKS5pc0VtcHR5KCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0
dXJlci5zdG9wQ2FwdHVyZSgpOwotCi0gICAgLy8gRGlzcG9zZSBldmVyeXRoaW5nLgotICAgIGRp
c3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dp
dGhSZW5kZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLQotICAgIC8vIFJldHVybiB0aGUg
ZnJhbWUocyksIG9uIGEgZGlmZmVyZW50IHRocmVhZCBvdXQgb2Ygc3BpdGUuCi0gICAgZmluYWwg
TGlzdDxWaWRlb0ZyYW1lPiBwZW5kaW5nRnJhbWVzID0KLSAgICAgICAgdmlkZW9UcmFja1dpdGhS
ZW5kZXJlci5mYWtlQXN5bmNSZW5kZXJlci53YWl0Rm9yUGVuZGluZ0ZyYW1lcygpOwotICAgIGZp
bmFsIFRocmVhZCByZXR1cm5UaHJlYWQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBmb3IgKFZp
ZGVvRnJhbWUgZnJhbWUgOiBwZW5kaW5nRnJhbWVzKSB7Ci0gICAgICAgICAgZnJhbWUucmVsZWFz
ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuVGhyZWFkLnN0YXJ0
KCk7Ci0gICAgcmV0dXJuVGhyZWFkLmpvaW4oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNhbWVy
YUZyZWV6ZWRFdmVudE9uQnVmZmVyU3RhcnZhdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3Jl
YXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBzdGFydENhcHR1cmUoY2Fw
dHVyZXJJbnN0YW5jZSk7Ci0gICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBpcyBzdGFydGVkLgotICAg
IGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0
YXJ0KCkpOwotICAgIC8vIFNpbmNlIHdlIGRvbid0IHJldHVybiB0aGUgYnVmZmVyLCB3ZSBzaG91
bGQgZ2V0IGEgc3RhcnZhdGlvbiBtZXNzYWdlIGlmIHdlIGFyZQotICAgIC8vIGNhcHR1cmluZyB0
byBhIHRleHR1cmUuCi0gICAgYXNzZXJ0RXF1YWxzKCJDYW1lcmEgZmFpbHVyZS4gQ2xpZW50IG11
c3QgcmV0dXJuIHZpZGVvIGJ1ZmZlcnMuIiwKLSAgICAgICAgY2FwdHVyZXJJbnN0YW5jZS5jYW1l
cmFFdmVudHMud2FpdEZvckNhbWVyYUZyZWV6ZWQoKSk7Ci0KLSAgICBjYXB0dXJlckluc3RhbmNl
LmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5z
dGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2NhbGVDYW1lcmFPdXRwdXQoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVy
ZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAg
IGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0g
ICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0
dXJlcik7Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2Fs
bGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0KLSAgICBmaW5hbCBpbnQg
c3RhcnRXaWR0aCA9IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3MuZnJh
bWVXaWR0aCgpOwotICAgIGZpbmFsIGludCBzdGFydEhlaWdodCA9IHZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIucmVuZGVyZXJDYWxsYmFja3MuZnJhbWVIZWlnaHQoKTsKLSAgICBmaW5hbCBpbnQgZnJh
bWVSYXRlID0gMzA7Ci0gICAgZmluYWwgaW50IHNjYWxlZFdpZHRoID0gc3RhcnRXaWR0aCAvIDI7
Ci0gICAgZmluYWwgaW50IHNjYWxlZEhlaWdodCA9IHN0YXJ0SGVpZ2h0IC8gMjsKLQotICAgIC8v
IFJlcXVlc3QgdGhlIGNhcHR1cmVkIGZyYW1lcyB0byBiZSBzY2FsZWQuCi0gICAgdmlkZW9UcmFj
a1dpdGhSZW5kZXJlci5zb3VyY2UuYWRhcHRPdXRwdXRGb3JtYXQoc2NhbGVkV2lkdGgsIHNjYWxl
ZEhlaWdodCwgZnJhbWVSYXRlKTsKLQotICAgIGJvb2xlYW4gZ290RXhwZWN0ZWRSZXNvbHV0aW9u
ID0gZmFsc2U7Ci0gICAgaW50IG51bWJlck9mSW5zcGVjdGVkRnJhbWVzID0gMDsKLQotICAgIGRv
IHsKLSAgICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZv
ck5leHRGcmFtZVRvUmVuZGVyKCk7Ci0gICAgICArK251bWJlck9mSW5zcGVjdGVkRnJhbWVzOwot
Ci0gICAgICBnb3RFeHBlY3RlZFJlc29sdXRpb24gPSAodmlkZW9UcmFja1dpdGhSZW5kZXJlci5y
ZW5kZXJlckNhbGxiYWNrcy5mcmFtZVdpZHRoKCkgPT0gc2NhbGVkV2lkdGgKLSAgICAgICAgICAm
JiB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lSGVpZ2h0KCkg
PT0gc2NhbGVkSGVpZ2h0KTsKLSAgICB9IHdoaWxlICghZ290RXhwZWN0ZWRSZXNvbHV0aW9uICYm
IG51bWJlck9mSW5zcGVjdGVkRnJhbWVzIDwgMzApOwotCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNh
cHR1cmVySW5zdGFuY2UpOwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIpOwotCi0gICAgYXNzZXJ0VHJ1ZShnb3RFeHBlY3RlZFJlc29sdXRp
b24pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JvcENhbWVyYU91dHB1dCgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlcklu
c3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmlu
YWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAg
ICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVy
KTsKLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFj
a3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLQotICAgIGZpbmFsIGludCBzdGFy
dFdpZHRoID0gdmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy5mcmFtZVdp
ZHRoKCk7Ci0gICAgZmluYWwgaW50IHN0YXJ0SGVpZ2h0ID0gdmlkZW9UcmFja1dpdGhSZW5kZXJl
ci5yZW5kZXJlckNhbGxiYWNrcy5mcmFtZUhlaWdodCgpOwotICAgIGZpbmFsIGludCBmcmFtZVJh
dGUgPSAzMDsKLSAgICBmaW5hbCBpbnQgY3JvcFdpZHRoOwotICAgIGZpbmFsIGludCBjcm9wSGVp
Z2h0OwotICAgIGlmIChzdGFydFdpZHRoID4gc3RhcnRIZWlnaHQpIHsKLSAgICAgIC8vIExhbmRz
Y2FwZSBpbnB1dCwgcmVxdWVzdCBwb3J0cmFpdCBvdXRwdXQuCi0gICAgICBjcm9wV2lkdGggPSAz
NjA7Ci0gICAgICBjcm9wSGVpZ2h0ID0gNjQwOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBQb3J0
cmFpdCBpbnB1dCwgcmVxdWVzdCBsYW5kc2NhcGUgb3V0cHV0LgotICAgICAgY3JvcFdpZHRoID0g
NjQwOwotICAgICAgY3JvcEhlaWdodCA9IDYzMDsKLSAgICB9Ci0KLSAgICAvLyBSZXF1ZXN0IGRp
ZmZlcmVudCBvdXRwdXQgb3JpZW50YXRpb24gdGhhbiBpbnB1dC4KLSAgICB2aWRlb1RyYWNrV2l0
aFJlbmRlcmVyLnNvdXJjZS5hZGFwdE91dHB1dEZvcm1hdCgKLSAgICAgICAgY3JvcFdpZHRoLCBj
cm9wSGVpZ2h0LCBjcm9wV2lkdGgsIGNyb3BIZWlnaHQsIGZyYW1lUmF0ZSk7Ci0KLSAgICBib29s
ZWFuIGdvdEV4cGVjdGVkT3JpZW50YXRpb24gPSBmYWxzZTsKLSAgICBpbnQgbnVtYmVyT2ZJbnNw
ZWN0ZWRGcmFtZXMgPSAwOwotCi0gICAgZG8gewotICAgICAgdmlkZW9UcmFja1dpdGhSZW5kZXJl
ci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKTsKLSAgICAgICsr
bnVtYmVyT2ZJbnNwZWN0ZWRGcmFtZXM7Ci0KLSAgICAgIGdvdEV4cGVjdGVkT3JpZW50YXRpb24g
PSAoY3JvcFdpZHRoID4gY3JvcEhlaWdodCkKLSAgICAgICAgICA9PSAodmlkZW9UcmFja1dpdGhS
ZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy5mcmFtZVdpZHRoKCkKLSAgICAgICAgICAgICAgICAg
PiB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lSGVpZ2h0KCkp
OwotICAgIH0gd2hpbGUgKCFnb3RFeHBlY3RlZE9yaWVudGF0aW9uICYmIG51bWJlck9mSW5zcGVj
dGVkRnJhbWVzIDwgMzApOwotCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2Up
OwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIpOwotCi0gICAgYXNzZXJ0VHJ1ZShnb3RFeHBlY3RlZE9yaWVudGF0aW9uKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9IHRlc3RPYmpl
Y3RGYWN0b3J5LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBBdCB0aGlzIHBv
aW50IGNhbWVyYSBpcyBub3QgYWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENhcHR1cmVySW5z
dGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5hbWUsIHRydWUg
LyogaW5pdGlhbGl6ZSAqLyk7Ci0KLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5nQ2FtZXJhID0g
dGVzdE9iamVjdEZhY3RvcnkucmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQotICAgIHN0YXJ0
Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLQotICAgIGlmIChhbmRyb2lkLm9zLkJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA+IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUF9N
UjEpIHsKLSAgICAgIC8vIFRoZSBmaXJzdCBvcGVuZWQgY2FtZXJhIGNsaWVudCB3aWxsIGJlIGV2
aWN0ZWQuCi0gICAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZv
ckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgYXNzZXJ0RmFsc2UoY2Fw
dHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIH0K
LQotICAgIHRlc3RPYmplY3RGYWN0b3J5LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGluZ0NhbWVyYSk7
Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3RyaW5nIGNhbWVyYU5hbWUgPSB0
ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNrRmFjaW5nRGV2aWNlKCk7Ci0gICAgLy8gQXQg
dGhpcyBwb2ludCBjYW1lcmEgaXMgbm90IGFjdHVhbGx5IG9wZW5lZC4KLSAgICBmaW5hbCBDYXB0
dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihjYW1lcmFOYW1l
LCBmYWxzZSAvKiBpbml0aWFsaXplICovKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFdo
aWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBPcGVuaW5nIGNvbXBldGluZyBj
YW1lcmEuIik7Ci0gICAgZmluYWwgT2JqZWN0IGNvbXBldGluZ0NhbWVyYSA9IHRlc3RPYmplY3RG
YWN0b3J5LnJhd09wZW5DYW1lcmEoY2FtZXJhTmFtZSk7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAi
c3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYTogT3BlbmluZyBjYW1l
cmEuIik7Ci0gICAgZmluYWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlcklu
c3RhbmNlLmNhcHR1cmVyKTsKLSAgICB3YWl0VW50aWxJZGxlKGNhcHR1cmVySW5zdGFuY2UpOwot
Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xv
c2VDYW1lcmE6IENsb3NpbmcgY29tcGV0aW5nIGNhbWVyYS4iKTsKLSAgICB0ZXN0T2JqZWN0RmFj
dG9yeS5yYXdDbG9zZUNhbWVyYShjb21wZXRpbmdDYW1lcmEpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGNhbWVyYSBpcyBzdGFydGVkIGFuZCBmaXJzdCBmcmFtZSBpcyByZWNlaXZlZCBhbmQgdGhlbiBz
dG9wIGl0LgotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3Bl
bkFuZENsb3NlQ2FtZXJhOiBXYWl0aW5nIGZvciBjYXB0dXJlIHRvIHN0YXJ0LiIpOwotICAgIHZp
ZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRv
UmVuZGVyKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlP
cGVuQW5kQ2xvc2VDYW1lcmE6IFN0b3BwaW5nIGNhcHR1cmUuIik7Ci0gICAgZGlzcG9zZUNhcHR1
cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRXaGlsZUNh
bWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9IHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVP
ZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBBdCB0aGlzIHBvaW50IGNhbWVyYSBpcyBub3Qg
YWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0
YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5hbWUsIHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7
Ci0KLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5nQ2FtZXJhID0gdGVzdE9iamVjdEZhY3Rvcnku
cmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlcklu
c3RhbmNlKTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0KLSAgICB0
ZXN0T2JqZWN0RmFjdG9yeS5yYXdDbG9zZUNhbWVyYShjb21wZXRpbmdDYW1lcmEpOwotICB9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9EZWZhdWx0Vmlk
ZW9FbmNvZGVyRmFjdG9yeVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2Vi
cnRjL0RlZmF1bHRWaWRlb0VuY29kZXJGYWN0b3J5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2OWIwMTI5YzM2M2ZhZTViNGE4YTA1ZmU1MmY1ODdjMDY3ZTJlY2RjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlv
bnRlc3RzL3NyYy9vcmcvd2VicnRjL0RlZmF1bHRWaWRlb0VuY29kZXJGYWN0b3J5VGVzdC5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcg
VGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2Vy
dEVxdWFsczsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwot
aW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IGph
dmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgb3Jn
LmNocm9taXVtLmJhc2UudGVzdC5CYXNlSlVuaXQ0Q2xhc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1
bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVu
bmVyLlJ1bldpdGg7Ci0KLS8qKiBVbml0IHRlc3RzIGZvciB7QGxpbmsgRGVmYXVsdFZpZGVvRW5j
b2RlckZhY3Rvcnl9LiAqLwotQFJ1bldpdGgoQmFzZUpVbml0NENsYXNzUnVubmVyLmNsYXNzKQot
cHVibGljIGNsYXNzIERlZmF1bHRWaWRlb0VuY29kZXJGYWN0b3J5VGVzdCB7Ci0gIHN0YXRpYyBj
bGFzcyBDdXN0b21IYXJkd2FyZVZpZGVvRW5jb2RlckZhY3RvcnkgaW1wbGVtZW50cyBWaWRlb0Vu
Y29kZXJGYWN0b3J5IHsKLSAgICBwcml2YXRlIEFycmF5TGlzdDxWaWRlb0NvZGVjSW5mbz4gY29k
ZWNzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICBwdWJsaWMgQ3VzdG9tSGFyZHdhcmVWaWRl
b0VuY29kZXJGYWN0b3J5KGJvb2xlYW4gaW5jbHVkZVZQOCwgYm9vbGVhbiBpbmNsdWRlSDI2NEhp
Z2gpIHsKLSAgICAgIGlmIChpbmNsdWRlVlA4KSB7Ci0gICAgICAgIGNvZGVjcy5hZGQobmV3IFZp
ZGVvQ29kZWNJbmZvKCJWUDgiLCBuZXcgSGFzaE1hcDw+KCkpKTsKLSAgICAgIH0KLSAgICAgIGNv
ZGVjcy5hZGQobmV3IFZpZGVvQ29kZWNJbmZvKCJWUDkiLCBuZXcgSGFzaE1hcDw+KCkpKTsKLQot
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYmFzZWxpbmVQYXJhbXMgPSBuZXcgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgIGJhc2VsaW5lUGFyYW1zLnB1dCgicHJvZmlsZS1s
ZXZlbC1pZCIsICI0MmUwMWYiKTsKLSAgICAgIGJhc2VsaW5lUGFyYW1zLnB1dCgibGV2ZWwtYXN5
bW1ldHJ5LWFsbG93ZWQiLCAiMSIpOwotICAgICAgYmFzZWxpbmVQYXJhbXMucHV0KCJwYWNrZXRp
emF0aW9uLW1vZGUiLCAiMSIpOwotICAgICAgY29kZWNzLmFkZChuZXcgVmlkZW9Db2RlY0luZm8o
IkgyNjQiLCBiYXNlbGluZVBhcmFtcykpOwotCi0gICAgICBpZiAoaW5jbHVkZUgyNjRIaWdoKSB7
Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhpZ2hQYXJhbXMgPSBuZXcgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgICAgaGlnaFBhcmFtcy5wdXQoInByb2ZpbGUtbGV2
ZWwtaWQiLCAiNjQwYzFmIik7Ci0gICAgICAgIGhpZ2hQYXJhbXMucHV0KCJsZXZlbC1hc3ltbWV0
cnktYWxsb3dlZCIsICIxIik7Ci0gICAgICAgIGhpZ2hQYXJhbXMucHV0KCJwYWNrZXRpemF0aW9u
LW1vZGUiLCAiMSIpOwotICAgICAgICBjb2RlY3MuYWRkKG5ldyBWaWRlb0NvZGVjSW5mbygiSDI2
NCIsIGhpZ2hQYXJhbXMpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgQE51bGxhYmxlIFZpZGVvRW5jb2RlciBjcmVhdGVFbmNvZGVyKFZpZGVvQ29kZWNJbmZv
IGluZm8pIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBWaWRlb0NvZGVjSW5mb1tdIGdldFN1cHBvcnRlZENvZGVjcygpIHsKLSAgICAgIHJl
dHVybiBjb2RlY3MudG9BcnJheShuZXcgVmlkZW9Db2RlY0luZm9bY29kZWNzLnNpemUoKV0pOwot
ICAgIH0KLSAgfQotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgTmF0
aXZlTGlicmFyeS5pbml0aWFsaXplKG5ldyBOYXRpdmVMaWJyYXJ5LkRlZmF1bHRMb2FkZXIoKSwg
VGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIEBU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RHZXRTdXBwb3J0ZWRDb2RlY3NXaXRoSGFyZHdhcmVIMjY0
SGlnaFByb2ZpbGUoKSB7Ci0gICAgVmlkZW9FbmNvZGVyRmFjdG9yeSBod0ZhY3RvcnkgPSBuZXcg
Q3VzdG9tSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KHRydWUsIHRydWUpOwotICAgIERlZmF1
bHRWaWRlb0VuY29kZXJGYWN0b3J5IGR2ZWYgPSBuZXcgRGVmYXVsdFZpZGVvRW5jb2RlckZhY3Rv
cnkoaHdGYWN0b3J5KTsKLSAgICBWaWRlb0NvZGVjSW5mb1tdIHZpZGVvQ29kZWNzID0gZHZlZi5n
ZXRTdXBwb3J0ZWRDb2RlY3MoKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgdmlkZW9Db2RlY3MubGVu
Z3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlZQOCIsIHZpZGVvQ29kZWNzWzBdLm5hbWUpOwotICAg
IGFzc2VydEVxdWFscygiVlA5IiwgdmlkZW9Db2RlY3NbMV0ubmFtZSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCJIMjY0IiwgdmlkZW9Db2RlY3NbMl0ubmFtZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0MmUw
MWYiLCB2aWRlb0NvZGVjc1syXS5wYXJhbXMuZ2V0KCJwcm9maWxlLWxldmVsLWlkIikpOwotICAg
IGFzc2VydEVxdWFscygiSDI2NCIsIHZpZGVvQ29kZWNzWzNdLm5hbWUpOwotICAgIGFzc2VydEVx
dWFscygiNjQwYzFmIiwgdmlkZW9Db2RlY3NbM10ucGFyYW1zLmdldCgicHJvZmlsZS1sZXZlbC1p
ZCIpKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEdl
dFN1cHBvcnRlZENvZGVjc1dpdGhvdXRIYXJkd2FyZUgyNjRIaWdoUHJvZmlsZSgpIHsKLSAgICBW
aWRlb0VuY29kZXJGYWN0b3J5IGh3RmFjdG9yeSA9IG5ldyBDdXN0b21IYXJkd2FyZVZpZGVvRW5j
b2RlckZhY3RvcnkodHJ1ZSwgZmFsc2UpOwotICAgIERlZmF1bHRWaWRlb0VuY29kZXJGYWN0b3J5
IGR2ZWYgPSBuZXcgRGVmYXVsdFZpZGVvRW5jb2RlckZhY3RvcnkoaHdGYWN0b3J5KTsKLSAgICBW
aWRlb0NvZGVjSW5mb1tdIHZpZGVvQ29kZWNzID0gZHZlZi5nZXRTdXBwb3J0ZWRDb2RlY3MoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMywgdmlkZW9Db2RlY3MubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVh
bHMoIlZQOCIsIHZpZGVvQ29kZWNzWzBdLm5hbWUpOwotICAgIGFzc2VydEVxdWFscygiVlA5Iiwg
dmlkZW9Db2RlY3NbMV0ubmFtZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJIMjY0IiwgdmlkZW9Db2Rl
Y3NbMl0ubmFtZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0MmUwMWYiLCB2aWRlb0NvZGVjc1syXS5w
YXJhbXMuZ2V0KCJwcm9maWxlLWxldmVsLWlkIikpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBA
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0U3VwcG9ydGVkQ29kZWNzV2l0aG91dEhhcmR3YXJl
VlA4KCkgewotICAgIFZpZGVvRW5jb2RlckZhY3RvcnkgaHdGYWN0b3J5ID0gbmV3IEN1c3RvbUhh
cmR3YXJlVmlkZW9FbmNvZGVyRmFjdG9yeShmYWxzZSwgdHJ1ZSk7Ci0gICAgRGVmYXVsdFZpZGVv
RW5jb2RlckZhY3RvcnkgZHZlZiA9IG5ldyBEZWZhdWx0VmlkZW9FbmNvZGVyRmFjdG9yeShod0Zh
Y3RvcnkpOwotICAgIFZpZGVvQ29kZWNJbmZvW10gdmlkZW9Db2RlY3MgPSBkdmVmLmdldFN1cHBv
cnRlZENvZGVjcygpOwotICAgIGFzc2VydEVxdWFscyg0LCB2aWRlb0NvZGVjcy5sZW5ndGgpOwot
ICAgIGFzc2VydEVxdWFscygiVlA4IiwgdmlkZW9Db2RlY3NbMF0ubmFtZSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCJWUDkiLCB2aWRlb0NvZGVjc1sxXS5uYW1lKTsKLSAgICBhc3NlcnRFcXVhbHMoIkgy
NjQiLCB2aWRlb0NvZGVjc1syXS5uYW1lKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQyZTAxZiIsIHZp
ZGVvQ29kZWNzWzJdLnBhcmFtcy5nZXQoInByb2ZpbGUtbGV2ZWwtaWQiKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCJIMjY0IiwgdmlkZW9Db2RlY3NbM10ubmFtZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI2
NDBjMWYiLCB2aWRlb0NvZGVjc1szXS5wYXJhbXMuZ2V0KCJwcm9maWxlLWxldmVsLWlkIikpOwot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9FZ2xS
ZW5kZXJlclRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL0VnbFJl
bmRlcmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzlkZWQzYTBh
ODA0ZjA3YmZmYTBiYzkzZGI0NzE5ODIxOGI2YzIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL0Vn
bFJlbmRlcmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY5ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcu
anVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2Vy
dC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RO
dWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQg
c3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1
bml0LkFzc2VydC5mYWlsOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBv
cnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5n
bC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJv
aWQuc3VwcG9ydC50ZXN0Lkluc3RydW1lbnRhdGlvblJlZ2lzdHJ5OwotaW1wb3J0IGFuZHJvaWQu
c3VwcG9ydC50ZXN0LmZpbHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZm
ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlz
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IG9y
Zy5jaHJvbWl1bS5iYXNlLnRlc3QuQmFzZUpVbml0NENsYXNzUnVubmVyOwotaW1wb3J0IG9yZy5q
dW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5U
ZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLy8gRW1wdHlBY3Rpdml0
eSBpcyBuZWVkZWQgZm9yIHRoZSBzdXJmYWNlLgotQFJ1bldpdGgoQmFzZUpVbml0NENsYXNzUnVu
bmVyLmNsYXNzKQotcHVibGljIGNsYXNzIEVnbFJlbmRlcmVyVGVzdCB7Ci0gIHByaXZhdGUgZmlu
YWwgc3RhdGljIFN0cmluZyBUQUcgPSAiRWdsUmVuZGVyZXJUZXN0IjsKLSAgcHJpdmF0ZSBmaW5h
bCBzdGF0aWMgaW50IFJFTkRFUl9XQUlUX01TID0gMTAwMDsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0
aWMgaW50IFNVUkZBQ0VfV0FJVF9NUyA9IDEwMDA7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGlu
dCBURVNUX0ZSQU1FX1dJRFRIID0gNDsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFRFU1Rf
RlJBTUVfSEVJR0hUID0gNDsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFJFTU9WRV9GUkFN
RV9MSVNURU5FUl9SQUNZX05VTV9URVNUUyA9IDEwOwotICAvLyBTb21lIGFyYml0cmFyeSBmcmFt
ZXMuCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIGJ5dGVbXVtdW10gVEVTVF9GUkFNRVNfREFUQSA9
IHsKLSAgICAgIHsKLSAgICAgICAgICBuZXcgYnl0ZVtdIHsKLSAgICAgICAgICAgICAgLTk5LCAt
OTMsIC04OCwgLTgzLCAtNzgsIC03MywgLTY4LCAtNjIsIC01NiwgLTUyLCAtNDYsIC00MSwgLTM2
LCAtMzEsIC0yNiwgLTIwfSwKLSAgICAgICAgICBuZXcgYnl0ZVtdIHsxMTAsIDExMywgMTE2LCAx
MTh9LCBuZXcgYnl0ZVtdIHszMSwgNDUsIDU5LCA3M30sCi0gICAgICB9LAotICAgICAgewotICAg
ICAgICAgIG5ldyBieXRlW10gewotICAgICAgICAgICAgICAtMTA4LCAtMTAzLCAtOTgsIC05Mywg
LTg3LCAtODIsIC03NywgLTcyLCAtNjcsIC02MiwgLTU2LCAtNTAsIC00NSwgLTQwLCAtMzUsIC0z
MH0sCi0gICAgICAgICAgbmV3IGJ5dGVbXSB7MTIwLCAxMjMsIDEyNSwgLTEyN30sIG5ldyBieXRl
W10gezg3LCAxMDAsIDExNCwgMTI3fSwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgICAgbmV3
IGJ5dGVbXSB7Ci0gICAgICAgICAgICAgIC0xMTcsIC0xMTIsIC0xMDcsIC0xMDIsIC05NywgLTky
LCAtODcsIC04MSwgLTc1LCAtNzEsIC02NSwgLTYwLCAtNTUsIC01MCwgLTQ0LCAtMzl9LAotICAg
ICAgICAgIG5ldyBieXRlW10gezExMywgMTE2LCAxMTgsIDEyMH0sIG5ldyBieXRlW10gezQ1LCA1
OSwgNzMsIDg3fSwKLSAgICAgIH0sCi0gIH07Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIEJ5dGVC
dWZmZXJbXVtdIFRFU1RfRlJBTUVTID0KLSAgICAgIGNvcHlUZXN0RGF0YVRvRGlyZWN0Qnl0ZUJ1
ZmZlcnMoVEVTVF9GUkFNRVNfREFUQSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEZy
YW1lTGlzdGVuZXIgaW1wbGVtZW50cyBFZ2xSZW5kZXJlci5GcmFtZUxpc3RlbmVyIHsKLSAgICBm
aW5hbCBwcml2YXRlIEFycmF5TGlzdDxCaXRtYXA+IGJpdG1hcHMgPSBuZXcgQXJyYXlMaXN0PEJp
dG1hcD4oKTsKLSAgICBib29sZWFuIGJpdG1hcFJlY2VpdmVkOwotICAgIEJpdG1hcCBzdG9yZWRC
aXRtYXA7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkx
KTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1
cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBvbkZyYW1lKEJpdG1hcCBiaXRtYXApIHsKLSAgICAgIGlmIChiaXRt
YXBSZWNlaXZlZCkgewotICAgICAgICBmYWlsKCJVbmV4cGVjdGVkIGJpdG1hcCB3YXMgcmVjZWl2
ZWQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGJpdG1hcFJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgIHN0
b3JlZEJpdG1hcCA9IGJpdG1hcDsKLSAgICAgIG5vdGlmeSgpOwotICAgIH0KLQotICAgIC8vIFRP
RE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVj
ayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRo
b2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIHdhaXRGb3JCaXRtYXAo
aW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGZpbmFs
IGxvbmcgZW5kVGltZU1zID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyB0aW1lb3V0TXM7
Ci0gICAgICB3aGlsZSAoIWJpdG1hcFJlY2VpdmVkKSB7Ci0gICAgICAgIGZpbmFsIGxvbmcgd2Fp
dFRpbWVNcyA9IGVuZFRpbWVNcyAtIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAg
ICBpZiAod2FpdFRpbWVNcyA8IDApIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgd2FpdCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5
bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdz
KCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIEJp
dG1hcCByZXNldEFuZEdldEJpdG1hcCgpIHsKLSAgICAgIGJpdG1hcFJlY2VpdmVkID0gZmFsc2U7
Ci0gICAgICByZXR1cm4gc3RvcmVkQml0bWFwOwotICAgIH0KLSAgfQotCi0gIGZpbmFsIFRlc3RG
cmFtZUxpc3RlbmVyIHRlc3RGcmFtZUxpc3RlbmVyID0gbmV3IFRlc3RGcmFtZUxpc3RlbmVyKCk7
Ci0KLSAgRWdsUmVuZGVyZXIgZWdsUmVuZGVyZXI7Ci0gIENvdW50RG93bkxhdGNoIHN1cmZhY2VS
ZWFkeUxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICBpbnQgb2VzVGV4dHVyZUlkOwot
ICBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZTsKLQotICBAQmVmb3JlCi0gIHB1YmxpYyB2
b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5
LmluaXRpYWxpemUoUGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0aW9uT3B0aW9ucwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRlcihJbnN0cnVt
ZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRz
Lk5BVElWRV9MSUJSQVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuY3JlYXRlSW5pdGlhbGl6YXRpb25PcHRpb25zKCkpOwotICAgIGVnbFJlbmRlcmVyID0gbmV3
IEVnbFJlbmRlcmVyKCJUZXN0UmVuZGVyZXI6ICIpOwotICAgIGVnbFJlbmRlcmVyLmluaXQobnVs
bCAvKiBzaGFyZWRDb250ZXh0ICovLCBFZ2xCYXNlLkNPTkZJR19SR0JBLCBuZXcgR2xSZWN0RHJh
d2VyKCkpOwotICAgIG9lc1RleHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzEx
RXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTKTsKLSAgICBzdXJmYWNlVGV4dHVyZSA9IG5ldyBT
dXJmYWNlVGV4dHVyZShvZXNUZXh0dXJlSWQpOwotICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1
bHRCdWZmZXJTaXplKDEgLyogd2lkdGggKi8sIDEgLyogaGVpZ2h0ICovKTsKLSAgICBlZ2xSZW5k
ZXJlci5jcmVhdGVFZ2xTdXJmYWNlKHN1cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIEBBZnRlcgot
ICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBzdXJmYWNlVGV4dHVyZS5yZWxlYXNlKCk7
Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSAvKiBuICovLCBuZXcgaW50W10ge29lc1Rl
eHR1cmVJZH0sIDAgLyogb2Zmc2V0ICovKTsKLSAgICBlZ2xSZW5kZXJlci5yZWxlYXNlKCk7Ci0g
IH0KLQotICAvKiogQ2hlY2tzIHRoZSBiaXRtYXAgaXMgbm90IG51bGwgYW5kIHRoZSBjb3JyZWN0
IHNpemUuICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tCaXRtYXAoQml0bWFwIGJpdG1h
cCwgZmxvYXQgc2NhbGUpIHsKLSAgICBhc3NlcnROb3ROdWxsKGJpdG1hcCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKChpbnQpIChURVNUX0ZSQU1FX1dJRFRIICogc2NhbGUpLCBiaXRtYXAuZ2V0V2lkdGgo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChpbnQpIChURVNUX0ZSQU1FX0hFSUdIVCAqIHNjYWxlKSwg
Yml0bWFwLmdldEhlaWdodCgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBEb2VzIGxpbmVhciBzYW1w
bGluZyBvbiBVL1YgcGxhbmUgb2YgdGVzdCBkYXRhLgotICAgKgotICAgKiBAcGFyYW0gZGF0YSBQ
bGFuZSBkYXRhIHRvIGJlIHNhbXBsZWQgZnJvbS4KLSAgICogQHBhcmFtIHBsYW5lV2lkdGggV2lk
dGggb2YgdGhlIHBsYW5lIGRhdGEuIFRoaXMgaXMgYWxzbyBhc3N1bWVkIHRvIGJlIHRoZSBzdHJp
ZGUuCi0gICAqIEBwYXJhbSBwbGFuZUhlaWdodCBIZWlnaHQgb2YgdGhlIHBsYW5lIGRhdGEuCi0g
ICAqIEBwYXJhbSB4IFgtY29vcmRpbmF0ZSBpbiByYW5nZSBbMCwgMV0uCi0gICAqIEBwYXJhbSB5
IFktY29vcmRpbmF0ZSBpbiByYW5nZSBbMCwgMV0uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBm
bG9hdCBsaW5lYXJTYW1wbGUoCi0gICAgICBCeXRlQnVmZmVyIHBsYW5lLCBpbnQgcGxhbmVXaWR0
aCwgaW50IHBsYW5lSGVpZ2h0LCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgZmluYWwgaW50IHN0
cmlkZSA9IHBsYW5lV2lkdGg7Ci0KLSAgICBmaW5hbCBmbG9hdCBjb29yZFggPSB4ICogcGxhbmVX
aWR0aDsKLSAgICBmaW5hbCBmbG9hdCBjb29yZFkgPSB5ICogcGxhbmVIZWlnaHQ7Ci0KLSAgICBp
bnQgbG93SW5kZXhYID0gKGludCkgTWF0aC5mbG9vcihjb29yZFggLSAwLjVmKTsKLSAgICBpbnQg
bG93SW5kZXhZID0gKGludCkgTWF0aC5mbG9vcihjb29yZFkgLSAwLjVmKTsKLSAgICBpbnQgaGln
aEluZGV4WCA9IGxvd0luZGV4WCArIDE7Ci0gICAgaW50IGhpZ2hJbmRleFkgPSBsb3dJbmRleFkg
KyAxOwotCi0gICAgZmluYWwgZmxvYXQgaGlnaFdlaWdodFggPSBjb29yZFggLSBsb3dJbmRleFgg
LSAwLjVmOwotICAgIGZpbmFsIGZsb2F0IGhpZ2hXZWlnaHRZID0gY29vcmRZIC0gbG93SW5kZXhZ
IC0gMC41ZjsKLSAgICBmaW5hbCBmbG9hdCBsb3dXZWlnaHRYID0gMWYgLSBoaWdoV2VpZ2h0WDsK
LSAgICBmaW5hbCBmbG9hdCBsb3dXZWlnaHRZID0gMWYgLSBoaWdoV2VpZ2h0WTsKLQotICAgIC8v
IENsYW1wIG9uIHRoZSBlZGdlcy4KLSAgICBsb3dJbmRleFggPSBNYXRoLm1heCgwLCBsb3dJbmRl
eFgpOwotICAgIGxvd0luZGV4WSA9IE1hdGgubWF4KDAsIGxvd0luZGV4WSk7Ci0gICAgaGlnaElu
ZGV4WCA9IE1hdGgubWluKHBsYW5lV2lkdGggLSAxLCBoaWdoSW5kZXhYKTsKLSAgICBoaWdoSW5k
ZXhZID0gTWF0aC5taW4ocGxhbmVIZWlnaHQgLSAxLCBoaWdoSW5kZXhZKTsKLQotICAgIGZsb2F0
IGxvd1lWYWx1ZSA9IChwbGFuZS5nZXQobG93SW5kZXhZICogc3RyaWRlICsgbG93SW5kZXhYKSAm
IDB4RkYpICogbG93V2VpZ2h0WAotICAgICAgICArIChwbGFuZS5nZXQobG93SW5kZXhZICogc3Ry
aWRlICsgaGlnaEluZGV4WCkgJiAweEZGKSAqIGhpZ2hXZWlnaHRYOwotICAgIGZsb2F0IGhpZ2hZ
VmFsdWUgPSAocGxhbmUuZ2V0KGhpZ2hJbmRleFkgKiBzdHJpZGUgKyBsb3dJbmRleFgpICYgMHhG
RikgKiBsb3dXZWlnaHRYCi0gICAgICAgICsgKHBsYW5lLmdldChoaWdoSW5kZXhZICogc3RyaWRl
ICsgaGlnaEluZGV4WCkgJiAweEZGKSAqIGhpZ2hXZWlnaHRYOwotCi0gICAgcmV0dXJuIGxvd1dl
aWdodFkgKiBsb3dZVmFsdWUgKyBoaWdoV2VpZ2h0WSAqIGhpZ2hZVmFsdWU7Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyBieXRlIHNhdHVyYXRlZEZsb2F0VG9CeXRlKGZsb2F0IGMpIHsKLSAgICBy
ZXR1cm4gKGJ5dGUpIE1hdGgucm91bmQoMjU1ZiAqIE1hdGgubWF4KDBmLCBNYXRoLm1pbigxZiwg
YykpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0cyB0ZXN0IGRhdGEgWVVWIGZyYW1lIHRv
IGV4cGVjdGVkIFJHQkEgZnJhbWUuIFRyaWVzIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBPcGVu
R0wKLSAgICogWVVWIGRyYXdlciBzaGFkZXIuIERvZXMgbGluZWFyIHNhbXBsaW5nIG9uIHRoZSBV
LSBhbmQgVi1wbGFuZXMuCi0gICAqCi0gICAqIEBwYXJhbSB5dXZGcmFtZSBBcnJheSBvZiBzaXpl
IDMgY29udGFpbmluZyBZLSwgVS0sIFYtcGxhbmVzIGZvciBpbWFnZSBvZiBzaXplCi0gICAqICAg
ICAgICAgICAgICAgICAoVEVTVF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRV9IRUlHSFQpLiBVLSBh
bmQgVi1wbGFuZXMgc2hvdWxkIGJlIGhhbGYgdGhlIHNpemUKLSAgICogICAgICAgICAgICAgICAg
IG9mIHRoZSBZLXBsYW5lLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIGNvbnZlcnRZ
VVZGcmFtZVRvUkdCQShCeXRlQnVmZmVyW10geXV2RnJhbWUpIHsKLSAgICBmaW5hbCBieXRlW10g
YXJnYkZyYW1lID0gbmV3IGJ5dGVbVEVTVF9GUkFNRV9XSURUSCAqIFRFU1RfRlJBTUVfSEVJR0hU
ICogNF07Ci0gICAgZmluYWwgaW50IGFyZ2JTdHJpZGUgPSBURVNUX0ZSQU1FX1dJRFRIICogNDsK
LSAgICBmaW5hbCBpbnQgeVN0cmlkZSA9IFRFU1RfRlJBTUVfV0lEVEg7Ci0KLSAgICBmaW5hbCBp
bnQgdlN0cmlkZSA9IFRFU1RfRlJBTUVfV0lEVEggLyAyOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBURVNUX0ZSQU1FX0hFSUdIVDsgeSsrKSB7Ci0gICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IFRFU1RfRlJBTUVfV0lEVEg7IHgrKykgewotICAgICAgICBmaW5hbCBmbG9hdCB5QyA9ICgoeXV2
RnJhbWVbMF0uZ2V0KHkgKiB5U3RyaWRlICsgeCkgJiAweEZGKSAtIDE2ZikgLyAyMTlmOwotICAg
ICAgICBmaW5hbCBmbG9hdCB1QyA9IChsaW5lYXJTYW1wbGUoeXV2RnJhbWVbMV0sIFRFU1RfRlJB
TUVfV0lEVEggLyAyLCBURVNUX0ZSQU1FX0hFSUdIVCAvIDIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoeCArIDAuNWYpIC8gVEVTVF9GUkFNRV9XSURUSCwgKHkgKyAwLjVmKSAvIFRF
U1RfRlJBTUVfSEVJR0hUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDE2ZikKLSAg
ICAgICAgICAgICAgICAvIDIyNGYKLSAgICAgICAgICAgIC0gMC41ZjsKLSAgICAgICAgZmluYWwg
ZmxvYXQgdkMgPSAobGluZWFyU2FtcGxlKHl1dkZyYW1lWzJdLCBURVNUX0ZSQU1FX1dJRFRIIC8g
MiwgVEVTVF9GUkFNRV9IRUlHSFQgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHggKyAwLjVmKSAvIFRFU1RfRlJBTUVfV0lEVEgsICh5ICsgMC41ZikgLyBURVNUX0ZSQU1FX0hF
SUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxNmYpCi0gICAgICAgICAgICAg
ICAgLyAyMjRmCi0gICAgICAgICAgICAtIDAuNWY7Ci0gICAgICAgIGZpbmFsIGZsb2F0IHJDID0g
eUMgKyAxLjQwM2YgKiB2QzsKLSAgICAgICAgZmluYWwgZmxvYXQgZ0MgPSB5QyAtIDAuMzQ0ZiAq
IHVDIC0gMC43MTRmICogdkM7Ci0gICAgICAgIGZpbmFsIGZsb2F0IGJDID0geUMgKyAxLjc3ZiAq
IHVDOwotCi0gICAgICAgIGFyZ2JGcmFtZVt5ICogYXJnYlN0cmlkZSArIHggKiA0ICsgMF0gPSBz
YXR1cmF0ZWRGbG9hdFRvQnl0ZShyQyk7Ci0gICAgICAgIGFyZ2JGcmFtZVt5ICogYXJnYlN0cmlk
ZSArIHggKiA0ICsgMV0gPSBzYXR1cmF0ZWRGbG9hdFRvQnl0ZShnQyk7Ci0gICAgICAgIGFyZ2JG
cmFtZVt5ICogYXJnYlN0cmlkZSArIHggKiA0ICsgMl0gPSBzYXR1cmF0ZWRGbG9hdFRvQnl0ZShi
Qyk7Ci0gICAgICAgIGFyZ2JGcmFtZVt5ICogYXJnYlN0cmlkZSArIHggKiA0ICsgM10gPSAoYnl0
ZSkgMjU1OwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBhcmdiRnJhbWU7Ci0gIH0KLQot
ICAvKiogQ2hlY2tzIHRoYXQgdGhlIGJpdG1hcCBjb250ZW50IG1hdGNoZXMgdGhlIHRlc3QgZnJh
bWUgd2l0aCB0aGUgZ2l2ZW4gaW5kZXguICovCi0gIC8vIFRPRE8odGl0b3ZhcnRlbSkgbWFrZSBj
b3JyZWN0IGZpeCBkdXJpbmcgd2VicnRjOjkxNzUKLSAgQFN1cHByZXNzV2FybmluZ3MoIkJ5dGVC
dWZmZXJCYWNraW5nQXJyYXkiKQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrQml0bWFwQ29u
dGVudChCaXRtYXAgYml0bWFwLCBpbnQgZnJhbWUpIHsKLSAgICBjaGVja0JpdG1hcChiaXRtYXAs
IDFmKTsKLQotICAgIGJ5dGVbXSBleHBlY3RlZFJHQkEgPSBjb252ZXJ0WVVWRnJhbWVUb1JHQkEo
VEVTVF9GUkFNRVNbZnJhbWVdKTsKLSAgICBCeXRlQnVmZmVyIGJpdG1hcEJ1ZmZlciA9IEJ5dGVC
dWZmZXIuYWxsb2NhdGVEaXJlY3QoYml0bWFwLmdldEJ5dGVDb3VudCgpKTsKLSAgICBiaXRtYXAu
Y29weVBpeGVsc1RvQnVmZmVyKGJpdG1hcEJ1ZmZlcik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGV4cGVjdGVkUkdCQS5sZW5ndGg7IGkrKykgewotICAgICAgaW50IGV4cGVjdGVkID0gZXhw
ZWN0ZWRSR0JBW2ldICYgMHhGRjsKLSAgICAgIGludCB2YWx1ZSA9IGJpdG1hcEJ1ZmZlci5nZXQo
aSkgJiAweEZGOwotICAgICAgLy8gRHVlIHRvIHVua25vd24gY29udmVyc2lvbiBkaWZmZXJlbmNl
cyBjaGVjayB2YWx1ZSBtYXRjaGVzICstMS4KLSAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSAtIGV4
cGVjdGVkKSA+IDEpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkV4cGVjdGVkIGJpdG1hcCBj
b250ZW50OiAiICsgQXJyYXlzLnRvU3RyaW5nKGV4cGVjdGVkUkdCQSkpOwotICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiQml0bWFwIGNvbnRlbnQ6ICIgKyBBcnJheXMudG9TdHJpbmcoYml0bWFwQnVm
ZmVyLmFycmF5KCkpKTsKLSAgICAgICAgZmFpbCgiRnJhbWUgZG9lc24ndCBtYXRjaCBvcmlnaW5h
bCBmcmFtZSBvbiBieXRlICIgKyBpICsgIi4gRXhwZWN0ZWQ6ICIgKyBleHBlY3RlZAotICAgICAg
ICAgICAgKyAiIFJlc3VsdDogIiArIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAv
KiogVGVsbHMgZWdsUmVuZGVyZXIgdG8gcmVuZGVyIHRlc3QgZnJhbWUgd2l0aCBnaXZlbiBpbmRl
eC4gKi8KLSAgcHJpdmF0ZSB2b2lkIGZlZWRGcmFtZShpbnQgaSkgewotICAgIGZpbmFsIFZpZGVv
RnJhbWUuSTQyMEJ1ZmZlciBidWZmZXIgPSBKYXZhSTQyMEJ1ZmZlci53cmFwKFRFU1RfRlJBTUVf
V0lEVEgsIFRFU1RfRlJBTUVfSEVJR0hULAotICAgICAgICBURVNUX0ZSQU1FU1tpXVswXSwgVEVT
VF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRVNbaV1bMV0sIFRFU1RfRlJBTUVfV0lEVEggLyAyLAot
ICAgICAgICBURVNUX0ZSQU1FU1tpXVsyXSwgVEVTVF9GUkFNRV9XSURUSCAvIDIsIG51bGwgLyog
cmVsZWFzZUNhbGxiYWNrICovKTsKLSAgICBmaW5hbCBWaWRlb0ZyYW1lIGZyYW1lID0gbmV3IFZp
ZGVvRnJhbWUoYnVmZmVyLCAwIC8qIHJvdGF0aW9uICovLCAwIC8qIHRpbWVzdGFtcCAqLyk7Ci0g
ICAgZWdsUmVuZGVyZXIub25GcmFtZShmcmFtZSk7Ci0gICAgZnJhbWUucmVsZWFzZSgpOwotICB9
Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRnJhbWVMaXN0
ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVu
ZXIodGVzdEZyYW1lTGlzdGVuZXIsIDBmIC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJh
bWUoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJF
TkRFUl9XQUlUX01TKSk7Ci0gICAgYXNzZXJ0TnVsbCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFu
ZEdldEJpdG1hcCgpKTsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRlc3RGcmFt
ZUxpc3RlbmVyLCAwZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDEpOwotICAg
IGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9N
UykpOwotICAgIGFzc2VydE51bGwodGVzdEZyYW1lTGlzdGVuZXIucmVzZXRBbmRHZXRCaXRtYXAo
KSk7Ci0gICAgZmVlZEZyYW1lKDIpOwotICAgIC8vIENoZWNrIHdlIGdldCBubyBtb3JlIGJpdG1h
cHMgdGhhbiB0d28uCi0gICAgYXNzZXJ0RmFsc2UodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJp
dG1hcChSRU5ERVJfV0FJVF9NUykpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0QWRkRnJhbWVMaXN0ZW5lckJpdG1hcCgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVuZXIsIDFm
IC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh0
ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgY2hl
Y2tCaXRtYXBDb250ZW50KHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0bWFwKCksIDAp
OwotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVuZXIsIDFm
IC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh0
ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgY2hl
Y2tCaXRtYXBDb250ZW50KHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0bWFwKCksIDEp
OwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRnJh
bWVMaXN0ZW5lckJpdG1hcFNjYWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIGZsb2F0IHNjYWxlID0gaSAqIDAuNWYgKyAwLjVm
OwotICAgICAgZWdsUmVuZGVyZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0RnJhbWVMaXN0ZW5lciwg
c2NhbGUpOwotICAgICAgZmVlZEZyYW1lKGkpOwotICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVM
aXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgICBjaGVja0JpdG1h
cCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpLCBzY2FsZSk7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB0aGF0IHRoZSBmcmFtZSBsaXN0ZW5lciB3aWxsIG5v
dCBiZSBjYWxsZWQgd2l0aCBhIGZyYW1lIHRoYXQgd2FzIGRlbGl2ZXJlZCBiZWZvcmUgdGhlCi0g
ICAqIGZyYW1lIGxpc3RlbmVyIHdhcyBhZGRlZC4KLSAgICovCi0gIEBUZXN0Ci0gIEBTbWFsbFRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdEZyYW1lTGlzdGVuZXJOb3RDYWxsZWRXaXRoT2xkRnJhbWVz
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZmVlZEZyYW1lKDApOwotICAgIGVnbFJlbmRlcmVy
LmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVuZXIsIDBmKTsKLSAgICAvLyBDaGVjayB0
aGUgb2xkIGZyYW1lIGRvZXMgbm90IHRyaWdnZXIgZnJhbWUgbGlzdGVuZXIuCi0gICAgYXNzZXJ0
RmFsc2UodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwot
ICB9Ci0KLSAgLyoqIENoZWNrcyB0aGF0IHRoZSBmcmFtZSBsaXN0ZW5lciB3aWxsIG5vdCBiZSBj
YWxsZWQgYWZ0ZXIgaXQgaXMgcmVtb3ZlZC4gKi8KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRnJhbWVMaXN0ZW5lck5vdFJhY3koKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFJFTU9WRV9GUkFNRV9MSVNURU5FUl9SQUNZ
X05VTV9URVNUUzsgaSsrKSB7Ci0gICAgICBmZWVkRnJhbWUoMCk7Ci0gICAgICBlZ2xSZW5kZXJl
ci5hZGRGcmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAwZik7Ci0gICAgICBlZ2xSZW5k
ZXJlci5yZW1vdmVGcmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyKTsKLSAgICAgIGZlZWRG
cmFtZSgxKTsKLSAgICB9Ci0gICAgLy8gQ2hlY2sgdGhlIGZyYW1lIGxpc3RlbmVyIGhhc24ndCB0
cmlnZ2VyZWQuCi0gICAgYXNzZXJ0RmFsc2UodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1h
cChSRU5ERVJfV0FJVF9NUykpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0RnJhbWVMaXN0ZW5lcnNGcHNSZWR1Y3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICAvLyBUZXN0IHRoYXQgbm9ybWFsIGZyYW1lIGxpc3RlbmVycyByZWNlaXZlIGZyYW1l
cyB3aGlsZSB0aGUgcmVuZGVyZXIgaXMgcGF1c2VkLgotICAgIGVnbFJlbmRlcmVyLnBhdXNlVmlk
ZW8oKTsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVy
LCAxZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDApOwotICAgIGFzc2VydFRy
dWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAg
IGNoZWNrQml0bWFwQ29udGVudCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgp
LCAwKTsKLQotICAgIC8vIFRlc3QgdGhhdCBmcmFtZSBsaXN0ZW5lcnMgd2l0aCBGUFMgcmVkdWN0
aW9uIGFwcGxpZWQgcmVjZWl2ZSBmcmFtZXMgd2hpbGUgdGhlIHJlbmRlcmVyIGlzIG5vdAotICAg
IC8vIHBhdXNlZC4KLSAgICBlZ2xSZW5kZXJlci5kaXNhYmxlRnBzUmVkdWN0aW9uKCk7Ci0gICAg
ZWdsUmVuZGVyZXIuYWRkRnJhbWVMaXN0ZW5lcigKLSAgICAgICAgdGVzdEZyYW1lTGlzdGVuZXIs
IDFmIC8qIHNjYWxlRmFjdG9yICovLCBudWxsLCB0cnVlIC8qIGFwcGx5RnBzUmVkdWN0aW9uICov
KTsKLSAgICBmZWVkRnJhbWUoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53
YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgY2hlY2tCaXRtYXBDb250ZW50KHRl
c3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0bWFwKCksIDEpOwotCi0gICAgLy8gVGVzdCB0
aGF0IGZyYW1lIGxpc3RlbmVycyB3aXRoIEZQUyByZWR1Y3Rpb24gYXBwbGllZCB3aWxsIG5vdCBy
ZWNlaXZlIGZyYW1lcyB3aGlsZSB0aGUKLSAgICAvLyByZW5kZXJlciBpcyBwYXVzZWQuCi0gICAg
ZWdsUmVuZGVyZXIucGF1c2VWaWRlbygpOwotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVu
ZXIoCi0gICAgICAgIHRlc3RGcmFtZUxpc3RlbmVyLCAxZiAvKiBzY2FsZUZhY3RvciAqLywgbnVs
bCwgdHJ1ZSAvKiBhcHBseUZwc1JlZHVjdGlvbiAqLyk7Ci0gICAgZmVlZEZyYW1lKDEpOwotICAg
IGFzc2VydEZhbHNlKHRlc3RGcmFtZUxpc3RlbmVyLndhaXRGb3JCaXRtYXAoUkVOREVSX1dBSVRf
TVMpKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXJbXVtdIGNvcHlUZXN0RGF0
YVRvRGlyZWN0Qnl0ZUJ1ZmZlcnMoYnl0ZVtdW11bXSB0ZXN0RGF0YSkgewotICAgIGZpbmFsIEJ5
dGVCdWZmZXJbXVtdIHJlc3VsdCA9IG5ldyBCeXRlQnVmZmVyW3Rlc3REYXRhLmxlbmd0aF1bXTsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdERhdGEubGVuZ3RoOyBpKyspIHsKLSAgICAg
IHJlc3VsdFtpXSA9IG5ldyBCeXRlQnVmZmVyW3Rlc3REYXRhW2ldLmxlbmd0aF07Ci0gICAgICBm
b3IgKGludCBqID0gMDsgaiA8IHRlc3REYXRhW2ldLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIHJl
c3VsdFtpXVtqXSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QodGVzdERhdGFbaV1bal0ubGVu
Z3RoKTsKLSAgICAgICAgcmVzdWx0W2ldW2pdLnB1dCh0ZXN0RGF0YVtpXVtqXSk7Ci0gICAgICAg
IHJlc3VsdFtpXVtqXS5yZXdpbmQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMv
RmlsZVZpZGVvQ2FwdHVyZXJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNmY3YWM5ZjUxMjZlNjQzNTIyZjQ3ZTVhZmMyMmRlYjc0MDYwYjA4YS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDEzMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQg
c3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotaW1wb3J0IGFuZHJvaWQub3Mu
RW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRl
c3Q7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVm
ZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlMaXN0OwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QuQmFzZUpVbml0NENsYXNz
UnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7
Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1AUnVuV2l0aChCYXNlSlVuaXQ0
Q2xhc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgRmlsZVZpZGVvQ2FwdHVyZXJUZXN0IHsK
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBNb2NrQ2FwdHVyZXJPYnNlcnZlciBpbXBsZW1lbnRzIENh
cHR1cmVyT2JzZXJ2ZXIgewotICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFZpZGVvRnJhbWU+
IGZyYW1lcyA9IG5ldyBBcnJheUxpc3Q8VmlkZW9GcmFtZT4oKTsKLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2VzcykgewotICAg
ICAgYXNzZXJ0VHJ1ZShzdWNjZXNzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgpIHsKLSAgICAgIC8vIEVtcHR5IG9uIHB1cnBvc2Uu
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5
MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBT
dXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgb25GcmFtZUNhcHR1cmVkKFZpZGVvRnJhbWUgZnJhbWUpIHsKLSAg
ICAgIGZyYW1lLnJldGFpbigpOwotICAgICAgZnJhbWVzLmFkZChmcmFtZSk7Ci0gICAgICBub3Rp
ZnkoKTsKLSAgICB9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3Zl
IE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2Fy
bmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6
ZWQgQXJyYXlMaXN0PFZpZGVvRnJhbWU+IGdldE1pbmltdW1GcmFtZXNCbG9ja2luZyhpbnQgbWlu
RnJhbWVzKQotICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgd2hp
bGUgKGZyYW1lcy5zaXplKCkgPCBtaW5GcmFtZXMpIHsKLSAgICAgICAgd2FpdCgpOwotICAgICAg
fQotICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VmlkZW9GcmFtZT4oZnJhbWVzKTsKLSAgICB9
Ci0gIH0KLQotICBAQmVmb3JlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIE5hdGl2ZUxp
YnJhcnkuaW5pdGlhbGl6ZShuZXcgTmF0aXZlTGlicmFyeS5EZWZhdWx0TG9hZGVyKCksIFRlc3RD
b25zdGFudHMuTkFUSVZFX0xJQlJBUlkpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0VmlkZW9DYXB0dXJlRnJvbUZpbGUoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgRlJBTUVfV0lEVEggPSA0
OwotICAgIGZpbmFsIGludCBGUkFNRV9IRUlHSFQgPSA0OwotICAgIGZpbmFsIGludCBGUkFNRV9D
SFJPTUFfV0lEVEggPSAoRlJBTUVfV0lEVEggKyAxKSAvIDI7Ci0gICAgZmluYWwgaW50IEZSQU1F
X0NIUk9NQV9IRUlHSFQgPSAoRlJBTUVfSEVJR0hUICsgMSkgLyAyOwotICAgIGZpbmFsIGludCBG
UkFNRV9TSVpFX1kgPSBGUkFNRV9XSURUSCAqIEZSQU1FX0hFSUdIVDsKLSAgICBmaW5hbCBpbnQg
RlJBTUVfU0laRV9DSFJPTUEgPSBGUkFNRV9DSFJPTUFfV0lEVEggKiBGUkFNRV9DSFJPTUFfSEVJ
R0hUOwotCi0gICAgZmluYWwgRmlsZVZpZGVvQ2FwdHVyZXIgZmlsZVZpZGVvQ2FwdHVyZXIgPQot
ICAgICAgICBuZXcgRmlsZVZpZGVvQ2FwdHVyZXIoRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9y
YWdlRGlyZWN0b3J5KCkuZ2V0UGF0aCgpCi0gICAgICAgICAgICArICIvY2hyb21pdW1fdGVzdHNf
cm9vdC9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy8iCi0g
ICAgICAgICAgICArICJjYXB0dXJldGVzdHZpZGVvLnk0bSIpOwotICAgIGZpbmFsIE1vY2tDYXB0
dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIgPSBuZXcgTW9ja0NhcHR1cmVyT2JzZXJ2ZXIo
KTsKLSAgICBmaWxlVmlkZW9DYXB0dXJlci5pbml0aWFsaXplKAotICAgICAgICBudWxsIC8qIHN1
cmZhY2VUZXh0dXJlSGVscGVyICovLCBudWxsIC8qIGFwcGxpY2F0aW9uQ29udGV4dCAqLywgY2Fw
dHVyZXJPYnNlcnZlcik7Ci0gICAgZmlsZVZpZGVvQ2FwdHVyZXIuc3RhcnRDYXB0dXJlKEZSQU1F
X1dJRFRILCBGUkFNRV9IRUlHSFQsIDMzIC8qIGZwcyAqLyk7Ci0KLSAgICBmaW5hbCBTdHJpbmdb
XSBleHBlY3RlZEZyYW1lcyA9IHsKLSAgICAgICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIs
ICJUSEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS4iLCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07
Ci0KLSAgICBmaW5hbCBBcnJheUxpc3Q8VmlkZW9GcmFtZT4gZnJhbWVzID0KLSAgICAgICAgY2Fw
dHVyZXJPYnNlcnZlci5nZXRNaW5pbXVtRnJhbWVzQmxvY2tpbmcoZXhwZWN0ZWRGcmFtZXMubGVu
Z3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRGcmFtZXMubGVuZ3RoLCBmcmFtZXMuc2l6
ZSgpKTsKLQotICAgIGZpbGVWaWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgZmlsZVZp
ZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotCi0gICAgLy8gQ2hlY2sgdGhlIGNvbnRlbnQgb2YgdGhl
IGZyYW1lcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkRnJhbWVzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICBmaW5hbCBWaWRlb0ZyYW1lIGZyYW1lID0gZnJhbWVzLmdldChpKTsKLSAg
ICAgIGZpbmFsIFZpZGVvRnJhbWUuQnVmZmVyIGJ1ZmZlciA9IGZyYW1lLmdldEJ1ZmZlcigpOwot
ICAgICAgYXNzZXJ0VHJ1ZShidWZmZXIgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIp
OwotICAgICAgZmluYWwgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGk0MjBCdWZmZXIgPSAoVmlkZW9G
cmFtZS5JNDIwQnVmZmVyKSBidWZmZXI7Ci0KLSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9XSURU
SCwgaTQyMEJ1ZmZlci5nZXRXaWR0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9IRUlH
SFQsIGk0MjBCdWZmZXIuZ2V0SGVpZ2h0KCkpOwotCi0gICAgICBmaW5hbCBCeXRlQnVmZmVyIGRh
dGFZID0gaTQyMEJ1ZmZlci5nZXREYXRhWSgpOwotICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBkYXRh
VSA9IGk0MjBCdWZmZXIuZ2V0RGF0YVUoKTsKLSAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVYg
PSBpNDIwQnVmZmVyLmdldERhdGFWKCk7Ci0KLSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9TSVpF
X1ksIGRhdGFZLnJlbWFpbmluZygpKTsKLSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9TSVpFX0NI
Uk9NQSwgZGF0YVUucmVtYWluaW5nKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKEZSQU1FX1NJWkVf
Q0hST01BLCBkYXRhVi5yZW1haW5pbmcoKSk7Ci0KLSAgICAgIEJ5dGVCdWZmZXIgZnJhbWVDb250
ZW50cyA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoRlJBTUVfU0laRV9ZICsgMiAqIEZSQU1FX1NJWkVf
Q0hST01BKTsKLSAgICAgIGZyYW1lQ29udGVudHMucHV0KGRhdGFZKTsKLSAgICAgIGZyYW1lQ29u
dGVudHMucHV0KGRhdGFVKTsKLSAgICAgIGZyYW1lQ29udGVudHMucHV0KGRhdGFWKTsKLSAgICAg
IGZyYW1lQ29udGVudHMucmV3aW5kKCk7IC8vIE1vdmUgYmFjayB0byB0aGUgYmVnaW5uaW5nLgot
Ci0gICAgICBhc3NlcnRCeXRlQnVmZmVyQ29udGVudHMoCi0gICAgICAgICAgZXhwZWN0ZWRGcmFt
ZXNbaV0uZ2V0Qnl0ZXMoQ2hhcnNldC5mb3JOYW1lKCJVUy1BU0NJSSIpKSwgZnJhbWVDb250ZW50
cyk7Ci0gICAgICBmcmFtZS5yZWxlYXNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBhc3NlcnRCeXRlQnVmZmVyQ29udGVudHMoYnl0ZVtdIGV4cGVjdGVkLCBCeXRlQnVm
ZmVyIGFjdHVhbCkgewotICAgIGFzc2VydEVxdWFscygiVW5leHBlY3RlZCBCeXRlQnVmZmVyIHNp
emUuIiwgZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWwucmVtYWluaW5nKCkpOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFzc2VydEVxdWFscygi
VW5leHBlY3RlZCBieXRlIGF0IGluZGV4OiAiICsgaSwgZXhwZWN0ZWRbaV0sIGFjdHVhbC5nZXQo
KSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3Jn
L3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3Jn
L3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDMwYWEyYmEyY2NhMDk1MjU4YTg1NWUxMzU0ZTMwMzI2MmQ4ZGYzNTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3Jj
L29yZy93ZWJydGMvR2xSZWN0RHJhd2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIx
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMg
b3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNz
ZXJ0LmZhaWw7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9p
ZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9y
dC50ZXN0LmZpbHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1p
bXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LkJh
c2VKVW5pdDRDbGFzc1J1bm5lcjsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcu
anVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLUBSdW5XaXRoKEJhc2VKVW5pdDRDbGFzc1J1bm5lci5j
bGFzcykKLXB1YmxpYyBjbGFzcyBHbFJlY3REcmF3ZXJUZXN0IHsKLSAgLy8gUmVzb2x1dGlvbiBv
ZiB0aGUgdGVzdCBpbWFnZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJRFRIID0gMTY7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUlHSFQgPSAxNjsKLSAgLy8gU2VlZCBmb3Ig
cmFuZG9tIHBpeGVsIGNyZWF0aW9uLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VFRCA9
IDQyOwotICAvLyBXaGVuIGNvbXBhcmluZyBwaXhlbHMsIGFsbG93IHNvbWUgc2xhY2sgZm9yIGZs
b2F0IGFyaXRobWV0aWMgYW5kIGludGVnZXIgcm91bmRpbmcuCi0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGZsb2F0IE1BWF9ESUZGID0gMS41ZjsKLQotICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0W10gSURFTlRJVFlfTUFUUklYID0gewotICAgICAgMSwg
MCwgMCwgMCwKLSAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAwLCAwLCAxLCAwLAotICAgICAgMCwg
MCwgMCwgMX07Ci0gIC8vIGNsYW5nLWZvcm1hdCBvbgotCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0
IG5vcm1hbGl6ZWRCeXRlKGJ5dGUgYikgewotICAgIHJldHVybiAoYiAmIDB4RkYpIC8gMjU1LjBm
OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgc2F0dXJhdGVkQ29udmVydChmbG9hdCBj
KSB7Ci0gICAgcmV0dXJuIDI1NS4wZiAqIE1hdGgubWF4KDAsIE1hdGgubWluKGMsIDEpKTsKLSAg
fQotCi0gIC8vIEFzc2VydCBSR0IgQnl0ZUJ1ZmZlcnMgYXJlIHBpeGVsIHBlcmZlY3QgaWRlbnRp
Y2FsLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEJ5dGVCdWZmZXJFcXVhbHMoCi0gICAg
ICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEJ5dGVCdWZmZXIgYWN0dWFsLCBCeXRlQnVmZmVyIGV4
cGVjdGVkKSB7Ci0gICAgYWN0dWFsLnJld2luZCgpOwotICAgIGV4cGVjdGVkLnJld2luZCgpOwot
ICAgIGFzc2VydEVxdWFscyhhY3R1YWwucmVtYWluaW5nKCksIHdpZHRoICogaGVpZ2h0ICogMyk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnJlbWFpbmluZygpLCB3aWR0aCAqIGhlaWdodCAq
IDMpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewotICAgICAgICBmaW5hbCBpbnQgYWN0dWFsUiA9
IGFjdHVhbC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBhY3R1YWxHID0gYWN0dWFs
LmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwgaW50IGFjdHVhbEIgPSBhY3R1YWwuZ2V0KCkg
JiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgZXhwZWN0ZWRSID0gZXhwZWN0ZWQuZ2V0KCkgJiAw
eEZGOwotICAgICAgICBmaW5hbCBpbnQgZXhwZWN0ZWRHID0gZXhwZWN0ZWQuZ2V0KCkgJiAweEZG
OwotICAgICAgICBmaW5hbCBpbnQgZXhwZWN0ZWRCID0gZXhwZWN0ZWQuZ2V0KCkgJiAweEZGOwot
ICAgICAgICBpZiAoYWN0dWFsUiAhPSBleHBlY3RlZFIgfHwgYWN0dWFsRyAhPSBleHBlY3RlZEcg
fHwgYWN0dWFsQiAhPSBleHBlY3RlZEIpIHsKLSAgICAgICAgICBmYWlsKCJCeXRlQnVmZmVycyBv
ZiBzaXplICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICIgbm90IGVxdWFsIGF0IHBvc2l0aW9u
ICIKLSAgICAgICAgICAgICAgKyAiKCIgKyB4ICsgIiwgIiArIHkgKyAiKS4gRXhwZWN0ZWQgY29s
b3IgKFIsRyxCKTogIgotICAgICAgICAgICAgICArICIoIiArIGV4cGVjdGVkUiArICIsICIgKyBl
eHBlY3RlZEcgKyAiLCAiICsgZXhwZWN0ZWRCICsgIikiCi0gICAgICAgICAgICAgICsgIiBidXQg
d2FzOiAiCi0gICAgICAgICAgICAgICsgIigiICsgYWN0dWFsUiArICIsICIgKyBhY3R1YWxHICsg
IiwgIiArIGFjdHVhbEIgKyAiKS4iKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIC8vIENvbnZlcnQgUkdCQSBCeXRlQnVmZmVyIHRvIFJHQiBCeXRlQnVmZmVyLgotICBwcml2
YXRlIHN0YXRpYyBCeXRlQnVmZmVyIHN0cmlwQWxwaGFDaGFubmVsKEJ5dGVCdWZmZXIgcmdiYUJ1
ZmZlcikgewotICAgIHJnYmFCdWZmZXIucmV3aW5kKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJnYmFC
dWZmZXIucmVtYWluaW5nKCkgJSA0LCAwKTsKLSAgICBmaW5hbCBpbnQgbnVtYmVyT2ZQaXhlbHMg
PSByZ2JhQnVmZmVyLnJlbWFpbmluZygpIC8gNDsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYkJ1
ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QobnVtYmVyT2ZQaXhlbHMgKiAzKTsKLSAg
ICB3aGlsZSAocmdiYUJ1ZmZlci5oYXNSZW1haW5pbmcoKSkgewotICAgICAgLy8gQ29weSBSR0Iu
Ci0gICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDM7ICsrY2hhbm5lbCkgewot
ICAgICAgICByZ2JCdWZmZXIucHV0KHJnYmFCdWZmZXIuZ2V0KCkpOwotICAgICAgfQotICAgICAg
Ly8gRHJvcCBhbHBoYS4KLSAgICAgIHJnYmFCdWZmZXIuZ2V0KCk7Ci0gICAgfQotICAgIHJldHVy
biByZ2JCdWZmZXI7Ci0gIH0KLQotICAvLyBUT0RPKHRpdG92YXJ0ZW0pIG1ha2UgY29ycmVjdCBm
aXggZHVyaW5nIHdlYnJ0Yzo5MTc1Ci0gIEBTdXBwcmVzc1dhcm5pbmdzKCJCeXRlQnVmZmVyQmFj
a2luZ0FycmF5IikKLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Umdi
UmVuZGVyaW5nKCkgewotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVy
IGFzIGRpc3BsYXkgb3V0cHV0LgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2Uu
Y3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5j
cmVhdGVQYnVmZmVyU3VyZmFjZShXSURUSCwgSEVJR0hUKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJy
ZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgUkdCIGJ5dGUgYnVmZmVyIHBsYW5lIHdpdGggcmFuZG9t
IGNvbnRlbnQuCi0gICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JQbGFuZSA9IEJ5dGVCdWZmZXIuYWxs
b2NhdGVEaXJlY3QoV0lEVEggKiBIRUlHSFQgKiAzKTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9t
ID0gbmV3IFJhbmRvbShTRUVEKTsKLSAgICByYW5kb20ubmV4dEJ5dGVzKHJnYlBsYW5lLmFycmF5
KCkpOwotCi0gICAgLy8gVXBsb2FkIHRoZSBSR0IgYnl0ZSBidWZmZXIgZGF0YSBhcyBhIHRleHR1
cmUuCi0gICAgZmluYWwgaW50IHJnYlRleHR1cmUgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5H
TF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVf
MkQsIHJnYlRleHR1cmUpOwotICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRV
UkVfMkQsIDAsIEdMRVMyMC5HTF9SR0IsIFdJRFRILCBIRUlHSFQsIDAsIEdMRVMyMC5HTF9SR0Is
Ci0gICAgICAgIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JQbGFuZSk7Ci0gICAgR2xVdGls
LmNoZWNrTm9HTEVTMkVycm9yKCJnbFRleEltYWdlMkQiKTsKLQotICAgIC8vIERyYXcgdGhlIFJH
QiBmcmFtZSBvbnRvIHRoZSBwaXhlbCBidWZmZXIuCi0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRy
YXdlciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsKLSAgICBkcmF3ZXIuZHJhd1JnYihyZ2JUZXh0dXJl
LCBJREVOVElUWV9NQVRSSVgsIFdJRFRILCBIRUlHSFQsIDAgLyogdmlld3BvcnRYICovLCAwIC8q
IHZpZXdwb3J0WSAqLywKLSAgICAgICAgV0lEVEgsIEhFSUdIVCk7Ci0KLSAgICAvLyBEb3dubG9h
ZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9y
bXMgc3VwcG9ydCBSR0IsIGUuZy4gTmV4dXMgOS4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFE
YXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDQpOwotICAg
IEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgV0lEVEgsIEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEs
IEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJnbFJlYWRQaXhlbHMiKTsKLQotICAgIC8vIEFzc2VydCByZW5kZXJlZCBpbWFn
ZSBpcyBwaXhlbCBwZXJmZWN0IHRvIHNvdXJjZSBSR0IuCi0gICAgYXNzZXJ0Qnl0ZUJ1ZmZlckVx
dWFscyhXSURUSCwgSEVJR0hULCBzdHJpcEFscGhhQ2hhbm5lbChyZ2JhRGF0YSksIHJnYlBsYW5l
KTsKLQotICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMo
MSwgbmV3IGludFtdIHtyZ2JUZXh0dXJlfSwgMCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0g
IH0KLQotICAvLyBUT0RPKHRpdG92YXJ0ZW0pIG1ha2UgY29ycmVjdCBmaXggZHVyaW5nIHdlYnJ0
Yzo5MTc1Ci0gIEBTdXBwcmVzc1dhcm5pbmdzKCJCeXRlQnVmZmVyQmFja2luZ0FycmF5IikKLSAg
QFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0WXV2UmVuZGVyaW5nKCkgewot
ICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFzIGRpc3BsYXkgb3V0
cHV0LgotICAgIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2Uu
Q09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5jcmVhdGVQYnVmZmVyU3VyZmFjZShX
SURUSCwgSEVJR0hUKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0KLSAgICAvLyBDcmVh
dGUgWVVWIGJ5dGUgYnVmZmVyIHBsYW5lcyB3aXRoIHJhbmRvbSBjb250ZW50LgotICAgIGZpbmFs
IEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsKLSAgICBmaW5hbCBS
YW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShTRUVEKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgewotICAgICAgeXV2UGxhbmVzW2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVj
dChXSURUSCAqIEhFSUdIVCk7Ci0gICAgICByYW5kb20ubmV4dEJ5dGVzKHl1dlBsYW5lc1tpXS5h
cnJheSgpKTsKLSAgICB9Ci0KLSAgICAvLyBHZW5lcmF0ZSAzIHRleHR1cmUgaWRzIGZvciBZL1Uv
Vi4KLSAgICBmaW5hbCBpbnQgeXV2VGV4dHVyZXNbXSA9IG5ldyBpbnRbM107Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgIHl1dlRleHR1cmVzW2ldID0gR2xVdGlsLmdl
bmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgfQotCi0gICAgLy8gVXBs
b2FkIHRoZSBZVVYgYnl0ZSBidWZmZXIgZGF0YSBhcyB0ZXh0dXJlcy4KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9U
RVhUVVJFXzJELCB5dXZUZXh0dXJlc1tpXSk7Ci0gICAgICBHTEVTMjAuZ2xUZXhJbWFnZTJEKEdM
RVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfTFVNSU5BTkNFLCBXSURUSCwgSEVJR0hU
LCAwLAotICAgICAgICAgIEdMRVMyMC5HTF9MVU1JTkFOQ0UsIEdMRVMyMC5HTF9VTlNJR05FRF9C
WVRFLCB5dXZQbGFuZXNbaV0pOwotICAgICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFRl
eEltYWdlMkQiKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IHRoZSBZVVYgZnJhbWUgb250byB0aGUg
cGl4ZWwgYnVmZmVyLgotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0
RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4dHVyZXMsIElERU5USVRZX01BVFJJ
WCwgV0lEVEgsIEhFSUdIVCwgMCAvKiB2aWV3cG9ydFggKi8sCi0gICAgICAgIDAgLyogdmlld3Bv
cnRZICovLCBXSURUSCwgSEVJR0hUKTsKLQotICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4g
dGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwg
ZS5nLiBOZXh1cyA5LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YSA9IEJ5dGVCdWZmZXIuYWxs
b2NhdGVEaXJlY3QoV0lEVEggKiBIRUlHSFQgKiA0KTsKLSAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxz
KDAsIDAsIFdJRFRILCBIRUlHSFQsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xfVU5TSUdORURf
QllURSwgZGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQaXhlbHMi
KTsKLQotICAgIC8vIENvbXBhcmUgdGhlIFlVViBkYXRhIHdpdGggdGhlIFJHQkEgcmVzdWx0Lgot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgSEVJR0hUOyArK3kpIHsKLSAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgV0lEVEg7ICsreCkgewotICAgICAgICAvLyBZVVYgY29sb3Igc3BhY2UuIFkgaW4g
WzAsIDFdLCBVViBpbiBbLTAuNSwgMC41XS4gVGhlIGNvbnN0YW50cyBhcmUgdGFrZW4gZnJvbSB0
aGUgWVVWCi0gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlciBjb2RlIGluIEdsR2VuZXJpY0RyYXdl
ci4KLSAgICAgICAgZmluYWwgZmxvYXQgeV9sdW1hID0gbm9ybWFsaXplZEJ5dGUoeXV2UGxhbmVz
WzBdLmdldCgpKTsKLSAgICAgICAgZmluYWwgZmxvYXQgdV9jaHJvbWEgPSBub3JtYWxpemVkQnl0
ZSh5dXZQbGFuZXNbMV0uZ2V0KCkpOwotICAgICAgICBmaW5hbCBmbG9hdCB2X2Nocm9tYSA9IG5v
cm1hbGl6ZWRCeXRlKHl1dlBsYW5lc1syXS5nZXQoKSk7Ci0gICAgICAgIC8vIEV4cGVjdGVkIGNv
bG9yIGluIHVucm91bmRlZCBSR0IgWzAuMGYsIDI1NS4wZl0uCi0gICAgICAgIGZpbmFsIGZsb2F0
IGV4cGVjdGVkUmVkID0KLSAgICAgICAgICAgIHNhdHVyYXRlZENvbnZlcnQoMS4xNjQzOGYgKiB5
X2x1bWEgKyAxLjU5NjAzZiAqIHZfY2hyb21hIC0gMC44NzQyMDJmKTsKLSAgICAgICAgZmluYWwg
ZmxvYXQgZXhwZWN0ZWRHcmVlbiA9IHNhdHVyYXRlZENvbnZlcnQoCi0gICAgICAgICAgICAxLjE2
NDM4ZiAqIHlfbHVtYSAtIDAuMzkxNzYyZiAqIHVfY2hyb21hIC0gMC44MTI5NjhmICogdl9jaHJv
bWEgKyAwLjUzMTY2OGYpOwotICAgICAgICBmaW5hbCBmbG9hdCBleHBlY3RlZEJsdWUgPQotICAg
ICAgICAgICAgc2F0dXJhdGVkQ29udmVydCgxLjE2NDM4ZiAqIHlfbHVtYSArIDIuMDE3MjNmICog
dV9jaHJvbWEgLSAxLjA4NTYzZik7Ci0KLSAgICAgICAgLy8gQWN0dWFsIGNvbG9yIGluIFJHQjg4
ODguCi0gICAgICAgIGZpbmFsIGludCBhY3R1YWxSZWQgPSBkYXRhLmdldCgpICYgMHhGRjsKLSAg
ICAgICAgZmluYWwgaW50IGFjdHVhbEdyZWVuID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0gICAgICAg
IGZpbmFsIGludCBhY3R1YWxCbHVlID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFs
IGludCBhY3R1YWxBbHBoYSA9IGRhdGEuZ2V0KCkgJiAweEZGOwotCi0gICAgICAgIC8vIEFzc2Vy
dCByZW5kZXJlZCBpbWFnZSBpcyBjbG9zZSB0byBwaXhlbCBwZXJmZWN0IGZyb20gc291cmNlIFlV
Vi4KLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRoLmFicyhhY3R1YWxSZWQgLSBleHBlY3RlZFJlZCkg
PCBNQVhfRElGRik7Ci0gICAgICAgIGFzc2VydFRydWUoTWF0aC5hYnMoYWN0dWFsR3JlZW4gLSBl
eHBlY3RlZEdyZWVuKSA8IE1BWF9ESUZGKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRoLmFicyhh
Y3R1YWxCbHVlIC0gZXhwZWN0ZWRCbHVlKSA8IE1BWF9ESUZGKTsKLSAgICAgICAgYXNzZXJ0RXF1
YWxzKGFjdHVhbEFscGhhLCAyNTUpOwotICAgICAgfQotICAgIH0KLQotICAgIGRyYXdlci5yZWxl
YXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMywgeXV2VGV4dHVyZXMsIDApOwot
ICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBwdXJwb3NlIGhl
cmUgaXMgdG8gdGVzdCBHbFJlY3REcmF3ZXIub2VzRHJhdygpLiBVbmZvcnR1bmF0ZWx5LCB0aGVy
ZSBpcyBubyBlYXN5IHdheSB0bwotICAgKiBjcmVhdGUgYW4gT0VTIHRleHR1cmUsIHdoaWNoIGlz
IG5lZWRlZCBmb3IgaW5wdXQgdG8gb2VzRHJhdygpLiBNb3N0IG9mIHRoZSB0ZXN0IGlzIGNvbmNl
cm5lZAotICAgKiB3aXRoIGNyZWF0aW5nIE9FUyB0ZXh0dXJlcyBpbiB0aGUgZm9sbG93aW5nIHdh
eToKLSAgICogIC0gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlIHdpdGggaGVscCBmcm9tIFN1cmZhY2VU
ZXh0dXJlSGVscGVyLgotICAgKiAgLSBDcmVhdGUgYW4gRWdsQmFzZSB3aXRoIHRoZSBTdXJmYWNl
VGV4dHVyZSBhcyBFR0xTdXJmYWNlLgotICAgKiAgLSBVcGxvYWQgUkdCIHRleHR1cmUgd2l0aCBr
bm93biBjb250ZW50LgotICAgKiAgLSBEcmF3IHRoZSBSR0IgdGV4dHVyZSBvbnRvIHRoZSBFZ2xC
YXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRhcmdldC4KLSAgICogIC0gV2FpdCBmb3Ig
YW4gT0VTIHRleHR1cmUgdG8gYmUgcHJvZHVjZWQuCi0gICAqIFRoZSBhY3R1YWwgb2VzRHJhdygp
IHRlc3QgaXMgdGhpczoKLSAgICogIC0gQ3JlYXRlIGFuIEVnbEJhc2Ugd2l0aCBhIHBpeGVsIGJ1
ZmZlciBhcyB0YXJnZXQuCi0gICAqICAtIFJlbmRlciB0aGUgT0VTIHRleHR1cmUgb250byB0aGUg
cGl4ZWwgYnVmZmVyLgotICAgKiAgLSBSZWFkIGJhY2sgdGhlIHBpeGVsIGJ1ZmZlciBhbmQgY29t
cGFyZSBpdCB3aXRoIHRoZSBrbm93biBSR0IgZGF0YS4KLSAgICovCi0gIC8vIFRPRE8odGl0b3Zh
cnRlbSkgbWFrZSBjb3JyZWN0IGZpeCBkdXJpbmcgd2VicnRjOjkxNzUKLSAgQFN1cHByZXNzV2Fy
bmluZ3MoIkJ5dGVCdWZmZXJCYWNraW5nQXJyYXkiKQotICBAVGVzdAotICBATWVkaXVtVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0T2VzUmVuZGVyaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICAvKioKLSAgICAgKiBTdHViIGNsYXNzIHRvIGNvbnZlcnQgUkdCIEJ5dGVCdWZm
ZXJzIHRvIE9FUyB0ZXh0dXJlcyBieSBkcmF3aW5nIG9udG8gYSBTdXJmYWNlVGV4dHVyZS4KLSAg
ICAgKi8KLSAgICBjbGFzcyBTdHViT2VzVGV4dHVyZVByb2R1Y2VyIHsKLSAgICAgIHByaXZhdGUg
ZmluYWwgRWdsQmFzZSBlZ2xCYXNlOwotICAgICAgcHJpdmF0ZSBmaW5hbCBHbFJlY3REcmF3ZXIg
ZHJhd2VyOwotICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgcmdiVGV4dHVyZTsKLQotICAgICAgcHVi
bGljIFN0dWJPZXNUZXh0dXJlUHJvZHVjZXIoRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQs
Ci0gICAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUo
c2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgICAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5zZXRUZXh0dXJlU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZWdsQmFz
ZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkp
OwotICAgICAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlV2lkdGgoKSwgd2lkdGgpOwot
ICAgICAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCksIGhlaWdodCk7Ci0K
LSAgICAgICAgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotCi0gICAgICAgIGVnbEJhc2Uu
bWFrZUN1cnJlbnQoKTsKLSAgICAgICAgcmdiVGV4dHVyZSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1
cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCBk
cmF3KEJ5dGVCdWZmZXIgcmdiUGxhbmUpIHsKLSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgp
OwotCi0gICAgICAgIC8vIFVwbG9hZCBSR0IgZGF0YSB0byB0ZXh0dXJlLgotICAgICAgICBHTEVT
MjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgICAgIEdMRVMyMC5n
bEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCByZ2JUZXh0dXJlKTsKLSAgICAgICAg
R0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIwLkdMX1JH
QiwgV0lEVEgsIEhFSUdIVCwgMCwgR0xFUzIwLkdMX1JHQiwKLSAgICAgICAgICAgIEdMRVMyMC5H
TF9VTlNJR05FRF9CWVRFLCByZ2JQbGFuZSk7Ci0gICAgICAgIC8vIERyYXcgdGhlIFJHQiBkYXRh
IG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgICAgICBkcmF3ZXIuZHJhd1JnYihyZ2JUZXh0
dXJlLCBJREVOVElUWV9NQVRSSVgsIFdJRFRILCBIRUlHSFQsIDAgLyogdmlld3BvcnRYICovLAot
ICAgICAgICAgICAgMCAvKiB2aWV3cG9ydFkgKi8sIFdJRFRILCBIRUlHSFQpOwotICAgICAgICBl
Z2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbGVh
c2UoKSB7Ci0gICAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgZHJhd2VyLnJl
bGVhc2UoKTsKLSAgICAgICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3IGludFtdIHty
Z2JUZXh0dXJlfSwgMCk7Ci0gICAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgfQotICAg
IH0KLQotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFzIGRpc3Bs
YXkgb3V0cHV0LgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51
bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5jcmVhdGVQYnVm
ZmVyU3VyZmFjZShXSURUSCwgSEVJR0hUKTsKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZXMgZm9y
IGdlbmVyYXRpbmcgT0VTIHRleHR1cmVzLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVy
IHN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKAotICAg
ICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgZWdsQmFz
ZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgICBmaW5hbCBTdHViT2VzVGV4dHVyZVByb2R1Y2Vy
IG9lc1Byb2R1Y2VyID0gbmV3IFN0dWJPZXNUZXh0dXJlUHJvZHVjZXIoCi0gICAgICAgIGVnbEJh
c2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFdJRFRILCBIRUlH
SFQpOwotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5Nb2NrVGV4dHVyZUxpc3Rl
bmVyIGxpc3RlbmVyID0KLSAgICAgICAgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5Nb2Nr
VGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5p
bmcobGlzdGVuZXIpOwotCi0gICAgLy8gQ3JlYXRlIFJHQiBieXRlIGJ1ZmZlciBwbGFuZSB3aXRo
IHJhbmRvbSBjb250ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiUGxhbmUgPSBCeXRlQnVm
ZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICogSEVJR0hUICogMyk7Ci0gICAgZmluYWwgUmFuZG9t
IHJhbmRvbSA9IG5ldyBSYW5kb20oU0VFRCk7Ci0gICAgcmFuZG9tLm5leHRCeXRlcyhyZ2JQbGFu
ZS5hcnJheSgpKTsKLQotICAgIC8vIERyYXcgdGhlIGZyYW1lIGFuZCBibG9jayB1bnRpbCBhbiBP
RVMgdGV4dHVyZSBpcyBkZWxpdmVyZWQuCi0gICAgb2VzUHJvZHVjZXIuZHJhdyhyZ2JQbGFuZSk7
Ci0gICAgZmluYWwgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyIHRleHR1cmVCdWZmZXIgPSBsaXN0
ZW5lci53YWl0Rm9yVGV4dHVyZUJ1ZmZlcigpOwotCi0gICAgLy8gUmVhbCB0ZXN0IHN0YXJ0cyBo
ZXJlLgotICAgIC8vIERyYXcgdGhlIE9FUyB0ZXh0dXJlIG9uIHRoZSBwaXhlbCBidWZmZXIuCi0g
ICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3ZXIg
PSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdPZXModGV4dHVyZUJ1ZmZlci5n
ZXRUZXh0dXJlSWQoKSwKLSAgICAgICAgUmVuZGVyZXJDb21tb24uY29udmVydE1hdHJpeEZyb21B
bmRyb2lkR3JhcGhpY3NNYXRyaXgodGV4dHVyZUJ1ZmZlci5nZXRUcmFuc2Zvcm1NYXRyaXgoKSks
Ci0gICAgICAgIFdJRFRILCBIRUlHSFQsIDAgLyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0
WSAqLywgV0lEVEgsIEhFSUdIVCk7Ci0KLSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRo
ZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUu
Zy4gTmV4dXMgOS4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5h
bGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQaXhl
bHMoMCwgMCwgV0lEVEgsIEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05F
RF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQ
aXhlbHMiKTsKLQotICAgIC8vIEFzc2VydCByZW5kZXJlZCBpbWFnZSBpcyBwaXhlbCBwZXJmZWN0
IHRvIHNvdXJjZSBSR0IuCi0gICAgYXNzZXJ0Qnl0ZUJ1ZmZlckVxdWFscyhXSURUSCwgSEVJR0hU
LCBzdHJpcEFscGhhQ2hhbm5lbChyZ2JhRGF0YSksIHJnYlBsYW5lKTsKLQotICAgIGRyYXdlci5y
ZWxlYXNlKCk7Ci0gICAgdGV4dHVyZUJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAgb2VzUHJvZHVjZXIu
cmVsZWFzZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgICBlZ2xC
YXNlLnJlbGVhc2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3Jj
L29yZy93ZWJydGMvSGFyZHdhcmVWaWRlb0VuY29kZXJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9IYXJkd2FyZVZpZGVvRW5jb2RlclRlc3QuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5MWNhZTBlNmJlOGFmZjE2MDAzOTM3M2RiZjYwOGVk
NGE4NGE4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0
cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9IYXJkd2FyZVZpZGVvRW5jb2RlclRlc3Qu
amF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5h
c3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVs
bDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0
YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24u
VGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJv
aWQub3BlbmdsLkdMRVMxMUV4dDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5O
dWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0ZXJzLlNtYWxsVGVzdDsK
LWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1p
bXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5CbG9ja2luZ1F1ZXVlOwotaW1wb3J0IGphdmEudXRpbC5j
b25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuVGltZVVuaXQ7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5wYXJhbXMuQmFzZUpV
bml0NFJ1bm5lckRlbGVnYXRlOwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QucGFyYW1z
LlBhcmFtZXRlckFubm90YXRpb25zLkNsYXNzUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5jaHJvbWl1
bS5iYXNlLnRlc3QucGFyYW1zLlBhcmFtZXRlckFubm90YXRpb25zLlVzZVJ1bm5lckRlbGVnYXRl
OwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QucGFyYW1zLlBhcmFtZXRlclNldDsKLWlt
cG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LnBhcmFtcy5QYXJhbWV0ZXJpemVkUnVubmVyOwot
aW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0
IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotQFRh
cmdldEFwaSgxNikKLUBSdW5XaXRoKFBhcmFtZXRlcml6ZWRSdW5uZXIuY2xhc3MpCi1AVXNlUnVu
bmVyRGVsZWdhdGUoQmFzZUpVbml0NFJ1bm5lckRlbGVnYXRlLmNsYXNzKQotcHVibGljIGNsYXNz
IEhhcmR3YXJlVmlkZW9FbmNvZGVyVGVzdCB7Ci0gIEBDbGFzc1BhcmFtZXRlciBwcml2YXRlIHN0
YXRpYyBMaXN0PFBhcmFtZXRlclNldD4gQ0xBU1NfUEFSQU1TID0gbmV3IEFycmF5TGlzdDw+KCk7
Ci0KLSAgc3RhdGljIHsKLSAgICBDTEFTU19QQVJBTVMuYWRkKG5ldyBQYXJhbWV0ZXJTZXQoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZShmYWxzZSAvKiB1c2VUZXh0dXJlcyAqLywg
ZmFsc2UgLyogdXNlRWdsQ29udGV4dCAqLykKLSAgICAgICAgICAgICAgICAgICAgICAgICAubmFt
ZSgiSTQyMFdpdGhvdXRFZ2xDb250ZXh0IikpOwotICAgIENMQVNTX1BBUkFNUy5hZGQobmV3IFBh
cmFtZXRlclNldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlKHRydWUgLyogdXNl
VGV4dHVyZXMgKi8sIGZhbHNlIC8qIHVzZUVnbENvbnRleHQgKi8pCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgLm5hbWUoIlRleHR1cmVXaXRob3V0RWdsQ29udGV4dCIpKTsKLSAgICBDTEFTU19Q
QVJBTVMuYWRkKG5ldyBQYXJhbWV0ZXJTZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgIC52
YWx1ZSh0cnVlIC8qIHVzZVRleHR1cmVzICovLCB0cnVlIC8qIHVzZUVnbENvbnRleHQgKi8pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgLm5hbWUoIlRleHR1cmVXaXRoRWdsQ29udGV4dCIpKTsK
LSAgfQotCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiB1c2VUZXh0dXJlczsKLSAgcHJpdmF0ZSBm
aW5hbCBib29sZWFuIHVzZUVnbENvbnRleHQ7Ci0KLSAgcHVibGljIEhhcmR3YXJlVmlkZW9FbmNv
ZGVyVGVzdChib29sZWFuIHVzZVRleHR1cmVzLCBib29sZWFuIHVzZUVnbENvbnRleHQpIHsKLSAg
ICB0aGlzLnVzZVRleHR1cmVzID0gdXNlVGV4dHVyZXM7Ci0gICAgdGhpcy51c2VFZ2xDb250ZXh0
ID0gdXNlRWdsQ29udGV4dDsKLSAgfQotCi0gIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkh3
VmlkZW9FbmNvZGVyVGVzdCI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFC
TEVfSU5URUxfVlA4X0VOQ09ERVIgPSB0cnVlOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29s
ZWFuIEVOQUJMRV9IMjY0X0hJR0hfUFJPRklMRSA9IHRydWU7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFZpZGVvRW5jb2Rlci5TZXR0aW5ncyBTRVRUSU5HUyA9Ci0gICAgICBuZXcgVmlkZW9FbmNv
ZGVyLlNldHRpbmdzKDEgLyogY29yZSAqLywgNjQwIC8qIHdpZHRoICovLCA0ODAgLyogaGVpZ2h0
ICovLCAzMDAgLyoga2JwcyAqLywKLSAgICAgICAgICAzMCAvKiBmcHMgKi8sIDEgLyogbnVtYmVy
T2ZTaW11bGNhc3RTdHJlYW1zICovLCB0cnVlIC8qIGF1dG9tYXRpY1Jlc2l6ZU9uICovLAotICAg
ICAgICAgIC8qIGNhcGFiaWxpdGllcz0gKi8gbmV3IFZpZGVvRW5jb2Rlci5DYXBhYmlsaXRpZXMo
ZmFsc2UgLyogbG9zc05vdGlmaWNhdGlvbiAqLykpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgRU5DT0RFX1RJTUVPVVRfTVMgPSAxMDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
TlVNX1RFU1RfRlJBTUVTID0gMTA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1fRU5D
T0RFX1RSSUVTID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRU5DT0RFX1JFVFJZ
X1NMRUVQX01TID0gMTsKLQotICAvLyAjIE1vY2sgY2xhc3NlcwotICAvKioKLSAgICogTW9jayBl
bmNvZGVyIGNhbGxiYWNrIHRoYXQgYWxsb3dzIGVhc3kgdmVyaWZpY2F0aW9uIG9mIHRoZSBnZW5l
cmFsIHByb3BlcnRpZXMgb2YgdGhlIGVuY29kZWQKLSAgICogZnJhbWUgc3VjaCBhcyB3aWR0aCBh
bmQgaGVpZ2h0LiBBbHNvIHVzZWQgZnJvbSBBbmRyb2lkVmlkZW9EZWNvZGVySW5zdHJ1bWVudGF0
aW9uVGVzdC4KLSAgICovCi0gIHN0YXRpYyBjbGFzcyBNb2NrRW5jb2RlckNhbGxiYWNrIGltcGxl
bWVudHMgVmlkZW9FbmNvZGVyLkNhbGxiYWNrIHsKLSAgICBwcml2YXRlIEJsb2NraW5nUXVldWU8
RW5jb2RlZEltYWdlPiBmcmFtZVF1ZXVlID0gbmV3IExpbmtlZEJsb2NraW5nUXVldWU8PigpOwot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25FbmNvZGVkRnJhbWUoRW5jb2RlZElt
YWdlIGZyYW1lLCBWaWRlb0VuY29kZXIuQ29kZWNTcGVjaWZpY0luZm8gaW5mbykgewotICAgICAg
YXNzZXJ0Tm90TnVsbChmcmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGluZm8pOwotCi0gICAg
ICAvLyBNYWtlIGEgY29weSBiZWNhdXNlIGtlZXBpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZl
ciBpcyBub3QgYWxsb3dlZC4KLSAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgYnVmZmVyQ29weSA9IEJ5
dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoZnJhbWUuYnVmZmVyLnJlbWFpbmluZygpKTsKLSAgICAg
IGJ1ZmZlckNvcHkucHV0KGZyYW1lLmJ1ZmZlcik7Ci0gICAgICBidWZmZXJDb3B5LnJld2luZCgp
OwotCi0gICAgICBmcmFtZVF1ZXVlLm9mZmVyKEVuY29kZWRJbWFnZS5idWlsZGVyKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5zZXRCdWZmZXIoYnVmZmVyQ29weSwgbnVsbCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5zZXRFbmNvZGVkV2lkdGgoZnJhbWUuZW5jb2RlZFdpZHRo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEVuY29kZWRIZWlnaHQoZnJhbWUuZW5j
b2RlZEhlaWdodCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDYXB0dXJlVGltZU5z
KGZyYW1lLmNhcHR1cmVUaW1lTnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RnJh
bWVUeXBlKGZyYW1lLmZyYW1lVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRS
b3RhdGlvbihmcmFtZS5yb3RhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRD
b21wbGV0ZUZyYW1lKGZyYW1lLmNvbXBsZXRlRnJhbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0UXAoZnJhbWUucXApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRl
RW5jb2RlZEltYWdlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBFbmNvZGVkSW1hZ2UgcG9sbCgp
IHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIEVuY29kZWRJbWFnZSBpbWFnZSA9IGZyYW1lUXVldWUu
cG9sbChFTkNPREVfVElNRU9VVF9NUywgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgICAg
YXNzZXJ0Tm90TnVsbCgiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBmcmFtZSB0byBiZSBlbmNv
ZGVkLiIsIGltYWdlKTsKLSAgICAgICAgcmV0dXJuIGltYWdlOwotICAgICAgfSBjYXRjaCAoSW50
ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhc3NlcnRGcmFtZUVuY29k
ZWQoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgICAgZmluYWwgVmlkZW9GcmFtZS5CdWZmZXIgYnVm
ZmVyID0gZnJhbWUuZ2V0QnVmZmVyKCk7Ci0gICAgICBmaW5hbCBFbmNvZGVkSW1hZ2UgaW1hZ2Ug
PSBwb2xsKCk7Ci0gICAgICBhc3NlcnRUcnVlKGltYWdlLmJ1ZmZlci5jYXBhY2l0eSgpID4gMCk7
Ci0gICAgICBhc3NlcnRFcXVhbHMoaW1hZ2UuZW5jb2RlZFdpZHRoLCBidWZmZXIuZ2V0V2lkdGgo
KSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoaW1hZ2UuZW5jb2RlZEhlaWdodCwgYnVmZmVyLmdldEhl
aWdodCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhpbWFnZS5jYXB0dXJlVGltZU5zLCBmcmFtZS5n
ZXRUaW1lc3RhbXBOcygpKTsKLSAgICAgIGFzc2VydEVxdWFscyhpbWFnZS5yb3RhdGlvbiwgZnJh
bWUuZ2V0Um90YXRpb24oKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEEgY29tbW9uIGJhc2UgY2xh
c3MgZm9yIHRoZSB0ZXh0dXJlIGFuZCBJNDIwIGJ1ZmZlciB0aGF0IGltcGxlbWVudHMgcmVmZXJl
bmNlIGNvdW50aW5nLiAqLwotICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBNb2NrQnVm
ZmVyQmFzZSBpbXBsZW1lbnRzIFZpZGVvRnJhbWUuQnVmZmVyIHsKLSAgICBwcm90ZWN0ZWQgZmlu
YWwgaW50IHdpZHRoOwotICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgaGVpZ2h0OwotICAgIHByaXZh
dGUgZmluYWwgUnVubmFibGUgcmVsZWFzZUNhbGxiYWNrOwotICAgIHByaXZhdGUgZmluYWwgT2Jq
ZWN0IHJlZkNvdW50TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIGludCByZWZDb3Vu
dCA9IDE7Ci0KLSAgICBwdWJsaWMgTW9ja0J1ZmZlckJhc2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBSdW5uYWJsZSByZWxlYXNlQ2FsbGJhY2spIHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsK
LSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgdGhpcy5yZWxlYXNlQ2FsbGJhY2sg
PSByZWxlYXNlQ2FsbGJhY2s7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGlu
dCBnZXRXaWR0aCgpIHsKLSAgICAgIHJldHVybiB3aWR0aDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsKLSAgICAgIHJldHVybiBoZWlnaHQ7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmV0YWluKCkgewotICAgICAg
c3luY2hyb25pemVkIChyZWZDb3VudExvY2spIHsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiQnVmZmVy
IHJldGFpbmVkIGFmdGVyIGJlaW5nIGRlc3Ryb3llZC4iLCByZWZDb3VudCA+IDApOwotICAgICAg
ICArK3JlZkNvdW50OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHJlZkNvdW50TG9jaykgewot
ICAgICAgICBhc3NlcnRUcnVlKCJCdWZmZXIgcmVsZWFzZWQgdG9vIG1hbnkgdGltZXMuIiwgLS1y
ZWZDb3VudCA+PSAwKTsKLSAgICAgICAgaWYgKHJlZkNvdW50ID09IDApIHsKLSAgICAgICAgICBy
ZWxlYXNlQ2FsbGJhY2sucnVuKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrVGV4dHVyZUJ1ZmZlcgotICAgICAgZXh0ZW5kcyBN
b2NrQnVmZmVyQmFzZSBpbXBsZW1lbnRzIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZlciB7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBpbnQgdGV4dHVyZUlkOwotCi0gICAgcHVibGljIE1vY2tUZXh0dXJlQnVm
ZmVyKGludCB0ZXh0dXJlSWQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgUnVubmFibGUgcmVsZWFz
ZUNhbGxiYWNrKSB7Ci0gICAgICBzdXBlcih3aWR0aCwgaGVpZ2h0LCByZWxlYXNlQ2FsbGJhY2sp
OwotICAgICAgdGhpcy50ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZlci5UeXBlIGdldFR5cGUoKSB7
Ci0gICAgICByZXR1cm4gVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyLlR5cGUuT0VTOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0VGV4dHVyZUlkKCkgewotICAgICAg
cmV0dXJuIHRleHR1cmVJZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWF0
cml4IGdldFRyYW5zZm9ybU1hdHJpeCgpIHsKLSAgICAgIHJldHVybiBuZXcgTWF0cml4KCk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciB0
b0k0MjAoKSB7Ci0gICAgICByZXR1cm4gSmF2YUk0MjBCdWZmZXIuYWxsb2NhdGUod2lkdGgsIGhl
aWdodCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZGVvRnJhbWUuQnVm
ZmVyIGNyb3BBbmRTY2FsZSgKLSAgICAgICAgaW50IGNyb3BYLCBpbnQgY3JvcFksIGludCBjcm9w
V2lkdGgsIGludCBjcm9wSGVpZ2h0LCBpbnQgc2NhbGVXaWR0aCwgaW50IHNjYWxlSGVpZ2h0KSB7
Ci0gICAgICByZXRhaW4oKTsKLSAgICAgIHJldHVybiBuZXcgTW9ja1RleHR1cmVCdWZmZXIodGV4
dHVyZUlkLCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCwgdGhpcyA6OnJlbGVhc2UpOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tJNDIwQnVmZmVyIGV4dGVuZHMgTW9j
a0J1ZmZlckJhc2UgaW1wbGVtZW50cyBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgewotICAgIHByaXZh
dGUgZmluYWwgSmF2YUk0MjBCdWZmZXIgcmVhbEJ1ZmZlcjsKLQotICAgIHB1YmxpYyBNb2NrSTQy
MEJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJ1bm5hYmxlIHJlbGVhc2VDYWxsYmFjaykg
ewotICAgICAgc3VwZXIod2lkdGgsIGhlaWdodCwgcmVsZWFzZUNhbGxiYWNrKTsKLSAgICAgIHJl
YWxCdWZmZXIgPSBKYXZhSTQyMEJ1ZmZlci5hbGxvY2F0ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnl0ZUJ1ZmZlciBnZXREYXRhWSgpIHsKLSAg
ICAgIHJldHVybiByZWFsQnVmZmVyLmdldERhdGFZKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIEJ5dGVCdWZmZXIgZ2V0RGF0YVUoKSB7Ci0gICAgICByZXR1cm4gcmVhbEJ1
ZmZlci5nZXREYXRhVSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRl
QnVmZmVyIGdldERhdGFWKCkgewotICAgICAgcmV0dXJuIHJlYWxCdWZmZXIuZ2V0RGF0YVYoKTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFN0cmlkZVkoKSB7Ci0g
ICAgICByZXR1cm4gcmVhbEJ1ZmZlci5nZXRTdHJpZGVZKCk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGludCBnZXRTdHJpZGVVKCkgewotICAgICAgcmV0dXJuIHJlYWxCdWZm
ZXIuZ2V0U3RyaWRlVSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQg
Z2V0U3RyaWRlVigpIHsKLSAgICAgIHJldHVybiByZWFsQnVmZmVyLmdldFN0cmlkZVYoKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIHRv
STQyMCgpIHsKLSAgICAgIHJldGFpbigpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmV0YWluKCkgewotICAgICAgc3VwZXIucmV0
YWluKCk7Ci0gICAgICByZWFsQnVmZmVyLnJldGFpbigpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBzdXBlci5yZWxlYXNlKCk7Ci0g
ICAgICByZWFsQnVmZmVyLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgVmlkZW9GcmFtZS5CdWZmZXIgY3JvcEFuZFNjYWxlKAotICAgICAgICBpbnQgY3JvcFgs
IGludCBjcm9wWSwgaW50IGNyb3BXaWR0aCwgaW50IGNyb3BIZWlnaHQsIGludCBzY2FsZVdpZHRo
LCBpbnQgc2NhbGVIZWlnaHQpIHsKLSAgICAgIHJldHVybiByZWFsQnVmZmVyLmNyb3BBbmRTY2Fs
ZShjcm9wWCwgY3JvcFksIGNyb3BXaWR0aCwgY3JvcEhlaWdodCwgc2NhbGVXaWR0aCwgc2NhbGVI
ZWlnaHQpOwotICAgIH0KLSAgfQotCi0gIC8vICMgVGVzdCBmaWVsZHMKLSAgcHJpdmF0ZSBmaW5h
bCBPYmplY3QgcmVmZXJlbmNlZEZyYW1lc0xvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUg
aW50IHJlZmVyZW5jZWRGcmFtZXM7Ci0KLSAgcHJpdmF0ZSBSdW5uYWJsZSByZWxlYXNlRnJhbWVD
YWxsYmFjayA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHJlZmVyZW5jZWRGcmFtZXNMb2NrKSB7Ci0g
ICAgICAgIC0tcmVmZXJlbmNlZEZyYW1lczsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJp
dmF0ZSBFZ2xCYXNlMTQgZWdsQmFzZTsKLSAgcHJpdmF0ZSBsb25nIGxhc3RUaW1lc3RhbXBOczsK
LQotICAvLyAjIEhlbHBlciBtZXRob2RzCi0gIHByaXZhdGUgVmlkZW9FbmNvZGVyRmFjdG9yeSBj
cmVhdGVFbmNvZGVyRmFjdG9yeShFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCkgewotICAgIHJl
dHVybiBuZXcgSGFyZHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KAotICAgICAgICBlZ2xDb250ZXh0
LCBFTkFCTEVfSU5URUxfVlA4X0VOQ09ERVIsIEVOQUJMRV9IMjY0X0hJR0hfUFJPRklMRSk7Ci0g
IH0KLQotICBwcml2YXRlIEBOdWxsYWJsZSBWaWRlb0VuY29kZXIgY3JlYXRlRW5jb2RlcigpIHsK
LSAgICBWaWRlb0VuY29kZXJGYWN0b3J5IGZhY3RvcnkgPQotICAgICAgICBjcmVhdGVFbmNvZGVy
RmFjdG9yeSh1c2VFZ2xDb250ZXh0ID8gZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpIDogbnVs
bCk7Ci0gICAgVmlkZW9Db2RlY0luZm9bXSBzdXBwb3J0ZWRDb2RlY3MgPSBmYWN0b3J5LmdldFN1
cHBvcnRlZENvZGVjcygpOwotICAgIHJldHVybiBmYWN0b3J5LmNyZWF0ZUVuY29kZXIoc3VwcG9y
dGVkQ29kZWNzWzBdKTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9GcmFtZSBnZW5lcmF0ZUk0MjBG
cmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBzeW5jaHJvbml6ZWQgKHJlZmVyZW5j
ZWRGcmFtZXNMb2NrKSB7Ci0gICAgICArK3JlZmVyZW5jZWRGcmFtZXM7Ci0gICAgfQotICAgIGxh
c3RUaW1lc3RhbXBOcyArPSBUaW1lVW5pdC5TRUNPTkRTLnRvTmFub3MoMSkgLyBTRVRUSU5HUy5t
YXhGcmFtZXJhdGU7Ci0gICAgVmlkZW9GcmFtZS5CdWZmZXIgYnVmZmVyID0gbmV3IE1vY2tJNDIw
QnVmZmVyKHdpZHRoLCBoZWlnaHQsIHJlbGVhc2VGcmFtZUNhbGxiYWNrKTsKLSAgICByZXR1cm4g
bmV3IFZpZGVvRnJhbWUoYnVmZmVyLCAwIC8qIHJvdGF0aW9uICovLCBsYXN0VGltZXN0YW1wTnMp
OwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb0ZyYW1lIGdlbmVyYXRlVGV4dHVyZUZyYW1lKGludCB3
aWR0aCwgaW50IGhlaWdodCkgewotICAgIHN5bmNocm9uaXplZCAocmVmZXJlbmNlZEZyYW1lc0xv
Y2spIHsKLSAgICAgICsrcmVmZXJlbmNlZEZyYW1lczsKLSAgICB9Ci0gICAgZmluYWwgaW50IHRl
eHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhU
RVJOQUxfT0VTKTsKLSAgICBsYXN0VGltZXN0YW1wTnMgKz0gVGltZVVuaXQuU0VDT05EUy50b05h
bm9zKDEpIC8gU0VUVElOR1MubWF4RnJhbWVyYXRlOwotICAgIFZpZGVvRnJhbWUuQnVmZmVyIGJ1
ZmZlciA9Ci0gICAgICAgIG5ldyBNb2NrVGV4dHVyZUJ1ZmZlcih0ZXh0dXJlSWQsIHdpZHRoLCBo
ZWlnaHQsIHJlbGVhc2VGcmFtZUNhbGxiYWNrKTsKLSAgICByZXR1cm4gbmV3IFZpZGVvRnJhbWUo
YnVmZmVyLCAwIC8qIHJvdGF0aW9uICovLCBsYXN0VGltZXN0YW1wTnMpOwotICB9Ci0KLSAgcHJp
dmF0ZSBWaWRlb0ZyYW1lIGdlbmVyYXRlRnJhbWUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0g
ICAgcmV0dXJuIHVzZVRleHR1cmVzID8gZ2VuZXJhdGVUZXh0dXJlRnJhbWUod2lkdGgsIGhlaWdo
dCkgOiBnZW5lcmF0ZUk0MjBGcmFtZSh3aWR0aCwgaGVpZ2h0KTsKLSAgfQotCi0gIHN0YXRpYyB2
b2lkIHRlc3RFbmNvZGVGcmFtZSgKLSAgICAgIFZpZGVvRW5jb2RlciBlbmNvZGVyLCBWaWRlb0Zy
YW1lIGZyYW1lLCBWaWRlb0VuY29kZXIuRW5jb2RlSW5mbyBpbmZvKSB7Ci0gICAgaW50IG51bVRy
aWVzID0gMDsKLQotICAgIC8vIEl0IHRha2VzIGEgd2hpbGUgZm9yIHRoZSBlbmNvZGVyIHRvIGJl
Y29tZSByZWFkeSBzbyB0cnkgdW50aWwgaXQgYWNjZXB0cyB0aGUgZnJhbWUuCi0gICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICsrbnVtVHJpZXM7Ci0KLSAgICAgIGZpbmFsIFZpZGVvQ29kZWNTdGF0
dXMgcmV0dXJuVmFsdWUgPSBlbmNvZGVyLmVuY29kZShmcmFtZSwgaW5mbyk7Ci0gICAgICBzd2l0
Y2ggKHJldHVyblZhbHVlKSB7Ci0gICAgICAgIGNhc2UgT0s6Ci0gICAgICAgICAgcmV0dXJuOyAv
LyBTdWNjZXNzCi0gICAgICAgIGNhc2UgTk9fT1VUUFVUOgotICAgICAgICAgIGlmIChudW1Ucmll
cyA+PSBOVU1fRU5DT0RFX1RSSUVTKSB7Ci0gICAgICAgICAgICBmYWlsKCJlbmNvZGVyLmVuY29k
ZSBrZWVwcyByZXR1cm5pbmcgTk9fT1VUUFVUIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoRU5DT0RFX1JFVFJZX1NMRUVQX01TKTsgLy8g
VHJ5IGFnYWluLgotICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgIH0K
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBmYWlsKCJlbmNv
ZGVyLmVuY29kZSByZXR1cm5lZDogIiArIHJldHVyblZhbHVlKTsgLy8gRXJyb3IKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICAvLyAjIFRlc3RzCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0
VXAoKSB7Ci0gICAgTmF0aXZlTGlicmFyeS5pbml0aWFsaXplKG5ldyBOYXRpdmVMaWJyYXJ5LkRl
ZmF1bHRMb2FkZXIoKSwgVGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSk7Ci0KLSAgICBlZ2xC
YXNlID0gRWdsQmFzZS5jcmVhdGVFZ2wxNChFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWds
QmFzZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgZWdsQmFzZS5tYWtlQ3VycmVu
dCgpOwotICAgIGxhc3RUaW1lc3RhbXBOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICB9Ci0KLSAg
QEFmdGVyCi0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIGVnbEJhc2UucmVsZWFzZSgp
OwotICAgIHN5bmNocm9uaXplZCAocmVmZXJlbmNlZEZyYW1lc0xvY2spIHsKLSAgICAgIGFzc2Vy
dEVxdWFscygiQWxsIGZyYW1lcyB3ZXJlIG5vdCByZWxlYXNlZCIsIDAsIHJlZmVyZW5jZWRGcmFt
ZXMpOwotICAgIH0KLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdEluaXRpYWxpemUoKSB7Ci0gICAgVmlkZW9FbmNvZGVyIGVuY29kZXIgPSBjcmVhdGVFbmNv
ZGVyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFZpZGVvQ29kZWNTdGF0dXMuT0ssIGVuY29kZXIuaW5p
dEVuY29kZShTRVRUSU5HUywgbnVsbCkpOwotICAgIGFzc2VydEVxdWFscyhWaWRlb0NvZGVjU3Rh
dHVzLk9LLCBlbmNvZGVyLnJlbGVhc2UoKSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RFbmNvZGUoKSB7Ci0gICAgVmlkZW9FbmNvZGVyIGVuY29kZXIg
PSBjcmVhdGVFbmNvZGVyKCk7Ci0gICAgTW9ja0VuY29kZXJDYWxsYmFjayBjYWxsYmFjayA9IG5l
dyBNb2NrRW5jb2RlckNhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFZpZGVvQ29kZWNTdGF0
dXMuT0ssIGVuY29kZXIuaW5pdEVuY29kZShTRVRUSU5HUywgY2FsbGJhY2spKTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTlVNX1RFU1RfRlJBTUVTOyBpKyspIHsKLSAgICAgIExvZy5kKFRB
RywgIlRlc3QgZnJhbWU6ICIgKyBpKTsKLSAgICAgIFZpZGVvRnJhbWUgZnJhbWUgPSBnZW5lcmF0
ZUZyYW1lKFNFVFRJTkdTLndpZHRoLCBTRVRUSU5HUy5oZWlnaHQpOwotICAgICAgVmlkZW9FbmNv
ZGVyLkVuY29kZUluZm8gaW5mbyA9IG5ldyBWaWRlb0VuY29kZXIuRW5jb2RlSW5mbygKLSAgICAg
ICAgICBuZXcgRW5jb2RlZEltYWdlLkZyYW1lVHlwZVtdIHtFbmNvZGVkSW1hZ2UuRnJhbWVUeXBl
LlZpZGVvRnJhbWVEZWx0YX0pOwotICAgICAgdGVzdEVuY29kZUZyYW1lKGVuY29kZXIsIGZyYW1l
LCBpbmZvKTsKLQotICAgICAgY2FsbGJhY2suYXNzZXJ0RnJhbWVFbmNvZGVkKGZyYW1lKTsKLSAg
ICAgIGZyYW1lLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBhc3NlcnRFcXVhbHMoVmlkZW9Db2Rl
Y1N0YXR1cy5PSywgZW5jb2Rlci5yZWxlYXNlKCkpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxs
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RW5jb2RlQWx0ZW5hdGluZ0J1ZmZlcnMoKSB7Ci0gICAg
VmlkZW9FbmNvZGVyIGVuY29kZXIgPSBjcmVhdGVFbmNvZGVyKCk7Ci0gICAgTW9ja0VuY29kZXJD
YWxsYmFjayBjYWxsYmFjayA9IG5ldyBNb2NrRW5jb2RlckNhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKFZpZGVvQ29kZWNTdGF0dXMuT0ssIGVuY29kZXIuaW5pdEVuY29kZShTRVRUSU5HUywg
Y2FsbGJhY2spKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1RFU1RfRlJBTUVTOyBp
KyspIHsKLSAgICAgIExvZy5kKFRBRywgIlRlc3QgZnJhbWU6ICIgKyBpKTsKLSAgICAgIFZpZGVv
RnJhbWUgZnJhbWU7Ci0gICAgICBWaWRlb0VuY29kZXIuRW5jb2RlSW5mbyBpbmZvID0gbmV3IFZp
ZGVvRW5jb2Rlci5FbmNvZGVJbmZvKAotICAgICAgICAgIG5ldyBFbmNvZGVkSW1hZ2UuRnJhbWVU
eXBlW10ge0VuY29kZWRJbWFnZS5GcmFtZVR5cGUuVmlkZW9GcmFtZURlbHRhfSk7Ci0KLSAgICAg
IGZyYW1lID0gZ2VuZXJhdGVUZXh0dXJlRnJhbWUoU0VUVElOR1Mud2lkdGgsIFNFVFRJTkdTLmhl
aWdodCk7Ci0gICAgICB0ZXN0RW5jb2RlRnJhbWUoZW5jb2RlciwgZnJhbWUsIGluZm8pOwotICAg
ICAgY2FsbGJhY2suYXNzZXJ0RnJhbWVFbmNvZGVkKGZyYW1lKTsKLSAgICAgIGZyYW1lLnJlbGVh
c2UoKTsKLQotICAgICAgZnJhbWUgPSBnZW5lcmF0ZUk0MjBGcmFtZShTRVRUSU5HUy53aWR0aCwg
U0VUVElOR1MuaGVpZ2h0KTsKLSAgICAgIHRlc3RFbmNvZGVGcmFtZShlbmNvZGVyLCBmcmFtZSwg
aW5mbyk7Ci0gICAgICBjYWxsYmFjay5hc3NlcnRGcmFtZUVuY29kZWQoZnJhbWUpOwotICAgICAg
ZnJhbWUucmVsZWFzZSgpOwotICAgIH0KLQotICAgIGFzc2VydEVxdWFscyhWaWRlb0NvZGVjU3Rh
dHVzLk9LLCBlbmNvZGVyLnJlbGVhc2UoKSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RFbmNvZGVEaWZmZXJlbnRTaXplcygpIHsKLSAgICBWaWRlb0Vu
Y29kZXIgZW5jb2RlciA9IGNyZWF0ZUVuY29kZXIoKTsKLSAgICBNb2NrRW5jb2RlckNhbGxiYWNr
IGNhbGxiYWNrID0gbmV3IE1vY2tFbmNvZGVyQ2FsbGJhY2soKTsKLSAgICBhc3NlcnRFcXVhbHMo
VmlkZW9Db2RlY1N0YXR1cy5PSywgZW5jb2Rlci5pbml0RW5jb2RlKFNFVFRJTkdTLCBjYWxsYmFj
aykpOwotCi0gICAgVmlkZW9GcmFtZSBmcmFtZTsKLSAgICBWaWRlb0VuY29kZXIuRW5jb2RlSW5m
byBpbmZvID0gbmV3IFZpZGVvRW5jb2Rlci5FbmNvZGVJbmZvKAotICAgICAgICBuZXcgRW5jb2Rl
ZEltYWdlLkZyYW1lVHlwZVtdIHtFbmNvZGVkSW1hZ2UuRnJhbWVUeXBlLlZpZGVvRnJhbWVEZWx0
YX0pOwotCi0gICAgZnJhbWUgPSBnZW5lcmF0ZUZyYW1lKFNFVFRJTkdTLndpZHRoIC8gMiwgU0VU
VElOR1MuaGVpZ2h0IC8gMik7Ci0gICAgdGVzdEVuY29kZUZyYW1lKGVuY29kZXIsIGZyYW1lLCBp
bmZvKTsKLSAgICBjYWxsYmFjay5hc3NlcnRGcmFtZUVuY29kZWQoZnJhbWUpOwotICAgIGZyYW1l
LnJlbGVhc2UoKTsKLQotICAgIGZyYW1lID0gZ2VuZXJhdGVGcmFtZShTRVRUSU5HUy53aWR0aCwg
U0VUVElOR1MuaGVpZ2h0KTsKLSAgICB0ZXN0RW5jb2RlRnJhbWUoZW5jb2RlciwgZnJhbWUsIGlu
Zm8pOwotICAgIGNhbGxiYWNrLmFzc2VydEZyYW1lRW5jb2RlZChmcmFtZSk7Ci0gICAgZnJhbWUu
cmVsZWFzZSgpOwotCi0gICAgZnJhbWUgPSBnZW5lcmF0ZUZyYW1lKFNFVFRJTkdTLndpZHRoIC8g
NCwgU0VUVElOR1MuaGVpZ2h0IC8gNCk7Ci0gICAgdGVzdEVuY29kZUZyYW1lKGVuY29kZXIsIGZy
YW1lLCBpbmZvKTsKLSAgICBjYWxsYmFjay5hc3NlcnRGcmFtZUVuY29kZWQoZnJhbWUpOwotICAg
IGZyYW1lLnJlbGVhc2UoKTsKLQotICAgIGFzc2VydEVxdWFscyhWaWRlb0NvZGVjU3RhdHVzLk9L
LCBlbmNvZGVyLnJlbGVhc2UoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRl
c3RzL3NyYy9vcmcvd2VicnRjL0xvZ2dhYmxlVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMv
c3JjL29yZy93ZWJydGMvTG9nZ2FibGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM4MzEzNDVjYjJkYjlmNGExYWJlMmZiNTE0ZDkzNmIyNjlmZDQ4YjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMv
c3JjL29yZy93ZWJydGMvTG9nZ2FibGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3Jn
Lmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0
Lkluc3RydW1lbnRhdGlvblJlZ2lzdHJ5OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZp
bHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LnJ1bm5lci5BbmRy
b2lkSlVuaXQ0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgb3JnLmp1bml0
LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy53ZWJy
dGMuUGVlckNvbm5lY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZy5TZXZl
cml0eTsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dhYmxlOwotCi1AUnVuV2l0aChBbmRyb2lkSlVu
aXQ0LmNsYXNzKQotcHVibGljIGNsYXNzIExvZ2dhYmxlVGVzdCB7Ci0gIHByaXZhdGUgc3RhdGlj
IFN0cmluZyBUQUcgPSAiTG9nZ2FibGVUZXN0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIE5B
VElWRV9GSUxFTkFNRV9UQUcgPSAibG9nZ2FibGVfdGVzdC5jYyI7Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgTW9ja0xvZ2dhYmxlIGltcGxlbWVudHMgTG9nZ2FibGUgewotICAgIHByaXZhdGUg
QXJyYXlMaXN0PFN0cmluZz4gbWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICBwcml2
YXRlIEFycmF5TGlzdDxTZXZlcml0eT4gc2V2cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgIHBy
aXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gdGFncyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Mb2dNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBT
ZXZlcml0eSBzZXYsIFN0cmluZyB0YWcpIHsKLSAgICAgIG1lc3NhZ2VzLmFkZChtZXNzYWdlKTsK
LSAgICAgIHNldnMuYWRkKHNldik7Ci0gICAgICB0YWdzLmFkZCh0YWcpOwotICAgIH0KLQotICAg
IHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVJlY2VpdmVkKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlm
IChtZXNzYWdlcy5nZXQoaSkuY29udGFpbnMobWVzc2FnZSkpIHsKLSAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVJlY2VpdmVkKFN0cmluZyBtZXNzYWdlLCBTZXZl
cml0eSBzZXYsIFN0cmluZyB0YWcpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2Fn
ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1lc3NhZ2VzLmdldChpKS5jb250YWlucyht
ZXNzYWdlKSAmJiBzZXZzLmdldChpKSA9PSBzZXYgJiYgdGFncy5nZXQoaSkuZXF1YWxzKHRhZykp
IHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgTW9ja0xvZ2dhYmxlIG1v
Y2tMb2dnYWJsZSA9IG5ldyBNb2NrTG9nZ2FibGUoKTsKLQotICBAVGVzdAotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb2dnYWJsZVNldFdpdGhvdXRFcnJvcigpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemUo
UGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0aW9uT3B0aW9ucwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRlcihJbnN0cnVtZW50YXRpb25SZWdp
c3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5zZXRJbmplY3RhYmxlTG9nZ2VyKG1vY2tMb2dnYWJsZSwgU2V2ZXJpdHkuTFNf
SU5GTykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hdGl2
ZUxpYnJhcnlOYW1lKFRlc3RDb25zdGFudHMuTkFUSVZFX0xJQlJBUlkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJbml0aWFsaXphdGlvbk9wdGlvbnMo
KSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RNZXNz
YWdlSXNMb2dnZWRDb3JyZWN0bHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5J
bml0aWFsaXphdGlvbk9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmJ1aWxkZXIoSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SW5qZWN0YWJs
ZUxvZ2dlcihtb2NrTG9nZ2FibGUsIFNldmVyaXR5LkxTX0lORk8pCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3Rh
bnRzLk5BVElWRV9MSUJSQVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuY3JlYXRlSW5pdGlhbGl6YXRpb25PcHRpb25zKCkpOwotICAgIFN0cmluZyBtc2cgPSAi
TWVzc2FnZSB0aGF0IHNob3VsZCBiZSBsb2dnZWQiOwotICAgIExvZ2dpbmcuZChUQUcsIG1zZyk7
Ci0gICAgYXNzZXJ0VHJ1ZShtb2NrTG9nZ2FibGUuaXNNZXNzYWdlUmVjZWl2ZWQobXNnLCBTZXZl
cml0eS5MU19JTkZPLCBUQUcpKTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdExvd1NldmVyaXR5SXNGaWx0ZXJlZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgLy8gU2V0IHNldmVyaXR5IHRvIExTX1dBUk5JTkcgdG8gZmlsdGVyIG91
dCBMU19JTkZPIGFuZCBiZWxvdy4KLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6
ZShQZWVyQ29ubmVjdGlvbkZhY3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJl
Z2lzdHJ5LmdldFRhcmdldENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLnNldEluamVjdGFibGVMb2dnZXIobW9ja0xvZ2dhYmxlLCBTZXZlcml0eS5M
U19XQVJOSU5HKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0
TmF0aXZlTGlicmFyeU5hbWUoVGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0
aW9ucygpKTsKLSAgICBTdHJpbmcgbXNnID0gIk1lc3NhZ2UgdGhhdCBzaG91bGQgTk9UIGJlIGxv
Z2dlZCI7Ci0gICAgTG9nZ2luZy5kKFRBRywgbXNnKTsKLSAgICBhc3NlcnRGYWxzZShtb2NrTG9n
Z2FibGUuaXNNZXNzYWdlUmVjZWl2ZWQobXNnKSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb2dnYWJsZURvZXNOb3RSZWNlaXZlTWVzc2FnZXNBZnRl
clVuc2V0dGluZygpIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZShQZWVy
Q29ubmVjdGlvbkZhY3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5
LmdldFRhcmdldENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLnNldEluamVjdGFibGVMb2dnZXIobW9ja0xvZ2dhYmxlLCBTZXZlcml0eS5MU19JTkZP
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmF0aXZlTGli
cmFyeU5hbWUoVGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsK
LSAgICAvLyBSZWluaXRpYWxpemUgd2l0aG91dCBMb2dnYWJsZQotICAgIFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5pbml0aWFsaXplKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5Jbml0aWFsaXphdGlvbk9w
dGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkZXIo
SW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENv
bnN0YW50cy5OQVRJVkVfTElCUkFSWSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsKLSAgICBTdHJpbmcgbXNn
ID0gIk1lc3NhZ2UgdGhhdCBzaG91bGQgTk9UIGJlIGxvZ2dlZCI7Ci0gICAgTG9nZ2luZy5kKFRB
RywgbXNnKTsKLSAgICBhc3NlcnRGYWxzZShtb2NrTG9nZ2FibGUuaXNNZXNzYWdlUmVjZWl2ZWQo
bXNnKSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RO
YXRpdmVNZXNzYWdlSXNMb2dnZWRDb3JyZWN0bHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplKFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5Jbml0aWFsaXphdGlvbk9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmJ1aWxkZXIoSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0
Q29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0
SW5qZWN0YWJsZUxvZ2dlcihtb2NrTG9nZ2FibGUsIFNldmVyaXR5LkxTX0lORk8pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShU
ZXN0Q29uc3RhbnRzLk5BVElWRV9MSUJSQVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuY3JlYXRlSW5pdGlhbGl6YXRpb25PcHRpb25zKCkpOwotICAgIFN0cmlu
ZyBtc2cgPSAiTWVzc2FnZSB0aGF0IHNob3VsZCBiZSBsb2dnZWQiOwotICAgIG5hdGl2ZUxvZ0lu
Zm9UZXN0TWVzc2FnZShtc2cpOwotICAgIGFzc2VydFRydWUobW9ja0xvZ2dhYmxlLmlzTWVzc2Fn
ZVJlY2VpdmVkKG1zZywgU2V2ZXJpdHkuTFNfSU5GTywgTkFUSVZFX0ZJTEVOQU1FX1RBRykpOwot
ICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TmF0aXZlTG93
U2V2ZXJpdHlJc0ZpbHRlcmVkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZShQZWVyQ29ubmVjdGlvbkZhY3RvcnkuSW5p
dGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENvbnRleHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEluamVjdGFibGVM
b2dnZXIobW9ja0xvZ2dhYmxlLCBTZXZlcml0eS5MU19XQVJOSU5HKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENvbnN0
YW50cy5OQVRJVkVfTElCUkFSWSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsKLSAgICBTdHJpbmcgbXNnID0g
Ik1lc3NhZ2UgdGhhdCBzaG91bGQgTk9UIGJlIGxvZ2dlZCI7Ci0gICAgbmF0aXZlTG9nSW5mb1Rl
c3RNZXNzYWdlKG1zZyk7Ci0gICAgYXNzZXJ0RmFsc2UobW9ja0xvZ2dhYmxlLmlzTWVzc2FnZVJl
Y2VpdmVkKG1zZykpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0TmF0aXZlTG9nZ2FibGVEb2VzTm90UmVjZWl2ZU1lc3NhZ2VzQWZ0ZXJVbnNldHRpbmco
KSB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemUoUGVlckNvbm5lY3Rpb25G
YWN0b3J5LkluaXRpYWxpemF0aW9uT3B0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuYnVpbGRlcihJbnN0cnVtZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRD
b250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJ
bmplY3RhYmxlTG9nZ2VyKG1vY2tMb2dnYWJsZSwgU2V2ZXJpdHkuTFNfSU5GTykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hdGl2ZUxpYnJhcnlOYW1lKFRl
c3RDb25zdGFudHMuTkFUSVZFX0xJQlJBUlkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5jcmVhdGVJbml0aWFsaXphdGlvbk9wdGlvbnMoKSk7Ci0gICAgLy8gUmVp
bml0aWFsaXplIHdpdGhvdXQgTG9nZ2FibGUKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5p
dGlhbGl6ZShQZWVyQ29ubmVjdGlvbkZhY3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRh
dGlvblJlZ2lzdHJ5LmdldFRhcmdldENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLnNldE5hdGl2ZUxpYnJhcnlOYW1lKFRlc3RDb25zdGFudHMuTkFU
SVZFX0xJQlJBUlkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5j
cmVhdGVJbml0aWFsaXphdGlvbk9wdGlvbnMoKSk7Ci0gICAgU3RyaW5nIG1zZyA9ICJNZXNzYWdl
IHRoYXQgc2hvdWxkIE5PVCBiZSBsb2dnZWQiOwotICAgIG5hdGl2ZUxvZ0luZm9UZXN0TWVzc2Fn
ZShtc2cpOwotICAgIGFzc2VydEZhbHNlKG1vY2tMb2dnYWJsZS5pc01lc3NhZ2VSZWNlaXZlZCht
c2cpKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUxvZ0luZm9U
ZXN0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVzdC5qYXZhIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1
bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRlc3Qu
amF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4MmY0ODFmYmYyMDk4NDFkNDMx
ZGQzM2U0NjYyOTE2OTk1NWU4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcu
anVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2Vy
dC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRy
dWU7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJv
aWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRl
c3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVy
OwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QuQmFzZUpVbml0NENsYXNzUnVubmVyOwot
aW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsK
LWltcG9ydCBvcmcud2VicnRjLk1lZGlhQ29kZWNWaWRlb0VuY29kZXIuT3V0cHV0QnVmZmVySW5m
bzsKLQotQFRhcmdldEFwaShCdWlsZC5WRVJTSU9OX0NPREVTLklDRV9DUkVBTV9TQU5EV0lDSF9N
UjEpCi1AUnVuV2l0aChCYXNlSlVuaXQ0Q2xhc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3Mg
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRlc3QgewotICBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9
ICJNQ1ZpZGVvRW5jb2RlclRlc3QiOwotICBmaW5hbCBzdGF0aWMgaW50IHByb2ZpbGUgPSBNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyLkgyNjRQcm9maWxlLkNPTlNUUkFJTkVEX0JBU0VMSU5FLmdldFZh
bHVlKCk7Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlh
bGl6ZVVzaW5nQnl0ZUJ1ZmZlcigpIHsKLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIu
aXNWcDhId1N1cHBvcnRlZCgpKSB7Ci0gICAgICBMb2cuaShUQUcsICJIYXJkd2FyZSBkb2VzIG5v
dCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tpcHBpbmcgdGVzdEluaXRSZWxlYXNlVXNpbmdCeXRl
QnVmZmVyIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKCk7Ci0gICAgYXNzZXJ0VHJ1
ZShlbmNvZGVyLmluaXRFbmNvZGUoCi0gICAgICAgIFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVD
X1ZQOCwgcHJvZmlsZSwgNjQwLCA0ODAsIDMwMCwgMzAsIC8qIHVzZVN1cmZhY2U9ICovIGZhbHNl
KSk7Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RJbml0aWxpemVVc2luZ1RleHR1cmVzKCkgewotICAgIGlmICgh
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7
Ci0gICAgICBMb2cuaShUQUcsICJoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGlu
Zywgc2tpcHBpbmcgdGVzdEVuY29kZXJVc2luZ1RleHR1cmVzIik7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIEVnbEJhc2UxNCBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGVFZ2wxNChFZ2xCYXNl
LkNPTkZJR19QTEFJTik7Ci0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5zZXRFZ2xDb250ZXh0
KGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
ciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLSAgICBhc3NlcnRUcnVl
KGVuY29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNf
VlA4LCBwcm9maWxlLCA2NDAsIDQ4MCwgMzAwLCAzMCwgLyogdXNlU3VyZmFjZT0gKi8gdHJ1ZSkp
OwotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuZGlz
cG9zZUVnbENvbnRleHQoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBUZXN0
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVVc2luZ0J5dGVCdWZm
ZXJSZUluaXRpbGl6ZVVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyLmlzVnA4SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRB
RywgImhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVuY29kaW5nLCBza2lwcGluZyB0ZXN0
RW5jb2RlclVzaW5nVGV4dHVyZXMiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTWVkaWFD
b2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsK
LSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgVmlkZW9Db2RlY1R5
cGUuVklERU9fQ09ERUNfVlA4LCBwcm9maWxlLCA2NDAsIDQ4MCwgMzAwLCAzMCwgLyogdXNlU3Vy
ZmFjZT0gKi8gZmFsc2UpKTsKLSAgICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgICBFZ2xCYXNlMTQg
ZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlRWdsMTQoRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAg
IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuc2V0RWdsQ29udGV4dChlZ2xCYXNlLmdldEVnbEJhc2VD
b250ZXh0KCkpOwotICAgIGFzc2VydFRydWUoZW5jb2Rlci5pbml0RW5jb2RlKAotICAgICAgICBW
aWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIHByb2ZpbGUsIDY0MCwgNDgwLCAzMDAsIDMw
LCAvKiB1c2VTdXJmYWNlPSAqLyB0cnVlKSk7Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gICAg
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5kaXNwb3NlRWdsQ29udGV4dCgpOwotICAgIGVnbEJhc2Uu
cmVsZWFzZSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0RW5jb2RlclVzaW5nQnl0ZUJ1ZmZlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmlzVnA4SHdTdXBwb3J0ZWQoKSkgewot
ICAgICAgTG9nLmkoVEFHLCAiSGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBWUDggZW5jb2Rpbmcs
IHNraXBwaW5nIHRlc3RFbmNvZGVyVXNpbmdCeXRlQnVmZmVyIik7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZmluYWwgaW50IHdpZHRoID0gNjQwOwotICAgIGZpbmFsIGludCBoZWlnaHQg
PSA0ODA7Ci0gICAgZmluYWwgaW50IG1pbl9zaXplID0gd2lkdGggKiBoZWlnaHQgKiAzIC8gMjsK
LSAgICBmaW5hbCBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzID0gMjsKLQotICAgIE1lZGlh
Q29kZWNWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKCk7
Ci0KLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgVmlkZW9Db2Rl
Y1R5cGUuVklERU9fQ09ERUNfVlA4LCBwcm9maWxlLCB3aWR0aCwgaGVpZ2h0LCAzMDAsIDMwLCAv
KiB1c2VTdXJmYWNlPSAqLyBmYWxzZSkpOwotICAgIEJ5dGVCdWZmZXJbXSBpbnB1dEJ1ZmZlcnMg
PSBlbmNvZGVyLmdldElucHV0QnVmZmVycygpOwotICAgIGFzc2VydE5vdE51bGwoaW5wdXRCdWZm
ZXJzKTsKLSAgICBhc3NlcnRUcnVlKG1pbl9zaXplIDw9IGlucHV0QnVmZmVyc1swXS5jYXBhY2l0
eSgpKTsKLQotICAgIGludCBidWZmZXJJbmRleDsKLSAgICBkbyB7Ci0gICAgICBUaHJlYWQuc2xl
ZXAoMTApOwotICAgICAgYnVmZmVySW5kZXggPSBlbmNvZGVyLmRlcXVldWVJbnB1dEJ1ZmZlcigp
OwotICAgIH0gd2hpbGUgKGJ1ZmZlckluZGV4ID09IC0xKTsgLy8gfC0xfCBpcyByZXR1cm5lZCB3
aGVuIHRoZXJlIGlzIG5vIGJ1ZmZlciBhdmFpbGFibGUgeWV0LgotCi0gICAgYXNzZXJ0VHJ1ZShi
dWZmZXJJbmRleCA+PSAwKTsKLSAgICBhc3NlcnRUcnVlKGJ1ZmZlckluZGV4IDwgaW5wdXRCdWZm
ZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmVuY29kZUJ1ZmZlcih0cnVlLCBi
dWZmZXJJbmRleCwgbWluX3NpemUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSk7Ci0KLSAgICBP
dXRwdXRCdWZmZXJJbmZvIGluZm87Ci0gICAgZG8gewotICAgICAgaW5mbyA9IGVuY29kZXIuZGVx
dWV1ZU91dHB1dEJ1ZmZlcigpOwotICAgICAgVGhyZWFkLnNsZWVwKDEwKTsKLSAgICB9IHdoaWxl
IChpbmZvID09IG51bGwpOwotICAgIGFzc2VydFRydWUoaW5mby5pbmRleCA+PSAwKTsKLSAgICBh
c3NlcnRFcXVhbHMocHJlc2VudGF0aW9uVGltZXN0YW1wVXMsIGluZm8ucHJlc2VudGF0aW9uVGlt
ZXN0YW1wVXMpOwotICAgIGFzc2VydFRydWUoaW5mby5idWZmZXIuY2FwYWNpdHkoKSA+IDApOwot
ICAgIGVuY29kZXIucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmZvLmluZGV4KTsKLQotICAgIGVuY29k
ZXIucmVsZWFzZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvclRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3Ny
Yy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNjEzNmNhOTMzMThmNDNhMjlhN2YyMTAyZTRkMTA4ODkwNmYxYmRjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRl
c3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwK
QEAgLTEsMzE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9y
dCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3Jn
Lmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNz
ZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1
ZTsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuSU5W
QUxJRF9ORVRfSUQ7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NMaW50Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5J
bnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBh
bmRyb2lkLm5ldC5OZXR3b3JrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5k
cm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJv
aWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50
ZXN0Lkluc3RydW1lbnRhdGlvblJlZ2lzdHJ5OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0
LmFubm90YXRpb24uVWlUaHJlYWRUZXN0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZp
bHRlcnMuTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0ZXJzLlNt
YWxsVGVzdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5ydWxlLlVpVGhyZWFkVGVzdFJ1
bGU7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5CYXNlSlVuaXQ0Q2xhc3NSdW5uZXI7
Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuUnVsZTsKLWltcG9y
dCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGlvblR5cGU7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGl2aXR5TWFu
YWdlckRlbGVnYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
Lk5ldHdvcmtJbmZvcm1hdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdC5OZXR3b3JrU3RhdGU7Ci0KLS8qKgotICogVGVzdHMgZm9yIG9yZy53ZWJydGMuTmV0
d29ya01vbml0b3IuCi0gKgotICogVE9ETyhkZWFkYmVlZik6IFRoZXNlIHRlc3RzIGRvbid0IGNv
dmVyIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuCi0gKiBOZXR3b3JrTWFuYWdlci5qYXZhIGFuZCBh
bmRyb2lkbmV0d29ya21vbml0b3IuY2MsIHdoaWNoIGlzIGhvdyB0aGlzCi0gKiBjbGFzcyBpcyB1
c2VkIGluIHByYWN0aWNlIGluIFdlYlJUQy4KLSAqLwotQFN1cHByZXNzTGludCgiTmV3QXBpIikK
LUBSdW5XaXRoKEJhc2VKVW5pdDRDbGFzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBjbGFzcyBOZXR3
b3JrTW9uaXRvclRlc3QgewotICBAUnVsZSBwdWJsaWMgVWlUaHJlYWRUZXN0UnVsZSB1aVRocmVh
ZFRlc3RSdWxlID0gbmV3IFVpVGhyZWFkVGVzdFJ1bGUoKTsKLQotICAvKioKLSAgICogTGlzdGVu
cyBmb3IgYWxlcnRzIGZpcmVkIGJ5IHRoZSBOZXR3b3JrTW9uaXRvciB3aGVuIG5ldHdvcmsgc3Rh
dHVzIGNoYW5nZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBOZXR3b3JrTW9uaXRv
clRlc3RPYnNlcnZlciBpbXBsZW1lbnRzIE5ldHdvcmtNb25pdG9yLk5ldHdvcmtPYnNlcnZlciB7
Ci0gICAgcHJpdmF0ZSBib29sZWFuIHJlY2VpdmVkTm90aWZpY2F0aW9uOwotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5
cGUgY29ubmVjdGlvblR5cGUpIHsKLSAgICAgIHJlY2VpdmVkTm90aWZpY2F0aW9uID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpIHsK
LSAgICAgIHJldHVybiByZWNlaXZlZE5vdGlmaWNhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCByZXNldEhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkgewotICAgICAgcmVjZWl2ZWROb3Rp
ZmljYXRpb24gPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTW9ja3Mgb3V0IGNh
bGxzIHRvIHRoZSBDb25uZWN0aXZpdHlNYW5hZ2VyLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMg
Y2xhc3MgTW9ja0Nvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBleHRlbmRzIENvbm5lY3Rpdml0
eU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZU5ldHdvcmtFeGlz
dHM7Ci0gICAgcHJpdmF0ZSBpbnQgbmV0d29ya1R5cGU7Ci0gICAgcHJpdmF0ZSBpbnQgbmV0d29y
a1N1YnR5cGU7Ci0gICAgcHJpdmF0ZSBpbnQgdW5kZXJseWluZ05ldHdvcmtUeXBlRm9yVnBuOwot
ICAgIHByaXZhdGUgaW50IHVuZGVybHlpbmdOZXR3b3JrU3VidHlwZUZvclZwbjsKLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKCkgewotICAg
ICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoYWN0aXZlTmV0d29ya0V4aXN0cywgbmV0d29ya1R5
cGUsIG5ldHdvcmtTdWJ0eXBlLAotICAgICAgICAgIHVuZGVybHlpbmdOZXR3b3JrVHlwZUZvclZw
biwgdW5kZXJseWluZ05ldHdvcmtTdWJ0eXBlRm9yVnBuKTsKLSAgICB9Ci0KLSAgICAvLyBEdW1t
eSBpbXBsZW1lbnRhdGlvbnMgdG8gYXZvaWQgTnVsbFBvaW50ZXJFeGNlcHRpb25zIGluIGRlZmF1
bHQgaW1wbGVtZW50YXRpb25zOgotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0
RGVmYXVsdE5ldElkKCkgewotICAgICAgcmV0dXJuIElOVkFMSURfTkVUX0lEOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrW10gZ2V0QWxsTmV0d29ya3MoKSB7Ci0g
ICAgICByZXR1cm4gbmV3IE5ldHdvcmtbMF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIE5ldHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoTmV0d29yayBuZXR3b3JrKSB7Ci0g
ICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0xLCAtMSwgLTEpOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFjdGl2ZU5ldHdvcmtFeGlzdHMoYm9vbGVhbiBuZXR3
b3JrRXhpc3RzKSB7Ci0gICAgICBhY3RpdmVOZXR3b3JrRXhpc3RzID0gbmV0d29ya0V4aXN0czsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVHlwZShpbnQgbmV0d29ya1R5cGUp
IHsKLSAgICAgIHRoaXMubmV0d29ya1R5cGUgPSBuZXR3b3JrVHlwZTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCBzZXROZXR3b3JrU3VidHlwZShpbnQgbmV0d29ya1N1YnR5cGUpIHsKLSAgICAg
IHRoaXMubmV0d29ya1N1YnR5cGUgPSBuZXR3b3JrU3VidHlwZTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgdm9pZCBzZXRVbmRlcmx5aW5nTmV0d29ya1R5cGUoaW50IHVuZGVybHlpbmdOZXR3b3JrVHlw
ZUZvclZwbikgewotICAgICAgdGhpcy51bmRlcmx5aW5nTmV0d29ya1R5cGVGb3JWcG4gPSB1bmRl
cmx5aW5nTmV0d29ya1R5cGVGb3JWcG47Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VW5k
ZXJseWluZ05ldHdvcmtTdWJ5cGUoaW50IHVuZGVybHlpbmdOZXR3b3JrU3VidHlwZUZvclZwbikg
ewotICAgICAgdGhpcy51bmRlcmx5aW5nTmV0d29ya1N1YnR5cGVGb3JWcG4gPSB1bmRlcmx5aW5n
TmV0d29ya1N1YnR5cGVGb3JWcG47Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1vY2tzIG91
dCBjYWxscyB0byB0aGUgV2lmaU1hbmFnZXIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFz
cyBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZQotICAgICAgZXh0ZW5kcyBOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QuV2lmaU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgd2lmaVNT
SUQ7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFdpZmlTU0lEKCkgewot
ICAgICAgcmV0dXJuIHdpZmlTU0lEOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFdpZmlT
U0lEKFN0cmluZyB3aWZpU1NJRCkgewotICAgICAgdGhpcy53aWZpU1NJRCA9IHdpZmlTU0lEOwot
ICAgIH0KLSAgfQotCi0gIC8vIEEgZHVtbXkgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9ic2Vy
dmVyLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
T2JzZXJ2ZXIKLSAgICAgIGltcGxlbWVudHMgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9ic2Vy
dmVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hh
bmdlZChDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSkge30KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0d29ya0luZm9ybWF0aW9uIG5l
dHdvcmtJbmZvKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25OZXR3b3Jr
RGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUpIHt9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgQE51
bGxhYmxlIEhhbmRsZXIgdWlUaHJlYWRIYW5kbGVyOwotCi0gIHByaXZhdGUgTmV0d29ya01vbml0
b3JBdXRvRGV0ZWN0IHJlY2VpdmVyOwotICBwcml2YXRlIE1vY2tDb25uZWN0aXZpdHlNYW5hZ2Vy
RGVsZWdhdGUgY29ubmVjdGl2aXR5RGVsZWdhdGU7Ci0gIHByaXZhdGUgTW9ja1dpZmlNYW5hZ2Vy
RGVsZWdhdGUgd2lmaURlbGVnYXRlOwotCi0gIHByaXZhdGUgc3RhdGljIEhhbmRsZXIgZ2V0VWlU
aHJlYWRIYW5kbGVyKCkgewotICAgIHN5bmNocm9uaXplZCAobG9jaykgewotICAgICAgSGFuZGxl
ciBoYW5kbGVyID0gdWlUaHJlYWRIYW5kbGVyOwotICAgICAgaWYgKGhhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgICByZXR1cm4gaGFuZGxlcjsKLSAgICAgIH0KLSAgICAgIHJldHVybiB1aVRocmVh
ZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihMb29wZXIuZ2V0TWFpbkxvb3BlcigpKTsKLSAgICB9Ci0g
IH0KLQotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYSBuZXR3b3JrIG1vbml0
b3IgYW5kIGRlbGVnYXRlcyBmb3IgdGVzdGluZy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjcmVh
dGVUZXN0TW9uaXRvcigpIHsKLSAgICBDb250ZXh0IGNvbnRleHQgPSBJbnN0cnVtZW50YXRpb25S
ZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0gICAgcmVjZWl2ZXIgPSBOZXR3b3JrTW9uaXRv
ci5jcmVhdGVBbmRTZXRBdXRvRGV0ZWN0Rm9yVGVzdChjb250ZXh0KTsKLSAgICBhc3NlcnROb3RO
dWxsKHJlY2VpdmVyKTsKLQotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlID0gbmV3IE1vY2tDb25u
ZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUoKTsKLSAgICBjb25uZWN0aXZpdHlEZWxlZ2F0ZS5zZXRB
Y3RpdmVOZXR3b3JrRXhpc3RzKHRydWUpOwotICAgIHJlY2VpdmVyLnNldENvbm5lY3Rpdml0eU1h
bmFnZXJEZWxlZ2F0ZUZvclRlc3RzKGNvbm5lY3Rpdml0eURlbGVnYXRlKTsKLQotICAgIHdpZmlE
ZWxlZ2F0ZSA9IG5ldyBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZSgpOwotICAgIHJlY2VpdmVyLnNl
dFdpZmlNYW5hZ2VyRGVsZWdhdGVGb3JUZXN0cyh3aWZpRGVsZWdhdGUpOwotICAgIHdpZmlEZWxl
Z2F0ZS5zZXRXaWZpU1NJRCgiZm9vIik7Ci0gIH0KLQotICBwcml2YXRlIE5ldHdvcmtNb25pdG9y
QXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZSBnZXRDdXJyZW50Q29ubmVjdGlvblR5cGUoKSB7Ci0g
ICAgZmluYWwgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtTdGF0ZSBuZXR3b3JrU3Rh
dGUgPSByZWNlaXZlci5nZXRDdXJyZW50TmV0d29ya1N0YXRlKCk7Ci0gICAgcmV0dXJuIE5ldHdv
cmtNb25pdG9yQXV0b0RldGVjdC5nZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUpOwotICB9
Ci0KLSAgQEJlZm9yZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBDb250ZXh0VXRpbHMu
aW5pdGlhbGl6ZShJbnN0cnVtZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpOwot
ICAgIGNyZWF0ZVRlc3RNb25pdG9yKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhhdCB0
aGUgcmVjZWl2ZXIgcmVnaXN0ZXJzIGZvciBjb25uZWN0aXZpdHkgaW50ZW50cyBkdXJpbmcgY29u
c3RydWN0aW9uLgotICAgKi8KLSAgQFRlc3QKLSAgQFVpVGhyZWFkVGVzdAotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3ROZXR3b3JrTW9uaXRvclJlZ2lzdGVyc0luQ29uc3RydWN0b3Io
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIENvbnRleHQgY29udGV4dCA9IElu
c3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENvbnRleHQoKTsKLQotICAgIE5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdC5PYnNlcnZlciBvYnNlcnZlciA9IG5ldyBUZXN0TmV0d29ya01vbml0
b3JBdXRvRGV0ZWN0T2JzZXJ2ZXIoKTsKLQotICAgIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCBy
ZWNlaXZlciA9IG5ldyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3Qob2JzZXJ2ZXIsIGNvbnRleHQp
OwotCi0gICAgYXNzZXJ0VHJ1ZShyZWNlaXZlci5pc1JlY2VpdmVyUmVnaXN0ZXJlZEZvclRlc3Rp
bmcoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhhdCB3aGVuIHRoZXJlIGlzIGFuIGlu
dGVudCBpbmRpY2F0aW5nIGEgY2hhbmdlIGluIG5ldHdvcmsgY29ubmVjdGl2aXR5LCBpdCBzZW5k
cyBhCi0gICAqIG5vdGlmaWNhdGlvbiB0byBKYXZhIG9ic2VydmVycy4KLSAgICovCi0gIEBUZXN0
Ci0gIEBVaVRocmVhZFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdE5ldHdv
cmtNb25pdG9ySmF2YU9ic2VydmVycygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgTmV0d29ya01vbml0b3Igd2l0aCBhIGNvbm5lY3Rpb24uCi0g
ICAgSW50ZW50IGNvbm5lY3Rpdml0eUludGVudCA9IG5ldyBJbnRlbnQoQ29ubmVjdGl2aXR5TWFu
YWdlci5DT05ORUNUSVZJVFlfQUNUSU9OKTsKLSAgICByZWNlaXZlci5vblJlY2VpdmUoSW5zdHJ1
bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQp
OwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IGJlIHJlLW5vdGlmaWVkIGlmIHRoZSBjb25uZWN0aW9u
IGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLgotICAgIE5ldHdvcmtNb25pdG9yVGVzdE9ic2VydmVy
IG9ic2VydmVyID0gbmV3IE5ldHdvcmtNb25pdG9yVGVzdE9ic2VydmVyKCk7Ci0gICAgTmV0d29y
a01vbml0b3IuYWRkTmV0d29ya09ic2VydmVyKG9ic2VydmVyKTsKLSAgICByZWNlaXZlci5vblJl
Y2VpdmUoSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0
aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydEZhbHNlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZp
Y2F0aW9uKCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IGJlIG5vdGlmaWVkIGlmIHdlJ3JlIGNv
bm5lY3RlZCB0byBub24tV2lmaSBhbmQgdGhlIFdpZmkgU1NJRCBjaGFuZ2VzLgotICAgIHdpZmlE
ZWxlZ2F0ZS5zZXRXaWZpU1NJRCgiYmFyIik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKEluc3Ry
dW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50
KTsKLSAgICBhc3NlcnRGYWxzZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpKTsK
LQotICAgIC8vIFdlIHNob3VsZCBiZSBub3RpZmllZCB3aGVuIHdlIGNoYW5nZSB0byBXaWZpLgot
ICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlLnNldE5ldHdvcmtUeXBlKENvbm5lY3Rpdml0eU1hbmFn
ZXIuVFlQRV9XSUZJKTsKLSAgICByZWNlaXZlci5vblJlY2VpdmUoSW5zdHJ1bWVudGF0aW9uUmVn
aXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2Vy
dFRydWUob2JzZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0gICAgb2JzZXJ2ZXIu
cmVzZXRIYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGJlIG5v
dGlmaWVkIHdoZW4gdGhlIFdpZmkgU1NJRCBjaGFuZ2VzLgotICAgIHdpZmlEZWxlZ2F0ZS5zZXRX
aWZpU1NJRCgiZm9vIik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKEluc3RydW1lbnRhdGlvblJl
Z2lzdHJ5LmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBhc3Nl
cnRUcnVlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkpOwotICAgIG9ic2VydmVy
LnJlc2V0SGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKTsKLQotICAgIC8vIFdlIHNob3VsZG4ndCBi
ZSByZS1ub3RpZmllZCBpZiB0aGUgV2lmaSBTU0lEIGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLgot
ICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShJbnN0cnVtZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRD
b250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0RmFsc2Uob2JzZXJ2ZXIu
aGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0KLSAgICAvLyBNaW1pYyB0aGF0IGNvbm5lY3Rp
dml0eSBoYXMgYmVlbiBsb3N0IGFuZCBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2ZXIgZ2V0cyB0aGUg
bm90aWZpY2F0aW9uLgotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlLnNldEFjdGl2ZU5ldHdvcmtF
eGlzdHMoZmFsc2UpOwotICAgIEludGVudCBub0Nvbm5lY3Rpdml0eUludGVudCA9IG5ldyBJbnRl
bnQoQ29ubmVjdGl2aXR5TWFuYWdlci5DT05ORUNUSVZJVFlfQUNUSU9OKTsKLSAgICByZWNlaXZl
ci5vblJlY2VpdmUoSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBu
b0Nvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0VHJ1ZShvYnNlcnZlci5oYXNSZWNlaXZl
ZE5vdGlmaWNhdGlvbigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IENvbm5lY3Rp
dml0eU1hbmFnZXJEZWxlZ2F0ZSBkb2Vzbid0IGNyYXNoLiBUaGlzIHRlc3QgY2Fubm90IHJlbHkg
b24gaGF2aW5nIGFueQotICAgKiBhY3RpdmUgbmV0d29yayBjb25uZWN0aW9ucyBzbyBpdCBjYW5u
b3QgdXNlZnVsbHkgY2hlY2sgcmVzdWx0cywgYnV0IGl0IGNhbiBhdCBsZWFzdCBjaGVjawotICAg
KiB0aGF0IHRoZSBmdW5jdGlvbnMgZG9uJ3QgY3Jhc2guCi0gICAqLwotICBAVGVzdAotICBAVWlU
aHJlYWRUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENvbm5lY3Rpdml0eU1h
bmFnZXJEZWxlZ2F0ZURvZXNOb3RDcmFzaCgpIHsKLSAgICBDb25uZWN0aXZpdHlNYW5hZ2VyRGVs
ZWdhdGUgZGVsZWdhdGUgPQotICAgICAgICBuZXcgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRl
KEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAgZGVsZWdh
dGUuZ2V0TmV0d29ya1N0YXRlKCk7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBC
dWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QKSB7Ci0gICAgICBOZXR3b3JrW10gbmV0d29ya3Mg
PSBkZWxlZ2F0ZS5nZXRBbGxOZXR3b3JrcygpOwotICAgICAgaWYgKG5ldHdvcmtzLmxlbmd0aCA+
PSAxKSB7Ci0gICAgICAgIGRlbGVnYXRlLmdldE5ldHdvcmtTdGF0ZShuZXR3b3Jrc1swXSk7Ci0g
ICAgICAgIGRlbGVnYXRlLmhhc0ludGVybmV0Q2FwYWJpbGl0eShuZXR3b3Jrc1swXSk7Ci0gICAg
ICB9Ci0gICAgICBkZWxlZ2F0ZS5nZXREZWZhdWx0TmV0SWQoKTsKLSAgICB9Ci0gIH0KLQotICAv
KioKLSAgICogVGVzdHMgdGhhdCBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgcXVlcnlhYmxlIEFQ
SXMgZG9uJ3QgY3Jhc2guIFRoaXMgdGVzdCBjYW5ub3QgcmVseQotICAgKiBvbiBoYXZpbmcgYW55
IGFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb25zIHNvIGl0IGNhbm5vdCB1c2VmdWxseSBjaGVjayBy
ZXN1bHRzLCBidXQgaXQgY2FuIGF0Ci0gICAqIGxlYXN0IGNoZWNrIHRoYXQgdGhlIGZ1bmN0aW9u
cyBkb24ndCBjcmFzaC4KLSAgICovCi0gIEBUZXN0Ci0gIEBVaVRocmVhZFRlc3QKLSAgQFNtYWxs
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UXVlcnlhYmxlQVBJc0RvTm90Q3Jhc2goKSB7Ci0gICAg
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9ic2VydmVyIG9ic2VydmVyID0gbmV3IFRlc3ROZXR3
b3JrTW9uaXRvckF1dG9EZXRlY3RPYnNlcnZlcigpOwotICAgIE5ldHdvcmtNb25pdG9yQXV0b0Rl
dGVjdCBuY24gPQotICAgICAgICBuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KG9ic2VydmVy
LCBJbnN0cnVtZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpOwotICAgIG5jbi5n
ZXREZWZhdWx0TmV0SWQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyBzdGFydE1vbml0b3Jp
bmcgYW5kIHN0b3BNb25pdG9yaW5nIGNvcnJlY3RseSBzZXQgdGhlIGF1dG9EZXRlY3QgYW5kIG51
bWJlciBvZiBvYnNlcnZlcnMuCi0gICAqLwotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RTdGFydFN0b3BNb25pdG9yaW5nKCkgewotICAgIE5ldHdvcmtNb25pdG9yIG5l
dHdvcmtNb25pdG9yID0gTmV0d29ya01vbml0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBDb250ZXh0
IGNvbnRleHQgPSBDb250ZXh0VXRpbHMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAgbmV0
d29ya01vbml0b3Iuc3RhcnRNb25pdG9yaW5nKGNvbnRleHQpOwotICAgIGFzc2VydEVxdWFscygx
LCBuZXR3b3JrTW9uaXRvci5nZXROdW1PYnNlcnZlcnMoKSk7Ci0gICAgYXNzZXJ0Tm90TnVsbChu
ZXR3b3JrTW9uaXRvci5nZXROZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QoKSk7Ci0gICAgbmV0d29y
a01vbml0b3Iuc3RvcE1vbml0b3JpbmcoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV0d29ya01v
bml0b3IuZ2V0TnVtT2JzZXJ2ZXJzKCkpOwotICAgIGFzc2VydE51bGwobmV0d29ya01vbml0b3Iu
Z2V0TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVt
ZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkVuZFRvRW5kVGVzdC5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25FbmRU
b0VuZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiZTgzMzUwNGFj
ZDZmYzY3YzllNTQ4Y2E4ZTUwYjIxMzA4MTExNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVy
Q29ubmVjdGlvbkVuZFRvRW5kVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4MiArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBz
dGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguVHJ1dGguYXNzZXJ0VGhhdDsKLWltcG9ydCBz
dGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5q
dW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQu
YXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxs
OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLWltcG9ydCBh
bmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnN1cHBv
cnQudGVzdC5JbnN0cnVtZW50YXRpb25SZWdpc3RyeTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQu
dGVzdC5maWx0ZXJzLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmls
dGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0
OwotaW1wb3J0IGphdmEudXRpbC5BcnJheURlcXVlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxp
c3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsK
LWltcG9ydCBqYXZhLnV0aWwuSWRlbnRpdHlIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlF1ZXVlOwotaW1wb3J0
IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93
bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IG9y
Zy5jaHJvbWl1bS5iYXNlLnRlc3QuQmFzZUpVbml0NENsYXNzUnVubmVyOwotaW1wb3J0IG9yZy5q
dW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1
bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb24uSWNlQ29ubmVj
dGlvblN0YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb24uSWNlR2F0aGVyaW5n
U3RhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5QZWVyQ29ubmVjdGlvblN0
YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGU7Ci0K
LS8qKiBFbmQtdG8tZW5kIHRlc3RzIGZvciB7QGxpbmsgUGVlckNvbm5lY3Rpb259LiAqLwotQFJ1
bldpdGgoQmFzZUpVbml0NENsYXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIFBlZXJDb25u
ZWN0aW9uRW5kVG9FbmRUZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJQZWVyQ29ubmVjdGlvbkVuZFRvRW5kVGVzdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBERUZBVUxUX1RJTUVPVVRfU0VDT05EUyA9IDIwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgU0hPUlRfVElNRU9VVF9TRUNPTkRTID0gNTsKLQotICBAQmVmb3JlCi0gIHB1YmxpYyB2b2lk
IHNldFVwKCkgewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplKFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5Jbml0aWFsaXphdGlvbk9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkZXIoSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0
VGFyZ2V0Q29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuc2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0
aW9uT3B0aW9ucygpKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE9ic2VydmVyRXhw
ZWN0YXRpb25zCi0gICAgICBpbXBsZW1lbnRzIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyLCBWaWRl
b1NpbmssIERhdGFDaGFubmVsLk9ic2VydmVyLCBTdGF0c09ic2VydmVyLAotICAgICAgICAgICAg
ICAgICBSVENTdGF0c0NvbGxlY3RvckNhbGxiYWNrLCBSdHBSZWNlaXZlci5PYnNlcnZlciB7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZElj
ZUNhbmRpZGF0ZXM7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRFcnJvcnM7Ci0gICAgcHJpdmF0
ZSBpbnQgZXhwZWN0ZWRSZW5lZ290aWF0aW9uczsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZFdp
ZHRoOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkSGVpZ2h0OwotICAgIHByaXZhdGUgaW50IGV4
cGVjdGVkRnJhbWVzRGVsaXZlcmVkOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkVHJhY2tzQWRk
ZWQ7Ci0gICAgcHJpdmF0ZSBRdWV1ZTxTaWduYWxpbmdTdGF0ZT4gZXhwZWN0ZWRTaWduYWxpbmdD
aGFuZ2VzID0gbmV3IEFycmF5RGVxdWU8PigpOwotICAgIHByaXZhdGUgUXVldWU8SWNlQ29ubmVj
dGlvblN0YXRlPiBleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFuZ2VzID0gbmV3IEFycmF5RGVxdWU8
PigpOwotICAgIHByaXZhdGUgUXVldWU8SWNlQ29ubmVjdGlvblN0YXRlPiBleHBlY3RlZFN0YW5k
YXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2VzID0gbmV3IEFycmF5RGVxdWU8PigpOwotICAgIHBy
aXZhdGUgUXVldWU8UGVlckNvbm5lY3Rpb25TdGF0ZT4gZXhwZWN0ZWRDb25uZWN0aW9uQ2hhbmdl
cyA9IG5ldyBBcnJheURlcXVlPD4oKTsKLSAgICBwcml2YXRlIFF1ZXVlPEljZUdhdGhlcmluZ1N0
YXRlPiBleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMgPSBuZXcgQXJyYXlEZXF1ZTw+KCk7Ci0g
ICAgcHJpdmF0ZSBRdWV1ZTxTdHJpbmc+IGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzID0gbmV3IEFy
cmF5RGVxdWU8PigpOwotICAgIHByaXZhdGUgUXVldWU8U3RyaW5nPiBleHBlY3RlZFJlbW92ZVN0
cmVhbUxhYmVscyA9IG5ldyBBcnJheURlcXVlPD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8
SWNlQ2FuZGlkYXRlPiBnb3RJY2VDYW5kaWRhdGVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAg
cHJpdmF0ZSBNYXA8TWVkaWFTdHJlYW0sIFdlYWtSZWZlcmVuY2U8VmlkZW9TaW5rPj4gdmlkZW9T
aW5rcyA9IG5ldyBJZGVudGl0eUhhc2hNYXA8PigpOwotICAgIHByaXZhdGUgRGF0YUNoYW5uZWwg
ZGF0YUNoYW5uZWw7Ci0gICAgcHJpdmF0ZSBRdWV1ZTxEYXRhQ2hhbm5lbC5CdWZmZXI+IGV4cGVj
dGVkQnVmZmVycyA9IG5ldyBBcnJheURlcXVlPD4oKTsKLSAgICBwcml2YXRlIFF1ZXVlPERhdGFD
aGFubmVsLlN0YXRlPiBleHBlY3RlZFN0YXRlQ2hhbmdlcyA9IG5ldyBBcnJheURlcXVlPD4oKTsK
LSAgICBwcml2YXRlIFF1ZXVlPFN0cmluZz4gZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVs
cyA9IG5ldyBBcnJheURlcXVlPD4oKTsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZE9sZFN0YXRz
Q2FsbGJhY2tzOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkTmV3U3RhdHNDYWxsYmFja3M7Ci0g
ICAgcHJpdmF0ZSBMaXN0PFN0YXRzUmVwb3J0W10+IGdvdFN0YXRzUmVwb3J0cyA9IG5ldyBBcnJh
eUxpc3Q8PigpOwotICAgIHByaXZhdGUgZmluYWwgSGFzaFNldDxNZWRpYVN0cmVhbT4gZ290UmVt
b3RlU3RyZWFtcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZEZp
cnN0QXVkaW9QYWNrZXQ7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRGaXJzdFZpZGVvUGFja2V0
OwotCi0gICAgcHVibGljIE9ic2VydmVyRXhwZWN0YXRpb25zKFN0cmluZyBuYW1lKSB7Ci0gICAg
ICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3Jn
Lzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAg
ICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gICAgcHVi
bGljIHN5bmNocm9uaXplZCB2b2lkIHNldERhdGFDaGFubmVsKERhdGFDaGFubmVsIGRhdGFDaGFu
bmVsKSB7Ci0gICAgICBhc3NlcnROdWxsKHRoaXMuZGF0YUNoYW5uZWwpOwotICAgICAgdGhpcy5k
YXRhQ2hhbm5lbCA9IGRhdGFDaGFubmVsOwotICAgICAgdGhpcy5kYXRhQ2hhbm5lbC5yZWdpc3Rl
ck9ic2VydmVyKHRoaXMpOwotICAgICAgYXNzZXJ0Tm90TnVsbCh0aGlzLmRhdGFDaGFubmVsKTsK
LSAgICB9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3lu
Y2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3Mo
Ik5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9p
ZCBleHBlY3RJY2VDYW5kaWRhdGVzKGludCBjb3VudCkgewotICAgICAgZXhwZWN0ZWRJY2VDYW5k
aWRhdGVzICs9IGNvdW50OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIC8vIFRPRE8oYnVn
cy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBw
cmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVj
ayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uSWNlQ2FuZGlkYXRlKEljZUNhbmRp
ZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJvbkljZUNhbmRpZGF0ZTog
IiArIGNhbmRpZGF0ZS50b1N0cmluZygpKTsKLSAgICAgIC0tZXhwZWN0ZWRJY2VDYW5kaWRhdGVz
OwotCi0gICAgICAvLyBXZSBkb24ndCBhc3NlcnQgZXhwZWN0ZWRJY2VDYW5kaWRhdGVzID49IDAg
YmVjYXVzZSBpdCdzIGhhcmQgdG8ga25vdwotICAgICAgLy8gaG93IG1hbnkgdG8gZXhwZWN0LCBp
biBnZW5lcmFsLiAgV2Ugb25seSB1c2UgZXhwZWN0SWNlQ2FuZGlkYXRlcyB0bwotICAgICAgLy8g
YXNzZXJ0IGEgbWluaW1hbCBjb3VudC4KLSAgICAgIHN5bmNocm9uaXplZCAoZ290SWNlQ2FuZGlk
YXRlcykgewotICAgICAgICBnb3RJY2VDYW5kaWRhdGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAg
ICBnb3RJY2VDYW5kaWRhdGVzLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoSWNlQ2FuZGlk
YXRlW10gY2FuZGlkYXRlcykge30KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
U2VsZWN0ZWRDYW5kaWRhdGVQYWlyQ2hhbmdlZChDYW5kaWRhdGVQYWlyQ2hhbmdlRXZlbnQgZXZl
bnQpIHt9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3lu
Y2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3Mo
Ik5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9p
ZCBzZXRFeHBlY3RlZFJlc29sdXRpb24oaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICBl
eHBlY3RlZFdpZHRoID0gd2lkdGg7Ci0gICAgICBleHBlY3RlZEhlaWdodCA9IGhlaWdodDsKLSAg
ICB9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5v
U3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBl
eHBlY3RGcmFtZXNEZWxpdmVyZWQoaW50IGNvdW50KSB7Ci0gICAgICBleHBlY3RlZEZyYW1lc0Rl
bGl2ZXJlZCArPSBjb3VudDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1
Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3Vw
cHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hl
Y2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkZyYW1lKFZpZGVvRnJhbWUgZnJh
bWUpIHsKLSAgICAgIGlmIChleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCA8PSAwKSB7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIGFzc2VydFRydWUoZXhwZWN0ZWRXaWR0aCA+IDApOwot
ICAgICAgYXNzZXJ0VHJ1ZShleHBlY3RlZEhlaWdodCA+IDApOwotICAgICAgYXNzZXJ0RXF1YWxz
KGV4cGVjdGVkV2lkdGgsIGZyYW1lLmdldFJvdGF0ZWRXaWR0aCgpKTsKLSAgICAgIGFzc2VydEVx
dWFscyhleHBlY3RlZEhlaWdodCwgZnJhbWUuZ2V0Um90YXRlZEhlaWdodCgpKTsKLSAgICAgIC0t
ZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQ7Ci0gICAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0
Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9u
LgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAg
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGlu
Z1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXMuYWRkKG5l
d1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRj
Lm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24u
Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0
ZSBuZXdTdGF0ZSkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU2lnbmFsaW5nQ2hhbmdl
cy5yZW1vdmUoKSwgbmV3U3RhdGUpOwotICAgIH0KLQotICAgIC8vIFRPRE8oYnVncy53ZWJydGMu
b3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4K
LSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gICAg
cHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29u
bmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFu
Z2VzLmFkZChuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcv
ODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAg
IEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJs
aWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0U3RhbmRhcmRpemVkSWNlQ29ubmVjdGlvbkNoYW5n
ZShJY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGV4cGVjdGVkU3RhbmRhcmRp
emVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuYWRkKG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5v
U3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBv
bkljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7Ci0gICAg
ICAvLyBUT0RPKGJlbWFzYyk6IHJlbW92ZSBvbmNlIGRlbGl2ZXJ5IG9mIElDRUNvbXBsZXRlZCBp
cyByZWxpYWJsZQotICAgICAgLy8gKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avd2VicnRjL2lz
c3Vlcy9kZXRhaWw/aWQ9MzAyMSkuCi0gICAgICBpZiAobmV3U3RhdGUuZXF1YWxzKEljZUNvbm5l
Y3Rpb25TdGF0ZS5DT01QTEVURUQpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAg
ICAgaWYgKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IExvZ2dpbmcuZChUQUcsIG5hbWUgKyAiR290IGFuIHVuZXhwZWN0ZWQgSUNFIGNvbm5lY3Rpb24g
Y2hhbmdlICIgKyBuZXdTdGF0ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAg
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMucmVtb3ZlKCksIG5ld1N0
YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9y
Zy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0g
ICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1
YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2Uo
SWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBpZiAobmV3U3RhdGUuZXF1YWxz
KEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLQotICAgICAgaWYgKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsIG5hbWUgKyAiR290IGFuIHVuZXhwZWN0ZWQgc3RhbmRh
cmRpemVkIElDRSBjb25uZWN0aW9uIGNoYW5nZSAiICsgbmV3U3RhdGUpOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0KLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFN0YW5kYXJkaXplZElj
ZUNvbm5lY3Rpb25DaGFuZ2VzLnJlbW92ZSgpLCBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgLy8g
VE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENo
ZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1l
dGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0Q29ubmVjdGlv
bkNoYW5nZShQZWVyQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBleHBlY3RlZENv
bm5lY3Rpb25DaGFuZ2VzLmFkZChuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1l
dGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9u
aXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25Db25uZWN0
aW9uQ2hhbmdlKFBlZXJDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGlmIChleHBl
Y3RlZENvbm5lY3Rpb25DaGFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFH
LCBuYW1lICsgIiBnb3QgYW4gdW5leHBlY3RlZCBEVExTIGNvbm5lY3Rpb24gY2hhbmdlICIgKyBu
ZXdTdGF0ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgYXNzZXJ0RXF1YWxz
KGV4cGVjdGVkQ29ubmVjdGlvbkNoYW5nZXMucmVtb3ZlKCksIG5ld1N0YXRlKTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3Zl
IE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2Fy
bmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6
ZWQgdm9pZCBvbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdDaGFuZ2UoYm9vbGVhbiByZWNlaXZpbmcp
IHsKLSAgICAgIExvZ2dpbmcuZChUQUcsIG5hbWUgKyAiIGdvdCBhbiBJQ0UgY29ubmVjdGlvbiBy
ZWNlaXZpbmcgY2hhbmdlICIgKyByZWNlaXZpbmcpOwotICAgIH0KLQotICAgIC8vIFRPRE8oYnVn
cy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBw
cmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVj
ayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEljZUdhdGhlcmluZ0NoYW5n
ZShJY2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgZXhwZWN0ZWRJY2VHYXRoZXJp
bmdDaGFuZ2VzLmFkZChuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgLy8g
VE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENo
ZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1l
dGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VHYXRoZXJpbmdD
aGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIC8vIEl0J3MgZmluZSB0
byBnZXQgYSB2YXJpYWJsZSBudW1iZXIgb2YgR0FUSEVSSU5HIG1lc3NhZ2VzIGJlZm9yZQotICAg
ICAgLy8gQ09NUExFVEUgZmlyZXMgKGRlcGVuZGluZyBvbiBob3cgbG9uZyB0aGUgdGVzdCBydW5z
KSBzbyB3ZSBkb24ndCBhc3NlcnQKLSAgICAgIC8vIGFueSBwYXJ0aWN1bGFyIGNvdW50LgotICAg
ICAgaWYgKG5ld1N0YXRlID09IEljZUdhdGhlcmluZ1N0YXRlLkdBVEhFUklORykgewotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2Vz
LmlzRW1wdHkoKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCBuYW1lICsgIkdvdCBhbiB1bmV4
cGVjdGVkIElDRSBnYXRoZXJpbmcgY2hhbmdlICIgKyBuZXdTdGF0ZSk7Ci0gICAgICB9Ci0gICAg
ICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLnJlbW92ZSgpLCBuZXdT
dGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92
ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dh
cm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25p
emVkIHZvaWQgZXhwZWN0QWRkU3RyZWFtKFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRB
ZGRTdHJlYW1MYWJlbHMuYWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAv
LyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9k
Q2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVk
TWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkFkZFN0cmVhbShN
ZWRpYVN0cmVhbSBzdHJlYW0pIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEFkZFN0cmVh
bUxhYmVscy5yZW1vdmUoKSwgc3RyZWFtLmdldElkKCkpOwotICAgICAgZm9yIChBdWRpb1RyYWNr
IHRyYWNrIDogc3RyZWFtLmF1ZGlvVHJhY2tzKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiYXVk
aW8iLCB0cmFjay5raW5kKCkpOwotICAgICAgfQotICAgICAgZm9yIChWaWRlb1RyYWNrIHRyYWNr
IDogc3RyZWFtLnZpZGVvVHJhY2tzKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygidmlkZW8iLCB0
cmFjay5raW5kKCkpOwotICAgICAgICB0cmFjay5hZGRTaW5rKHRoaXMpOwotICAgICAgICBhc3Nl
cnROdWxsKHZpZGVvU2lua3MucHV0KHN0cmVhbSwgbmV3IFdlYWtSZWZlcmVuY2U8VmlkZW9TaW5r
Pih0aGlzKSkpOwotICAgICAgfQotICAgICAgZ290UmVtb3RlU3RyZWFtcy5hZGQoc3RyZWFtKTsK
LSAgICB9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3lu
Y2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3Mo
Ik5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9p
ZCBleHBlY3RSZW1vdmVTdHJlYW0oU3RyaW5nIGxhYmVsKSB7Ci0gICAgICBleHBlY3RlZFJlbW92
ZVN0cmVhbUxhYmVscy5hZGQobGFiZWwpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIC8v
IFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RD
aGVjayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRN
ZXRob2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uUmVtb3ZlU3RyZWFt
KE1lZGlhU3RyZWFtIHN0cmVhbSkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUmVtb3Zl
U3RyZWFtTGFiZWxzLnJlbW92ZSgpLCBzdHJlYW0uZ2V0SWQoKSk7Ci0gICAgICBXZWFrUmVmZXJl
bmNlPFZpZGVvU2luaz4gdmlkZW9TaW5rID0gdmlkZW9TaW5rcy5yZW1vdmUoc3RyZWFtKTsKLSAg
ICAgIGFzc2VydE5vdE51bGwodmlkZW9TaW5rKTsKLSAgICAgIGFzc2VydE5vdE51bGwodmlkZW9T
aW5rLmdldCgpKTsKLSAgICAgIGZvciAoVmlkZW9UcmFjayB2aWRlb1RyYWNrIDogc3RyZWFtLnZp
ZGVvVHJhY2tzKSB7Ci0gICAgICAgIHZpZGVvVHJhY2sucmVtb3ZlU2luayh2aWRlb1NpbmsuZ2V0
KCkpOwotICAgICAgfQotICAgICAgZ290UmVtb3RlU3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLSAg
ICB9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5v
U3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBl
eHBlY3REYXRhQ2hhbm5lbChTdHJpbmcgbGFiZWwpIHsKLSAgICAgIGV4cGVjdGVkUmVtb3RlRGF0
YUNoYW5uZWxMYWJlbHMuYWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAv
LyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9k
Q2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVk
TWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkRhdGFDaGFubmVs
KERhdGFDaGFubmVsIHJlbW90ZURhdGFDaGFubmVsKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhw
ZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVscy5yZW1vdmUoKSwgcmVtb3RlRGF0YUNoYW5uZWwu
bGFiZWwoKSk7Ci0gICAgICBzZXREYXRhQ2hhbm5lbChyZW1vdGVEYXRhQ2hhbm5lbCk7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoRGF0YUNoYW5uZWwuU3RhdGUuQ09OTkVDVElORywgZGF0YUNoYW5uZWwu
c3RhdGUoKSk7Ci0gICAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJl
bW92ZSBOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVz
c1dhcm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hy
b25pemVkIHZvaWQgZXhwZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgpIHsKLSAgICAgICsrZXhwZWN0
ZWRSZW5lZ290aWF0aW9uczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1
Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3Vw
cHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hl
Y2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblJlbmVnb3RpYXRpb25OZWVkZWQo
KSB7Ci0gICAgICBhc3NlcnRUcnVlKC0tZXhwZWN0ZWRSZW5lZ290aWF0aW9ucyA+PSAwKTsKLSAg
ICB9Ci0KLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5v
U3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBl
eHBlY3RBZGRUcmFjayhpbnQgZXhwZWN0ZWRUcmFja3NBZGRlZCkgewotICAgICAgdGhpcy5leHBl
Y3RlZFRyYWNrc0FkZGVkID0gZXhwZWN0ZWRUcmFja3NBZGRlZDsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hy
b25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5v
U3luY2hyb25pemVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBv
bkFkZFRyYWNrKFJ0cFJlY2VpdmVyIHJlY2VpdmVyLCBNZWRpYVN0cmVhbVtdIG1lZGlhU3RyZWFt
cykgewotICAgICAgZXhwZWN0ZWRUcmFja3NBZGRlZC0tOwotICAgIH0KLQotICAgIC8vIFRPRE8o
YnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBz
dXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RD
aGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdE1lc3NhZ2UoQnl0ZUJ1
ZmZlciBleHBlY3RlZEJ1ZmZlciwgYm9vbGVhbiBleHBlY3RlZEJpbmFyeSkgewotICAgICAgZXhw
ZWN0ZWRCdWZmZXJzLmFkZChuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKGV4cGVjdGVkQnVmZmVyLCBl
eHBlY3RlZEJpbmFyeSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIC8vIFRPRE8oYnVn
cy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBw
cmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVj
ayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uTWVzc2FnZShEYXRhQ2hhbm5lbC5C
dWZmZXIgYnVmZmVyKSB7Ci0gICAgICBEYXRhQ2hhbm5lbC5CdWZmZXIgZXhwZWN0ZWQgPSBleHBl
Y3RlZEJ1ZmZlcnMucmVtb3ZlKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuYmluYXJ5
LCBidWZmZXIuYmluYXJ5KTsKLSAgICAgIGFzc2VydFRydWUoZXhwZWN0ZWQuZGF0YS5lcXVhbHMo
YnVmZmVyLmRhdGEpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICAvLyBUT0RPKGJ1Z3Mu
d2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJl
c3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2si
KQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkJ1ZmZlcmVkQW1vdW50Q2hhbmdlKGxv
bmcgcHJldmlvdXNBbW91bnQpIHsKLSAgICAgIGFzc2VydEZhbHNlKHByZXZpb3VzQW1vdW50ID09
IGRhdGFDaGFubmVsLmJ1ZmZlcmVkQW1vdW50KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRN
ZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJv
bml6ZWRNZXRob2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uU3RhdGVD
aGFuZ2UoKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdGF0ZUNoYW5nZXMucmVtb3Zl
KCksIGRhdGFDaGFubmVsLnN0YXRlKCkpOwotICAgIH0KLQotICAgIC8vIFRPRE8oYnVncy53ZWJy
dGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lv
bi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVs
LlN0YXRlIHN0YXRlKSB7Ci0gICAgICBleHBlY3RlZFN0YXRlQ2hhbmdlcy5hZGQoc3RhdGUpOwot
ICAgIH0KLQotICAgIC8vIE9sZCBnZXRTdGF0cyBjYWxsYmFjay4KLSAgICBAT3ZlcnJpZGUKLSAg
ICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0
aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25p
emVkTWV0aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkNvbXBsZXRl
KFN0YXRzUmVwb3J0W10gcmVwb3J0cykgewotICAgICAgaWYgKC0tZXhwZWN0ZWRPbGRTdGF0c0Nh
bGxiYWNrcyA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhw
ZWN0ZWQgc3RhdHMgcmVwb3J0OiAiICsgQXJyYXlzLnRvU3RyaW5nKHJlcG9ydHMpKTsKLSAgICAg
IH0KLSAgICAgIGdvdFN0YXRzUmVwb3J0cy5hZGQocmVwb3J0cyk7Ci0gICAgfQotCi0gICAgLy8g
TmV3IGdldFN0YXRzIGNhbGxiYWNrLgotICAgIEBPdmVycmlkZQotICAgIC8vIFRPRE8oYnVncy53
ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVz
c2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIp
Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uU3RhdHNEZWxpdmVyZWQoUlRDU3RhdHNS
ZXBvcnQgcmVwb3J0KSB7Ci0gICAgICBpZiAoLS1leHBlY3RlZE5ld1N0YXRzQ2FsbGJhY2tzIDwg
MCkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBzdGF0
cyByZXBvcnQ6ICIgKyByZXBvcnQpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRN
ZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJv
bml6ZWRNZXRob2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uRmlyc3RQ
YWNrZXRSZWNlaXZlZChNZWRpYVN0cmVhbVRyYWNrLk1lZGlhVHlwZSBtZWRpYVR5cGUpIHsKLSAg
ICAgIGlmIChtZWRpYVR5cGUgPT0gTWVkaWFTdHJlYW1UcmFjay5NZWRpYVR5cGUuTUVESUFfVFlQ
RV9BVURJTykgewotICAgICAgICBleHBlY3RlZEZpcnN0QXVkaW9QYWNrZXQtLTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGV4cGVjdGVkRmlyc3RWaWRlb1BhY2tldC0tOwotICAgICAgfQotICAg
ICAgaWYgKGV4cGVjdGVkRmlyc3RBdWRpb1BhY2tldCA8IDAgfHwgZXhwZWN0ZWRGaXJzdFZpZGVv
UGFja2V0IDwgMCkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBl
Y3RlZCBjYWxsIG9mIG9uRmlyc3RQYWNrZXRSZWNlaXZlZCIpOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRN
ZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJv
bml6ZWRNZXRob2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEZp
cnN0UGFja2V0UmVjZWl2ZWQoKSB7Ci0gICAgICBleHBlY3RlZEZpcnN0QXVkaW9QYWNrZXQgPSAx
OwotICAgICAgZXhwZWN0ZWRGaXJzdFZpZGVvUGFja2V0ID0gMTsKLSAgICB9Ci0KLSAgICAvLyBU
T0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkxKTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hl
Y2sgc3VwcHJlc3Npb24uCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIk5vU3luY2hyb25pemVkTWV0
aG9kQ2hlY2siKQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RPbGRTdGF0c0Nh
bGxiYWNrKCkgewotICAgICAgKytleHBlY3RlZE9sZFN0YXRzQ2FsbGJhY2tzOwotICAgIH0KLQot
ICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUgTm9TeW5jaHJvbml6ZWRN
ZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJv
bml6ZWRNZXRob2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdE5l
d1N0YXRzQ2FsbGJhY2soKSB7Ci0gICAgICArK2V4cGVjdGVkTmV3U3RhdHNDYWxsYmFja3M7Ci0g
ICAgfQotCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5bmNo
cm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJO
b1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIExpc3Q8
U3RhdHNSZXBvcnRbXT4gdGFrZVN0YXRzUmVwb3J0cygpIHsKLSAgICAgIExpc3Q8U3RhdHNSZXBv
cnRbXT4gZ290ID0gZ290U3RhdHNSZXBvcnRzOwotICAgICAgZ290U3RhdHNSZXBvcnRzID0gbmV3
IEFycmF5TGlzdDxTdGF0c1JlcG9ydFtdPigpOwotICAgICAgcmV0dXJuIGdvdDsKLSAgICB9Ci0K
LSAgICAvLyBSZXR1cm4gYSBzZXQgb2YgZXhwZWN0YXRpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHNh
dGlzZmllZCB5ZXQsIHBvc3NpYmx5Ci0gICAgLy8gZW1wdHkgaWYgbm8gc3VjaCBleHBlY3RhdGlv
bnMgZXhpc3QuCi0gICAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvODQ5MSk6IFJlbW92ZSBOb1N5
bmNocm9uaXplZE1ldGhvZENoZWNrIHN1cHByZXNzaW9uLgotICAgIEBTdXBwcmVzc1dhcm5pbmdz
KCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIFRy
ZWVTZXQ8U3RyaW5nPiB1bnNhdGlzZmllZEV4cGVjdGF0aW9ucygpIHsKLSAgICAgIFRyZWVTZXQ8
U3RyaW5nPiBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMgPSBuZXcgVHJlZVNldDxTdHJpbmc+
KCk7Ci0gICAgICBpZiAoZXhwZWN0ZWRJY2VDYW5kaWRhdGVzID4gMCkgeyAvLyBTZWUgY29tbWVu
dCBpbiBvbkljZUNhbmRpZGF0ZS4KLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25z
LmFkZCgiZXhwZWN0ZWRJY2VDYW5kaWRhdGVzIik7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0
ZWRFcnJvcnMgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRk
KCJleHBlY3RlZEVycm9yczogIiArIGV4cGVjdGVkRXJyb3JzKTsKLSAgICAgIH0KLSAgICAgIGlm
IChleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgc3RpbGxX
YWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAgICAgICJleHBlY3RlZFNpZ25hbGlu
Z0NoYW5nZXM6ICIgKyBleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0K
LSAgICAgIGlmIChleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFuZ2VzLnNpemUoKSAhPSAwKSB7Ci0g
ICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhw
ZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdlczogIiArIGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5n
ZXMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5n
ZXMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFk
ZCgKLSAgICAgICAgICAgICJleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXM6ICIgKyBleHBlY3Rl
ZEljZUdhdGhlcmluZ0NoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3Rl
ZEFkZFN0cmVhbUxhYmVscy5zaXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JF
eHBlY3RhdGlvbnMuYWRkKAotICAgICAgICAgICAgImV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzOiAi
ICsgZXhwZWN0ZWRBZGRTdHJlYW1MYWJlbHMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChl
eHBlY3RlZFJlbW92ZVN0cmVhbUxhYmVscy5zaXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdh
aXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAotICAgICAgICAgICAgImV4cGVjdGVkUmVtb3ZlU3Ry
ZWFtTGFiZWxzOiAiICsgZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMuc2l6ZSgpKTsKLSAgICAg
IH0KLSAgICAgIGlmIChleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCA+IDApIHsKLSAgICAgICAgc3Rp
bGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQ6ICIg
KyBleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVjdGVk
QnVmZmVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25z
LmFkZCgiZXhwZWN0ZWRCdWZmZXJzOiAiICsgZXhwZWN0ZWRCdWZmZXJzLnNpemUoKSk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoIWV4cGVjdGVkU3RhdGVDaGFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAg
ICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKCJleHBlY3RlZFN0YXRlQ2hhbmdlczog
IiArIGV4cGVjdGVkU3RhdGVDaGFuZ2VzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4
cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0aWxs
V2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRSZW1vdGVE
YXRhQ2hhbm5lbExhYmVsczogIiArIGV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMuc2l6
ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZE9sZFN0YXRzQ2FsbGJhY2tzICE9IDAp
IHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRPbGRT
dGF0c0NhbGxiYWNrczogIiArIGV4cGVjdGVkT2xkU3RhdHNDYWxsYmFja3MpOwotICAgICAgfQot
ICAgICAgaWYgKGV4cGVjdGVkTmV3U3RhdHNDYWxsYmFja3MgIT0gMCkgewotICAgICAgICBzdGls
bFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKCJleHBlY3RlZE5ld1N0YXRzQ2FsbGJhY2tzOiAi
ICsgZXhwZWN0ZWROZXdTdGF0c0NhbGxiYWNrcyk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0
ZWRGaXJzdEF1ZGlvUGFja2V0ID4gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3Rh
dGlvbnMuYWRkKCJleHBlY3RlZEZpcnN0QXVkaW9QYWNrZXQ6ICIgKyBleHBlY3RlZEZpcnN0QXVk
aW9QYWNrZXQpOwotICAgICAgfQotICAgICAgaWYgKGV4cGVjdGVkRmlyc3RWaWRlb1BhY2tldCA+
IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRG
aXJzdFZpZGVvUGFja2V0OiAiICsgZXhwZWN0ZWRGaXJzdFZpZGVvUGFja2V0KTsKLSAgICAgIH0K
LSAgICAgIGlmIChleHBlY3RlZFRyYWNrc0FkZGVkICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0
aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRBZGRlZFRyYWNrOiAiICsgZXhwZWN0ZWRU
cmFja3NBZGRlZCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3RpbGxXYWl0aW5nRm9yRXhwZWN0
YXRpb25zOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHdhaXRGb3JBbGxFeHBlY3RhdGlv
bnNUb0JlU2F0aXNmaWVkKGludCB0aW1lb3V0U2Vjb25kcykgewotICAgICAgLy8gVE9ETyhmaXNj
aG1hbik6IHByb2JsZW1zIHdpdGggdGhpcyBhcHByb2FjaDoKLSAgICAgIC8vIC0gY29tZSB1cCB3
aXRoIHNvbWV0aGluZyBiZXR0ZXIgdGhhbiBhIHBvbGwgbG9vcAotICAgICAgLy8gLSBhdm9pZCBz
ZXJpYWxpemluZyBleHBlY3RhdGlvbnMgZXhwbGljaXRseTsgdGhlIHRlc3QgaXMgbm90IGFzIHJv
YnVzdAotICAgICAgLy8gICBhcyBpdCBjb3VsZCBiZSBiZWNhdXNlIGl0IG11c3QgcGxhY2UgZXhw
ZWN0YXRpb25zIGJldHdlZW4gd2FpdAotICAgICAgLy8gICBzdGF0ZW1lbnRzIHZlcnkgcHJlY2lz
ZWx5IChlLmcuIGZyYW1lIG11c3Qgbm90IGFycml2ZSBiZWZvcmUgaXRzCi0gICAgICAvLyAgIGV4
cGVjdGF0aW9uLCBhbmQgZXhwZWN0YXRpb24gbXVzdCBub3QgYmUgcmVnaXN0ZXJlZCBzbyBlYXJs
eSBhcyB0bwotICAgICAgLy8gICBzdGFsbCBhIHdhaXQpLiAgVXNlIGNhbGxiYWNrcyB0byBmaXJl
IG9mZiBkZXBlbmRlbnQgc3RlcHMgaW5zdGVhZCBvZgotICAgICAgLy8gICBleHBsaWNpdGx5IHdh
aXRpbmcsIHNvIHRoZXJlIGNhbiBiZSBqdXN0IGEgc2luZ2xlIHdhaXQgYXQgdGhlIGVuZCBvZgot
ICAgICAgLy8gICB0aGUgdGVzdC4KLSAgICAgIGxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50
VGltZU1pbGxpcygpICsgMTAwMCAqIHRpbWVvdXRTZWNvbmRzOwotICAgICAgVHJlZVNldDxTdHJp
bmc+IHByZXYgPSBudWxsOwotICAgICAgVHJlZVNldDxTdHJpbmc+IHN0aWxsV2FpdGluZ0ZvckV4
cGVjdGF0aW9ucyA9IHVuc2F0aXNmaWVkRXhwZWN0YXRpb25zKCk7Ci0gICAgICB3aGlsZSAoIXN0
aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFzdGls
bFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuZXF1YWxzKHByZXYpKSB7Ci0gICAgICAgICAgTG9nZ2lu
Zy5kKFRBRywKLSAgICAgICAgICAgICAgbmFtZSArICIgc3RpbGwgd2FpdGluZyBhdFxuICAgICIg
KyAobmV3IFRocm93YWJsZSgpKS5nZXRTdGFja1RyYWNlKClbMV0KLSAgICAgICAgICAgICAgICAg
ICsgIlxuICAgIGZvcjogIiArIEFycmF5cy50b1N0cmluZyhzdGlsbFdhaXRpbmdGb3JFeHBlY3Rh
dGlvbnMudG9BcnJheSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVuZFRpbWUgPCBTeXN0
ZW0uY3VycmVudFRpbWVNaWxsaXMoKSkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsCi0gICAg
ICAgICAgICAgIG5hbWUgKyAiIHRpbWVkIG91dCB3YWl0aW5nIGZvcjogIgotICAgICAgICAgICAg
ICAgICAgKyBBcnJheXMudG9TdHJpbmcoc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLnRvQXJy
YXkoKSkpOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0cnkg
ewotICAgICAgICAgIFRocmVhZC5zbGVlcCgxMCk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVycnVw
dGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihl
KTsKLSAgICAgICAgfQotICAgICAgICBwcmV2ID0gc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25z
OwotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMgPSB1bnNhdGlzZmllZEV4cGVj
dGF0aW9ucygpOwotICAgICAgfQotICAgICAgaWYgKHByZXYgPT0gbnVsbCkgewotICAgICAgICBM
b2dnaW5nLmQoCi0gICAgICAgICAgICBUQUcsIG5hbWUgKyAiIGRpZG4ndCBuZWVkIHRvIHdhaXQg
YXRcbiAgICAiICsgKG5ldyBUaHJvd2FibGUoKSkuZ2V0U3RhY2tUcmFjZSgpWzFdKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0aG9kcyByZXR1
cm4gYSBsaXN0IG9mIGFsbCBjdXJyZW50bHkgZ2F0aGVyZWQgaWNlIGNhbmRpZGF0ZXMgb3Igd2Fp
dHMgdW50aWwKLSAgICAvLyAxIGNhbmRpZGF0ZSBoYXZlIGJlZW4gZ2F0aGVyZWQuCi0gICAgcHVi
bGljIExpc3Q8SWNlQ2FuZGlkYXRlPiBnZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZ290SWNlQ2FuZGlk
YXRlcykgewotICAgICAgICB3aGlsZSAoZ290SWNlQ2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICBnb3RJY2VDYW5kaWRhdGVzLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbmV3IEFycmF5TGlzdDxJY2VDYW5kaWRhdGU+KGdvdEljZUNhbmRpZGF0ZXMpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIC8vIFNldHMgdGhlIGV4cGVjdGVkIHJlc29sdXRpb24gZm9yIGFu
IE9ic2VydmVyRXhwZWN0YXRpb25zIG9uY2UgYSBmcmFtZQotICAvLyBoYXMgYmVlbiBjYXB0dXJl
ZC4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyIGltcGxl
bWVudHMgVmlkZW9TaW5rIHsKLSAgICBwcml2YXRlIE9ic2VydmVyRXhwZWN0YXRpb25zIG9ic2Vy
dmVyOwotCi0gICAgcHVibGljIEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihPYnNlcnZlckV4cGVj
dGF0aW9ucyBvYnNlcnZlcikgewotICAgICAgdGhpcy5vYnNlcnZlciA9IG9ic2VydmVyOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBS
ZW1vdmUgTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgICBAU3VwcHJl
c3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gICAgcHVibGljIHN5bmNo
cm9uaXplZCB2b2lkIG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgICAgLy8gQmVjYXVz
ZSBkaWZmZXJlbnQgY2FtZXJhIGRldmljZXMgKGZha2UgJiBwaHlzaWNhbCkgcHJvZHVjZSBkaWZm
ZXJlbnQKLSAgICAgIC8vIHJlc29sdXRpb25zLCB3ZSBvbmx5IHNhbml0eS1jaGVjayB0aGUgc2V0
IHNpemVzLAotICAgICAgYXNzZXJ0VHJ1ZShmcmFtZS5nZXRSb3RhdGVkV2lkdGgoKSA+IDApOwot
ICAgICAgYXNzZXJ0VHJ1ZShmcmFtZS5nZXRSb3RhdGVkSGVpZ2h0KCkgPiAwKTsKLSAgICAgIG9i
c2VydmVyLnNldEV4cGVjdGVkUmVzb2x1dGlvbihmcmFtZS5nZXRSb3RhdGVkV2lkdGgoKSwgZnJh
bWUuZ2V0Um90YXRlZEhlaWdodCgpKTsKLSAgICAgIGZyYW1lLnJldGFpbigpOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFNkcE9ic2VydmVyTGF0Y2ggaW1wbGVtZW50cyBT
ZHBPYnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIHN1Y2Nlc3M7Ci0gICAgcHJpdmF0ZSBA
TnVsbGFibGUgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcDsKLSAgICBwcml2YXRlIEBOdWxsYWJsZSBT
dHJpbmcgZXJyb3I7Ci0gICAgcHJpdmF0ZSBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3Vu
dERvd25MYXRjaCgxKTsKLQotICAgIHB1YmxpYyBTZHBPYnNlcnZlckxhdGNoKCkge30KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlU3VjY2VzcyhTZXNzaW9uRGVzY3Jp
cHRpb24gc2RwKSB7Ci0gICAgICB0aGlzLnNkcCA9IHNkcDsKLSAgICAgIG9uU2V0U3VjY2Vzcygp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2V0U3VjY2Vzcygp
IHsKLSAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVGYWlsdXJlKFN0cmlu
ZyBlcnJvcikgewotICAgICAgb25TZXRGYWlsdXJlKGVycm9yKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblNldEZhaWx1cmUoU3RyaW5nIGVycm9yKSB7Ci0gICAg
ICB0aGlzLmVycm9yID0gZXJyb3I7Ci0gICAgICBsYXRjaC5jb3VudERvd24oKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgYm9vbGVhbiBhd2FpdCgpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGFzc2Vy
dFRydWUobGF0Y2guYXdhaXQoMTAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7Ci0gICAgICAg
IHJldHVybiBnZXRTdWNjZXNzKCk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAg
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgYm9vbGVhbiBnZXRTdWNjZXNzKCkgewotICAgICAgcmV0dXJuIHN1Y2Nlc3M7Ci0g
ICAgfQotCi0gICAgcHVibGljIEBOdWxsYWJsZSBTZXNzaW9uRGVzY3JpcHRpb24gZ2V0U2RwKCkg
ewotICAgICAgcmV0dXJuIHNkcDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQE51bGxhYmxlIFN0cmlu
ZyBnZXRFcnJvcigpIHsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0gIH0KLQotICAvLyBS
ZXR1cm4gYSB3ZWFrIHJlZmVyZW5jZSB0byB0ZXN0IHRoYXQgb3duZXJzaGlwIGlzIGNvcnJlY3Rs
eSBoZWxkIGJ5Ci0gIC8vIFBlZXJDb25uZWN0aW9uLCBub3QgYnkgdGVzdCBjb2RlLgotICBwcml2
YXRlIHN0YXRpYyBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBhZGRUcmFja3NUb1BDKFBlZXJD
b25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5LAotICAgICAgUGVlckNvbm5lY3Rpb24gcGMsIFZpZGVv
U291cmNlIHZpZGVvU291cmNlLCBTdHJpbmcgc3RyZWFtTGFiZWwsIFN0cmluZyB2aWRlb1RyYWNr
SWQsCi0gICAgICBTdHJpbmcgYXVkaW9UcmFja0lkLCBWaWRlb1NpbmsgdmlkZW9TaW5rKSB7Ci0g
ICAgTWVkaWFTdHJlYW0gbE1TID0gZmFjdG9yeS5jcmVhdGVMb2NhbE1lZGlhU3RyZWFtKHN0cmVh
bUxhYmVsKTsKLSAgICBWaWRlb1RyYWNrIHZpZGVvVHJhY2sgPSBmYWN0b3J5LmNyZWF0ZVZpZGVv
VHJhY2sodmlkZW9UcmFja0lkLCB2aWRlb1NvdXJjZSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCh2aWRl
b1RyYWNrKTsKLSAgICBhc3NlcnROb3ROdWxsKHZpZGVvU2luayk7Ci0gICAgdmlkZW9UcmFjay5h
ZGRTaW5rKHZpZGVvU2luayk7Ci0gICAgbE1TLmFkZFRyYWNrKHZpZGVvVHJhY2spOwotICAgIC8v
IEp1c3QgZm9yIGZ1biwgbGV0J3MgcmVtb3ZlIGFuZCByZS1hZGQgdGhlIHRyYWNrLgotICAgIGxN
Uy5yZW1vdmVUcmFjayh2aWRlb1RyYWNrKTsKLSAgICBsTVMuYWRkVHJhY2sodmlkZW9UcmFjayk7
Ci0gICAgbE1TLmFkZFRyYWNrKAotICAgICAgICBmYWN0b3J5LmNyZWF0ZUF1ZGlvVHJhY2soYXVk
aW9UcmFja0lkLCBmYWN0b3J5LmNyZWF0ZUF1ZGlvU291cmNlKG5ldyBNZWRpYUNvbnN0cmFpbnRz
KCkpKSk7Ci0gICAgcGMuYWRkU3RyZWFtKGxNUyk7Ci0gICAgcmV0dXJuIG5ldyBXZWFrUmVmZXJl
bmNlPE1lZGlhU3RyZWFtPihsTVMpOwotICB9Ci0KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdENvbXBsZXRlU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAg
IE1ldHJpY3MuZW5hYmxlKCk7Ci0gICAgLy8gQWxsb3cgbG9vcGJhY2sgaW50ZXJmYWNlcyB0b28g
c2luY2Ugb3VyIEFuZHJvaWQgZGV2aWNlcyBvZnRlbiBkb24ndAotICAgIC8vIGhhdmUgdGhvc2Uu
Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29u
bmVjdGlvbkZhY3RvcnkuT3B0aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sg
PSAwOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gUGVlckNvbm5lY3Rpb25G
YWN0b3J5LmJ1aWxkZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5zZXRPcHRpb25zKG9wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLnNldFZpZGVvRW5jb2RlckZhY3RvcnkobmV3IFNvZnR3YXJlVmlkZW9FbmNvZGVyRmFj
dG9yeSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWaWRl
b0RlY29kZXJGYWN0b3J5KG5ldyBTb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlUGVlckNvbm5lY3Rpb25G
YWN0b3J5KCk7Ci0KLSAgICBMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVy
cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgIGljZVNlcnZlcnMuYWRkKAotICAgICAgICBQZWVy
Q29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMw
MiIpLmNyZWF0ZUljZVNlcnZlcigpKTsKLSAgICBpY2VTZXJ2ZXJzLmFkZChQZWVyQ29ubmVjdGlv
bi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVybjpmYWtlLmV4YW1wbGUuY29tIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgLnNldFVzZXJuYW1lKCJmYWtlVXNlcm5hbWUiKQotICAgICAgICAgICAgICAg
ICAgICAgICAuc2V0UGFzc3dvcmQoImZha2VQYXNzd29yZCIpCi0gICAgICAgICAgICAgICAgICAg
ICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKSk7Ci0KLSAgICBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1
cmF0aW9uIHJ0Y0NvbmZpZyA9IG5ldyBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uKGlj
ZVNlcnZlcnMpOwotICAgIHJ0Y0NvbmZpZy5lbmFibGVEdGxzU3J0cCA9IHRydWU7Ci0KLSAgICBP
YnNlcnZlckV4cGVjdGF0aW9ucyBvZmZlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNlcnZlckV4
cGVjdGF0aW9ucygiUENUZXN0Om9mZmVyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBvZmZlcmlu
Z1BDID0gZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWcsIG9mZmVyaW5nRXhw
ZWN0YXRpb25zKTsKLSAgICBhc3NlcnROb3ROdWxsKG9mZmVyaW5nUEMpOwotCi0gICAgT2JzZXJ2
ZXJFeHBlY3RhdGlvbnMgYW5zd2VyaW5nRXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0
YXRpb25zKCJQQ1Rlc3Q6YW5zd2VyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBhbnN3ZXJpbmdQ
QyA9IGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlnLCBhbnN3ZXJpbmdFeHBl
Y3RhdGlvbnMpOwotICAgIGFzc2VydE5vdE51bGwoYW5zd2VyaW5nUEMpOwotCi0gICAgLy8gV2Ug
d2FudCB0byB1c2UgdGhlIHNhbWUgY2FtZXJhIGZvciBvZmZlcmVyICYgYW5zd2VyZXIsIHNvIGNy
ZWF0ZSBpdCBoZXJlCi0gICAgLy8gaW5zdGVhZCBvZiBpbiBhZGRUcmFja3NUb1BDLgotICAgIGZp
bmFsIENhbWVyYUVudW1lcmF0b3IgZW51bWVyYXRvciA9IG5ldyBDYW1lcmExRW51bWVyYXRvcihm
YWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAgICBmaW5hbCBWaWRlb0NhcHR1cmVyIHZp
ZGVvQ2FwdHVyZXIgPQotICAgICAgICBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGVudW1lcmF0
b3IuZ2V0RGV2aWNlTmFtZXMoKVswXSwgbnVsbCAvKiBldmVudHNIYW5kbGVyICovKTsKLSAgICBm
aW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAg
IFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIiLCAvKiBz
aGFyZWRDb250ZXh0PSAqLyBudWxsKTsKLSAgICBmaW5hbCBWaWRlb1NvdXJjZSB2aWRlb1NvdXJj
ZSA9IGZhY3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UoLyogaXNTY3JlZW5jYXN0PSAqLyBmYWxzZSk7
Ci0gICAgdmlkZW9DYXB0dXJlci5pbml0aWFsaXplKHN1cmZhY2VUZXh0dXJlSGVscGVyLCBJbnN0
cnVtZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCksCi0gICAgICAgIHZpZGVvU291
cmNlLmdldENhcHR1cmVyT2JzZXJ2ZXIoKSk7Ci0gICAgdmlkZW9DYXB0dXJlci5zdGFydENhcHR1
cmUoNjQwLCA0ODAsIDMwKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVn
b3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBvTE1TID0K
LSAgICAgICAgYWRkVHJhY2tzVG9QQyhmYWN0b3J5LCBvZmZlcmluZ1BDLCB2aWRlb1NvdXJjZSwg
Im9mZmVyZWRNZWRpYVN0cmVhbSIsICJvZmZlcmVkVmlkZW9UcmFjayIsCi0gICAgICAgICAgICAi
b2ZmZXJlZEF1ZGlvVHJhY2siLCBuZXcgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKGFuc3dlcmlu
Z0V4cGVjdGF0aW9ucykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0QWRkVHJh
Y2soMik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEFkZFRyYWNrKDIpOwotCi0g
ICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgpOwotICAg
IERhdGFDaGFubmVsIG9mZmVyaW5nREMgPSBvZmZlcmluZ1BDLmNyZWF0ZURhdGFDaGFubmVsKCJv
ZmZlcmluZ0RDIiwgbmV3IERhdGFDaGFubmVsLkluaXQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJv
ZmZlcmluZ0RDIiwgb2ZmZXJpbmdEQy5sYWJlbCgpKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRp
b25zLnNldERhdGFDaGFubmVsKG9mZmVyaW5nREMpOwotICAgIFNkcE9ic2VydmVyTGF0Y2ggc2Rw
TGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2Zm
ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2Rw
TGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0
Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNj
cmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAgICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlv
bi5pc0VtcHR5KCkpOwotCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5n
U3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBl
Y3RBZGRTdHJlYW0oIm9mZmVyZWRNZWRpYVN0cmVhbSIpOwotICAgIC8vIFNDVFAgRGF0YUNoYW5u
ZWxzIGFyZSBhbm5vdW5jZWQgdmlhIE9QRU4gbWVzc2FnZXMgb3ZlciB0aGUgZXN0YWJsaXNoZWQK
LSAgICAvLyBjb25uZWN0aW9uIChub3QgdmlhIFNEUCksIHNvIGFuc3dlcmluZ0V4cGVjdGF0aW9u
cyBjYW4gb25seSByZWdpc3RlcgotICAgIC8vIGV4cGVjdGluZyB0aGUgY2hhbm5lbCBkdXJpbmcg
SUNFLCBiZWxvdy4KLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRj
aCwgb2ZmZXJTZHApOwotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdT
dGF0ZS5TVEFCTEUsIG9mZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0gICAgYXNzZXJ0VHJ1
ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsK
LQotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7
Ci0gICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4gYUxNUyA9IGFkZFRyYWNrc1RvUEMoZmFj
dG9yeSwgYW5zd2VyaW5nUEMsIHZpZGVvU291cmNlLAotICAgICAgICAiYW5zd2VyZWRNZWRpYVN0
cmVhbSIsICJhbnN3ZXJlZFZpZGVvVHJhY2siLCAiYW5zd2VyZWRBdWRpb1RyYWNrIiwKLSAgICAg
ICAgbmV3IEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihvZmZlcmluZ0V4cGVjdGF0aW9ucykpOwot
Ci0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ1BD
LmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gYW5zd2Vy
U2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBl
LCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5BTlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dl
clNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMu
ZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0
SWNlQ2FuZGlkYXRlcygyKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdh
dGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5DT01QTEVURSk7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdEljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5D
T01QTEVURSk7Ci0KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAg
YW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0
ZS5TVEFCTEUpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RDb25uZWN0aW9uQ2hh
bmdlKFBlZXJDb25uZWN0aW9uU3RhdGUuQ09OTkVDVElORyk7Ci0gICAgYW5zd2VyaW5nUEMuc2V0
TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNk
cExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0g
ICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0
YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX0xPQ0FMX09G
RkVSKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RDb25uZWN0aW9uQ2hhbmdlKFBl
ZXJDb25uZWN0aW9uU3RhdGUuQ09OTkVDVElORyk7Ci0gICAgb2ZmZXJpbmdQQy5zZXRMb2NhbERl
c2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5h
d2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLSAgICBzZHBMYXRj
aCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7Ci0gICAgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0QWRkU3RyZWFtKCJhbnN3ZXJlZE1lZGlhU3RyZWFtIik7Ci0KLSAg
ICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5l
Y3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNl
Q29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLSAgICBvZmZl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGFuZGFyZGl6ZWRJY2VDb25uZWN0aW9uQ2hhbmdlKElj
ZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U3RhbmRhcmRpemVkSWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ09O
TkVDVEVEKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RDb25uZWN0aW9uQ2hhbmdl
KFBlZXJDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLSAgICAvLyBUT0RPKGJlbWFzYyk6IHVu
Y29tbWVudCBvbmNlIGRlbGl2ZXJ5IG9mIElDRUNvbXBsZXRlZCBpcyByZWxpYWJsZQotICAgIC8v
IChodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTMwMjEp
LgotICAgIC8vCi0gICAgLy8gb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlv
bkNoYW5nZSgKLSAgICAvLyAgICAgSWNlQ29ubmVjdGlvblN0YXRlLkNPTVBMRVRFRCk7Ci0gICAg
YW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVj
dGlvblN0YXRlLkNIRUNLSU5HKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNl
Q29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLSAgICBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3RhbmRhcmRpemVkSWNlQ29ubmVjdGlvbkNoYW5nZShJ
Y2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RTdGFuZGFyZGl6ZWRJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5D
T05ORUNURUQpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RDb25uZWN0aW9uQ2hh
bmdlKFBlZXJDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLQotICAgIG9mZmVyaW5nUEMuc2V0
UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShz
ZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQot
ICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldExvY2FsRGVzY3JpcHRpb24oKS50eXBlLCBv
ZmZlclNkcC50eXBlKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRSZW1vdGVEZXNj
cmlwdGlvbigpLnR5cGUsIGFuc3dlclNkcC50eXBlKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2Vy
aW5nUEMuZ2V0TG9jYWxEZXNjcmlwdGlvbigpLnR5cGUsIGFuc3dlclNkcC50eXBlKTsKLSAgICBh
c3NlcnRFcXVhbHMoYW5zd2VyaW5nUEMuZ2V0UmVtb3RlRGVzY3JpcHRpb24oKS50eXBlLCBvZmZl
clNkcC50eXBlKTsKLQotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFNlbmRlcnMoKS5z
aXplKCksIDIpOwotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFJlY2VpdmVycygpLnNp
emUoKSwgMik7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlcmluZ1BDLmdldFNlbmRlcnMoKS5zaXpl
KCksIDIpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRSZWNlaXZlcnMoKS5zaXpl
KCksIDIpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0Rmlyc3RQYWNrZXRSZWNl
aXZlZCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RGaXJzdFBhY2tldFJlY2Vp
dmVkKCk7Ci0KLSAgICBmb3IgKFJ0cFJlY2VpdmVyIHJlY2VpdmVyIDogb2ZmZXJpbmdQQy5nZXRS
ZWNlaXZlcnMoKSkgewotICAgICAgcmVjZWl2ZXIuU2V0T2JzZXJ2ZXIob2ZmZXJpbmdFeHBlY3Rh
dGlvbnMpOwotICAgIH0KLQotICAgIGZvciAoUnRwUmVjZWl2ZXIgcmVjZWl2ZXIgOiBhbnN3ZXJp
bmdQQy5nZXRSZWNlaXZlcnMoKSkgewotICAgICAgcmVjZWl2ZXIuU2V0T2JzZXJ2ZXIoYW5zd2Vy
aW5nRXhwZWN0YXRpb25zKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBzb21l
IGZyYW1lcyB0byBiZSBkZWxpdmVyZWQgYXQgZWFjaCBlbmQgKG51bWJlcgotICAgIC8vIGNob3Nl
biBhcmJpdHJhcmlseSkuCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVs
aXZlcmVkKDEwKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZl
cmVkKDEwKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERh
dGFDaGFubmVsLlN0YXRlLk9QRU4pOwotICAgIC8vIFNlZSBjb21tZW50YXJ5IGFib3V0IFNDVFAg
RGF0YUNoYW5uZWxzIGFib3ZlIGZvciB3aHkgdGhpcyBpcyBoZXJlLgotICAgIGFuc3dlcmluZ0V4
cGVjdGF0aW9ucy5leHBlY3REYXRhQ2hhbm5lbCgib2ZmZXJpbmdEQyIpOwotICAgIGFuc3dlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5TdGF0ZS5PUEVOKTsK
LQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IG9uZSBpY2UgY2FuZGlkYXRlIGZyb20gdGhlIG9m
ZmVyaW5nIFBDIGFuZCBmb3J3YXJkIHRoZW0gdG8gdGhlIGFuc3dlcmluZwotICAgIC8vIFBDLgot
ICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA6IG9mZmVyaW5nRXhwZWN0YXRpb25zLmdl
dEF0TGVhc3RPbmVJY2VDYW5kaWRhdGUoKSkgewotICAgICAgYW5zd2VyaW5nUEMuYWRkSWNlQ2Fu
ZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25l
IGljZSBjYW5kaWRhdGUgZnJvbSB0aGUgYW5zd2VyaW5nIFBDIGFuZCBmb3J3YXJkIHRoZW0gdG8g
dGhlIG9mZmVyaW5nCi0gICAgLy8gUEMuCi0gICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRl
IDogYW5zd2VyaW5nRXhwZWN0YXRpb25zLmdldEF0TGVhc3RPbmVJY2VDYW5kaWRhdGUoKSkgewot
ICAgICAgb2ZmZXJpbmdQQy5hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAg
ICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNU
b0JlU2F0aXNmaWVkKERFRkFVTFRfVElNRU9VVF9TRUNPTkRTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQo
REVGQVVMVF9USU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVj
dGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIG9mZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwg
YW5zd2VyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0KLSAgICAvLyBUZXN0IHNvbWUgb2YgdGhl
IFJ0cFNlbmRlciBBUEkuCi0gICAgUnRwU2VuZGVyIHZpZGVvU2VuZGVyID0gbnVsbDsKLSAgICBS
dHBTZW5kZXIgYXVkaW9TZW5kZXIgPSBudWxsOwotICAgIGZvciAoUnRwU2VuZGVyIHNlbmRlciA6
IG9mZmVyaW5nUEMuZ2V0U2VuZGVycygpKSB7Ci0gICAgICBpZiAoc2VuZGVyLnRyYWNrKCkua2lu
ZCgpLmVxdWFscygidmlkZW8iKSkgewotICAgICAgICB2aWRlb1NlbmRlciA9IHNlbmRlcjsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1ZGlvU2VuZGVyID0gc2VuZGVyOwotICAgICAgfQotICAg
IH0KLSAgICBhc3NlcnROb3ROdWxsKHZpZGVvU2VuZGVyKTsKLSAgICBhc3NlcnROb3ROdWxsKGF1
ZGlvU2VuZGVyKTsKLQotICAgIC8vIFNldCBhIGJpdHJhdGUgbGltaXQgZm9yIHRoZSBvdXRnb2lu
ZyB2aWRlbyBzdHJlYW0gZm9yIHRoZSBvZmZlcmVyLgotICAgIFJ0cFBhcmFtZXRlcnMgcnRwUGFy
YW1ldGVycyA9IHZpZGVvU2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAgICBhc3NlcnROb3ROdWxs
KHJ0cFBhcmFtZXRlcnMpOwotICAgIGFzc2VydEVxdWFscygxLCBydHBQYXJhbWV0ZXJzLmVuY29k
aW5ncy5zaXplKCkpOwotICAgIGFzc2VydE51bGwocnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0
KDApLm1heEJpdHJhdGVCcHMpOwotICAgIGFzc2VydE51bGwocnRwUGFyYW1ldGVycy5lbmNvZGlu
Z3MuZ2V0KDApLm1pbkJpdHJhdGVCcHMpOwotICAgIGFzc2VydE51bGwocnRwUGFyYW1ldGVycy5l
bmNvZGluZ3MuZ2V0KDApLm1heEZyYW1lcmF0ZSk7Ci0gICAgYXNzZXJ0TnVsbChydHBQYXJhbWV0
ZXJzLmVuY29kaW5ncy5nZXQoMCkubnVtVGVtcG9yYWxMYXllcnMpOwotICAgIGFzc2VydE51bGwo
cnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLnNjYWxlUmVzb2x1dGlvbkRvd25CeSk7Ci0g
ICAgYXNzZXJ0VHJ1ZShydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkucmlkLmlzRW1wdHko
KSk7Ci0KLSAgICBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4Qml0cmF0ZUJwcyA9
IDMwMDAwMDsKLSAgICBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWluQml0cmF0ZUJw
cyA9IDEwMDAwMDsKLSAgICBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4RnJhbWVy
YXRlID0gMjA7Ci0gICAgcnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm51bVRlbXBvcmFs
TGF5ZXJzID0gMjsKLSAgICBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkuc2NhbGVSZXNv
bHV0aW9uRG93bkJ5ID0gMi4wOwotICAgIGFzc2VydFRydWUodmlkZW9TZW5kZXIuc2V0UGFyYW1l
dGVycyhydHBQYXJhbWV0ZXJzKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBEVE1GIHNlbmRlci4KLSAg
ICBEdG1mU2VuZGVyIGR0bWZTZW5kZXIgPSBhdWRpb1NlbmRlci5kdG1mKCk7Ci0gICAgYXNzZXJ0
Tm90TnVsbChkdG1mU2VuZGVyKTsKLSAgICBhc3NlcnRUcnVlKGR0bWZTZW5kZXIuY2FuSW5zZXJ0
RHRtZigpKTsKLSAgICBhc3NlcnRUcnVlKGR0bWZTZW5kZXIuaW5zZXJ0RHRtZigiMTIzIiwgMzAw
LCAxMDApKTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFkIGJhY2sgdGhlIHVwZGF0
ZWQgdmFsdWUuCi0gICAgcnRwUGFyYW1ldGVycyA9IHZpZGVvU2VuZGVyLmdldFBhcmFtZXRlcnMo
KTsKLSAgICBhc3NlcnRFcXVhbHMoMzAwMDAwLCAoaW50KSBydHBQYXJhbWV0ZXJzLmVuY29kaW5n
cy5nZXQoMCkubWF4Qml0cmF0ZUJwcyk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEwMDAwMCwgKGludCkg
cnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm1pbkJpdHJhdGVCcHMpOwotICAgIGFzc2Vy
dEVxdWFscygyMCwgKGludCkgcnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm1heEZyYW1l
cmF0ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIChpbnQpIHJ0cFBhcmFtZXRlcnMuZW5jb2Rpbmdz
LmdldCgwKS5udW1UZW1wb3JhbExheWVycyk7Ci0gICAgYXNzZXJ0VGhhdChydHBQYXJhbWV0ZXJz
LmVuY29kaW5ncy5nZXQoMCkuc2NhbGVSZXNvbHV0aW9uRG93bkJ5KS5pc0VxdWFsVG8oMi4wKTsK
LQotICAgIC8vIFRlc3Qgc2VuZCAmIHJlY2VpdmUgVVRGLTggdGV4dC4KLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0TWVzc2FnZSgKLSAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKCJoZWxs
byEiLmdldEJ5dGVzKENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSkpLCBmYWxzZSk7Ci0gICAgRGF0
YUNoYW5uZWwuQnVmZmVyIGJ1ZmZlciA9Ci0gICAgICAgIG5ldyBEYXRhQ2hhbm5lbC5CdWZmZXIo
Qnl0ZUJ1ZmZlci53cmFwKCJoZWxsbyEiLmdldEJ5dGVzKENoYXJzZXQuZm9yTmFtZSgiVVRGLTgi
KSkpLCBmYWxzZSk7Ci0gICAgYXNzZXJ0VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy5kYXRhQ2hh
bm5lbC5zZW5kKGJ1ZmZlcikpOwotICAgIGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25z
LndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKERFRkFVTFRfVElNRU9VVF9TRUNP
TkRTKSk7Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhpcyBiaW5hcnkgbWVzc2FnZSB0d28gZGlmZmVy
ZW50IHdheXMgdG8gZW5zdXJlIG5vCi0gICAgLy8gc2hvcnRjdXRzIGFyZSB0YWtlbi4KLSAgICBC
eXRlQnVmZmVyIGV4cGVjdGVkQmluYXJ5TWVzc2FnZSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJl
Y3QoNSk7Ci0gICAgZm9yIChieXRlIGkgPSAxOyBpIDwgNjsgKytpKSB7Ci0gICAgICBleHBlY3Rl
ZEJpbmFyeU1lc3NhZ2UucHV0KGkpOwotICAgIH0KLSAgICBleHBlY3RlZEJpbmFyeU1lc3NhZ2Uu
ZmxpcCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdE1lc3NhZ2UoZXhwZWN0ZWRC
aW5hcnlNZXNzYWdlLCB0cnVlKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9u
cy5kYXRhQ2hhbm5lbC5zZW5kKAotICAgICAgICBuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKEJ5dGVC
dWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxLCAyLCAzLCA0LCA1fSksIHRydWUpKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNh
dGlzZmllZChERUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0lORyk7Ci0gICAg
YW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRl
LkNMT1NJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERh
dGFDaGFubmVsLlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhw
ZWN0YXRpb25zLmRhdGFDaGFubmVsLmNsb3NlKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMu
ZGF0YUNoYW5uZWwuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25z
LndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKERFRkFVTFRfVElNRU9VVF9TRUNP
TkRTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShhbnN3ZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFsbEV4
cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoREVGQVVMVF9USU1FT1VUX1NFQ09ORFMpKTsKLQotICAg
IC8vIFRlc3QgU2V0Qml0cmF0ZS4KLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nUEMuc2V0Qml0cmF0
ZSgxMDAwMDAsIDUwMDAwMDAsIDUwMDAwMDAwMCkpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyaW5n
UEMuc2V0Qml0cmF0ZSgzLCAyLCAxKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBKYXZhLWxhbmQgb2Jq
ZWN0cyBhbmQgY29sbGVjdCB0aGVtLgotICAgIHNodXRkb3duUEMob2ZmZXJpbmdQQywgb2ZmZXJp
bmdFeHBlY3RhdGlvbnMpOwotICAgIG9mZmVyaW5nUEMgPSBudWxsOwotICAgIHNodXRkb3duUEMo
YW5zd2VyaW5nUEMsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYW5zd2VyaW5nUEMgPSBu
dWxsOwotICAgIHZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICB2aWRlb0NhcHR1cmVy
LmRpc3Bvc2UoKTsKLSAgICB2aWRlb1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGZhY3RvcnkuZGlzcG9zZSgpOwotICAgIFN5c3RlbS5n
YygpOwotICB9Ci0KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERh
dGFDaGFubmVsT25seVNlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBBbGxvdyBs
b29wYmFjayBpbnRlcmZhY2VzIHRvbyBzaW5jZSBvdXIgQW5kcm9pZCBkZXZpY2VzIG9mdGVuIGRv
bid0Ci0gICAgLy8gaGF2ZSB0aG9zZS4KLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9u
cyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgb3B0
aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZh
Y3RvcnkgPQotICAgICAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuYnVpbGRlcigpLnNldE9wdGlv
bnMob3B0aW9ucykuY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KCk7Ci0KLSAgICBMaXN0PFBl
ZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwot
ICAgIGljZVNlcnZlcnMuYWRkKAotICAgICAgICBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVp
bGRlcigic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiIpLmNyZWF0ZUljZVNlcnZlcigpKTsK
LSAgICBpY2VTZXJ2ZXJzLmFkZChQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVy
bjpmYWtlLmV4YW1wbGUuY29tIikKLSAgICAgICAgICAgICAgICAgICAgICAgLnNldFVzZXJuYW1l
KCJmYWtlVXNlcm5hbWUiKQotICAgICAgICAgICAgICAgICAgICAgICAuc2V0UGFzc3dvcmQoImZh
a2VQYXNzd29yZCIpCi0gICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKSk7
Ci0KLSAgICBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZyA9IG5ldyBQ
ZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uKGljZVNlcnZlcnMpOwotICAgIHJ0Y0NvbmZp
Zy5lbmFibGVEdGxzU3J0cCA9IHRydWU7Ci0KLSAgICBPYnNlcnZlckV4cGVjdGF0aW9ucyBvZmZl
cmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNlcnZlckV4cGVjdGF0aW9ucygiUENUZXN0Om9mZmVy
ZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBvZmZlcmluZ1BDID0gZmFjdG9yeS5jcmVhdGVQZWVy
Q29ubmVjdGlvbihydGNDb25maWcsIG9mZmVyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhc3NlcnRO
b3ROdWxsKG9mZmVyaW5nUEMpOwotCi0gICAgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgYW5zd2VyaW5n
RXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRpb25zKCJQQ1Rlc3Q6YW5zd2VyZXIi
KTsKLSAgICBQZWVyQ29ubmVjdGlvbiBhbnN3ZXJpbmdQQyA9IGZhY3RvcnkuY3JlYXRlUGVlckNv
bm5lY3Rpb24ocnRjQ29uZmlnLCBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIGFzc2VydE5v
dE51bGwoYW5zd2VyaW5nUEMpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVu
ZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIERhdGFDaGFubmVsIG9mZmVyaW5nREMgPSBvZmZlcmlu
Z1BDLmNyZWF0ZURhdGFDaGFubmVsKCJvZmZlcmluZ0RDIiwgbmV3IERhdGFDaGFubmVsLkluaXQo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJvZmZlcmluZ0RDIiwgb2ZmZXJpbmdEQy5sYWJlbCgpKTsK
LQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLnNldERhdGFDaGFubmVsKG9mZmVyaW5nREMpOwot
ICAgIFNkcE9ic2VydmVyTGF0Y2ggc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwot
ICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRz
KCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRlc2Ny
aXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9m
ZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAgICBhc3NlcnRG
YWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgc2RwTGF0Y2ggPSBu
ZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RT
aWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIpOwotICAgIC8v
IFNDVFAgRGF0YUNoYW5uZWxzIGFyZSBhbm5vdW5jZWQgdmlhIE9QRU4gbWVzc2FnZXMgb3ZlciB0
aGUgZXN0YWJsaXNoZWQKLSAgICAvLyBjb25uZWN0aW9uIChub3QgdmlhIFNEUCksIHNvIGFuc3dl
cmluZ0V4cGVjdGF0aW9ucyBjYW4gb25seSByZWdpc3RlcgotICAgIC8vIGV4cGVjdGluZyB0aGUg
Y2hhbm5lbCBkdXJpbmcgSUNFLCBiZWxvdy4KLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNj
cmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVj
dGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIG9mZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExh
dGNoLmdldFNkcCgpKTsKLQotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsK
LSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFp
bnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRl
c2NyaXB0aW9uIGFuc3dlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFs
cyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSKTsKLSAgICBh
c3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIG9mZmVy
aW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0gICAgYW5zd2VyaW5nRXhw
ZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUuQ09NUExFVEUp
OwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNl
R2F0aGVyaW5nU3RhdGUuQ09NUExFVEUpOwotCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2
ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFu
Z2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0Q29ubmVjdGlvbkNoYW5nZShQZWVyQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RJTkcpOwotICAg
IGFuc3dlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0g
ICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNo
LmdldFNkcCgpKTsKLQotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAg
ICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3Rh
dGUuSEFWRV9MT0NBTF9PRkZFUik7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0Q29u
bmVjdGlvbkNoYW5nZShQZWVyQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RJTkcpOwotICAgIG9mZmVy
aW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2Vy
dFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAo
KSk7Ci0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUp
OwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJ
Y2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4
cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0g
ICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3RhbmRhcmRpemVkSWNlQ29ubmVjdGlvbkNo
YW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRp
b25zLmV4cGVjdFN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0
YXRlLkNPTk5FQ1RFRCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0Q29ubmVjdGlv
bkNoYW5nZShQZWVyQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgLy8gVE9ETyhiZW1h
c2MpOiB1bmNvbW1lbnQgb25jZSBkZWxpdmVyeSBvZiBJQ0VDb21wbGV0ZWQgaXMgcmVsaWFibGUK
LSAgICAvLyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJydGMvaXNzdWVzL2RldGFpbD9p
ZD0zMDIxKS4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNo
YW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNU
RUQpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGFuZGFyZGl6ZWRJY2VDb25u
ZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29u
bmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dENvbm5lY3Rpb25DaGFuZ2UoUGVlckNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotCi0gICAg
b2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2RwKTsKLSAg
ICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2gu
Z2V0U2RwKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG9mZmVyaW5nUEMuZ2V0TG9jYWxEZXNjcmlw
dGlvbigpLnR5cGUsIG9mZmVyU2RwLnR5cGUpOwotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BD
LmdldFJlbW90ZURlc2NyaXB0aW9uKCkudHlwZSwgYW5zd2VyU2RwLnR5cGUpOwotICAgIGFzc2Vy
dEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRMb2NhbERlc2NyaXB0aW9uKCkudHlwZSwgYW5zd2VyU2Rw
LnR5cGUpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRSZW1vdGVEZXNjcmlwdGlv
bigpLnR5cGUsIG9mZmVyU2RwLnR5cGUpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuT1BFTik7Ci0gICAgLy8gU2VlIGNvbW1l
bnRhcnkgYWJvdXQgU0NUUCBEYXRhQ2hhbm5lbHMgYWJvdmUgZm9yIHdoeSB0aGlzIGlzIGhlcmUu
Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdERhdGFDaGFubmVsKCJvZmZlcmluZ0RD
Iik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFu
bmVsLlN0YXRlLk9QRU4pOwotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5k
aWRhdGUgZnJvbSB0aGUgb2ZmZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgYW5zd2Vy
aW5nCi0gICAgLy8gUEMuCi0gICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogb2ZmZXJp
bmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBhbnN3
ZXJpbmdQQy5hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0
IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBhbnN3ZXJpbmcgUEMgYW5k
IGZvcndhcmQgdGhlbSB0byB0aGUgb2ZmZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3IgKEljZUNh
bmRpZGF0ZSBjYW5kaWRhdGUgOiBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUlj
ZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBvZmZlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRh
dGUpOwotICAgIH0KLQotICAgIGFzc2VydFRydWUob2ZmZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZv
ckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoREVGQVVMVF9USU1FT1VUX1NFQ09ORFMpKTsK
LSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRp
b25zVG9CZVNhdGlzZmllZChERUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotCi0gICAgYXNzZXJ0
RXF1YWxzKFBlZXJDb25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwgb2ZmZXJpbmdQQy5z
aWduYWxpbmdTdGF0ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFs
aW5nU3RhdGUuU1RBQkxFLCBhbnN3ZXJpbmdQQy5zaWduYWxpbmdTdGF0ZSgpKTsKLQotICAgIC8v
IFRlc3Qgc2VuZCAmIHJlY2VpdmUgVVRGLTggdGV4dC4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMuZXhwZWN0TWVzc2FnZSgKLSAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKCJoZWxsbyEiLmdldEJ5
dGVzKENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSkpLCBmYWxzZSk7Ci0gICAgRGF0YUNoYW5uZWwu
QnVmZmVyIGJ1ZmZlciA9Ci0gICAgICAgIG5ldyBEYXRhQ2hhbm5lbC5CdWZmZXIoQnl0ZUJ1ZmZl
ci53cmFwKCJoZWxsbyEiLmdldEJ5dGVzKENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSkpLCBmYWxz
ZSk7Ci0gICAgYXNzZXJ0VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC5zZW5k
KGJ1ZmZlcikpOwotICAgIGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JB
bGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKERFRkFVTFRfVElNRU9VVF9TRUNPTkRTKSk7Ci0K
LSAgICAvLyBDb25zdHJ1Y3QgdGhpcyBiaW5hcnkgbWVzc2FnZSB0d28gZGlmZmVyZW50IHdheXMg
dG8gZW5zdXJlIG5vCi0gICAgLy8gc2hvcnRjdXRzIGFyZSB0YWtlbi4KLSAgICBCeXRlQnVmZmVy
IGV4cGVjdGVkQmluYXJ5TWVzc2FnZSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoNSk7Ci0g
ICAgZm9yIChieXRlIGkgPSAxOyBpIDwgNjsgKytpKSB7Ci0gICAgICBleHBlY3RlZEJpbmFyeU1l
c3NhZ2UucHV0KGkpOwotICAgIH0KLSAgICBleHBlY3RlZEJpbmFyeU1lc3NhZ2UuZmxpcCgpOwot
ICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdE1lc3NhZ2UoZXhwZWN0ZWRCaW5hcnlNZXNz
YWdlLCB0cnVlKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5kYXRhQ2hh
bm5lbC5zZW5kKAotICAgICAgICBuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKEJ5dGVCdWZmZXIud3Jh
cChuZXcgYnl0ZVtdIHsxLCAyLCAzLCA0LCA1fSksIHRydWUpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShv
ZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChE
RUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0lORyk7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NJTkcp
OwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVs
LlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hh
bmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmRhdGFDaGFubmVsLmNsb3NlKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5u
ZWwuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JB
bGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKERFRkFVTFRfVElNRU9VVF9TRUNPTkRTKSk7Ci0g
ICAgYXNzZXJ0VHJ1ZShhbnN3ZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9u
c1RvQmVTYXRpc2ZpZWQoREVGQVVMVF9USU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIC8vIEZyZWUg
dGhlIEphdmEtbGFuZCBvYmplY3RzIGFuZCBjb2xsZWN0IHRoZW0uCi0gICAgc2h1dGRvd25QQyhv
ZmZlcmluZ1BDLCBvZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgb2ZmZXJpbmdQQyA9IG51bGw7
Ci0gICAgc2h1dGRvd25QQyhhbnN3ZXJpbmdQQywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAg
ICBhbnN3ZXJpbmdQQyA9IG51bGw7Ci0gICAgZmFjdG9yeS5kaXNwb3NlKCk7Ci0gICAgU3lzdGVt
LmdjKCk7Ci0gIH0KLQotICAvLyBUZXN0cyB0aGF0IElDRSBjYW5kaWRhdGVzIHRoYXQgYXJlIG5v
dCBhbGxvd2VkIGJ5IGFuIElDRSB0cmFuc3BvcnQgdHlwZSwgdGh1cyBub3QgYmVpbmcKLSAgLy8g
c2lnbmFsZWQgdG8gdGhlIGdhdGhlcmluZyBQZWVyQ29ubmVjdGlvbiwgY2FuIGJlIHN1cmZhY2Vk
IHZpYSBjb25maWd1cmF0aW9uIGlmIGFsbG93ZWQgYnkgdGhlCi0gIC8vIG5ldyBJQ0UgdHJhbnNw
b3J0IHR5cGUsIHdoZW4gUlRDQ29uZmlndXJhdGlvbi5zdXJmYWNlSWNlQ2FuZGlkYXRlc09uSWNl
VHJhbnNwb3J0VHlwZUNoYW5nZWQgaXMKLSAgLy8gdHJ1ZS4KLSAgQFRlc3QKLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U3VyZmFjZUljZUNhbmRpZGF0ZXNXaGVuSWNlVHJhbnNwb3J0
VHlwZUNoYW5nZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBGb3IgdGhpcyB0ZXN0LCB3
ZSBvbmx5IG5lZWQgb25lIFBlZXJDb25uZWN0aW9uIHRvIG9ic2VydmUgdGhlIGJlaGF2aW9yIG9m
IGdhdGhlcmluZywgYW5kIHdlCi0gICAgLy8gY3JlYXRlIG9ubHkgdGhlIG9mZmVyaW5nIFBDIGJl
bG93LgotICAgIC8vCi0gICAgLy8gQWxsb3cgbG9vcGJhY2sgaW50ZXJmYWNlcyB0b28gc2luY2Ug
b3VyIEFuZHJvaWQgZGV2aWNlcyBvZnRlbiBkb24ndAotICAgIC8vIGhhdmUgdGhvc2UuCi0gICAg
UGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlv
bkZhY3RvcnkuT3B0aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwot
ICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgUGVlckNvbm5lY3Rp
b25GYWN0b3J5LmJ1aWxkZXIoKS5zZXRPcHRpb25zKG9wdGlvbnMpLmNyZWF0ZVBlZXJDb25uZWN0
aW9uRmFjdG9yeSgpOwotCi0gICAgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGND
b25maWcgPQotICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbihBcnJh
eXMuYXNMaXN0KCkpOwotICAgIC8vIE5PTkUgd291bGQgcHJldmVudCBhbnkgY2FuZGlkYXRlIGJl
aW5nIHNpZ25hbGVkIHRvIHRoZSBQQy4KLSAgICBydGNDb25maWcuaWNlVHJhbnNwb3J0c1R5cGUg
PSBQZWVyQ29ubmVjdGlvbi5JY2VUcmFuc3BvcnRzVHlwZS5OT05FOwotICAgIC8vIFdlIG11c3Qg
aGF2ZSB0aGUgY29udGludWFsIGdhdGhlcmluZyBlbmFibGVkIHRvIGFsbG93IHRoZSBzdXJmYWNp
bmcgb2YgY2FuZGlkYXRlcyBvbiB0aGUgSUNFCi0gICAgLy8gdHJhbnNwb3J0IHR5cGUgY2hhbmdl
LgotICAgIHJ0Y0NvbmZpZy5jb250aW51YWxHYXRoZXJpbmdQb2xpY3kgPSBQZWVyQ29ubmVjdGlv
bi5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kuR0FUSEVSX0NPTlRJTlVBTExZOwotICAgIHJ0Y0Nv
bmZpZy5zdXJmYWNlSWNlQ2FuZGlkYXRlc09uSWNlVHJhbnNwb3J0VHlwZUNoYW5nZWQgPSB0cnVl
OwotCi0gICAgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2ZmZXJpbmdFeHBlY3RhdGlvbnMgPSBuZXcg
T2JzZXJ2ZXJFeHBlY3RhdGlvbnMoIlBDVGVzdDpvZmZlcmVyIik7Ci0gICAgUGVlckNvbm5lY3Rp
b24gb2ZmZXJpbmdQQyA9IGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlnLCBv
ZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvZmZlcmluZ1BDKTsKLQot
ICAgIC8vIENyZWF0ZSBhIGRhdGEgY2hhbm5lbCBhbmQgc2V0IGxvY2FsIGRlc2NyaXB0aW9uIHRv
IGtpY2sgb2ZmIHRoZSBJQ0UgY2FuZGlkYXRlIGdhdGhlcmluZy4KLSAgICBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gICAgRGF0YUNoYW5uZWwgb2Zm
ZXJpbmdEQyA9IG9mZmVyaW5nUEMuY3JlYXRlRGF0YUNoYW5uZWwoIm9mZmVyaW5nREMiLCBuZXcg
RGF0YUNoYW5uZWwuSW5pdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIm9mZmVyaW5nREMiLCBvZmZl
cmluZ0RDLmxhYmVsKCkpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuc2V0RGF0YUNoYW5u
ZWwob2ZmZXJpbmdEQyk7Ci0gICAgU2RwT2JzZXJ2ZXJMYXRjaCBzZHBMYXRjaCA9IG5ldyBTZHBP
YnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdQQy5jcmVhdGVPZmZlcihzZHBMYXRjaCwgbmV3
IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsK
LSAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAgPSBzZHBMYXRjaC5nZXRTZHAoKTsKLSAg
ICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuT0ZG
RVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2RwLmRlc2NyaXB0aW9uLmlzRW1wdHkoKSk7Ci0K
LSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBl
Y3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfTE9DQUxf
T0ZGRVIpOwotICAgIG9mZmVyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2Zm
ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVs
bChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRM
b2NhbERlc2NyaXB0aW9uKCkudHlwZSwgb2ZmZXJTZHAudHlwZSk7Ci0KLSAgICAvLyBXYWl0IHVu
dGlsIHdlIHNhdGlzZnkgYWxsIGV4cGVjdGF0aW9ucyBpbiB0aGUgc2V0dXAuCi0gICAgYXNzZXJ0
VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlz
ZmllZChERUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotCi0gICAgLy8gQWRkIHRoZSBleHBlY3Rh
dGlvbiBvZiBnYXRoZXJpbmcgYXQgbGVhc3Qgb25lIGNhbmRpZGF0ZSwgd2hpY2ggc2hvdWxkIGhv
d2V2ZXIgZmFpbCBiZWNhdXNlIG9mCi0gICAgLy8gdGhlIHRyYW5zcG9ydCB0eXBlIE5PTkUuCi0g
ICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygxKTsKLSAgICBhc3Nl
cnRGYWxzZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNh
dGlzZmllZChTSE9SVF9USU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIC8vIENoYW5nZSB0aGUgdHJh
bnNwb3J0IHR5cGUgYW5kIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1lZXQgdGhlIGV4cGVjdGF0aW9u
IG9mIGdhdGhlcmluZyB0aGlzCi0gICAgLy8gdGltZS4KLSAgICBydGNDb25maWcuaWNlVHJhbnNw
b3J0c1R5cGUgPSBQZWVyQ29ubmVjdGlvbi5JY2VUcmFuc3BvcnRzVHlwZS5BTEw7Ci0gICAgb2Zm
ZXJpbmdQQy5zZXRDb25maWd1cmF0aW9uKHJ0Y0NvbmZpZyk7Ci0gICAgYXNzZXJ0VHJ1ZShvZmZl
cmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChERUZB
VUxUX1RJTUVPVVRfU0VDT05EUykpOwotICB9Ci0KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdFRyYWNrUmVtb3ZhbEFuZEFkZGl0aW9uKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgLy8gQWxsb3cgbG9vcGJhY2sgaW50ZXJmYWNlcyB0b28gc2luY2Ugb3VyIEFuZHJv
aWQgZGV2aWNlcyBvZnRlbiBkb24ndAotICAgIC8vIGhhdmUgdGhvc2UuCi0gICAgUGVlckNvbm5l
Y3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnku
T3B0aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwotICAgIFBlZXJD
b25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gUGVlckNvbm5lY3Rpb25GYWN0b3J5LmJ1aWxkZXIo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRPcHRpb25zKG9w
dGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFZpZGVv
RW5jb2RlckZhY3RvcnkobmV3IFNvZnR3YXJlVmlkZW9FbmNvZGVyRmFjdG9yeSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWaWRlb0RlY29kZXJGYWN0b3J5
KG5ldyBTb2Z0d2FyZVZpZGVvRGVjb2RlckZhY3RvcnkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KCk7Ci0KLSAg
ICBMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBBcnJheUxp
c3Q8PigpOwotICAgIGljZVNlcnZlcnMuYWRkKAotICAgICAgICBQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXIuYnVpbGRlcigic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiIpLmNyZWF0ZUljZVNl
cnZlcigpKTsKLQotICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRjQ29uZmln
ID0gbmV3IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24oaWNlU2VydmVycyk7Ci0gICAg
cnRjQ29uZmlnLmVuYWJsZUR0bHNTcnRwID0gdHJ1ZTsKLQotICAgIE9ic2VydmVyRXhwZWN0YXRp
b25zIG9mZmVyaW5nRXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRpb25zKCJQQ1Rl
c3Q6b2ZmZXJlciIpOwotICAgIFBlZXJDb25uZWN0aW9uIG9mZmVyaW5nUEMgPSBmYWN0b3J5LmNy
ZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZywgb2ZmZXJpbmdFeHBlY3RhdGlvbnMpOwotICAg
IGFzc2VydE5vdE51bGwob2ZmZXJpbmdQQyk7Ci0KLSAgICBPYnNlcnZlckV4cGVjdGF0aW9ucyBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMgPSBuZXcgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMoIlBDVGVzdDph
bnN3ZXJlciIpOwotICAgIFBlZXJDb25uZWN0aW9uIGFuc3dlcmluZ1BDID0gZmFjdG9yeS5jcmVh
dGVQZWVyQ29ubmVjdGlvbihydGNDb25maWcsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAg
YXNzZXJ0Tm90TnVsbChhbnN3ZXJpbmdQQyk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHVzZSB0aGUg
c2FtZSBjYW1lcmEgZm9yIG9mZmVyZXIgJiBhbnN3ZXJlciwgc28gY3JlYXRlIGl0IGhlcmUKLSAg
ICAvLyBpbnN0ZWFkIG9mIGluIGFkZFRyYWNrc1RvUEMuCi0gICAgZmluYWwgQ2FtZXJhRW51bWVy
YXRvciBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlIC8qIGNhcHR1cmVU
b1RleHR1cmUgKi8pOwotICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9Ci0g
ICAgICAgIGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZW51bWVyYXRvci5nZXREZXZpY2VOYW1l
cygpWzBdLCBudWxsIC8qIGV2ZW50c0hhbmRsZXIgKi8pOwotICAgIGZpbmFsIFN1cmZhY2VUZXh0
dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVI
ZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciIsIC8qIHNoYXJlZENvbnRleHQ9ICov
IG51bGwpOwotICAgIGZpbmFsIFZpZGVvU291cmNlIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVh
dGVWaWRlb1NvdXJjZSgvKiBpc1NjcmVlbmNhc3Q9ICovIGZhbHNlKTsKLSAgICB2aWRlb0NhcHR1
cmVyLmluaXRpYWxpemUoc3VyZmFjZVRleHR1cmVIZWxwZXIsIEluc3RydW1lbnRhdGlvblJlZ2lz
dHJ5LmdldFRhcmdldENvbnRleHQoKSwKLSAgICAgICAgdmlkZW9Tb3VyY2UuZ2V0Q2FwdHVyZXJP
YnNlcnZlcigpKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSg2NDAsIDQ4MCwgMzAp
OwotCi0gICAgLy8gQWRkIG9mZmVyZXIgbWVkaWEgc3RyZWFtLgotICAgIG9mZmVyaW5nRXhwZWN0
YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1l
ZGlhU3RyZWFtPiBvTE1TID0KLSAgICAgICAgYWRkVHJhY2tzVG9QQyhmYWN0b3J5LCBvZmZlcmlu
Z1BDLCB2aWRlb1NvdXJjZSwgIm9mZmVyZWRNZWRpYVN0cmVhbSIsICJvZmZlcmVkVmlkZW9UcmFj
ayIsCi0gICAgICAgICAgICAib2ZmZXJlZEF1ZGlvVHJhY2siLCBuZXcgRXhwZWN0ZWRSZXNvbHV0
aW9uU2V0dGVyKGFuc3dlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0QWRkVHJhY2soMik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dEFkZFRyYWNrKDIpOwotICAgIC8vIENyZWF0ZSBvZmZlci4KLSAgICBTZHBPYnNlcnZlckxhdGNo
IHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0
ZU9mZmVyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVl
KHNkcExhdGNoLmF3YWl0KCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCA9IHNk
cExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhvZmZlclNkcC50eXBlLCBTZXNzaW9u
RGVzY3JpcHRpb24uVHlwZS5PRkZFUik7Ci0gICAgYXNzZXJ0RmFsc2Uob2ZmZXJTZHAuZGVzY3Jp
cHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8vIFNldCBsb2NhbCBkZXNjcmlwdGlvbiBmb3Igb2Zm
ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJp
bmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVf
TE9DQUxfT0ZGRVIpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0
ZXMoMik7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlR2F0aGVyaW5nQ2hhbmdl
KEljZUdhdGhlcmluZ1N0YXRlLkNPTVBMRVRFKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RDb25uZWN0aW9uQ2hhbmdlKFBlZXJDb25uZWN0aW9uU3RhdGUuQ09OTkVDVElORyk7Ci0g
ICAgb2ZmZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0g
ICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNo
LmdldFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVy
LgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVN
T1RFX09GRkVSKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0QWRkU3RyZWFtKCJv
ZmZlcmVkTWVkaWFTdHJlYW0iKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlv
bihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7
Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBBZGQgYW5zd2Vy
ZXIgbWVkaWEgc3RyZWFtLgotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290
aWF0aW9uTmVlZGVkKCk7Ci0gICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4gYUxNUyA9IGFk
ZFRyYWNrc1RvUEMoZmFjdG9yeSwgYW5zd2VyaW5nUEMsIHZpZGVvU291cmNlLAotICAgICAgICAi
YW5zd2VyZWRNZWRpYVN0cmVhbSIsICJhbnN3ZXJlZFZpZGVvVHJhY2siLCAiYW5zd2VyZWRBdWRp
b1RyYWNrIiwKLSAgICAgICAgbmV3IEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihvZmZlcmluZ0V4
cGVjdGF0aW9ucykpOwotCi0gICAgLy8gQ3JlYXRlIGFuc3dlci4KLSAgICBzZHBMYXRjaCA9IG5l
dyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nUEMuY3JlYXRlQW5zd2VyKHNkcExh
dGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3
YWl0KCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBhbnN3ZXJTZHAgPSBzZHBMYXRjaC5nZXRT
ZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlv
bi5UeXBlLkFOU1dFUik7Ci0gICAgYXNzZXJ0RmFsc2UoYW5zd2VyU2RwLmRlc2NyaXB0aW9uLmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVyLgot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBl
Y3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7Ci0g
ICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0gICAgYW5z
d2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdT
dGF0ZS5DT01QTEVURSk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdENvbm5lY3Rp
b25DaGFuZ2UoUGVlckNvbm5lY3Rpb25TdGF0ZS5DT05ORUNUSU5HKTsKLSAgICBhbnN3ZXJpbmdQ
Qy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRy
dWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7
Ci0KLSAgICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExh
dGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBvZmZlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RBZGRTdHJlYW0oImFuc3dlcmVkTWVkaWFTdHJlYW0iKTsKLQot
ICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29u
bmVjdGlvblN0YXRlLkNIRUNLSU5HKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJ
Y2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotICAgIG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2Uo
SWNlQ29ubmVjdGlvblN0YXRlLkNIRUNLSU5HKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RTdGFuZGFyZGl6ZWRJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5D
T05ORUNURUQpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdENvbm5lY3Rpb25DaGFu
Z2UoUGVlckNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotICAgIC8vIFRPRE8oYmVtYXNjKTog
dW5jb21tZW50IG9uY2UgZGVsaXZlcnkgb2YgSUNFQ29tcGxldGVkIGlzIHJlbGlhYmxlCi0gICAg
Ly8gKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9MzAy
MSkuCi0gICAgLy8KLSAgICAvLyBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0
aW9uQ2hhbmdlKAotICAgIC8vICAgICBJY2VDb25uZWN0aW9uU3RhdGUuQ09NUExFVEVEKTsKLSAg
ICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25u
ZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJ
Y2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotICAgIGFu
c3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGFuZGFyZGl6ZWRJY2VDb25uZWN0aW9uQ2hhbmdl
KEljZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdFN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRl
LkNPTk5FQ1RFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdENvbm5lY3Rpb25D
aGFuZ2UoUGVlckNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotCi0gICAgb2ZmZXJpbmdQQy5z
ZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVl
KHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwot
Ci0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5kaWRhdGUgZnJvbSB0aGUgb2Zm
ZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgYW5zd2VyaW5nCi0gICAgLy8gUEMuCi0g
ICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZ2V0
QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBhbnN3ZXJpbmdQQy5hZGRJY2VDYW5k
aWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUg
aWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBhbnN3ZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0
aGUgb2ZmZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUg
OiBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0g
ICAgICBvZmZlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIH0KLQotICAg
IC8vIFdhaXQgZm9yIG9uZSBmcmFtZSBvZiB0aGUgY29ycmVjdCBzaXplIHRvIGJlIGRlbGl2ZXJl
ZC4KLSAgICAvLyBPdGhlcndpc2Ugd2UgY291bGQgZ2V0IGEgZHVtbXkgYmxhY2sgZnJhbWUgb2Yg
dW5leHBjdGVkIHNpemUgd2hlbiB0aGUKLSAgICAvLyB2aWRlbyB0cmFjayBpcyByZW1vdmVkLgot
ICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgxKTsKLSAgICBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZlcmVkKDEpOwotCi0gICAgYXNz
ZXJ0VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNh
dGlzZmllZChERUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotICAgIGFzc2VydFRydWUoYW5zd2Vy
aW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKERFRkFV
TFRfVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoUGVlckNvbm5lY3Rpb24u
U2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBvZmZlcmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkpOwotICAg
IGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIGFuc3dl
cmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkpOwotCi0gICAgLy8gTm93IGRvIGFub3RoZXIgbmVnb3Rp
YXRpb24sIHJlbW92aW5nIHRoZSB2aWRlbyB0cmFjayBmcm9tIG9uZSBwZWVyLgotICAgIC8vIFRo
aXMgcHJldmlvdXNseSBjYXVzZWQgYSBjcmFzaCBvbiBwYy5kaXNwb3NlKCkuCi0gICAgLy8gU2Vl
OiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTEy
OAotICAgIFZpZGVvVHJhY2sgb2ZmZXJlclZpZGVvVHJhY2sgPSBvTE1TLmdldCgpLnZpZGVvVHJh
Y2tzLmdldCgwKTsKLSAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSBjYWxsIHJlbW92ZVRyYWNrLCB3
ZSByZWdhaW4gcmVzcG9uc2liaWxpdHkgZm9yCi0gICAgLy8gZGlzcG9zaW5nIG9mIHRoZSB0cmFj
ay4KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7
Ci0gICAgb0xNUy5nZXQoKS5yZW1vdmVUcmFjayhvZmZlcmVyVmlkZW9UcmFjayk7Ci0gICAgbmVn
b3RpYXRlKG9mZmVyaW5nUEMsIG9mZmVyaW5nRXhwZWN0YXRpb25zLCBhbnN3ZXJpbmdQQywgYW5z
d2VyaW5nRXhwZWN0YXRpb25zKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgdHJhY2sgd2FzIHJl
YWxseSByZW1vdmVkLgotICAgIE1lZGlhU3RyZWFtIGFSTVMgPSBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMuZ290UmVtb3RlU3RyZWFtcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICBhc3NlcnRUcnVlKGFS
TVMudmlkZW9UcmFja3MuaXNFbXB0eSgpKTsKLQotICAgIC8vIEFkZCB0aGUgdmlkZW8gdHJhY2sg
dG8gdGVzdCBpZiB0aGUgYW5zd2VyaW5nUEMgd2lsbCBjcmVhdGUgYSBuZXcgdHJhY2sKLSAgICAv
LyBmb3IgdGhlIHVwZGF0ZWQgcmVtb3RlIGRlc2NyaXB0aW9uLgotICAgIG9mZmVyaW5nRXhwZWN0
YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBvTE1TLmdldCgpLmFkZFRy
YWNrKG9mZmVyZXJWaWRlb1RyYWNrKTsKLSAgICAvLyBUaGUgYW5zd2VyaW5nUEMgc2V0cyB0aGUg
dXBkYXRlZCByZW1vdGUgZGVzY3JpcHRpb24gd2l0aCBhIHRyYWNrIGFkZGVkLgotICAgIC8vIFNv
IHRoZSBvbkFkZFRyYWNrIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBvbmNlLgot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RBZGRUcmFjaygxKTsKLSAgICBvZmZlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RBZGRUcmFjaygwKTsKLSAgICBuZWdvdGlhdGUob2ZmZXJpbmdQ
Qywgb2ZmZXJpbmdFeHBlY3RhdGlvbnMsIGFuc3dlcmluZ1BDLCBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMpOwotCi0gICAgLy8gRmluYWxseSwgcmVtb3ZlIGJvdGggdGhlIGF1ZGlvIGFuZCB2aWRlbyB0
cmFja3MsIHdoaWNoIHNob3VsZCBjb21wbGV0ZWx5Ci0gICAgLy8gcmVtb3ZlIHRoZSByZW1vdGUg
c3RyZWFtLiBUaGlzIHVzZWQgdG8gdHJpZ2dlciBhbiBhc3NlcnQuCi0gICAgLy8gU2VlOiBodHRw
czovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTEyOAotICAg
IG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBv
TE1TLmdldCgpLnJlbW92ZVRyYWNrKG9mZmVyZXJWaWRlb1RyYWNrKTsKLSAgICBBdWRpb1RyYWNr
IG9mZmVyZXJBdWRpb1RyYWNrID0gb0xNUy5nZXQoKS5hdWRpb1RyYWNrcy5nZXQoMCk7Ci0gICAg
b2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIG9M
TVMuZ2V0KCkucmVtb3ZlVHJhY2sob2ZmZXJlckF1ZGlvVHJhY2spOwotCi0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFJlbW92ZVN0cmVhbSgib2ZmZXJlZE1lZGlhU3RyZWFtIik7Ci0g
ICAgbmVnb3RpYXRlKG9mZmVyaW5nUEMsIG9mZmVyaW5nRXhwZWN0YXRpb25zLCBhbnN3ZXJpbmdQ
QywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RyZWFt
IHdhcyByZWFsbHkgcmVtb3ZlZC4KLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9u
cy5nb3RSZW1vdGVTdHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBKYXZhLWxh
bmQgb2JqZWN0cyBhbmQgY29sbGVjdCB0aGVtLgotICAgIHNodXRkb3duUEMob2ZmZXJpbmdQQywg
b2ZmZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIG9mZmVyaW5nUEMgPSBudWxsOwotICAgIHNodXRk
b3duUEMoYW5zd2VyaW5nUEMsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYW5zd2VyaW5n
UEMgPSBudWxsOwotICAgIG9mZmVyZXJWaWRlb1RyYWNrLmRpc3Bvc2UoKTsKLSAgICBvZmZlcmVy
QXVkaW9UcmFjay5kaXNwb3NlKCk7Ci0gICAgdmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwot
ICAgIHZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIHZpZGVvU291cmNlLmRpc3Bvc2UoKTsK
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZmFjdG9yeS5kaXNwb3Nl
KCk7Ci0gICAgU3lzdGVtLmdjKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB0aGF0IGEgSmF2
YSBNZWRpYVN0cmVhbSBpcyB1cGRhdGVkIHdoZW4gdGhlIG5hdGl2ZSBzdHJlYW0gaXMuCi0gICAq
IDxwPgotICAgKiBTcGVjaWZpY2FsbHksIHRlc3QgdGhhdCB3aGVuIHJlbW90ZSB0cmFja3MgYXJl
IGluZGljYXRlZCBhcyBiZWluZyBhZGRlZCBvcgotICAgKiByZW1vdmVkIGZyb20gYSBNZWRpYVN0
cmVhbSAodmlhICJhPXNzcmMiIG9yICJhPW1zaWQiIGluIGEgcmVtb3RlCi0gICAqIGRlc2NyaXB0
aW9uKSwgdGhlIGV4aXN0aW5nIHJlbW90ZSBNZWRpYVN0cmVhbSBvYmplY3QgaXMgdXBkYXRlZC4K
LSAgICogPHA+Ci0gICAqIFRoaXMgdGVzdCBzdGFydHMgd2l0aCBqdXN0IGFuIGF1ZGlvIHRyYWNr
LCBhZGRzIGEgdmlkZW8gdHJhY2ssIHRoZW4KLSAgICogcmVtb3ZlcyBpdC4gSXQgb25seSBhcHBs
aWVzIHJlbW90ZSBvZmZlcnMsIHdoaWNoIGlzIHN1ZmZpY2llbnQgdG8gdGVzdAotICAgKiB0aGlz
IGZ1bmN0aW9uYWxpdHkgYW5kIHNpbXBsaWZpZXMgdGhlIHRlc3QuIFRoaXMgbWVhbnMgdGhhdCBu
byBtZWRpYSB3aWxsCi0gICAqIGFjdHVhbGx5IGJlIHNlbnQvcmVjZWl2ZWQ7IHdlJ3JlIGp1c3Qg
dGVzdGluZyB0aGF0IHRoZSBKYXZhIE1lZGlhU3RyZWFtCi0gICAqIG9iamVjdCBnZXRzIHVwZGF0
ZWQgd2hlbiB0aGUgbmF0aXZlIG9iamVjdCBjaGFuZ2VzLgotICAgKi8KLSAgQFRlc3QKLSAgQE1l
ZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFJlbW90ZVN0cmVhbVVwZGF0ZWRXaGVuVHJhY2tz
QWRkZWRPclJlbW92ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkgZmFjdG9yeSA9IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5idWlsZGVyKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmlkZW9FbmNvZGVyRmFjdG9yeShu
ZXcgU29mdHdhcmVWaWRlb0VuY29kZXJGYWN0b3J5KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLnNldFZpZGVvRGVjb2RlckZhY3RvcnkobmV3IFNvZnR3YXJlVmlk
ZW9EZWNvZGVyRmFjdG9yeSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5jcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTsKLQotICAgIC8vIFRoaXMgdGVzdCBp
cyBmaW5lIHdpdGggbm8gSUNFIHNlcnZlcnMuCi0gICAgTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXI+IGljZVNlcnZlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgIC8vIFVzZSBPZmZl
clRvUmVjZWl2ZUF1ZGlvL1ZpZGVvIHRvIGVuc3VyZSBldmVyeSBvZmZlciBoYXMgYW4gYXVkaW8g
YW5kCi0gICAgLy8gdmlkZW8gbT0gc2VjdGlvbi4gU2ltcGxpZmllcyB0aGUgdGVzdCBiZWNhdXNl
IGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8KLSAgICAvLyBhY3R1YWxseSBhcHBseSB0aGUgb2Zm
ZXIgdG8gIm9mZmVyaW5nUEMiOyBpdCdzIGp1c3QgdXNlZCBhcyBhbiBTRFAKLSAgICAvLyBmYWN0
b3J5LgotICAgIE1lZGlhQ29uc3RyYWludHMgb2ZmZXJDb25zdHJhaW50cyA9IG5ldyBNZWRpYUNv
bnN0cmFpbnRzKCk7Ci0gICAgb2ZmZXJDb25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAg
ICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIk9mZmVyVG9SZWNlaXZlQXVkaW8i
LCAidHJ1ZSIpKTsKLSAgICBvZmZlckNvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAg
IG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcigiT2ZmZXJUb1JlY2VpdmVWaWRlbyIs
ICJ0cnVlIikpOwotCi0gICAgLy8gVGhpcyBQZWVyQ29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgdXNl
ZCB0byBnZW5lcmF0ZSBvZmZlcnMuCi0gICAgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMgPSBuZXcgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMoIm9mZmVyZXIiKTsKLSAgICBQ
ZWVyQ29ubmVjdGlvbiBvZmZlcmluZ1BDID0gZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihp
Y2VTZXJ2ZXJzLCBvZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvZmZl
cmluZ1BDKTsKLQotICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIGV4cGVjdGF0aW9ucyA9IG5ldyBP
YnNlcnZlckV4cGVjdGF0aW9ucygiUEMgdW5kZXIgdGVzdCIpOwotICAgIFBlZXJDb25uZWN0aW9u
IHBjVW5kZXJUZXN0ID0gZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBl
eHBlY3RhdGlvbnMpOwotICAgIGFzc2VydE5vdE51bGwocGNVbmRlclRlc3QpOwotCi0gICAgLy8g
QWRkIG9mZmVyZXIgbWVkaWEgc3RyZWFtIHdpdGgganVzdCBhbiBhdWRpbyB0cmFjay4KLSAgICBN
ZWRpYVN0cmVhbSBsb2NhbFN0cmVhbSA9IGZhY3RvcnkuY3JlYXRlTG9jYWxNZWRpYVN0cmVhbSgi
c3RyZWFtIik7Ci0gICAgQXVkaW9UcmFjayBsb2NhbEF1ZGlvVHJhY2sgPQotICAgICAgICBmYWN0
b3J5LmNyZWF0ZUF1ZGlvVHJhY2soImF1ZGlvIiwgZmFjdG9yeS5jcmVhdGVBdWRpb1NvdXJjZShu
ZXcgTWVkaWFDb25zdHJhaW50cygpKSk7Ci0gICAgbG9jYWxTdHJlYW0uYWRkVHJhY2sobG9jYWxB
dWRpb1RyYWNrKTsKLSAgICAvLyBUT0RPKGRlYWRiZWVmKTogVXNlIGFkZFRyYWNrIG9uY2UgdGhh
dCdzIGF2YWlsYWJsZS4KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0
aW9uTmVlZGVkKCk7Ci0gICAgb2ZmZXJpbmdQQy5hZGRTdHJlYW0obG9jYWxTdHJlYW0pOwotICAg
IC8vIENyZWF0ZSBvZmZlci4KLSAgICBTZHBPYnNlcnZlckxhdGNoIHNkcExhdGNoID0gbmV3IFNk
cE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNoLCBv
ZmZlckNvbnN0cmFpbnRzKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAg
IFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotCi0gICAg
Ly8gQXBwbHkgcmVtb3RlIG9mZmVyIHRvIFBDIHVuZGVyIHRlc3QuCi0gICAgc2RwTGF0Y2ggPSBu
ZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdD
aGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIpOwotICAgIGV4cGVjdGF0aW9u
cy5leHBlY3RBZGRTdHJlYW0oInN0cmVhbSIpOwotICAgIHBjVW5kZXJUZXN0LnNldFJlbW90ZURl
c2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5h
d2FpdCgpKTsKLSAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBnZXQgb25lIHJlbW90ZSBzdHJl
YW0gd2l0aCBvbmUgYXVkaW8gdHJhY2suCi0gICAgTWVkaWFTdHJlYW0gcmVtb3RlU3RyZWFtID0g
ZXhwZWN0YXRpb25zLmdvdFJlbW90ZVN0cmVhbXMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKHJlbW90ZVN0cmVhbS5hdWRpb1RyYWNrcy5zaXplKCksIDEpOwotICAgIGFzc2Vy
dEVxdWFscyhyZW1vdGVTdHJlYW0udmlkZW9UcmFja3Muc2l6ZSgpLCAwKTsKLQotICAgIC8vIEFk
ZCBhIHZpZGVvIHRyYWNrLi4uCi0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRvciBlbnVtZXJhdG9y
ID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pOwot
ICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9Ci0gICAgICAgIGVudW1lcmF0
b3IuY3JlYXRlQ2FwdHVyZXIoZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpWzBdLCBudWxsIC8q
IGV2ZW50c0hhbmRsZXIgKi8pOwotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZh
Y2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJT
dXJmYWNlVGV4dHVyZUhlbHBlciIsIC8qIHNoYXJlZENvbnRleHQ9ICovIG51bGwpOwotICAgIGZp
bmFsIFZpZGVvU291cmNlIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRlb1NvdXJjZSgv
KiBpc1NjcmVlbmNhc3Q9ICovIGZhbHNlKTsKLSAgICB2aWRlb0NhcHR1cmVyLmluaXRpYWxpemUo
c3VyZmFjZVRleHR1cmVIZWxwZXIsIEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENv
bnRleHQoKSwKLSAgICAgICAgdmlkZW9Tb3VyY2UuZ2V0Q2FwdHVyZXJPYnNlcnZlcigpKTsKLSAg
ICBWaWRlb1RyYWNrIHZpZGVvVHJhY2sgPSBmYWN0b3J5LmNyZWF0ZVZpZGVvVHJhY2soInZpZGVv
IiwgdmlkZW9Tb3VyY2UpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3Rp
YXRpb25OZWVkZWQoKTsKLSAgICBsb2NhbFN0cmVhbS5hZGRUcmFjayh2aWRlb1RyYWNrKTsKLSAg
ICAvLyAuLi4gYW5kIGNyZWF0ZSBhbiB1cGRhdGVkIG9mZmVyLgotICAgIHNkcExhdGNoID0gbmV3
IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNo
LCBvZmZlckNvbnN0cmFpbnRzKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwot
ICAgIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0KLSAgICAvLyBBcHBseSByZW1vdGUg
b2ZmZXIgd2l0aCBuZXcgdmlkZW8gdHJhY2sgdG8gUEMgdW5kZXIgdGVzdC4KLSAgICBzZHBMYXRj
aCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgcGNVbmRlclRlc3Quc2V0UmVtb3RlRGVz
Y3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3
YWl0KCkpOwotICAgIC8vIFRoZSByZW1vdGUgc3RyZWFtIHNob3VsZCBub3cgaGF2ZSBhIHZpZGVv
IHRyYWNrLgotICAgIGFzc2VydEVxdWFscyhyZW1vdGVTdHJlYW0uYXVkaW9UcmFja3Muc2l6ZSgp
LCAxKTsKLSAgICBhc3NlcnRFcXVhbHMocmVtb3RlU3RyZWFtLnZpZGVvVHJhY2tzLnNpemUoKSwg
MSk7Ci0KLSAgICAvLyBGaW5hbGx5LCBjcmVhdGUgYW5vdGhlciBvZmZlciB3aXRoIHRoZSBhdWRp
byB0cmFjayByZW1vdmVkLgotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3Rp
YXRpb25OZWVkZWQoKTsKLSAgICBsb2NhbFN0cmVhbS5yZW1vdmVUcmFjayhsb2NhbEF1ZGlvVHJh
Y2spOwotICAgIGxvY2FsQXVkaW9UcmFjay5kaXNwb3NlKCk7Ci0gICAgc2RwTGF0Y2ggPSBuZXcg
U2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gs
IG9mZmVyQ29uc3RyYWludHMpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0g
ICAgb2ZmZXJTZHAgPSBzZHBMYXRjaC5nZXRTZHAoKTsKLQotICAgIC8vIEFwcGx5IHJlbW90ZSBv
ZmZlciB3aXRoIGp1c3QgYSB2aWRlbyB0cmFjayB0byBQQyB1bmRlciB0ZXN0LgotICAgIHNkcExh
dGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBwY1VuZGVyVGVzdC5zZXRSZW1vdGVE
ZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2gu
YXdhaXQoKSk7Ci0gICAgLy8gVGhlIHJlbW90ZSBzdHJlYW0gc2hvdWxkIG5vIGxvbmdlciBoYXZl
IGFuIGF1ZGlvIHRyYWNrLgotICAgIGFzc2VydEVxdWFscyhyZW1vdGVTdHJlYW0uYXVkaW9UcmFj
a3Muc2l6ZSgpLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMocmVtb3RlU3RyZWFtLnZpZGVvVHJhY2tz
LnNpemUoKSwgMSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBKYXZhLWxhbmQgb2JqZWN0cy4gVmlkZW8g
Y2FwdHVyZXIgYW5kIHNvdXJjZSBhcmVuJ3Qgb3duZWQgYnkKLSAgICAvLyB0aGUgUGVlckNvbm5l
Y3Rpb24gYW5kIG5lZWQgdG8gYmUgZGlzcG9zZWQgc2VwYXJhdGVseS4KLSAgICAvLyBUT0RPKGRl
YWRiZWVmKTogU2hvdWxkIGFsbCB0aGVzZSBldmVudHMgcmVhbGx5IG9jY3VyIG9uIGRpc3Bvc2Fs
PwotICAgIC8vICJHYXRoZXJpbmcgY29tcGxldGUiIGlzIGVzcGVjaWFsbHkgb2RkIHNpbmNlIGdh
dGhlcmluZyBuZXZlciBzdGFydGVkLgotICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRlc3QgaXNuJ3Qg
bWVhbnQgdG8gdGVzdCB0aGVzZSBldmVudHMsIGJ1dCB3ZSBtdXN0IGRvCi0gICAgLy8gdGhpcyBv
ciBvdGhlcndpc2UgaXQgd2lsbCBjcmFzaC4KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBl
Y3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DTE9TRUQpOwotICAgIG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2Uo
SWNlQ29ubmVjdGlvblN0YXRlLkNMT1NFRCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkNMT1NFRCk7Ci0gICAgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0SWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlLkNP
TVBMRVRFKTsKLSAgICBvZmZlcmluZ1BDLmRpc3Bvc2UoKTsKLSAgICBleHBlY3RhdGlvbnMuZXhw
ZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0xPU0VEKTsKLSAgICBl
eHBlY3RhdGlvbnMuZXhwZWN0U3RhbmRhcmRpemVkSWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25u
ZWN0aW9uU3RhdGUuQ0xPU0VEKTsKLSAgICBleHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hh
bmdlKFNpZ25hbGluZ1N0YXRlLkNMT1NFRCk7Ci0gICAgZXhwZWN0YXRpb25zLmV4cGVjdEljZUdh
dGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5DT01QTEVURSk7Ci0gICAgcGNVbmRlclRl
c3QuZGlzcG9zZSgpOwotICAgIHZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIHZpZGVvU291
cmNlLmRpc3Bvc2UoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAg
ZmFjdG9yeS5kaXNwb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIG5lZ290aWF0
ZShQZWVyQ29ubmVjdGlvbiBvZmZlcmluZ1BDLAotICAgICAgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMg
b2ZmZXJpbmdFeHBlY3RhdGlvbnMsIFBlZXJDb25uZWN0aW9uIGFuc3dlcmluZ1BDLAotICAgICAg
T2JzZXJ2ZXJFeHBlY3RhdGlvbnMgYW5zd2VyaW5nRXhwZWN0YXRpb25zKSB7Ci0gICAgLy8gQ3Jl
YXRlIG9mZmVyLgotICAgIFNkcE9ic2VydmVyTGF0Y2ggc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2
ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRp
YUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAg
U2Vzc2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsK
LSAgICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAg
Ly8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3
IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWdu
YWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9PRkZFUik7Ci0gICAgb2ZmZXJp
bmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0
VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgp
KTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVyLgotICAgIHNk
cExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVNT1RFX09GRkVS
KTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJT
ZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChz
ZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW5zd2VyLgotICAgIHNkcExhdGNo
ID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIo
c2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0
Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNkcCA9IHNkcExhdGNo
LmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2Ny
aXB0aW9uLlR5cGUuQU5TV0VSKTsKLSAgICBhc3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRp
b24uaXNFbXB0eSgpKTsKLQotICAgIC8vIFNldCBsb2NhbCBkZXNjcmlwdGlvbiBmb3IgYW5zd2Vy
ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxF
KTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJT
ZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChz
ZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBv
ZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RB
QkxFKTsKLSAgICBvZmZlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3
ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVs
bChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVj
YXRpb24iKSAvLyBUT0RPKHNha2FsKTogZ2V0U3RhdHMgaXMgZGVwcmVjYXRlZAotICBwcml2YXRl
IHN0YXRpYyB2b2lkIHNodXRkb3duUEMoUGVlckNvbm5lY3Rpb24gcGMsIE9ic2VydmVyRXhwZWN0
YXRpb25zIGV4cGVjdGF0aW9ucykgewotICAgIGlmIChleHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwg
IT0gbnVsbCkgewotICAgICAgZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLnVucmVnaXN0ZXJPYnNl
cnZlcigpOwotICAgICAgZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLmRpc3Bvc2UoKTsKLSAgICB9
Ci0KLSAgICAvLyBDYWxsIGdldFN0YXRzIChvbGQgaW1wbGVtZW50YXRpb24pIGJlZm9yZSBzaHV0
dGluZyBkb3duIFBDLgotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RPbGRTdGF0c0NhbGxiYWNrKCk7
Ci0gICAgYXNzZXJ0VHJ1ZShwYy5nZXRTdGF0cyhleHBlY3RhdGlvbnMsIG51bGwgLyogdHJhY2sg
Ki8pKTsKLSAgICBhc3NlcnRUcnVlKGV4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25z
VG9CZVNhdGlzZmllZChERUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotCi0gICAgLy8gQ2FsbCB0
aGUgbmV3IGdldFN0YXRzIGltcGxlbWVudGF0aW9uIGFzIHdlbGwuCi0gICAgZXhwZWN0YXRpb25z
LmV4cGVjdE5ld1N0YXRzQ2FsbGJhY2soKTsKLSAgICBwYy5nZXRTdGF0cyhleHBlY3RhdGlvbnMp
OwotICAgIGFzc2VydFRydWUoZXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0Jl
U2F0aXNmaWVkKERFRkFVTFRfVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBleHBlY3RhdGlvbnMu
ZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0xPU0VEKTsKLSAg
ICBleHBlY3RhdGlvbnMuZXhwZWN0U3RhbmRhcmRpemVkSWNlQ29ubmVjdGlvbkNoYW5nZShJY2VD
b25uZWN0aW9uU3RhdGUuQ0xPU0VEKTsKLSAgICBleHBlY3RhdGlvbnMuZXhwZWN0Q29ubmVjdGlv
bkNoYW5nZShQZWVyQ29ubmVjdGlvblN0YXRlLkNMT1NFRCk7Ci0gICAgZXhwZWN0YXRpb25zLmV4
cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5DTE9TRUQpOwotICAgIHBjLmNsb3Nl
KCk7Ci0gICAgYXNzZXJ0VHJ1ZShleHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1Rv
QmVTYXRpc2ZpZWQoREVGQVVMVF9USU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIC8vIENhbGwgZ2V0
U3RhdHMgKG9sZCBpbXBsZW1lbnRhdGlvbikgYWZ0ZXIgY2FsbGluZyBjbG9zZSgpLiBTaG91bGQg
c3RpbGwKLSAgICAvLyB3b3JrLgotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RPbGRTdGF0c0NhbGxi
YWNrKCk7Ci0gICAgYXNzZXJ0VHJ1ZShwYy5nZXRTdGF0cyhleHBlY3RhdGlvbnMsIG51bGwgLyog
dHJhY2sgKi8pKTsKLSAgICBhc3NlcnRUcnVlKGV4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0
YXRpb25zVG9CZVNhdGlzZmllZChERUZBVUxUX1RJTUVPVVRfU0VDT05EUykpOwotCi0gICAgTG9n
Z2luZy5kKFRBRywgIkZZSSBzdGF0czogIik7Ci0gICAgaW50IHJlcG9ydEluZGV4ID0gLTE7Ci0g
ICAgZm9yIChTdGF0c1JlcG9ydFtdIHJlcG9ydHMgOiBleHBlY3RhdGlvbnMudGFrZVN0YXRzUmVw
b3J0cygpKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiIFJlcG9ydCAjIiArICgrK3JlcG9ydElu
ZGV4KSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydHMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIiAgIiArIHJlcG9ydHNbaV0udG9TdHJpbmcoKSk7Ci0g
ICAgICB9Ci0gICAgfQotICAgIGFzc2VydEVxdWFscygxLCByZXBvcnRJbmRleCk7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIkVuZCBzdGF0cy4iKTsKLQotICAgIHBjLmRpc3Bvc2UoKTsKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rp
b25GYWN0b3J5VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUGVl
ckNvbm5lY3Rpb25GYWN0b3J5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MDcwNjdhZTIxZmFkZmRjZTUxOTczNDFlMjI4ODk5YjQ3NGYwZTFjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9v
cmcvd2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDY4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0Lkluc3RydW1lbnRhdGlvblJlZ2lzdHJ5Owot
aW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IGFu
ZHJvaWQuc3VwcG9ydC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXQ0OwotaW1wb3J0IG9yZy5qdW5p
dC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotQFJ1bldpdGgoQW5k
cm9pZEpVbml0NC5jbGFzcykKLXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlvbkZhY3RvcnlUZXN0
IHsKLSAgQFNtYWxsVGVzdAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZSgp
IHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZShQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENv
bnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5h
dGl2ZUxpYnJhcnlOYW1lKFRlc3RDb25zdGFudHMuTkFUSVZFX0xJQlJBUlkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJbml0aWFsaXphdGlvbk9wdGlv
bnMoKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJ
bml0aWFsaXplVHdpY2UoKSB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemUo
UGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0aW9uT3B0aW9ucwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRlcihJbnN0cnVtZW50YXRpb25SZWdp
c3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRzLk5BVElWRV9MSUJS
QVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSW5p
dGlhbGl6YXRpb25PcHRpb25zKCkpOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFs
aXplKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5Jbml0aWFsaXphdGlvbk9wdGlvbnMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkZXIoSW5zdHJ1bWVudGF0aW9u
UmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuc2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENvbnN0YW50cy5OQVRJVkVf
TElCUkFSWSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0
ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgQFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVUd2ljZVdpdGhUcmFjZXIoKSB7Ci0gICAgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemUoUGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRp
YWxpemF0aW9uT3B0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuYnVpbGRlcihJbnN0cnVtZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRFbmFibGVJbnRlcm5h
bFRyYWNlcih0cnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
c2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9u
T3B0aW9ucygpKTsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZShQZWVyQ29u
bmVjdGlvbkZhY3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5Lmdl
dFRhcmdldENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLnNldEVuYWJsZUludGVybmFsVHJhY2VyKHRydWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRzLk5B
VElWRV9MSUJSQVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Y3JlYXRlSW5pdGlhbGl6YXRpb25PcHRpb25zKCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBA
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZVdpdGhUcmFjZXJBbmRTaHV0ZG93bigp
IHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZShQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LmdldFRhcmdldENv
bnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEVu
YWJsZUludGVybmFsVHJhY2VyKHRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRzLk5BVElWRV9MSUJS
QVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSW5p
dGlhbGl6YXRpb25PcHRpb25zKCkpOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5zaHV0ZG93
bkludGVybmFsVHJhY2VyKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3Rz
L3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVz
dHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGYxMTQxZTExZDkxZjM5NmQ5MGZlNDNmOTJjZGZiYmNkZjI2YWY2NzUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0
aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25UZXN0LmphdmEKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5zaW5nbGV0b25M
aXN0OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9y
dCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3Jn
Lmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNz
ZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1
ZTsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOwotCi1pbXBvcnQgYW5k
cm9pZC5zdXBwb3J0LnRlc3QuSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgYW5kcm9p
ZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0
LkJhc2VKVW5pdDRDbGFzc1J1bm5lcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0
IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9y
dCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uLlRsc0NlcnRQb2xpY3k7Ci0KLS8qKiBVbml0IHRl
c3RzIGZvciB7QGxpbmsgUGVlckNvbm5lY3Rpb259LiAqLwotQFJ1bldpdGgoQmFzZUpVbml0NENs
YXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uVGVzdCB7Ci0gIEBC
ZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5
LmluaXRpYWxpemUoUGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0aW9uT3B0aW9ucwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRlcihJbnN0cnVt
ZW50YXRpb25SZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRz
Lk5BVElWRV9MSUJSQVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuY3JlYXRlSW5pdGlhbGl6YXRpb25PcHRpb25zKCkpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNt
YWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0SWNlU2VydmVyQ2hhbmdlZCgpIHRocm93cyBFeGNl
cHRpb24gewotICAgIFBlZXJDb25uZWN0aW9uLkljZVNlcnZlciBpY2VTZXJ2ZXIxID0KLSAgICAg
ICAgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyLmJ1aWxkZXIoInR1cm46ZmFrZS5leGFtcGxlLmNv
bSIpCi0gICAgICAgICAgICAuc2V0VXNlcm5hbWUoImZha2VVc2VybmFtZSIpCi0gICAgICAgICAg
ICAuc2V0UGFzc3dvcmQoImZha2VQYXNzd29yZCIpCi0gICAgICAgICAgICAuc2V0VGxzQ2VydFBv
bGljeShUbHNDZXJ0UG9saWN5LlRMU19DRVJUX1BPTElDWV9TRUNVUkUpCi0gICAgICAgICAgICAu
c2V0SG9zdG5hbWUoImZha2VIb3N0bmFtZSIpCi0gICAgICAgICAgICAuc2V0VGxzQWxwblByb3Rv
Y29scyhzaW5nbGV0b25MaXN0KCJmYWtlVGxzQWxwblByb3RvY29sIikpCi0gICAgICAgICAgICAu
c2V0VGxzRWxsaXB0aWNDdXJ2ZXMoc2luZ2xldG9uTGlzdCgiZmFrZVRsc0VsbGlwdGljQ3VydmUi
KSkKLSAgICAgICAgICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKTsKLSAgICAvLyBTYW1lIGFzIGljZVNl
cnZlcjEuCi0gICAgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyIGljZVNlcnZlcjIgPQotICAgICAg
ICBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVybjpmYWtlLmV4YW1wbGUuY29t
IikKLSAgICAgICAgICAgIC5zZXRVc2VybmFtZSgiZmFrZVVzZXJuYW1lIikKLSAgICAgICAgICAg
IC5zZXRQYXNzd29yZCgiZmFrZVBhc3N3b3JkIikKLSAgICAgICAgICAgIC5zZXRUbHNDZXJ0UG9s
aWN5KFRsc0NlcnRQb2xpY3kuVExTX0NFUlRfUE9MSUNZX1NFQ1VSRSkKLSAgICAgICAgICAgIC5z
ZXRIb3N0bmFtZSgiZmFrZUhvc3RuYW1lIikKLSAgICAgICAgICAgIC5zZXRUbHNBbHBuUHJvdG9j
b2xzKHNpbmdsZXRvbkxpc3QoImZha2VUbHNBbHBuUHJvdG9jb2wiKSkKLSAgICAgICAgICAgIC5z
ZXRUbHNFbGxpcHRpY0N1cnZlcyhzaW5nbGV0b25MaXN0KCJmYWtlVGxzRWxsaXB0aWNDdXJ2ZSIp
KQotICAgICAgICAgICAgLmNyZWF0ZUljZVNlcnZlcigpOwotICAgIC8vIERpZmZlcnMgZnJvbSBp
Y2VTZXJ2ZXIxIGJ5IHRoZSB1cmwuCi0gICAgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyIGljZVNl
cnZlcjMgPQotICAgICAgICBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVybjpm
YWtlLmV4YW1wbGUyLmNvbSIpCi0gICAgICAgICAgICAuc2V0VXNlcm5hbWUoImZha2VVc2VybmFt
ZSIpCi0gICAgICAgICAgICAuc2V0UGFzc3dvcmQoImZha2VQYXNzd29yZCIpCi0gICAgICAgICAg
ICAuc2V0VGxzQ2VydFBvbGljeShUbHNDZXJ0UG9saWN5LlRMU19DRVJUX1BPTElDWV9TRUNVUkUp
Ci0gICAgICAgICAgICAuc2V0SG9zdG5hbWUoImZha2VIb3N0bmFtZSIpCi0gICAgICAgICAgICAu
c2V0VGxzQWxwblByb3RvY29scyhzaW5nbGV0b25MaXN0KCJmYWtlVGxzQWxwblByb3RvY29sIikp
Ci0gICAgICAgICAgICAuc2V0VGxzRWxsaXB0aWNDdXJ2ZXMoc2luZ2xldG9uTGlzdCgiZmFrZVRs
c0VsbGlwdGljQ3VydmUiKSkKLSAgICAgICAgICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKTsKLSAgICAv
LyBEaWZmZXJzIGZyb20gaWNlU2VydmVyMSBieSB0aGUgdXNlcm5hbWUuCi0gICAgUGVlckNvbm5l
Y3Rpb24uSWNlU2VydmVyIGljZVNlcnZlcjQgPQotICAgICAgICBQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXIuYnVpbGRlcigidHVybjpmYWtlLmV4YW1wbGUuY29tIikKLSAgICAgICAgICAgIC5zZXRV
c2VybmFtZSgiZmFrZVVzZXJuYW1lMiIpCi0gICAgICAgICAgICAuc2V0UGFzc3dvcmQoImZha2VQ
YXNzd29yZCIpCi0gICAgICAgICAgICAuc2V0VGxzQ2VydFBvbGljeShUbHNDZXJ0UG9saWN5LlRM
U19DRVJUX1BPTElDWV9TRUNVUkUpCi0gICAgICAgICAgICAuc2V0SG9zdG5hbWUoImZha2VIb3N0
bmFtZSIpCi0gICAgICAgICAgICAuc2V0VGxzQWxwblByb3RvY29scyhzaW5nbGV0b25MaXN0KCJm
YWtlVGxzQWxwblByb3RvY29sIikpCi0gICAgICAgICAgICAuc2V0VGxzRWxsaXB0aWNDdXJ2ZXMo
c2luZ2xldG9uTGlzdCgiZmFrZVRsc0VsbGlwdGljQ3VydmUiKSkKLSAgICAgICAgICAgIC5jcmVh
dGVJY2VTZXJ2ZXIoKTsKLSAgICAvLyBEaWZmZXJzIGZyb20gaWNlU2VydmVyMSBieSB0aGUgcGFz
c3dvcmQuCi0gICAgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyIGljZVNlcnZlcjUgPQotICAgICAg
ICBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVybjpmYWtlLmV4YW1wbGUuY29t
IikKLSAgICAgICAgICAgIC5zZXRVc2VybmFtZSgiZmFrZVVzZXJuYW1lIikKLSAgICAgICAgICAg
IC5zZXRQYXNzd29yZCgiZmFrZVBhc3N3b3JkMiIpCi0gICAgICAgICAgICAuc2V0VGxzQ2VydFBv
bGljeShUbHNDZXJ0UG9saWN5LlRMU19DRVJUX1BPTElDWV9TRUNVUkUpCi0gICAgICAgICAgICAu
c2V0SG9zdG5hbWUoImZha2VIb3N0bmFtZSIpCi0gICAgICAgICAgICAuc2V0VGxzQWxwblByb3Rv
Y29scyhzaW5nbGV0b25MaXN0KCJmYWtlVGxzQWxwblByb3RvY29sIikpCi0gICAgICAgICAgICAu
c2V0VGxzRWxsaXB0aWNDdXJ2ZXMoc2luZ2xldG9uTGlzdCgiZmFrZVRsc0VsbGlwdGljQ3VydmUi
KSkKLSAgICAgICAgICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKTsKLSAgICAvLyBEaWZmZXJzIGZyb20g
aWNlU2VydmVyMSBieSB0aGUgVExTIGNlcnRpZmljYXRlIHBvbGljeS4KLSAgICBQZWVyQ29ubmVj
dGlvbi5JY2VTZXJ2ZXIgaWNlU2VydmVyNiA9Ci0gICAgICAgIFBlZXJDb25uZWN0aW9uLkljZVNl
cnZlci5idWlsZGVyKCJ0dXJuOmZha2UuZXhhbXBsZS5jb20iKQotICAgICAgICAgICAgLnNldFVz
ZXJuYW1lKCJmYWtlVXNlcm5hbWUiKQotICAgICAgICAgICAgLnNldFBhc3N3b3JkKCJmYWtlUGFz
c3dvcmQiKQotICAgICAgICAgICAgLnNldFRsc0NlcnRQb2xpY3koVGxzQ2VydFBvbGljeS5UTFNf
Q0VSVF9QT0xJQ1lfSU5TRUNVUkVfTk9fQ0hFQ0spCi0gICAgICAgICAgICAuc2V0SG9zdG5hbWUo
ImZha2VIb3N0bmFtZSIpCi0gICAgICAgICAgICAuc2V0VGxzQWxwblByb3RvY29scyhzaW5nbGV0
b25MaXN0KCJmYWtlVGxzQWxwblByb3RvY29sIikpCi0gICAgICAgICAgICAuc2V0VGxzRWxsaXB0
aWNDdXJ2ZXMoc2luZ2xldG9uTGlzdCgiZmFrZVRsc0VsbGlwdGljQ3VydmUiKSkKLSAgICAgICAg
ICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKTsKLSAgICAvLyBEaWZmZXJzIGZyb20gaWNlU2VydmVyMSBi
eSB0aGUgaG9zdG5hbWUuCi0gICAgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyIGljZVNlcnZlcjcg
PQotICAgICAgICBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVybjpmYWtlLmV4
YW1wbGUuY29tIikKLSAgICAgICAgICAgIC5zZXRVc2VybmFtZSgiZmFrZVVzZXJuYW1lIikKLSAg
ICAgICAgICAgIC5zZXRQYXNzd29yZCgiZmFrZVBhc3N3b3JkIikKLSAgICAgICAgICAgIC5zZXRU
bHNDZXJ0UG9saWN5KFRsc0NlcnRQb2xpY3kuVExTX0NFUlRfUE9MSUNZX0lOU0VDVVJFX05PX0NI
RUNLKQotICAgICAgICAgICAgLnNldEhvc3RuYW1lKCJmYWtlSG9zdG5hbWUyIikKLSAgICAgICAg
ICAgIC5zZXRUbHNBbHBuUHJvdG9jb2xzKHNpbmdsZXRvbkxpc3QoImZha2VUbHNBbHBuUHJvdG9j
b2wiKSkKLSAgICAgICAgICAgIC5zZXRUbHNFbGxpcHRpY0N1cnZlcyhzaW5nbGV0b25MaXN0KCJm
YWtlVGxzRWxsaXB0aWNDdXJ2ZSIpKQotICAgICAgICAgICAgLmNyZWF0ZUljZVNlcnZlcigpOwot
ICAgIC8vIERpZmZlcnMgZnJvbSBpY2VTZXJ2ZXIxIGJ5IHRoZSBUTFMgQUxQTi4KLSAgICBQZWVy
Q29ubmVjdGlvbi5JY2VTZXJ2ZXIgaWNlU2VydmVyOCA9Ci0gICAgICAgIFBlZXJDb25uZWN0aW9u
LkljZVNlcnZlci5idWlsZGVyKCJ0dXJuOmZha2UuZXhhbXBsZS5jb20iKQotICAgICAgICAgICAg
LnNldFVzZXJuYW1lKCJmYWtlVXNlcm5hbWUiKQotICAgICAgICAgICAgLnNldFBhc3N3b3JkKCJm
YWtlUGFzc3dvcmQiKQotICAgICAgICAgICAgLnNldFRsc0NlcnRQb2xpY3koVGxzQ2VydFBvbGlj
eS5UTFNfQ0VSVF9QT0xJQ1lfSU5TRUNVUkVfTk9fQ0hFQ0spCi0gICAgICAgICAgICAuc2V0SG9z
dG5hbWUoImZha2VIb3N0bmFtZSIpCi0gICAgICAgICAgICAuc2V0VGxzQWxwblByb3RvY29scyhz
aW5nbGV0b25MaXN0KCJmYWtlVGxzQWxwblByb3RvY29sMiIpKQotICAgICAgICAgICAgLnNldFRs
c0VsbGlwdGljQ3VydmVzKHNpbmdsZXRvbkxpc3QoImZha2VUbHNFbGxpcHRpY0N1cnZlIikpCi0g
ICAgICAgICAgICAuY3JlYXRlSWNlU2VydmVyKCk7Ci0gICAgLy8gRGlmZmVycyBmcm9tIGljZVNl
cnZlcjEgYnkgdGhlIFRMUyBlbGxpcHRpYyBjdXJ2ZS4KLSAgICBQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXIgaWNlU2VydmVyOSA9Ci0gICAgICAgIFBlZXJDb25uZWN0aW9uLkljZVNlcnZlci5idWls
ZGVyKCJ0dXJuOmZha2UuZXhhbXBsZS5jb20iKQotICAgICAgICAgICAgLnNldFVzZXJuYW1lKCJm
YWtlVXNlcm5hbWUiKQotICAgICAgICAgICAgLnNldFBhc3N3b3JkKCJmYWtlUGFzc3dvcmQiKQot
ICAgICAgICAgICAgLnNldFRsc0NlcnRQb2xpY3koVGxzQ2VydFBvbGljeS5UTFNfQ0VSVF9QT0xJ
Q1lfSU5TRUNVUkVfTk9fQ0hFQ0spCi0gICAgICAgICAgICAuc2V0SG9zdG5hbWUoImZha2VIb3N0
bmFtZSIpCi0gICAgICAgICAgICAuc2V0VGxzQWxwblByb3RvY29scyhzaW5nbGV0b25MaXN0KCJm
YWtlVGxzQWxwblByb3RvY29sIikpCi0gICAgICAgICAgICAuc2V0VGxzRWxsaXB0aWNDdXJ2ZXMo
c2luZ2xldG9uTGlzdCgiZmFrZVRsc0VsbGlwdGljQ3VydmUyIikpCi0gICAgICAgICAgICAuY3Jl
YXRlSWNlU2VydmVyKCk7Ci0KLSAgICBhc3NlcnRUcnVlKGljZVNlcnZlcjEuZXF1YWxzKGljZVNl
cnZlcjIpKTsKLSAgICBhc3NlcnRGYWxzZShpY2VTZXJ2ZXIxLmVxdWFscyhpY2VTZXJ2ZXIzKSk7
Ci0gICAgYXNzZXJ0RmFsc2UoaWNlU2VydmVyMS5lcXVhbHMoaWNlU2VydmVyNCkpOwotICAgIGFz
c2VydEZhbHNlKGljZVNlcnZlcjEuZXF1YWxzKGljZVNlcnZlcjUpKTsKLSAgICBhc3NlcnRGYWxz
ZShpY2VTZXJ2ZXIxLmVxdWFscyhpY2VTZXJ2ZXI2KSk7Ci0gICAgYXNzZXJ0RmFsc2UoaWNlU2Vy
dmVyMS5lcXVhbHMoaWNlU2VydmVyNykpOwotICAgIGFzc2VydEZhbHNlKGljZVNlcnZlcjEuZXF1
YWxzKGljZVNlcnZlcjgpKTsKLSAgICBhc3NlcnRGYWxzZShpY2VTZXJ2ZXIxLmVxdWFscyhpY2VT
ZXJ2ZXI5KSk7Ci0gIH0KLQotICAvLyBUT0RPKGZpc2NobWFuKSBNT0FSIHRlc3QgaWRlYXM6Ci0g
IC8vIC0gVGVzdCB0aGF0IFBDLnJlbW92ZVN0cmVhbSgpIHdvcmtzOyByZXF1aXJlcyBhIHNlY29u
ZAotICAvLyAgIGNyZWF0ZU9mZmVyL2NyZWF0ZUFuc3dlciBkYW5jZS4KLSAgLy8gLSBhdWRpdCBl
YWNoIHBsYWNlIHRoYXQgdXNlcyB8Y29uc3RyYWludHN8IGZvciBzcGVjaWZ5aW5nIG5vbi10cml2
aWFsCi0gIC8vICAgY29uc3RyYWludHMgKGFuZCBlbnN1cmUgdGhleSdyZSBob25vcmVkKS4KLSAg
Ly8gLSB0ZXN0IGVycm9yIGNhc2VzCi0gIC8vIC0gZW5zdXJlIHJlYXNvbmFibGUgY292ZXJhZ2Ug
b2Ygam5pIGNvZGUgaXMgYWNoaWV2ZWQuICBDb3ZlcmFnZSBpcwotICAvLyAgIGV4dHJhLWltcG9y
dGFudCBiZWNhdXNlIG9mIGFsbCB0aGUgZnJlZS10ZXh0IChjbGFzcy9tZXRob2QgbmFtZXMsIGV0
YykKLSAgLy8gICBpbiBKTkktc3R5bGUgcHJvZ3JhbW1pbmc7IG1ha2Ugc3VyZSBubyB0eXBvcyEK
LSAgLy8gLSBUZXN0IHRoYXQgc2h1dGRvd24gbWlkLWludGVyYWN0aW9uIGlzIGNyYXNoLWZyZWUu
Ci0KLSAgLy8gVGVzdHMgdGhhdCB0aGUgSk5JIGdsdWUgYmV0d2VlbiBKYXZhIGFuZCBDKysgZG9l
cyBub3QgY3Jhc2ggd2hlbiBjcmVhdGluZyBhIFBlZXJDb25uZWN0aW9uLgotICBAVGVzdAotICBA
U21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbldpdGhDb25maWcoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5idWlsZGVyKCkuY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KCk7Ci0g
ICAgTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMgPSBBcnJheXMuYXNM
aXN0KAotICAgICAgICBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigic3R1bjpzdHVu
LmwuZ29vZ2xlLmNvbToxOTMwMiIpLmNyZWF0ZUljZVNlcnZlcigpLAotICAgICAgICBQZWVyQ29u
bmVjdGlvbi5JY2VTZXJ2ZXIuYnVpbGRlcigidHVybjpmYWtlLmV4YW1wbGUuY29tIikKLSAgICAg
ICAgICAgIC5zZXRVc2VybmFtZSgiZmFrZVVzZXJuYW1lIikKLSAgICAgICAgICAgIC5zZXRQYXNz
d29yZCgiZmFrZVBhc3N3b3JkIikKLSAgICAgICAgICAgIC5jcmVhdGVJY2VTZXJ2ZXIoKSk7Ci0g
ICAgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgUGVlckNvbm5l
Y3Rpb24uUlRDQ29uZmlndXJhdGlvbihpY2VTZXJ2ZXJzKTsKLQotICAgIC8vIFRlc3QgY29uZmln
dXJhdGlvbiBvcHRpb25zLgotICAgIGNvbmZpZy5jb250aW51YWxHYXRoZXJpbmdQb2xpY3kgPSBQ
ZWVyQ29ubmVjdGlvbi5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kuR0FUSEVSX0NPTlRJTlVBTExZ
OwotCi0gICAgUGVlckNvbm5lY3Rpb24gb2ZmZXJpbmdQQyA9Ci0gICAgICAgIGZhY3RvcnkuY3Jl
YXRlUGVlckNvbm5lY3Rpb24oY29uZmlnLCBtb2NrKFBlZXJDb25uZWN0aW9uLk9ic2VydmVyLmNs
YXNzKSk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvZmZlcmluZ1BDKTsKLSAgfQotCi0gIEBUZXN0Ci0g
IEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0aW9uV2l0aENlcnRpZmljYXRlKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuYnVpbGRlcigpLmNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9y
eSgpOwotICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IFBl
ZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24oQXJyYXlzLmFzTGlzdCgpKTsKLQotICAgIC8v
IFRlc3QgY2VydGlmaWNhdGUuCi0gICAgUnRjQ2VydGlmaWNhdGVQZW0gb3JpZ2luYWxDZXJ0ID0g
UnRjQ2VydGlmaWNhdGVQZW0uZ2VuZXJhdGVDZXJ0aWZpY2F0ZSgpOwotICAgIGNvbmZpZy5jZXJ0
aWZpY2F0ZSA9IG9yaWdpbmFsQ2VydDsKLQotICAgIFBlZXJDb25uZWN0aW9uIG9mZmVyaW5nUEMg
PQotICAgICAgICBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZywgbW9jayhQZWVy
Q29ubmVjdGlvbi5PYnNlcnZlci5jbGFzcykpOwotCi0gICAgUnRjQ2VydGlmaWNhdGVQZW0gcmVz
dG9yZWRDZXJ0ID0gb2ZmZXJpbmdQQy5nZXRDZXJ0aWZpY2F0ZSgpOwotICAgIGFzc2VydEVxdWFs
cyhvcmlnaW5hbENlcnQucHJpdmF0ZUtleSwgcmVzdG9yZWRDZXJ0LnByaXZhdGVLZXkpOwotICAg
IGFzc2VydEVxdWFscyhvcmlnaW5hbENlcnQuY2VydGlmaWNhdGUsIHJlc3RvcmVkQ2VydC5jZXJ0
aWZpY2F0ZSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RDcmVhdGlvbldpdGhDcnlwdG9PcHRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuYnVpbGRl
cigpLmNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOwotICAgIFBlZXJDb25uZWN0aW9uLlJU
Q0NvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRp
b24oQXJyYXlzLmFzTGlzdCgpKTsKLQotICAgIGFzc2VydE51bGwoY29uZmlnLmNyeXB0b09wdGlv
bnMpOwotCi0gICAgQ3J5cHRvT3B0aW9ucyBjcnlwdG9PcHRpb25zID0gQ3J5cHRvT3B0aW9ucy5i
dWlsZGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEVuYWJs
ZUdjbUNyeXB0b1N1aXRlcyh0cnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0RW5hYmxlQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhlcih0cnVlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVy
RXh0ZW5zaW9ucyh0cnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
c2V0UmVxdWlyZUZyYW1lRW5jcnlwdGlvbih0cnVlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuY3JlYXRlQ3J5cHRvT3B0aW9ucygpOwotICAgIGNvbmZpZy5jcnlwdG9P
cHRpb25zID0gY3J5cHRvT3B0aW9uczsKLQotICAgIFBlZXJDb25uZWN0aW9uIG9mZmVyaW5nUEMg
PQotICAgICAgICBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZywgbW9jayhQZWVy
Q29ubmVjdGlvbi5PYnNlcnZlci5jbGFzcykpOwotICAgIGFzc2VydE5vdE51bGwob2ZmZXJpbmdQ
Qyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRj
L1JlbmRlcmVyQ29tbW9uVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJy
dGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRhYTFkZDRhNjFlNzgyODM4ZGVlNmIzZTcwZjBmYWFkOWMwMDBjZWIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29y
Zy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHM7Ci1pbXBvcnQgc3Rh
dGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcud2Vi
cnRjLlJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRDsKLWlt
cG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZS5TQ0FMRV9B
U1BFQ1RfRklMTDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5TY2Fs
aW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklUOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJlbmRl
cmVyQ29tbW9uLmdldERpc3BsYXlTaXplOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJlbmRl
cmVyQ29tbW9uLmdldExheW91dE1hdHJpeDsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9p
bnQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBv
cnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5CYXNlSlVuaXQ0Q2xhc3NSdW5uZXI7Ci1pbXBvcnQg
b3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1AUnVu
V2l0aChCYXNlSlVuaXQ0Q2xhc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgUmVuZGVyZXJD
b21tb25UZXN0IHsKLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGlz
cGxheVNpemVOb0ZyYW1lKCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMCwgMCksIGdl
dERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDAuMGYsIDAsIDApKTsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwg
MC4wZiwgMCwgMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMCwgMCksIGdldERpc3Bs
YXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMC4wZiwgMCwgMCkpOwotICB9Ci0KLSAgQFRl
c3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGlzcGxheVNpemVEZWdlbmVyYXRl
QXNwZWN0UmF0aW8oKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBn
ZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAwLjBmLCAxMjgwLCA3MjApKTsKLSAgICBh
c3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FT
UEVDVF9GSUxMLCAwLjBmLCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50
KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMC4wZiwg
MTI4MCwgNzIwKSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RaZXJvRGlzcGxheVNpemUoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAw
KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMTYuMGYgLyA5LCAwLCAwKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQ
RUNUX0ZJTEwsIDE2LjBmIC8gOSwgMCwgMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQo
MCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMTYuMGYgLyA5LCAw
LCAwKSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RE
aXNwbGF5U2l6ZVBlcmZlY3RGaXQoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgw
LCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAxNi4wZiAvIDksIDEyODAs
IDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxh
eVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDE2LjBmIC8gOSwgMTI4MCwgNzIwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BF
Q1RfQkFMQU5DRUQsIDE2LjBmIC8gOSwgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5l
dyBQb2ludCg3MjAsIDEyODApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCA5LjBm
IC8gMTYsIDcyMCwgMTI4MCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCAxMjgw
KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDkuMGYgLyAxNiwgNzIwLCAxMjgw
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEyODApLCBnZXREaXNwbGF5U2l6
ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDkuMGYgLyAxNiwgNzIwLCAxMjgwKSk7Ci0gIH0KLQot
ICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMYW5kc2NhcGVWaWRlb0lu
UG9ydHJhaXREaXNwbGF5KCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCA0MDUp
LCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAxNi4wZiAvIDksIDcyMCwgMTI4MCkp
OwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNpemUo
U0NBTEVfQVNQRUNUX0ZJTEwsIDE2LjBmIC8gOSwgNzIwLCAxMjgwKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKG5ldyBQb2ludCg3MjAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxB
TkNFRCwgMTYuMGYgLyA5LCA3MjAsIDEyODApKTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFBvcnRyYWl0VmlkZW9JbkxhbmRzY2FwZURpc3BsYXkoKSB7
Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg0MDUsIDcyMCksIGdldERpc3BsYXlTaXplKFND
QUxFX0FTUEVDVF9GSVQsIDkuMGYgLyAxNiwgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwg
OS4wZiAvIDE2LCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwg
NzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCA5LjBmIC8gMTYsIDEy
ODAsIDcyMCkpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0Rm91clRvVGhyZWVWaWRlb0luU2l4dGVlblRvTmluZURpc3BsYXkoKSB7Ci0gICAgYXNzZXJ0
RXF1YWxzKG5ldyBQb2ludCg5NjAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9G
SVQsIDQuMGYgLyAzLCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDEy
ODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCA0LjBmIC8gMywgMTI4
MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNw
bGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDQuMGYgLyAzLCAxMjgwLCA3MjApKTsKLSAg
fQotCi0gIC8vIE9ubHkga2VlcCAyIHJvdW5kZWQgZGVjaW1hbHMgdG8gbWFrZSBmbG9hdCBjb21w
YXJpc29uIHJvYnVzdC4KLSAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gcm91bmQoZmxvYXRbXSBh
cnJheSkgewotICAgIGFzc2VydEVxdWFscygxNiwgYXJyYXkubGVuZ3RoKTsKLSAgICBmaW5hbCBk
b3VibGVbXSBkb3VibGVBcnJheSA9IG5ldyBkb3VibGVbMTZdOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTY7ICsraSkgewotICAgICAgZG91YmxlQXJyYXlbaV0gPSBNYXRoLnJvdW5kKDEwMCAq
IGFycmF5W2ldKSAvIDEwMC4wOwotICAgIH0KLSAgICByZXR1cm4gZG91YmxlQXJyYXk7Ci0gIH0K
LQotICAvLyBCcmllZiBzdW1tYXJ5IGFib3V0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnM6Ci0gIC8v
IEEgY29vcmRpbmF0ZSBwID0gW3UsIHYsIDAsIDFdIGlzIHRyYW5zZm9ybWVkIGJ5IG1hdHJpeCBt
IGxpa2UgdGhpcyBwJyA9IFt1JywgdicsIDAsIDFdID0gbSAqIHAuCi0gIC8vIE9wZW5HTCB1c2Vz
IGNvbHVtbi1tYWpvciBvcmRlciwgc286Ci0gIC8vIHUnID0gdSAqIG1bMF0gKyB2ICogbVs0XSAr
IG1bMTJdLgotICAvLyB2JyA9IHUgKiBtWzFdICsgdiAqIG1bNV0gKyBtWzEzXS4KLQotICBAVGVz
dAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMYXlvdXRNYXRyaXhEZWZhdWx0KCkg
ewotICAgIGZpbmFsIGZsb2F0IGxheW91dE1hdHJpeFtdID0gZ2V0TGF5b3V0TWF0cml4KGZhbHNl
LCAxLjBmLCAxLjBmKTsKLSAgICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSB1LgotICAgIC8vIHYn
ID0gdi4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3
IGRvdWJsZVtdIHsKLSAgICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgMCwgMSwgMCwgMCwKLSAg
ICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgMCwgMCwgMCwgMX0sIHJvdW5kKGxheW91dE1hdHJp
eCksIDAuMCk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAVGVzdAotICBAU21h
bGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMYXlvdXRNYXRyaXhNaXJyb3IoKSB7Ci0gICAgZmlu
YWwgZmxvYXQgbGF5b3V0TWF0cml4W10gPSBnZXRMYXlvdXRNYXRyaXgodHJ1ZSwgMS4wZiwgMS4w
Zik7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUnID0gMSAtIHUuCi0gICAgLy8gdicgPSB2Lgot
ICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgZG91Ymxl
W10gewotICAgICAgICAtMSwgMCwgMCwgMCwKLSAgICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAg
ICAwLCAwLCAxLCAwLAotICAgICAgICAgMSwgMCwgMCwgMX0sIHJvdW5kKGxheW91dE1hdHJpeCks
IDAuMCk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAVGVzdAotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMYXlvdXRNYXRyaXhTY2FsZSgpIHsKLSAgICAvLyBWaWRl
byBoYXMgYXNwZWN0IHJhdGlvIDIsIGJ1dCBsYXlvdXQgaXMgc3F1YXJlLiBUaGlzIHdpbGwgY2F1
c2Ugb25seSB0aGUgY2VudGVyIHBhcnQgb2YgdGhlCi0gICAgLy8gdmlkZW8gdG8gYmUgdmlzaWJs
ZSwgaS5lLiB0aGUgdSBjb29yZGluYXRlIHdpbGwgZ28gZnJvbSAwLjI1IHRvIDAuNzUgaW5zdGVh
ZCBvZiBmcm9tIDAgdG8gMS4KLSAgICBmaW5hbCBmbG9hdCBsYXlvdXRNYXRyaXhbXSA9IGdldExh
eW91dE1hdHJpeChmYWxzZSwgMi4wZiwgMS4wZik7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUn
ID0gMC4yNSArIDAuNSB1LgotICAgIC8vIHYnID0gdi4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2Zm
Ci0gICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgIDAuNSwgMCwg
MCwgMCwKLSAgICAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAg
ICAgICAgMC4yNSwgMCwgMCwgMX0sIHJvdW5kKGxheW91dE1hdHJpeCksIDAuMCk7Ci0gICAgLy8g
Y2xhbmctZm9ybWF0IG9uCi0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3Ny
Yy9vcmcvd2VicnRjL1J0Y0NlcnRpZmljYXRlUGVtVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVz
dHMvc3JjL29yZy93ZWJydGMvUnRjQ2VydGlmaWNhdGVQZW1UZXN0LmphdmEKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwZjI5NWM5NDJmNTdmZjRmOGJkM2JhZGM2N2MxMjg3ZDkxMzBk
YjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVu
dGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUnRjQ2VydGlmaWNhdGVQZW1UZXN0LmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguVHJ1
dGguYXNzZXJ0VGhhdDsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMuU21h
bGxUZXN0OwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QuQmFzZUpVbml0NENsYXNzUnVu
bmVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1p
bXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNv
bm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SdGNDZXJ0aWZpY2F0ZVBlbTsKLQotLyoqIFRl
c3RzIGZvciBSdGNDZXJ0aWZpY2F0ZVBlbS5qYXZhLiAqLwotQFJ1bldpdGgoQmFzZUpVbml0NENs
YXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIFJ0Y0NlcnRpZmljYXRlUGVtVGVzdCB7Ci0g
IEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgU3lzdGVtLmxvYWRMaWJyYXJ5
KFRlc3RDb25zdGFudHMuTkFUSVZFX0xJQlJBUlkpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxs
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3IoKSB7Ci0gICAgUnRjQ2VydGlmaWNh
dGVQZW0gb3JpZ2luYWwgPSBSdGNDZXJ0aWZpY2F0ZVBlbS5nZW5lcmF0ZUNlcnRpZmljYXRlKCk7
Ci0gICAgUnRjQ2VydGlmaWNhdGVQZW0gcmVjcmVhdGVkID0gbmV3IFJ0Y0NlcnRpZmljYXRlUGVt
KG9yaWdpbmFsLnByaXZhdGVLZXksIG9yaWdpbmFsLmNlcnRpZmljYXRlKTsKLSAgICBhc3NlcnRU
aGF0KG9yaWdpbmFsLnByaXZhdGVLZXkpLmlzRXF1YWxUbyhyZWNyZWF0ZWQucHJpdmF0ZUtleSk7
Ci0gICAgYXNzZXJ0VGhhdChvcmlnaW5hbC5jZXJ0aWZpY2F0ZSkuaXNFcXVhbFRvKHJlY3JlYXRl
ZC5jZXJ0aWZpY2F0ZSk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RHZW5lcmF0ZUNlcnRpZmljYXRlRGVmYXVsdHMoKSB7Ci0gICAgUnRjQ2VydGlmaWNh
dGVQZW0gcnRjQ2VydGlmaWNhdGUgPSBSdGNDZXJ0aWZpY2F0ZVBlbS5nZW5lcmF0ZUNlcnRpZmlj
YXRlKCk7Ci0gICAgYXNzZXJ0VGhhdChydGNDZXJ0aWZpY2F0ZS5wcml2YXRlS2V5KS5pc05vdEVt
cHR5KCk7Ci0gICAgYXNzZXJ0VGhhdChydGNDZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZSkuaXNOb3RF
bXB0eSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
R2VuZXJhdGVDZXJ0aWZpY2F0ZUN1c3RvbUtleVR5cGVEZWZhdWx0RXhwaXJlcygpIHsKLSAgICBS
dGNDZXJ0aWZpY2F0ZVBlbSBydGNDZXJ0aWZpY2F0ZSA9Ci0gICAgICAgIFJ0Y0NlcnRpZmljYXRl
UGVtLmdlbmVyYXRlQ2VydGlmaWNhdGUoUGVlckNvbm5lY3Rpb24uS2V5VHlwZS5SU0EpOwotICAg
IGFzc2VydFRoYXQocnRjQ2VydGlmaWNhdGUucHJpdmF0ZUtleSkuaXNOb3RFbXB0eSgpOwotICAg
IGFzc2VydFRoYXQocnRjQ2VydGlmaWNhdGUuY2VydGlmaWNhdGUpLmlzTm90RW1wdHkoKTsKLSAg
fQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlQ2Vy
dGlmaWNhdGVDdXN0b21FeHBpcmVzRGVmYXVsdEtleVR5cGUoKSB7Ci0gICAgUnRjQ2VydGlmaWNh
dGVQZW0gcnRjQ2VydGlmaWNhdGUgPSBSdGNDZXJ0aWZpY2F0ZVBlbS5nZW5lcmF0ZUNlcnRpZmlj
YXRlKDYwICogNjAgKiAyNCk7Ci0gICAgYXNzZXJ0VGhhdChydGNDZXJ0aWZpY2F0ZS5wcml2YXRl
S2V5KS5pc05vdEVtcHR5KCk7Ci0gICAgYXNzZXJ0VGhhdChydGNDZXJ0aWZpY2F0ZS5jZXJ0aWZp
Y2F0ZSkuaXNOb3RFbXB0eSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0R2VuZXJhdGVDZXJ0aWZpY2F0ZUN1c3RvbUtleVR5cGVBbmRFeHBpcmVzKCkg
ewotICAgIFJ0Y0NlcnRpZmljYXRlUGVtIHJ0Y0NlcnRpZmljYXRlID0KLSAgICAgICAgUnRjQ2Vy
dGlmaWNhdGVQZW0uZ2VuZXJhdGVDZXJ0aWZpY2F0ZShQZWVyQ29ubmVjdGlvbi5LZXlUeXBlLlJT
QSwgNjAgKiA2MCAqIDI0KTsKLSAgICBhc3NlcnRUaGF0KHJ0Y0NlcnRpZmljYXRlLnByaXZhdGVL
ZXkpLmlzTm90RW1wdHkoKTsKLSAgICBhc3NlcnRUaGF0KHJ0Y0NlcnRpZmljYXRlLmNlcnRpZmlj
YXRlKS5pc05vdEVtcHR5KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3Rz
L3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlclRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3Ny
Yy9vcmcvd2VicnRjL1J0cFNlbmRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWY5YzYyYmRhOTdhNDZjMzlhODk1NGVmNTAwYjMxNGQyNWEwOWFlZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9SdHBTZW5kZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDIwIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9y
Zy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFz
c2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRy
dWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKLQotaW1wb3J0IGFu
ZHJvaWQuc3VwcG9ydC50ZXN0Lkluc3RydW1lbnRhdGlvblJlZ2lzdHJ5OwotaW1wb3J0IGFuZHJv
aWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMuU21hbGxUZXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5CYXNlSlVuaXQ0Q2xhc3NSdW5uZXI7
Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9y
dCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SdHBQYXJhbWV0
ZXJzLkRlZ3JhZGF0aW9uUHJlZmVyZW5jZTsKLQotLyoqIFVuaXQtdGVzdHMgZm9yIHtAbGluayBS
dHBTZW5kZXJ9LiAqLwotQFJ1bldpdGgoQmFzZUpVbml0NENsYXNzUnVubmVyLmNsYXNzKQotcHVi
bGljIGNsYXNzIFJ0cFNlbmRlclRlc3QgewotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uRmFjdG9y
eSBmYWN0b3J5OwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uIHBjOwotCi0gIEBCZWZvcmUKLSAg
cHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxp
emUoUGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0aW9uT3B0aW9ucwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRlcihJbnN0cnVtZW50YXRpb25S
ZWdpc3RyeS5nZXRUYXJnZXRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5zZXROYXRpdmVMaWJyYXJ5TmFtZShUZXN0Q29uc3RhbnRzLk5BVElWRV9M
SUJSQVJZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRl
SW5pdGlhbGl6YXRpb25PcHRpb25zKCkpOwotCi0gICAgZmFjdG9yeSA9IFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5idWlsZGVyKCkuY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KCk7Ci0KLSAgICBQ
ZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBQZWVyQ29ubmVjdGlv
bi5SVENDb25maWd1cmF0aW9uKEFycmF5cy5hc0xpc3QoKSk7Ci0gICAgLy8gUnRwVHJhbmNlaXZl
ciBpcyBwYXJ0IG9mIG5ldyB1bmlmaWVkIHBsYW4gc2VtYW50aWNzLgotICAgIGNvbmZpZy5zZHBT
ZW1hbnRpY3MgPSBQZWVyQ29ubmVjdGlvbi5TZHBTZW1hbnRpY3MuVU5JRklFRF9QTEFOOwotICAg
IHBjID0gZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWcsIG1vY2soUGVlckNvbm5l
Y3Rpb24uT2JzZXJ2ZXIuY2xhc3MpKTsKLSAgfQotCi0gIC8qKiBUZXN0IGNoZWNraW5nIHRoZSBl
bnVtIHZhbHVlcyBmb3IgRGVncmFkYXRpb25QcmVmZXJlbmNlIHN0YXkgY29uc2lzdGVudCAqLwot
ICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTZXREZWdyYWRhdGlvblBy
ZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSdHBUcmFuc2NlaXZlciB0cmFuc2Nl
aXZlciA9IHBjLmFkZFRyYW5zY2VpdmVyKE1lZGlhU3RyZWFtVHJhY2suTWVkaWFUeXBlLk1FRElB
X1RZUEVfVklERU8pOwotICAgIFJ0cFNlbmRlciBzZW5kZXIgPSB0cmFuc2NlaXZlci5nZXRTZW5k
ZXIoKTsKLQotICAgIFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHNlbmRlci5nZXRQYXJhbWV0
ZXJzKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChwYXJhbWV0ZXJzKTsKLSAgICBhc3NlcnROdWxsKHBh
cmFtZXRlcnMuZGVncmFkYXRpb25QcmVmZXJlbmNlKTsKLQotICAgIHBhcmFtZXRlcnMuZGVncmFk
YXRpb25QcmVmZXJlbmNlID0gRGVncmFkYXRpb25QcmVmZXJlbmNlLk1BSU5UQUlOX0ZSQU1FUkFU
RTsKLSAgICBhc3NlcnRUcnVlKHNlbmRlci5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpKTsKLSAg
ICBwYXJhbWV0ZXJzID0gc2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAgICBhc3NlcnRFcXVhbHMo
RGVncmFkYXRpb25QcmVmZXJlbmNlLk1BSU5UQUlOX0ZSQU1FUkFURSwgcGFyYW1ldGVycy5kZWdy
YWRhdGlvblByZWZlcmVuY2UpOwotCi0gICAgcGFyYW1ldGVycy5kZWdyYWRhdGlvblByZWZlcmVu
Y2UgPSBEZWdyYWRhdGlvblByZWZlcmVuY2UuTUFJTlRBSU5fUkVTT0xVVElPTjsKLSAgICBhc3Nl
cnRUcnVlKHNlbmRlci5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpKTsKLSAgICBwYXJhbWV0ZXJz
ID0gc2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAgICBhc3NlcnRFcXVhbHMoRGVncmFkYXRpb25Q
cmVmZXJlbmNlLk1BSU5UQUlOX1JFU09MVVRJT04sIHBhcmFtZXRlcnMuZGVncmFkYXRpb25QcmVm
ZXJlbmNlKTsKLQotICAgIHBhcmFtZXRlcnMuZGVncmFkYXRpb25QcmVmZXJlbmNlID0gRGVncmFk
YXRpb25QcmVmZXJlbmNlLkJBTEFOQ0VEOwotICAgIGFzc2VydFRydWUoc2VuZGVyLnNldFBhcmFt
ZXRlcnMocGFyYW1ldGVycykpOwotICAgIHBhcmFtZXRlcnMgPSBzZW5kZXIuZ2V0UGFyYW1ldGVy
cygpOwotICAgIGFzc2VydEVxdWFscyhEZWdyYWRhdGlvblByZWZlcmVuY2UuQkFMQU5DRUQsIHBh
cmFtZXRlcnMuZGVncmFkYXRpb25QcmVmZXJlbmNlKTsKLQotICAgIHBhcmFtZXRlcnMuZGVncmFk
YXRpb25QcmVmZXJlbmNlID0gRGVncmFkYXRpb25QcmVmZXJlbmNlLkRJU0FCTEVEOwotICAgIGFz
c2VydFRydWUoc2VuZGVyLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycykpOwotICAgIHBhcmFtZXRl
cnMgPSBzZW5kZXIuZ2V0UGFyYW1ldGVycygpOwotICAgIGFzc2VydEVxdWFscyhEZWdyYWRhdGlv
blByZWZlcmVuY2UuRElTQUJMRUQsIHBhcmFtZXRlcnMuZGVncmFkYXRpb25QcmVmZXJlbmNlKTsK
LSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvUnRw
VHJhbnNjZWl2ZXJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9S
dHBUcmFuc2NlaXZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQx
M2QxMWIyMmVlZTJkYWI2NGQxOTcyZDczZWZlMDU4OTgzMTU4Yy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9SdHBUcmFuc2NlaXZlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0
YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLm1v
Y2tpdG8uTW9ja2l0by5tb2NrOwotCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuSW5zdHJ1
bWVudGF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5T
bWFsbFRlc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwu
TGlzdDsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LkJhc2VKVW5pdDRDbGFzc1J1bm5l
cjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1w
b3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcud2VicnRjLlJ0cFBhcmFt
ZXRlcnMuRW5jb2Rpbmc7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SdHBUcmFuc2NlaXZlci5SdHBUcmFu
c2NlaXZlckluaXQ7Ci0KLS8qKiBVbml0LXRlc3RzIGZvciB7QGxpbmsgUnRwVHJhbnNjZWl2ZXJ9
LiAqLwotQFJ1bldpdGgoQmFzZUpVbml0NENsYXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNz
IFJ0cFRyYW5zY2VpdmVyVGVzdCB7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZh
Y3Rvcnk7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb24gcGM7Ci0KLSAgQEJlZm9yZQotICBwdWJs
aWMgdm9pZCBzZXRVcCgpIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZShQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuSW5pdGlhbGl6YXRpb25PcHRpb25zCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZGVyKEluc3RydW1lbnRhdGlvblJlZ2lz
dHJ5LmdldFRhcmdldENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLnNldE5hdGl2ZUxpYnJhcnlOYW1lKFRlc3RDb25zdGFudHMuTkFUSVZFX0xJQlJB
UlkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJbml0
aWFsaXphdGlvbk9wdGlvbnMoKSk7Ci0KLSAgICBmYWN0b3J5ID0gUGVlckNvbm5lY3Rpb25GYWN0
b3J5LmJ1aWxkZXIoKS5jcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTsKLQotICAgIFBlZXJD
b25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IFBlZXJDb25uZWN0aW9uLlJU
Q0NvbmZpZ3VyYXRpb24oQXJyYXlzLmFzTGlzdCgpKTsKLSAgICAvLyBSdHBUcmFuY2VpdmVyIGlz
IHBhcnQgb2YgbmV3IHVuaWZpZWQgcGxhbiBzZW1hbnRpY3MuCi0gICAgY29uZmlnLnNkcFNlbWFu
dGljcyA9IFBlZXJDb25uZWN0aW9uLlNkcFNlbWFudGljcy5VTklGSUVEX1BMQU47Ci0gICAgcGMg
PSBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZywgbW9jayhQZWVyQ29ubmVjdGlv
bi5PYnNlcnZlci5jbGFzcykpOwotICB9Ci0KLSAgLyoqIFRlc3QgdGhhdCBSSURzIGdldCBzZXQg
aW4gdGhlIFJUUCBzZW5kZXIgd2hlbiBwYXNzZWQgaW4gdGhyb3VnaCBhbiBSdHBUcmFuc2NlaXZl
ckluaXQuICovCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNldFJp
ZEluU2ltdWxjYXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTGlzdDxFbmNvZGluZz4gZW5j
b2RpbmdzID0gbmV3IEFycmF5TGlzdDxFbmNvZGluZz4oKTsKLSAgICBlbmNvZGluZ3MuYWRkKG5l
dyBFbmNvZGluZygiRiIsIHRydWUsIG51bGwpKTsKLSAgICBlbmNvZGluZ3MuYWRkKG5ldyBFbmNv
ZGluZygiSCIsIHRydWUsIG51bGwpKTsKLQotICAgIFJ0cFRyYW5zY2VpdmVySW5pdCBpbml0ID0g
bmV3IFJ0cFRyYW5zY2VpdmVySW5pdCgKLSAgICAgICAgUnRwVHJhbnNjZWl2ZXIuUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb24uU0VORF9PTkxZLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgZW5jb2Rp
bmdzKTsKLSAgICBSdHBUcmFuc2NlaXZlciB0cmFuc2NlaXZlciA9Ci0gICAgICAgIHBjLmFkZFRy
YW5zY2VpdmVyKE1lZGlhU3RyZWFtVHJhY2suTWVkaWFUeXBlLk1FRElBX1RZUEVfVklERU8sIGlu
aXQpOwotCi0gICAgUnRwU2VuZGVyIHNlbmRlciA9IHRyYW5zY2VpdmVyLmdldFNlbmRlcigpOwot
ICAgIFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHNlbmRlci5nZXRQYXJhbWV0ZXJzKCk7Ci0g
ICAgTGlzdDxFbmNvZGluZz4gc2VuZEVuY29kaW5ncyA9IHBhcmFtZXRlcnMuZ2V0RW5jb2Rpbmdz
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIHNlbmRFbmNvZGluZ3Muc2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoIkYiLCBzZW5kRW5jb2RpbmdzLmdldCgwKS5nZXRSaWQoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCJIIiwgc2VuZEVuY29kaW5ncy5nZXQoMSkuZ2V0UmlkKCkpOwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhl
bHBlclRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VU
ZXh0dXJlSGVscGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDA0
OGUxMTZkMjUxYWRhZDgxZTBlNGVhNTVjMTU0ZTAwNjZjYmRjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2Vi
cnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIx
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMg
b3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNz
ZXJ0LmZhaWw7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9p
ZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxs
YWJsZTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0ZXJzLk1lZGl1bVRlc3Q7Ci1p
bXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2
YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25M
YXRjaDsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LkJhc2VKVW5pdDRDbGFzc1J1bm5l
cjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1w
b3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotQFJ1bldpdGgoQmFzZUpVbml0NENsYXNz
UnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdCB7Ci0g
IC8qKgotICAgKiBNb2NrIHRleHR1cmUgbGlzdGVuZXIgd2l0aCBibG9ja2luZyB3YWl0IGZ1bmN0
aW9uYWxpdHkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIE1vY2tUZXh0dXJl
TGlzdGVuZXIgaW1wbGVtZW50cyBWaWRlb1NpbmsgewotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0
IGxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBATnVsbGFibGUgVmlkZW9GcmFtZS5U
ZXh0dXJlQnVmZmVyIHRleHR1cmVCdWZmZXI7Ci0gICAgLy8gVGhyZWFkIHdoZXJlIGZyYW1lcyBh
cmUgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgb24uCi0gICAgcHJpdmF0ZSBmaW5hbCBATnVsbGFi
bGUgVGhyZWFkIGV4cGVjdGVkVGhyZWFkOwotCi0gICAgTW9ja1RleHR1cmVMaXN0ZW5lcigpIHsK
LSAgICAgIHRoaXMuZXhwZWN0ZWRUaHJlYWQgPSBudWxsOwotICAgIH0KLQotICAgIE1vY2tUZXh0
dXJlTGlzdGVuZXIoVGhyZWFkIGV4cGVjdGVkVGhyZWFkKSB7Ci0gICAgICB0aGlzLmV4cGVjdGVk
VGhyZWFkID0gZXhwZWN0ZWRUaHJlYWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25GcmFtZShWaWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAgICBpZiAoZXhwZWN0ZWRU
aHJlYWQgIT0gbnVsbCAmJiBUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGV4cGVjdGVkVGhyZWFk
KSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm9uVGV4dHVyZUZy
YW1lQXZhaWxhYmxlIGNhbGxlZCBvbiB3cm9uZyB0aHJlYWQuIik7Ci0gICAgICB9Ci0gICAgICBz
eW5jaHJvbml6ZWQgKGxvY2spIHsKLSAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gKFZpZGVv
RnJhbWUuVGV4dHVyZUJ1ZmZlcikgZnJhbWUuZ2V0QnVmZmVyKCk7Ci0gICAgICAgIHRleHR1cmVC
dWZmZXIucmV0YWluKCk7Ci0gICAgICAgIGxvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLyoqIFdhaXQgaW5kZWZpbml0ZWx5IGZvciBhIG5ldyB0ZXh0dXJlQnVmZmVyLiAq
LwotICAgIHB1YmxpYyBWaWRlb0ZyYW1lLlRleHR1cmVCdWZmZXIgd2FpdEZvclRleHR1cmVCdWZm
ZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgc3luY2hyb25pemVkIChs
b2NrKSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgZmluYWwgVmlkZW9GcmFt
ZS5UZXh0dXJlQnVmZmVyIHRleHR1cmVCdWZmZXJUb1JldHVybiA9IHRleHR1cmVCdWZmZXI7Ci0g
ICAgICAgICAgaWYgKHRleHR1cmVCdWZmZXJUb1JldHVybiAhPSBudWxsKSB7Ci0gICAgICAgICAg
ICB0ZXh0dXJlQnVmZmVyID0gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlQnVmZmVy
VG9SZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGxvY2sud2FpdCgpOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIE1ha2Ugc3VyZSB3ZSBnZXQgbm8gZnJhbWUgaW4g
dGhlIHNwZWNpZmllZCB0aW1lIHBlcmlvZC4gKi8KLSAgICBwdWJsaWMgdm9pZCBhc3NlcnROb0Zy
YW1lSXNEZWxpdmVyZWQoZmluYWwgbG9uZyB3YWl0UGVyaW9kTXMpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBsb25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2su
ZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICBsb25nIHRpbWVSZW1haW5pbmdNcyA9IHdhaXRQZXJp
b2RNczsKLSAgICAgIHN5bmNocm9uaXplZCAobG9jaykgewotICAgICAgICB3aGlsZSAodGV4dHVy
ZUJ1ZmZlciA9PSBudWxsICYmIHRpbWVSZW1haW5pbmdNcyA+IDApIHsKLSAgICAgICAgICBsb2Nr
LndhaXQodGltZVJlbWFpbmluZ01zKTsKLSAgICAgICAgICBmaW5hbCBsb25nIGVsYXBzZWRUaW1l
TXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIHN0YXJ0VGltZU1zOwotICAgICAg
ICAgIHRpbWVSZW1haW5pbmdNcyA9IHdhaXRQZXJpb2RNcyAtIGVsYXBzZWRUaW1lTXM7Ci0gICAg
ICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXh0dXJlQnVmZmVyID09IG51bGwpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIC8qKiBBc3NlcnQgdGhhdCB0d28gaW50ZWdlcnMgYXJlIGNsb3Nl
LCB3aXRoIGRpZmZlcmVuY2UgYXQgbW9zdAotICAgKiB7QGNvZGUgdGhyZXNob2xkfS4gKi8KLSAg
cHVibGljIHN0YXRpYyB2b2lkIGFzc2VydENsb3NlKGludCB0aHJlc2hvbGQsIGludCBleHBlY3Rl
ZCwgaW50IGFjdHVhbCkgewotICAgIGlmIChNYXRoLmFicyhleHBlY3RlZCAtIGFjdHVhbCkgPD0g
dGhyZXNob2xkKQotICAgICAgcmV0dXJuOwotICAgIGZhaWwoIk5vdCBjbG9zZSBlbm91Z2gsIHRo
cmVzaG9sZCAiICsgdGhyZXNob2xkICsgIi4gRXhwZWN0ZWQ6ICIgKyBleHBlY3RlZCArICIgQWN0
dWFsOiAiCi0gICAgICAgICsgYWN0dWFsKTsKLSAgfQotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZv
aWQgc2V0VXAoKSB7Ci0gICAgLy8gTG9hZCB0aGUgSk5JIGxpYnJhcnkgZm9yIHRleHR1cmVUb1l1
di4KLSAgICBOYXRpdmVMaWJyYXJ5LmluaXRpYWxpemUobmV3IE5hdGl2ZUxpYnJhcnkuRGVmYXVs
dExvYWRlcigpLCBUZXN0Q29uc3RhbnRzLk5BVElWRV9MSUJSQVJZKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBUZXN0IG5vcm1hbCB1c2UgYnkgcmVjZWl2aW5nIHRocmVlIHVuaWZvcm0gdGV4dHVyZSBm
cmFtZXMuIFRleHR1cmUgZnJhbWVzIGFyZSByZXR1cm5lZCBhcyBlYXJseQotICAgKiBhcyBwb3Nz
aWJsZS4gVGhlIHRleHR1cmUgcGl4ZWwgdmFsdWVzIGFyZSBpbnNwZWN0ZWQgYnkgZHJhd2luZyB0
aGUgdGV4dHVyZSBmcmFtZSB0byBhIHBpeGVsCi0gICAqIGJ1ZmZlciBhbmQgcmVhZGluZyBpdCBi
YWNrIHdpdGggZ2xSZWFkUGl4ZWxzKCkuCi0gICAqLwotICBAVGVzdAotICBATWVkaXVtVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0VGhyZWVDb25zdGFudENvbG9yRnJhbWVzKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSAxNjsKLSAgICBmaW5hbCBp
bnQgaGVpZ2h0ID0gMTY7Ci0gICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdpdGggYSBwaXhlbCBidWZm
ZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFz
ZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNl
LmNyZWF0ZVBidWZmZXJTdXJmYWNlKHdpZHRoLCBoZWlnaHQpOwotICAgIGZpbmFsIEdsUmVjdERy
YXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0KLSAgICAvLyBDcmVhdGUgU3VyZmFj
ZVRleHR1cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVs
cGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKAot
ICAgICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgZWds
QmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVy
IGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVy
ZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIuc2V0VGV4dHVyZVNpemUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3Vy
Y2VzIGZvciBzdHViYmluZyBhbiBPRVMgdGV4dHVyZSBwcm9kdWNlci4gfGVnbE9lc0Jhc2V8IGhh
cyB0aGUgU3VyZmFjZVRleHR1cmUgaW4KLSAgICAvLyB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8IGFz
IHRoZSB0YXJnZXQgRUdMU3VyZmFjZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbE9lc0Jhc2UgPSBF
Z2xCYXNlLmNyZWF0ZShlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIEVnbEJhc2UuQ09ORklH
X1BMQUlOKTsKLSAgICBlZ2xPZXNCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxw
ZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbE9lc0Jhc2Uuc3Vy
ZmFjZVdpZHRoKCksIHdpZHRoKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJmYWNl
SGVpZ2h0KCksIGhlaWdodCk7Ci0KLSAgICBmaW5hbCBpbnQgcmVkW10gPSBuZXcgaW50W10gezc5
LCAxNDQsIDE4NX07Ci0gICAgZmluYWwgaW50IGdyZWVuW10gPSBuZXcgaW50W10gezY2LCAyMTAs
IDE2Mn07Ci0gICAgZmluYWwgaW50IGJsdWVbXSA9IG5ldyBpbnRbXSB7MTYxLCAxMTcsIDE1OH07
Ci0gICAgLy8gRHJhdyB0aHJlZSBmcmFtZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKLSAgICAgIC8vIERyYXcgYSBjb25zdGFudCBjb2xvciBmcmFtZSBvbnRvIHRoZSBTdXJm
YWNlVGV4dHVyZS4KLSAgICAgIGVnbE9lc0Jhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgIEdMRVMy
MC5nbENsZWFyQ29sb3IocmVkW2ldIC8gMjU1LjBmLCBncmVlbltpXSAvIDI1NS4wZiwgYmx1ZVtp
XSAvIDI1NS4wZiwgMS4wZik7Ci0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7Ci0gICAgICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1hdGVseSB0cmln
Z2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgICBlZ2xPZXNCYXNlLnN3YXBCdWZm
ZXJzKCk7Ci0KLSAgICAgIC8vIFdhaXQgZm9yIGFuIE9FUyB0ZXh0dXJlIHRvIGFycml2ZSBhbmQg
ZHJhdyBpdCBvbnRvIHRoZSBwaXhlbCBidWZmZXIuCi0gICAgICBmaW5hbCBWaWRlb0ZyYW1lLlRl
eHR1cmVCdWZmZXIgdGV4dHVyZUJ1ZmZlciA9IGxpc3RlbmVyLndhaXRGb3JUZXh0dXJlQnVmZmVy
KCk7Ci0gICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICBkcmF3ZXIuZHJhd09lcyh0
ZXh0dXJlQnVmZmVyLmdldFRleHR1cmVJZCgpLAotICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLmNv
bnZlcnRNYXRyaXhGcm9tQW5kcm9pZEdyYXBoaWNzTWF0cml4KHRleHR1cmVCdWZmZXIuZ2V0VHJh
bnNmb3JtTWF0cml4KCkpLAotICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOwotICAgICAgdGV4dHVyZUJ1ZmZlci5yZWxlYXNlKCk7Ci0KLSAgICAgIC8vIERvd25s
b2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRm
b3JtcyBzdXBwb3J0IFJHQiwgZS5nLgotICAgICAgLy8gTmV4dXMgOS4KLSAgICAgIGZpbmFsIEJ5
dGVCdWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHdpZHRoICogaGVp
Z2h0ICogNCk7Ci0gICAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQs
IEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiYURhdGEpOwotICAg
ICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQaXhlbHMiKTsKLQotICAgICAgLy8g
QXNzZXJ0IHJlbmRlcmVkIGltYWdlIGlzIGV4cGVjdGVkIGNvbnN0YW50IGNvbG9yLgotICAgICAg
d2hpbGUgKHJnYmFEYXRhLmhhc1JlbWFpbmluZygpKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscyhy
Z2JhRGF0YS5nZXQoKSAmIDB4RkYsIHJlZFtpXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZ2Jh
RGF0YS5nZXQoKSAmIDB4RkYsIGdyZWVuW2ldKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFE
YXRhLmdldCgpICYgMHhGRiwgYmx1ZVtpXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0
YS5nZXQoKSAmIDB4RkYsIDI1NSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZHJhd2VyLnJlbGVh
c2UoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5y
ZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBkaXNwb3NpbmcgdGhlIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHdoaWxlIGhvbGRpbmcgYSBwZW5kaW5nIHRleHR1cmUgZnJhbWUuIFRoZSBw
ZW5kaW5nCi0gICAqIHRleHR1cmUgZnJhbWUgc2hvdWxkIHN0aWxsIGJlIHZhbGlkLCBhbmQgdGhp
cyBpcyB0ZXN0ZWQgYnkgZHJhd2luZyB0aGUgdGV4dHVyZSBmcmFtZSB0byBhIHBpeGVsCi0gICAq
IGJ1ZmZlciBhbmQgcmVhZGluZyBpdCBiYWNrIHdpdGggZ2xSZWFkUGl4ZWxzKCkuCi0gICAqLwot
ICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TGF0ZVJldHVybkZyYW1l
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSAx
NjsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gMTY7Ci0gICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdp
dGggYSBwaXhlbCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWdsQmFzZSBl
Z2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVS
KTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5h
bCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0
dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8q
IHRocmVhZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgZmluYWwg
TW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLnNldFRleHR1cmVTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgLy8gQ3JlYXRlIHJlc291cmNlcyBmb3Igc3R1YmJpbmcgYW4gT0VTIHRleHR1cmUgcHJvZHVj
ZXIuIHxlZ2xPZXNCYXNlfCBoYXMgdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAgLy8gfHN1cmZh
Y2VUZXh0dXJlSGVscGVyfCBhcyB0aGUgdGFyZ2V0IEVHTFN1cmZhY2UuCi0gICAgZmluYWwgRWds
QmFzZSBlZ2xPZXNCYXNlID0gRWdsQmFzZS5jcmVhdGUoZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4
dCgpLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWdsT2VzQmFzZS5jcmVhdGVTdXJmYWNl
KHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGFzc2VydEVx
dWFscyhlZ2xPZXNCYXNlLnN1cmZhY2VXaWR0aCgpLCB3aWR0aCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGVnbE9lc0Jhc2Uuc3VyZmFjZUhlaWdodCgpLCBoZWlnaHQpOwotCi0gICAgZmluYWwgaW50IHJl
ZCA9IDc5OwotICAgIGZpbmFsIGludCBncmVlbiA9IDY2OwotICAgIGZpbmFsIGludCBibHVlID0g
MTYxOwotICAgIC8vIERyYXcgYSBjb25zdGFudCBjb2xvciBmcmFtZSBvbnRvIHRoZSBTdXJmYWNl
VGV4dHVyZS4KLSAgICBlZ2xPZXNCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgR0xFUzIwLmdsQ2xl
YXJDb2xvcihyZWQgLyAyNTUuMGYsIGdyZWVuIC8gMjU1LjBmLCBibHVlIC8gMjU1LjBmLCAxLjBm
KTsKLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAg
Ly8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2
YWlsYWJsZSgpLgotICAgIGVnbE9lc0Jhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICBlZ2xPZXNCYXNl
LnJlbGVhc2UoKTsKLQotICAgIC8vIFdhaXQgZm9yIE9FUyB0ZXh0dXJlIGZyYW1lLgotICAgIGZp
bmFsIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZlciB0ZXh0dXJlQnVmZmVyID0gbGlzdGVuZXIud2Fp
dEZvclRleHR1cmVCdWZmZXIoKTsKLSAgICAvLyBEaWNvbm5lY3Qgd2hpbGUgaG9sZGluZyB0aGUg
ZnJhbWUuCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotCi0gICAgLy8gRHJh
dyB0aGUgcGVuZGluZyB0ZXh0dXJlIGZyYW1lIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBl
Z2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5l
dyBHbFJlY3REcmF3ZXIoKTsKLSAgICBkcmF3ZXIuZHJhd09lcyh0ZXh0dXJlQnVmZmVyLmdldFRl
eHR1cmVJZCgpLAotICAgICAgICBSZW5kZXJlckNvbW1vbi5jb252ZXJ0TWF0cml4RnJvbUFuZHJv
aWRHcmFwaGljc01hdHJpeCh0ZXh0dXJlQnVmZmVyLmdldFRyYW5zZm9ybU1hdHJpeCgpKSwKLSAg
ICAgICAgd2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZHJhd2VyLnJl
bGVhc2UoKTsKLQotICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZl
ciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwgZS5nLiBOZXh1cyA5Lgot
ICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0
KHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFE
YXRhKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotCi0gICAgLy8gQXNzZXJ0IHJlbmRlcmVkIGltYWdlIGlzIGV4
cGVjdGVkIGNvbnN0YW50IGNvbG9yLgotICAgIHdoaWxlIChyZ2JhRGF0YS5oYXNSZW1haW5pbmco
KSkgewotICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgcmVkKTsKLSAg
ICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIGdyZWVuKTsKLSAgICAgIGFz
c2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIGJsdWUpOwotICAgICAgYXNzZXJ0RXF1
YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgMjU1KTsKLSAgICB9Ci0gICAgLy8gTGF0ZSBmcmFt
ZSByZXR1cm4gYWZ0ZXIgZXZlcnl0aGluZyBoYXMgYmVlbiBkaXNwb3NlZCBhbmQgcmVsZWFzZWQu
Ci0gICAgdGV4dHVyZUJ1ZmZlci5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBk
aXNwb3NpbmcgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyLCBidXQga2VlcCB0cnlpbmcgdG8gcHJv
ZHVjZSBtb3JlIHRleHR1cmUgZnJhbWVzLiBObwotICAgKiBmcmFtZXMgc2hvdWxkIGJlIGRlbGl2
ZXJlZCB0byB0aGUgbGlzdGVuZXIuCi0gICAqLwotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0RGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5h
bCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1
cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyog
dGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0
ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGgg
dGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJh
c2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsK
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zZXRUZXh0dXJlU2l6ZSgvKiB0ZXh0dXJlV2lkdGg9
ICovIDMyLCAvKiB0ZXh0dXJlSGVpZ2h0PSAqLyAzMik7Ci0gICAgZWdsQmFzZS5jcmVhdGVTdXJm
YWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGVnbEJh
c2UubWFrZUN1cnJlbnQoKTsKLSAgICAvLyBBc3NlcnQgbm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2
ZWQgeWV0LgotICAgIGxpc3RlbmVyLmFzc2VydE5vRnJhbWVJc0RlbGl2ZXJlZCgvKiB3YWl0UGVy
aW9kTXM9ICovIDEpOwotICAgIC8vIERyYXcgYW5kIHdhaXQgZm9yIG9uZSBmcmFtZS4KLSAgICBH
TEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1
ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgp
LgotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICBsaXN0ZW5lci53YWl0Rm9yVGV4dHVy
ZUJ1ZmZlcigpLnJlbGVhc2UoKTsKLQotICAgIC8vIERpc3Bvc2UgLSB3ZSBzaG91bGQgbm90IHJl
Y2VpdmUgYW55IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
ZGlzcG9zZSgpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xlYXIo
R0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsK
LSAgICAvLyBzd2FwQnVmZmVycygpIHNob3VsZCBub3QgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2
YWlsYWJsZSgpIGJlY2F1c2UgZGlzcG9zZWQgaGFzIGJlZW4gY2FsbGVkLgotICAgIC8vIEFzc2Vy
dCB0aGF0IG5vIE9FUyB0ZXh0dXJlIHdhcyBkZWxpdmVyZWQuCi0gICAgbGlzdGVuZXIuYXNzZXJ0
Tm9GcmFtZUlzRGVsaXZlcmVkKC8qIHdhaXRQZXJpb2RNcz0gKi8gNTAwKTsKLQotICAgIGVnbEJh
c2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRoZSBTdXJm
YWNlVGV4dHVyZUhlbHBlciBpbW1lZGlhdGVseSBhZnRlciBpcyBoYXMgYmVlbiBzZXR1cCB0byB1
c2UgYQotICAgKiBzaGFyZWQgY29udGV4dC4gTm8gZnJhbWVzIHNob3VsZCBiZSBkZWxpdmVyZWQg
dG8gdGhlIGxpc3RlbmVyLgotICAgKi8KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0RGlzcG9zZUltbWVkaWF0ZWx5KCkgewotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJl
SGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxw
ZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBu
dWxsKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICAvKioK
LSAgICogQ2FsbCBzdG9wTGlzdGVuaW5nKCksIGJ1dCBrZWVwIHRyeWluZyB0byBwcm9kdWNlIG1v
cmUgdGV4dHVyZSBmcmFtZXMuIE5vIGZyYW1lcyBzaG91bGQgYmUKLSAgICogZGVsaXZlcmVkIHRv
IHRoZSBsaXN0ZW5lci4KLSAgICovCi0gIEBUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RTdG9wTGlzdGVuaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFs
IFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0
aHJlYWROYW1lICovLCBudWxsKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zZXRUZXh0dXJl
U2l6ZSgvKiB0ZXh0dXJlV2lkdGg9ICovIDMyLCAvKiB0ZXh0dXJlSGVpZ2h0PSAqLyAzMik7Ci0g
ICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxp
c3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVu
ZXIpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRh
cmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3Jl
YXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZh
Y2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgZWdsQmFz
ZS5tYWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBubyBmcmFtZSBoYXMgYmVlbiByZWNlaXZl
ZCB5ZXQuCi0gICAgbGlzdGVuZXIuYXNzZXJ0Tm9GcmFtZUlzRGVsaXZlcmVkKC8qIHdhaXRQZXJp
b2RNcz0gKi8gMSk7Ci0gICAgLy8gRHJhdyBhbmQgd2FpdCBmb3Igb25lIGZyYW1lLgotICAgIEdM
RVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAvLyBzd2FwQnVm
ZmVycygpIHdpbGwgdWx0aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCku
Ci0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIGxpc3RlbmVyLndhaXRGb3JUZXh0dXJl
QnVmZmVyKCkucmVsZWFzZSgpOwotCi0gICAgLy8gU3RvcCBsaXN0ZW5pbmcgLSB3ZSBzaG91bGQg
bm90IHJlY2VpdmUgYW55IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0gICAgc3VyZmFjZVRleHR1cmVI
ZWxwZXIuc3RvcExpc3RlbmluZygpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUuCi0gICAgR0xF
UzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVnbEJhc2Uuc3dh
cEJ1ZmZlcnMoKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHNob3VsZCBub3QgdHJpZ2dlciBvblRl
eHR1cmVGcmFtZUF2YWlsYWJsZSgpIGJlY2F1c2UgZGlzcG9zZWQgaGFzIGJlZW4gY2FsbGVkLgot
ICAgIC8vIEFzc2VydCB0aGF0IG5vIE9FUyB0ZXh0dXJlIHdhcyBkZWxpdmVyZWQuCi0gICAgbGlz
dGVuZXIuYXNzZXJ0Tm9GcmFtZUlzRGVsaXZlcmVkKC8qIHdhaXRQZXJpb2RNcz0gKi8gNTAwKTsK
LQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVh
c2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHN0b3BMaXN0ZW5pbmcoKSBpbW1lZGlhdGVs
eSBhZnRlciB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgaGFzIGJlZW4gc2V0dXAuCi0gICAqLwot
ICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdG9wTGlzdGVuaW5nSW1t
ZWRpYXRlbHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRl
eHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWRO
YW1lICovLCBudWxsKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0g
bmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFy
dExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3Rl
bmluZygpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8q
KgotICAgKiBUZXN0IHN0b3BMaXN0ZW5pbmcoKSBpbW1lZGlhdGVseSBhZnRlciB0aGUgU3VyZmFj
ZVRleHR1cmVIZWxwZXIgaGFzIGJlZW4gc2V0dXAgb24gdGhlIGhhbmRsZXIKLSAgICogdGhyZWFk
LgotICAgKi8KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RvcExp
c3RlbmluZ0ltbWVkaWF0ZWx5T25IYW5kbGVyVGhyZWFkKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1
cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgZmluYWwgTW9ja1Rl
eHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0KLSAg
ICBmaW5hbCBDb3VudERvd25MYXRjaCBzdG9wTGlzdGVuaW5nQmFycmllciA9IG5ldyBDb3VudERv
d25MYXRjaCgxKTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBzdG9wTGlzdGVuaW5nQmFycmll
ckRvbmUgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgLy8gU3RhcnQgYnkgcG9zdGluZyB0
byB0aGUgaGFuZGxlciB0aHJlYWQgdG8ga2VlcCBpdCBvY2N1cGllZC4KLSAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgVGhyZWFkVXRpbHMuYXdh
aXRVbmludGVycnVwdGlibHkoc3RvcExpc3RlbmluZ0JhcnJpZXIpOwotICAgICAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgICAgIHN0b3BMaXN0ZW5pbmdCYXJy
aWVyRG9uZS5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIHN0YXJ0TGlz
dGVuaW5nKCkgaXMgYXN5bmNocm9ub3VzIGFuZCB3aWxsIHBvc3QgdG8gdGhlIG9jY3VwaWVkIGhh
bmRsZXIgdGhyZWFkLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxp
c3RlbmVyKTsKLSAgICAvLyBXYWl0IGZvciBzdG9wTGlzdGVuaW5nKCkgdG8gYmUgY2FsbGVkIG9u
IHRoZSBoYW5kbGVyIHRocmVhZC4KLSAgICBzdG9wTGlzdGVuaW5nQmFycmllci5jb3VudERvd24o
KTsKLSAgICBzdG9wTGlzdGVuaW5nQmFycmllckRvbmUuYXdhaXQoKTsKLSAgICAvLyBXYWl0IHVu
dGlsIGhhbmRsZXIgdGhyZWFkIGlzIGlkbGUgdG8gdHJ5IHRvIGNhdGNoIGxhdGUgc3RhcnRMaXN0
ZW5pbmcoKSBjYWxsLgotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJhcnJpZXIgPSBuZXcgQ291
bnREb3duTGF0Y2goMSk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBv
c3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0g
ICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoYmFycmllcik7Ci0gICAgLy8gUHJl
dmlvdXMgc3RhcnRMaXN0ZW5pbmcoKSBjYWxsIHNob3VsZCBuZXZlciBoYXZlIHRha2VuIHBsYWNl
IGFuZCBpdCBzaG91bGQgYmUgb2sgdG8gY2FsbCBpdAotICAgIC8vIGFnYWluLgotICAgIHN1cmZh
Y2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLQotICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IGNhbGxpbmcg
c3RhcnRMaXN0ZW5pbmcoKSB3aXRoIGEgbmV3IGxpc3RlbmVyIGFmdGVyIHN0b3BMaXN0ZW5pbmco
KSBoYXMgYmVlbiBjYWxsZWQuCi0gICAqLwotICBAVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0UmVzdGFydExpc3RlbmluZ1dpdGhOZXdMaXN0ZW5lcigpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFu
ZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVy
ZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRl
eHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgc3VyZmFjZVRl
eHR1cmVIZWxwZXIuc2V0VGV4dHVyZVNpemUoLyogdGV4dHVyZVdpZHRoPSAqLyAzMiwgLyogdGV4
dHVyZUhlaWdodD0gKi8gMzIpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVu
ZXIxID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcjEpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGgg
dGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJh
c2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsK
LSAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFj
ZVRleHR1cmUoKSk7Ci0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBu
byBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgbGlzdGVuZXIxLmFzc2VydE5vRnJh
bWVJc0RlbGl2ZXJlZCgvKiB3YWl0UGVyaW9kTXM9ICovIDEpOwotICAgIC8vIERyYXcgYW5kIHdh
aXQgZm9yIG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVG
RkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBv
blRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAg
ICBsaXN0ZW5lcjEud2FpdEZvclRleHR1cmVCdWZmZXIoKS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBT
dG9wIGxpc3RlbmluZyAtIHxsaXN0ZW5lcjF8IHNob3VsZCBub3QgcmVjZWl2ZSBhbnkgdGV4dHVy
ZXMgYWZ0ZXIgdGhpcy4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7
Ci0KLSAgICAvLyBDb25uZWN0IGRpZmZlcmVudCBsaXN0ZW5lci4KLSAgICBmaW5hbCBNb2NrVGV4
dHVyZUxpc3RlbmVyIGxpc3RlbmVyMiA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIyKTsKLSAgICAvLyBB
c3NlcnQgbm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgotICAgIGxpc3RlbmVyMi5hc3Nl
cnROb0ZyYW1lSXNEZWxpdmVyZWQoLyogd2FpdFBlcmlvZE1zPSAqLyAxKTsKLQotICAgIC8vIERy
YXcgb25lIGZyYW1lLgotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJf
QklUKTsKLSAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHxs
aXN0ZW5lcjJ8IHJlY2VpdmVkIHRoZSBmcmFtZSwgYW5kIG5vdCB8bGlzdGVuZXIxfC4KLSAgICBs
aXN0ZW5lcjIud2FpdEZvclRleHR1cmVCdWZmZXIoKS5yZWxlYXNlKCk7Ci0gICAgbGlzdGVuZXIx
LmFzc2VydE5vRnJhbWVJc0RlbGl2ZXJlZCgvKiB3YWl0UGVyaW9kTXM9ICovIDEpOwotCi0gICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwot
ICB9Ci0KLSAgQFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFRleHR1cmV0
b1l1digpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IHdpZHRo
ID0gMTY7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IDE2OwotCi0gICAgZmluYWwgRWdsQmFzZSBl
Z2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotCi0g
ICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5h
bCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0
dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8q
IHRocmVhZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgZmluYWwg
TW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLnNldFRleHR1cmVTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgLy8gQ3JlYXRlIHJlc291cmNlcyBmb3Igc3R1YmJpbmcgYW4gT0VTIHRleHR1cmUgcHJvZHVj
ZXIuIHxlZ2xCYXNlfCBoYXMgdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAgLy8gfHN1cmZhY2VU
ZXh0dXJlSGVscGVyfCBhcyB0aGUgdGFyZ2V0IEVHTFN1cmZhY2UuCi0KLSAgICBlZ2xCYXNlLmNy
ZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCksIHdpZHRoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCksIGhlaWdodCk7Ci0KLSAgICBmaW5hbCBp
bnQgcmVkW10gPSBuZXcgaW50W10gezc5LCAxNDQsIDE4NX07Ci0gICAgZmluYWwgaW50IGdyZWVu
W10gPSBuZXcgaW50W10gezY2LCAyMTAsIDE2Mn07Ci0gICAgZmluYWwgaW50IGJsdWVbXSA9IG5l
dyBpbnRbXSB7MTYxLCAxMTcsIDE1OH07Ci0KLSAgICBmaW5hbCBpbnQgcmVmX3lbXSA9IG5ldyBp
bnRbXSB7ODUsIDE3MCwgMTYxfTsKLSAgICBmaW5hbCBpbnQgcmVmX3VbXSA9IG5ldyBpbnRbXSB7
MTY4LCA5NywgMTIzfTsKLSAgICBmaW5hbCBpbnQgcmVmX3ZbXSA9IG5ldyBpbnRbXSB7MTI3LCAx
MDYsIDEzOH07Ci0KLSAgICAvLyBEcmF3IHRocmVlIGZyYW1lcy4KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDM7ICsraSkgewotICAgICAgLy8gRHJhdyBhIGNvbnN0YW50IGNvbG9yIGZyYW1lIG9u
dG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAg
ICAgR0xFUzIwLmdsQ2xlYXJDb2xvcihyZWRbaV0gLyAyNTUuMGYsIGdyZWVuW2ldIC8gMjU1LjBm
LCBibHVlW2ldIC8gMjU1LjBmLCAxLjBmKTsKLSAgICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5H
TF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1bHRpbWF0
ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICAgIGVnbEJhc2Uuc3dh
cEJ1ZmZlcnMoKTsKLQotICAgICAgLy8gV2FpdCBmb3IgYW4gT0VTIHRleHR1cmUgdG8gYXJyaXZl
LgotICAgICAgZmluYWwgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyIHRleHR1cmVCdWZmZXIgPSBs
aXN0ZW5lci53YWl0Rm9yVGV4dHVyZUJ1ZmZlcigpOwotICAgICAgZmluYWwgVmlkZW9GcmFtZS5J
NDIwQnVmZmVyIGk0MjAgPSB0ZXh0dXJlQnVmZmVyLnRvSTQyMCgpOwotICAgICAgdGV4dHVyZUJ1
ZmZlci5yZWxlYXNlKCk7Ci0KLSAgICAgIC8vIE1lbW9yeSBsYXlvdXQ6IExpbmVzIGFyZSAxNiBi
eXRlcy4gRmlyc3QgMTYgbGluZXMgYXJlCi0gICAgICAvLyB0aGUgWSBkYXRhLiBUaGVzZSBhcmUg
Zm9sbG93ZWQgYnkgOCBsaW5lcyB3aXRoIDggYnl0ZXMgb2YgVQotICAgICAgLy8gZGF0YSBvbiB0
aGUgbGVmdCBhbmQgOCBieXRlcyBvZiBWIGRhdGEgb24gdGhlIHJpZ2h0LgotICAgICAgLy8KLSAg
ICAgIC8vIE9mZnNldAotICAgICAgLy8gICAgICAwIFlZWVlZWVlZIFlZWVlZWVlZCi0gICAgICAv
LyAgICAgMTYgWVlZWVlZWVkgWVlZWVlZWVkKLSAgICAgIC8vICAgIC4uLgotICAgICAgLy8gICAg
MjQwIFlZWVlZWVlZIFlZWVlZWVlZCi0gICAgICAvLyAgICAyNTYgVVVVVVVVVVUgVlZWVlZWVlYK
LSAgICAgIC8vICAgIDI3MiBVVVVVVVVVVSBWVlZWVlZWVgotICAgICAgLy8gICAgLi4uCi0gICAg
ICAvLyAgICAzNjggVVVVVVVVVVUgVlZWVlZWVlYKLSAgICAgIC8vICAgIDM4NCBidWZmZXIgZW5k
Ci0KLSAgICAgIC8vIEFsbG93IG9mZi1ieS1vbmUgZGlmZmVyZW5jZXMgZHVlIHRvIGRpZmZlcmVu
dCByb3VuZGluZy4KLSAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVkgPSBpNDIwLmdldERhdGFZ
KCk7Ci0gICAgICBmaW5hbCBpbnQgc3RyaWRlWSA9IGk0MjAuZ2V0U3RyaWRlWSgpOwotICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgICBhc3NlcnRDbG9zZSgxLCByZWZfeVtpXSwg
ZGF0YVkuZ2V0KHkgKiBzdHJpZGVZICsgeCkgJiAweEZGKTsKLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgICBmaW5hbCBpbnQgY2hyb21hV2lkdGggPSB3aWR0aCAvIDI7Ci0gICAgICBmaW5hbCBp
bnQgY2hyb21hSGVpZ2h0ID0gaGVpZ2h0IC8gMjsKLQotICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBk
YXRhVSA9IGk0MjAuZ2V0RGF0YVUoKTsKLSAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YVYgPSBp
NDIwLmdldERhdGFWKCk7Ci0gICAgICBmaW5hbCBpbnQgc3RyaWRlVSA9IGk0MjAuZ2V0U3RyaWRl
VSgpOwotICAgICAgZmluYWwgaW50IHN0cmlkZVYgPSBpNDIwLmdldFN0cmlkZVYoKTsKLSAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgY2hyb21hSGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjaHJvbWFXaWR0aDsgeCsrKSB7Ci0gICAgICAgICAgYXNzZXJ0Q2xvc2Uo
MSwgcmVmX3VbaV0sIGRhdGFVLmdldCh5ICogc3RyaWRlVSArIHgpICYgMHhGRik7Ci0gICAgICAg
ICAgYXNzZXJ0Q2xvc2UoMSwgcmVmX3ZbaV0sIGRhdGFWLmdldCh5ICogc3RyaWRlViArIHgpICYg
MHhGRik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGk0MjAucmVsZWFzZSgpOwotICAgIH0K
LQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVh
c2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJy
dGMvU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRl
c3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXJPbk1lYXN1cmVUZXN0LmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZGRkN2VmM2EyYmRjNTBkM2I4YjBhYTBj
YTlkNzYwMWZlNzZhMzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJl
ck9uTWVhc3VyZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3Jn
Lmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3Nl
cnQuZmFpbDsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdXBwcmVzc0xpbnQ7Ci1pbXBv
cnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5J
bnN0cnVtZW50YXRpb25SZWdpc3RyeTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5hbm5v
dGF0aW9uLlVpVGhyZWFkVGVzdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5maWx0ZXJz
Lk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QucnVsZS5VaVRocmVhZFRl
c3RSdWxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk1lYXN1cmVTcGVjOwotaW1wb3J0IGph
dmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LkJhc2VKVW5pdDRDbGFz
c1J1bm5lcjsKLWltcG9ydCBvcmcuanVuaXQuUnVsZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsK
LWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLUBSdW5XaXRoKEJhc2VKVW5pdDRD
bGFzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBjbGFzcyBTdXJmYWNlVmlld1JlbmRlcmVyT25NZWFz
dXJlVGVzdCB7Ci0gIEBSdWxlIHB1YmxpYyBVaVRocmVhZFRlc3RSdWxlIHVpVGhyZWFkVGVzdFJ1
bGUgPSBuZXcgVWlUaHJlYWRUZXN0UnVsZSgpOwotCi0gIC8qKgotICAgKiBMaXN0IHdpdGggYWxs
IHBvc3NpYmxlIHNjYWxpbmcgdHlwZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBM
aXN0PFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlPiBzY2FsaW5nVHlwZXMgPSBBcnJheXMuYXNM
aXN0KAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVCwg
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJTEwsCi0gICAgICBSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfQkFMQU5DRUQpOwotCi0gIC8qKgot
ICAgKiBMaXN0IHdpdGggTWVhc3VyZVNwZWMgbW9kZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBMaXN0PEludGVnZXI+IG1lYXN1cmVTcGVjTW9kZXMgPQotICAgICAgQXJyYXlzLmFz
TGlzdChNZWFzdXJlU3BlYy5FWEFDVExZLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLQotICAvKioK
LSAgICogUmV0dXJucyBhIGR1bW15IFlVViBmcmFtZS4KLSAgICovCi0gIHN0YXRpYyBWaWRlb0Zy
YW1lIGNyZWF0ZUZyYW1lKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uRGVncmVl
KSB7Ci0gICAgZmluYWwgaW50W10geXV2U3RyaWRlcyA9IG5ldyBpbnRbXSB7d2lkdGgsICh3aWR0
aCArIDEpIC8gMiwgKHdpZHRoICsgMSkgLyAyfTsKLSAgICBmaW5hbCBpbnRbXSB5dXZIZWlnaHRz
ID0gbmV3IGludFtdIHtoZWlnaHQsIChoZWlnaHQgKyAxKSAvIDIsIChoZWlnaHQgKyAxKSAvIDJ9
OwotICAgIGZpbmFsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgeXV2UGxhbmVzW2ldID0g
Qnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh5dXZTdHJpZGVzW2ldICogeXV2SGVpZ2h0c1tpXSk7
Ci0gICAgfQotICAgIGZpbmFsIFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBidWZmZXIgPQotICAgICAg
ICBKYXZhSTQyMEJ1ZmZlci53cmFwKHdpZHRoLCBoZWlnaHQsIHl1dlBsYW5lc1swXSwgeXV2U3Ry
aWRlc1swXSwgeXV2UGxhbmVzWzFdLCB5dXZTdHJpZGVzWzFdLAotICAgICAgICAgICAgeXV2UGxh
bmVzWzJdLCB5dXZTdHJpZGVzWzJdLCBudWxsIC8qIHJlbGVhc2VDYWxsYmFjayAqLyk7Ci0gICAg
cmV0dXJuIG5ldyBWaWRlb0ZyYW1lKGJ1ZmZlciwgcm90YXRpb25EZWdyZWUsIDAgLyogdGltZXN0
YW1wICovKTsKLSAgfQotCi0gIC8qKgotICAgKiBBc3NlcnQgb25NZWFzdXJlKCkgd2l0aCBnaXZl
biBwYXJhbWV0ZXJzIHdpbGwgcmVzdWx0IGluIGV4cGVjdGVkIG1lYXN1cmVkIHNpemUuCi0gICAq
LwotICBAU3VwcHJlc3NMaW50KCJXcm9uZ0NhbGwiKQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFz
c2VydE1lYXN1cmVkU2l6ZShTdXJmYWNlVmlld1JlbmRlcmVyIHN1cmZhY2VWaWV3UmVuZGVyZXIs
Ci0gICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgU3RyaW5nIGZy
YW1lRGltZW5zaW9ucywgaW50IGV4cGVjdGVkV2lkdGgsCi0gICAgICBpbnQgZXhwZWN0ZWRIZWln
aHQsIGludCB3aWR0aFNwZWMsIGludCBoZWlnaHRTcGVjKSB7Ci0gICAgc3VyZmFjZVZpZXdSZW5k
ZXJlci5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZSk7Ci0gICAgc3VyZmFjZVZpZXdSZW5kZXJl
ci5vbk1lYXN1cmUod2lkdGhTcGVjLCBoZWlnaHRTcGVjKTsKLSAgICBmaW5hbCBpbnQgbWVhc3Vy
ZWRXaWR0aCA9IHN1cmZhY2VWaWV3UmVuZGVyZXIuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgIGZp
bmFsIGludCBtZWFzdXJlZEhlaWdodCA9IHN1cmZhY2VWaWV3UmVuZGVyZXIuZ2V0TWVhc3VyZWRI
ZWlnaHQoKTsKLSAgICBpZiAobWVhc3VyZWRXaWR0aCAhPSBleHBlY3RlZFdpZHRoIHx8IG1lYXN1
cmVkSGVpZ2h0ICE9IGV4cGVjdGVkSGVpZ2h0KSB7Ci0gICAgICBmYWlsKCJvbk1lYXN1cmUoIiAr
IE1lYXN1cmVTcGVjLnRvU3RyaW5nKHdpZHRoU3BlYykgKyAiLCAiICsgTWVhc3VyZVNwZWMudG9T
dHJpbmcoaGVpZ2h0U3BlYykKLSAgICAgICAgICArICIpIgotICAgICAgICAgICsgIiB3aXRoIHNj
YWxpbmcgdHlwZSAiICsgc2NhbGluZ1R5cGUgKyAiIGFuZCBmcmFtZTogIiArIGZyYW1lRGltZW5z
aW9ucwotICAgICAgICAgICsgIiBleHBlY3RlZCBtZWFzdXJlZCBzaXplICIgKyBleHBlY3RlZFdp
ZHRoICsgIngiICsgZXhwZWN0ZWRIZWlnaHQgKyAiLCBidXQgd2FzICIKLSAgICAgICAgICArIG1l
YXN1cmVkV2lkdGggKyAieCIgKyBtZWFzdXJlZEhlaWdodCk7Ci0gICAgfQotICB9Ci0KLSAgLyoq
Ci0gICAqIFRlc3QgaG93IFN1cmZhY2VWaWV3UmVuZGVyZXIub25NZWFzdXJlKCkgYmVoYXZlcyB3
aGVuIG5vIGZyYW1lIGhhcyBiZWVuIGRlbGl2ZXJlZC4KLSAgICovCi0gIEBUZXN0Ci0gIEBVaVRo
cmVhZFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdE5vRnJhbWUoKSB7Ci0g
ICAgZmluYWwgU3VyZmFjZVZpZXdSZW5kZXJlciBzdXJmYWNlVmlld1JlbmRlcmVyID0KLSAgICAg
ICAgbmV3IFN1cmZhY2VWaWV3UmVuZGVyZXIoSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0Q29u
dGV4dCgpKTsKLSAgICBmaW5hbCBTdHJpbmcgZnJhbWVEaW1lbnNpb25zID0gIm51bGwiOwotCi0g
ICAgLy8gVGVzdCBiZWhhdmlvdXIgYmVmb3JlIFN1cmZhY2VWaWV3UmVuZGVyZXIuaW5pdCgpIGlz
IGNhbGxlZC4KLSAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBl
IDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICBmb3IgKGludCBtZWFzdXJlU3BlY01vZGUgOiBtZWFz
dXJlU3BlY01vZGVzKSB7Ci0gICAgICAgIGZpbmFsIGludCB6ZXJvTWVhc3VyZVNpemUgPSBNZWFz
dXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMCwgbWVhc3VyZVNwZWNNb2RlKTsKLSAgICAgICAgYXNz
ZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURp
bWVuc2lvbnMsIDAsIDAsIHplcm9NZWFzdXJlU2l6ZSwKLSAgICAgICAgICAgIHplcm9NZWFzdXJl
U2l6ZSk7Ci0gICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBz
Y2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCAxMjgwLCA3MjAsCi0gICAgICAgICAgICBNZWFz
dXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgbWVhc3VyZVNwZWNNb2RlKSwKLSAgICAgICAg
ICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIG1lYXN1cmVTcGVjTW9kZSkpOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8vIFRlc3QgYmVoYXZpb3VyIGFmdGVyIFN1cmZhY2VWaWV3
UmVuZGVyZXIuaW5pdCgpIGlzIGNhbGxlZCwgYnV0IHN0aWxsIG5vIGZyYW1lLgotICAgIHN1cmZh
Y2VWaWV3UmVuZGVyZXIuaW5pdCgoRWdsQmFzZS5Db250ZXh0KSBudWxsLCBudWxsKTsKLSAgICBm
b3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVz
KSB7Ci0gICAgICBmb3IgKGludCBtZWFzdXJlU3BlY01vZGUgOiBtZWFzdXJlU3BlY01vZGVzKSB7
Ci0gICAgICAgIGZpbmFsIGludCB6ZXJvTWVhc3VyZVNpemUgPSBNZWFzdXJlU3BlYy5tYWtlTWVh
c3VyZVNwZWMoMCwgbWVhc3VyZVNwZWNNb2RlKTsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXpl
KHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDAsIDAs
IHplcm9NZWFzdXJlU2l6ZSwKLSAgICAgICAgICAgIHplcm9NZWFzdXJlU2l6ZSk7Ci0gICAgICAg
IGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJh
bWVEaW1lbnNpb25zLCAxMjgwLCA3MjAsCi0gICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVh
c3VyZVNwZWMoMTI4MCwgbWVhc3VyZVNwZWNNb2RlKSwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVj
Lm1ha2VNZWFzdXJlU3BlYyg3MjAsIG1lYXN1cmVTcGVjTW9kZSkpOwotICAgICAgfQotICAgIH0K
LQotICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFRlc3QgaG93IFN1cmZhY2VWaWV3UmVuZGVyZXIub25NZWFzdXJlKCkgYmVoYXZlcyB3aXRoIGEg
MTI4MHg3MjAgZnJhbWUuCi0gICAqLwotICBAVGVzdAotICBAVWlUaHJlYWRUZXN0Ci0gIEBNZWRp
dW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGcmFtZTEyODB4NzIwKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdXJmYWNlVmlld1JlbmRlcmVyIHN1cmZhY2VWaWV3
UmVuZGVyZXIgPQotICAgICAgICBuZXcgU3VyZmFjZVZpZXdSZW5kZXJlcihJbnN0cnVtZW50YXRp
b25SZWdpc3RyeS5nZXRDb250ZXh0KCkpOwotICAgIC8qKgotICAgICAqIE1vY2sgcmVuZGVyZXIg
ZXZlbnRzIHdpdGggYmxvY2tpbmcgd2FpdCBmdW5jdGlvbmFsaXR5IGZvciBmcmFtZSBzaXplIGNo
YW5nZXMuCi0gICAgICovCi0gICAgY2xhc3MgTW9ja1JlbmRlcmVyRXZlbnRzIGltcGxlbWVudHMg
UmVuZGVyZXJDb21tb24uUmVuZGVyZXJFdmVudHMgewotICAgICAgcHJpdmF0ZSBpbnQgZnJhbWVX
aWR0aDsKLSAgICAgIHByaXZhdGUgaW50IGZyYW1lSGVpZ2h0OwotICAgICAgcHJpdmF0ZSBpbnQg
cm90YXRpb247Ci0KLSAgICAgIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg0OTEpOiBSZW1vdmUg
Tm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayBzdXBwcmVzc2lvbi4KLSAgICAgIEBTdXBwcmVzc1dh
cm5pbmdzKCJOb1N5bmNocm9uaXplZE1ldGhvZENoZWNrIikKLSAgICAgIHB1YmxpYyBzeW5jaHJv
bml6ZWQgdm9pZCB3YWl0Rm9yRnJhbWVTaXplKGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWln
aHQsIGludCByb3RhdGlvbikKLSAgICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgICAgICB3aGlsZSAodGhpcy5mcmFtZVdpZHRoICE9IGZyYW1lV2lkdGggfHwgdGhpcy5m
cmFtZUhlaWdodCAhPSBmcmFtZUhlaWdodAotICAgICAgICAgICAgfHwgdGhpcy5yb3RhdGlvbiAh
PSByb3RhdGlvbikgewotICAgICAgICAgIHdhaXQoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRmlyc3RGcmFtZVJlbmRlcmVkKCkg
e30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84NDkx
KTogUmVtb3ZlIE5vU3luY2hyb25pemVkTWV0aG9kQ2hlY2sgc3VwcHJlc3Npb24uCi0gICAgICBA
U3VwcHJlc3NXYXJuaW5ncygiTm9TeW5jaHJvbml6ZWRNZXRob2RDaGVjayIpCi0gICAgICBwdWJs
aWMgc3luY2hyb25pemVkIHZvaWQgb25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKAotICAgICAgICAg
IGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsIGludCByb3RhdGlvbikgewotICAgICAg
ICB0aGlzLmZyYW1lV2lkdGggPSBmcmFtZVdpZHRoOwotICAgICAgICB0aGlzLmZyYW1lSGVpZ2h0
ID0gZnJhbWVIZWlnaHQ7Ci0gICAgICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjsKLSAgICAg
ICAgbm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZpbmFsIE1vY2tSZW5kZXJlckV2
ZW50cyByZW5kZXJlckV2ZW50cyA9IG5ldyBNb2NrUmVuZGVyZXJFdmVudHMoKTsKLSAgICBzdXJm
YWNlVmlld1JlbmRlcmVyLmluaXQoKEVnbEJhc2UuQ29udGV4dCkgbnVsbCwgcmVuZGVyZXJFdmVu
dHMpOwotCi0gICAgLy8gVGVzdCBkaWZmZXJlbnQgcm90YXRpb24gZGVncmVzcywgYnV0IHNhbWUg
cm90YXRlZCBzaXplLgotICAgIGZvciAoaW50IHJvdGF0aW9uRGVncmVlIDogbmV3IGludFtdIHsw
LCA5MCwgMTgwLCAyNzB9KSB7Ci0gICAgICBmaW5hbCBpbnQgcm90YXRlZFdpZHRoID0gMTI4MDsK
LSAgICAgIGZpbmFsIGludCByb3RhdGVkSGVpZ2h0ID0gNzIwOwotICAgICAgZmluYWwgaW50IHVu
cm90YXRlZFdpZHRoID0gKHJvdGF0aW9uRGVncmVlICUgMTgwID09IDAgPyByb3RhdGVkV2lkdGgg
OiByb3RhdGVkSGVpZ2h0KTsKLSAgICAgIGZpbmFsIGludCB1bnJvdGF0ZWRIZWlnaHQgPSAocm90
YXRpb25EZWdyZWUgJSAxODAgPT0gMCA/IHJvdGF0ZWRIZWlnaHQgOiByb3RhdGVkV2lkdGgpOwot
ICAgICAgZmluYWwgVmlkZW9GcmFtZSBmcmFtZSA9IGNyZWF0ZUZyYW1lKHVucm90YXRlZFdpZHRo
LCB1bnJvdGF0ZWRIZWlnaHQsIHJvdGF0aW9uRGVncmVlKTsKLSAgICAgIGFzc2VydEVxdWFscyhy
b3RhdGVkV2lkdGgsIGZyYW1lLmdldFJvdGF0ZWRXaWR0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFs
cyhyb3RhdGVkSGVpZ2h0LCBmcmFtZS5nZXRSb3RhdGVkSGVpZ2h0KCkpOwotICAgICAgZmluYWwg
U3RyaW5nIGZyYW1lRGltZW5zaW9ucyA9Ci0gICAgICAgICAgdW5yb3RhdGVkV2lkdGggKyAieCIg
KyB1bnJvdGF0ZWRIZWlnaHQgKyAiIHdpdGggcm90YXRpb24gIiArIHJvdGF0aW9uRGVncmVlOwot
ICAgICAgc3VyZmFjZVZpZXdSZW5kZXJlci5vbkZyYW1lKGZyYW1lKTsKLSAgICAgIGZyYW1lLnJl
bGVhc2UoKTsKLSAgICAgIHJlbmRlcmVyRXZlbnRzLndhaXRGb3JGcmFtZVNpemUodW5yb3RhdGVk
V2lkdGgsIHVucm90YXRlZEhlaWdodCwgcm90YXRpb25EZWdyZWUpOwotCi0gICAgICAvLyBUZXN0
IGZvcmNpbmcgdG8gemVybyBzaXplLgotICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5n
VHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgICBmb3IgKGludCBtZWFz
dXJlU3BlY01vZGUgOiBtZWFzdXJlU3BlY01vZGVzKSB7Ci0gICAgICAgICAgZmluYWwgaW50IHpl
cm9NZWFzdXJlU2l6ZSA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBtZWFzdXJlU3Bl
Y01vZGUpOwotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVy
LCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCAwLCAwLAotICAgICAgICAgICAgICB6ZXJv
TWVhc3VyZVNpemUsIHplcm9NZWFzdXJlU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgLy8gVGVzdCBwZXJmZWN0IGZpdC4KLSAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgZm9yIChpbnQgbWVh
c3VyZVNwZWNNb2RlIDogbWVhc3VyZVNwZWNNb2RlcykgewotICAgICAgICAgIGFzc2VydE1lYXN1
cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25z
LCByb3RhdGVkV2lkdGgsCi0gICAgICAgICAgICAgIHJvdGF0ZWRIZWlnaHQsIE1lYXN1cmVTcGVj
Lm1ha2VNZWFzdXJlU3BlYyhyb3RhdGVkV2lkdGgsIG1lYXN1cmVTcGVjTW9kZSksCi0gICAgICAg
ICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhyb3RhdGVkSGVpZ2h0LCBtZWFzdXJl
U3BlY01vZGUpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBGb3JjZSBzcGVjIHNp
emUgd2l0aCBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvIHRoYW4gZnJhbWUgYXNwZWN0IHJhdGlvLgot
ICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxp
bmdUeXBlcykgewotICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJl
ciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgNzIwLCAxMjgwLAotICAgICAgICAgICAg
TWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSksCi0g
ICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMu
RVhBQ1RMWSkpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlv
ID0gKGZsb2F0KSByb3RhdGVkV2lkdGggLyByb3RhdGVkSGVpZ2h0OwotICAgICAgewotICAgICAg
ICAvLyBSZWxheCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgY29uc3RyYWludHMuCi0gICAgICAgIGZp
bmFsIGludCB3aWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBNZWFz
dXJlU3BlYy5BVF9NT1NUKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdodFNwZWMgPSBNZWFzdXJl
U3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgICAg
IGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlw
ZXMpIHsKLSAgICAgICAgICBmaW5hbCBQb2ludCBleHBlY3RlZFNpemUgPQotICAgICAgICAgICAg
ICBSZW5kZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZShzY2FsaW5nVHlwZSwgdmlkZW9Bc3BlY3RS
YXRpbywgNzIwLCAxMjgwKTsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZp
ZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgZXhwZWN0ZWRTaXplLngs
Ci0gICAgICAgICAgICAgIGV4cGVjdGVkU2l6ZS55LCB3aWR0aFNwZWMsIGhlaWdodFNwZWMpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIC8vIEZvcmNlIHdpZHRoIHRvIDcy
MCwgYnV0IHJlbGF4IGhlaWdodCBjb25zdHJhaW50LiBUaGlzIHdpbGwgZ2l2ZSB0aGUgc2FtZSBy
ZXN1bHQgYXMKLSAgICAgICAgLy8gYWJvdmUsIGJlY2F1c2Ugd2lkdGggaXMgYWxyZWFkeSB0aGUg
bGltaXRpbmcgZmFjdG9yIGFuZCB3aWxsIGJlIG1heGVkIG91dC4KLSAgICAgICAgZmluYWwgaW50
IHdpZHRoU3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIE1lYXN1cmVTcGVj
LkVYQUNUTFkpOwotICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1h
a2VNZWFzdXJlU3BlYygxMjgwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAgICAgICAgZm9yIChS
ZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewot
ICAgICAgICAgIGZpbmFsIFBvaW50IGV4cGVjdGVkU2l6ZSA9Ci0gICAgICAgICAgICAgIFJlbmRl
cmVyQ29tbW9uLmdldERpc3BsYXlTaXplKHNjYWxpbmdUeXBlLCB2aWRlb0FzcGVjdFJhdGlvLCA3
MjAsIDEyODApOwotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRl
cmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCBleHBlY3RlZFNpemUueCwKLSAgICAg
ICAgICAgICAgZXhwZWN0ZWRTaXplLnksIHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIHsKLSAgICAgICAgLy8gRm9yY2UgaGVpZ2h0LCBidXQgcmVsYXgg
d2lkdGggY29uc3RyYWludC4gVGhpcyB3aWxsIGZvcmNlIGEgYmFkIGxheW91dCBzaXplLgotICAg
ICAgICBmaW5hbCBpbnQgd2lkdGhTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcy
MCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgICAgIGZpbmFsIGludCBoZWlnaHRTcGVjID0g
TWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwot
ICAgICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2Nh
bGluZ1R5cGVzKSB7Ci0gICAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKAotICAgICAgICAgICAg
ICBzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCA3MjAs
IDEyODAsIHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
aW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvVGVzdENvbnN0YW50cy5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5z
dHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvVGVzdENvbnN0YW50cy5qYXZhCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzc5MDRjOWYzMDRkNzI0NDYwNGZkOTExYzFmZWMw
YzU0NzlmM2QxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2lu
c3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1Rlc3RDb25zdGFudHMuamF2YQorKysg
L2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotY2xhc3MgVGVzdENvbnN0YW50cyB7Ci0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIE5BVElWRV9MSUJSQVJZID0gImppbmdsZV9wZWVyY29ubmVjdGlvbl9pbnN0cnVt
ZW50YXRpb250ZXN0c19zbyI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9UaW1lc3RhbXBBbGlnbmVyVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMv
c3JjL29yZy93ZWJydGMvVGltZXN0YW1wQWxpZ25lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWQ5NDRiNTdmOWQ2NTRkODlkYjAwN2U0ODQwN2E2MTgwYzY3YjRhNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRp
b250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9UaW1lc3RhbXBBbGlnbmVyVGVzdC5qYXZhCisrKyAvZGV2
L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7
Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5wYXJhbXMuQmFzZUpVbml0NFJ1bm5lckRl
bGVnYXRlOwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRlc3QucGFyYW1zLlBhcmFtZXRlckFu
bm90YXRpb25zLlVzZVJ1bm5lckRlbGVnYXRlOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFz
czsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotQFVzZVJ1bm5lckRlbGVnYXRlKEJhc2VKVW5p
dDRSdW5uZXJEZWxlZ2F0ZS5jbGFzcykKLXB1YmxpYyBjbGFzcyBUaW1lc3RhbXBBbGlnbmVyVGVz
dCB7Ci0gIEBCZWZvcmVDbGFzcwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKSB7Ci0gICAg
U3lzdGVtLmxvYWRMaWJyYXJ5KFRlc3RDb25zdGFudHMuTkFUSVZFX0xJQlJBUlkpOwotICB9Ci0K
LSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0UnRjVGltZU5hbm9z
KCkgewotICAgIFRpbWVzdGFtcEFsaWduZXIuZ2V0UnRjVGltZU5hbm9zKCk7Ci0gIH0KLQotICBA
VGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3REaXNwb3NlKCkgewotICAgIGZp
bmFsIFRpbWVzdGFtcEFsaWduZXIgdGltZXN0YW1wQWxpZ25lciA9IG5ldyBUaW1lc3RhbXBBbGln
bmVyKCk7Ci0gICAgdGltZXN0YW1wQWxpZ25lci5kaXNwb3NlKCk7Ci0gIH0KLQotICBAVGVzdAot
ICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RUcmFuc2xhdGVUaW1lc3RhbXAoKSB7Ci0g
ICAgZmluYWwgVGltZXN0YW1wQWxpZ25lciB0aW1lc3RhbXBBbGlnbmVyID0gbmV3IFRpbWVzdGFt
cEFsaWduZXIoKTsKLSAgICB0aW1lc3RhbXBBbGlnbmVyLnRyYW5zbGF0ZVRpbWVzdGFtcCgvKiBj
YW1lcmFUaW1lTnM9ICovIDEyMyk7Ci0gICAgdGltZXN0YW1wQWxpZ25lci5kaXNwb3NlKCk7Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL1ZpZGVv
RmlsZVJlbmRlcmVyVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMv
VmlkZW9GaWxlUmVuZGVyZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDkwZjQ0NzMzMmVkMDMzNWQ3NGM1ODAyOTBjMTQxZGJlMDNmNzhkMjkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29y
Zy93ZWJydGMvVmlkZW9GaWxlUmVuZGVyZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5
MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLWltcG9ydCBhbmRy
b2lkLm9zLkVudmlyb25tZW50OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmZpbHRlcnMu
U21hbGxUZXN0OwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0
aW9uOwotaW1wb3J0IGphdmEuaW8uUmFuZG9tQWNjZXNzRmlsZTsKLWltcG9ydCBqYXZhLm5pby5C
eXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBvcmcu
Y2hyb21pdW0uYmFzZS50ZXN0LkJhc2VKVW5pdDRDbGFzc1J1bm5lcjsKLWltcG9ydCBvcmcuanVu
aXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5u
ZXIuUnVuV2l0aDsKLQotQFJ1bldpdGgoQmFzZUpVbml0NENsYXNzUnVubmVyLmNsYXNzKQotcHVi
bGljIGNsYXNzIFZpZGVvRmlsZVJlbmRlcmVyVGVzdCB7Ci0gIEBCZWZvcmUKLSAgcHVibGljIHZv
aWQgc2V0VXAoKSB7Ci0gICAgTmF0aXZlTGlicmFyeS5pbml0aWFsaXplKG5ldyBOYXRpdmVMaWJy
YXJ5LkRlZmF1bHRMb2FkZXIoKSwgVGVzdENvbnN0YW50cy5OQVRJVkVfTElCUkFSWSk7Ci0gIH0K
LQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RZdXZSZW5kZXJpbmdU
b0ZpbGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICBF
Z2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZSgpOwotICAgIGZpbmFsIFN0cmluZyB2aWRl
b091dFBhdGggPSBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRQ
YXRoKCkKLSAgICAgICAgKyAiL2Nocm9taXVtX3Rlc3RzX3Jvb3QvdGVzdHZpZGVvb3V0Lnk0bSI7
Ci0gICAgaW50IGZyYW1lV2lkdGggPSA0OwotICAgIGludCBmcmFtZUhlaWdodCA9IDQ7Ci0gICAg
VmlkZW9GaWxlUmVuZGVyZXIgdmlkZW9GaWxlUmVuZGVyZXIgPQotICAgICAgICBuZXcgVmlkZW9G
aWxlUmVuZGVyZXIodmlkZW9PdXRQYXRoLCBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgZWdsQmFz
ZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLQotICAgIFN0cmluZ1tdIGZyYW1lcyA9IHsKLSAgICAg
ICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIsICJUSEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS4i
LCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07Ci0KLSAgICBmb3IgKFN0cmluZyBmcmFtZVN0
ciA6IGZyYW1lcykgewotICAgICAgaW50W10gcGxhbmVTaXplcyA9IHsKLSAgICAgICAgICBmcmFt
ZVdpZHRoICogZnJhbWVXaWR0aCwgZnJhbWVXaWR0aCAqIGZyYW1lSGVpZ2h0IC8gNCwgZnJhbWVX
aWR0aCAqIGZyYW1lSGVpZ2h0IC8gNH07Ci0gICAgICBpbnRbXSB5dXZTdHJpZGVzID0ge2ZyYW1l
V2lkdGgsIGZyYW1lV2lkdGggLyAyLCBmcmFtZVdpZHRoIC8gMn07Ci0KLSAgICAgIEJ5dGVCdWZm
ZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsKLSAgICAgIGJ5dGVbXSBmcmFtZUJ5
dGVzID0gZnJhbWVTdHIuZ2V0Qnl0ZXMoQ2hhcnNldC5mb3JOYW1lKCJVUy1BU0NJSSIpKTsKLSAg
ICAgIGludCBwb3MgPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAg
ICAgICAgeXV2UGxhbmVzW2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChwbGFuZVNpemVz
W2ldKTsKLSAgICAgICAgeXV2UGxhbmVzW2ldLnB1dChmcmFtZUJ5dGVzLCBwb3MsIHBsYW5lU2l6
ZXNbaV0pOwotICAgICAgICB5dXZQbGFuZXNbaV0ucmV3aW5kKCk7Ci0gICAgICAgIHBvcyArPSBw
bGFuZVNpemVzW2ldOwotICAgICAgfQotCi0gICAgICBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgYnVm
ZmVyID0KLSAgICAgICAgICBKYXZhSTQyMEJ1ZmZlci53cmFwKGZyYW1lV2lkdGgsIGZyYW1lSGVp
Z2h0LCB5dXZQbGFuZXNbMF0sIHl1dlN0cmlkZXNbMF0sIHl1dlBsYW5lc1sxXSwKLSAgICAgICAg
ICAgICAgeXV2U3RyaWRlc1sxXSwgeXV2UGxhbmVzWzJdLCB5dXZTdHJpZGVzWzJdLCBudWxsIC8q
IHJlbGVhc2VDYWxsYmFjayAqLyk7Ci0KLSAgICAgIFZpZGVvRnJhbWUgZnJhbWUgPSBuZXcgVmlk
ZW9GcmFtZShidWZmZXIsIDAgLyogcm90YXRpb24gKi8sIDAgLyogdGltZXN0YW1wTnMgKi8pOwot
ICAgICAgdmlkZW9GaWxlUmVuZGVyZXIub25GcmFtZShmcmFtZSk7Ci0gICAgICBmcmFtZS5yZWxl
YXNlKCk7Ci0gICAgfQotICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJlbGVhc2UoKTsKLQotICAgIFJh
bmRvbUFjY2Vzc0ZpbGUgd3JpdHRlbkZpbGUgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZSh2aWRlb091
dFBhdGgsICJyIik7Ci0gICAgdHJ5IHsKLSAgICAgIGludCBsZW5ndGggPSAoaW50KSB3cml0dGVu
RmlsZS5sZW5ndGgoKTsKLSAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbbGVuZ3RoXTsKLSAg
ICAgIHdyaXR0ZW5GaWxlLnJlYWRGdWxseShkYXRhKTsKLSAgICAgIFN0cmluZyBmaWxlQ29udGVu
dCA9IG5ldyBTdHJpbmcoZGF0YSwgQ2hhcnNldC5mb3JOYW1lKCJVUy1BU0NJSSIpKTsKLSAgICAg
IFN0cmluZyBleHBlY3RlZCA9ICJZVVY0TVBFRzIgQzQyMCBXNCBINCBJcCBGMzA6MSBBMToxXG4i
Ci0gICAgICAgICAgKyAiRlJBTUVcbiIKLSAgICAgICAgICArICJUSElTIElTIEpVU1QgU09NRSBU
RVhUIHhGUkFNRVxuIgotICAgICAgICAgICsgIlRIRSBTRUNPTkQgRlJBTUUgcXdlcnR5LkZSQU1F
XG4iCi0gICAgICAgICAgKyAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIjsKLSAgICAgIGFzc2Vy
dEVxdWFscyhleHBlY3RlZCwgZmlsZUNvbnRlbnQpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICB3
cml0dGVuRmlsZS5jbG9zZSgpOwotICAgIH0KLQotICAgIG5ldyBGaWxlKHZpZGVvT3V0UGF0aCku
ZGVsZXRlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcv
d2VicnRjL1ZpZGVvRnJhbWVCdWZmZXJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9WaWRlb0ZyYW1lQnVmZmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1M2IyYzU4ZTE4NGMyNjk4MDZmYzE5NTI0OGEyNjhjOGJkYTE1MDQzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3RydW1lbnRhdGlvbnRl
c3RzL3NyYy9vcmcvd2VicnRjL1ZpZGVvRnJhbWVCdWZmZXJUZXN0LmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSw1MDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5ncmVhdGVyVGhhbk9y
RXF1YWxUbzsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmxlc3NUaGFuT3JF
cXVhbFRvOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWlt
cG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OwotCi1pbXBvcnQgYW5kcm9p
ZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0
IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1p
bXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2
YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGph
dmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcu
Y2hyb21pdW0uYmFzZS50ZXN0LnBhcmFtcy5CYXNlSlVuaXQ0UnVubmVyRGVsZWdhdGU7Ci1pbXBv
cnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5wYXJhbXMuUGFyYW1ldGVyQW5ub3RhdGlvbnMuQ2xh
c3NQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJhc2UudGVzdC5wYXJhbXMuUGFyYW1l
dGVyQW5ub3RhdGlvbnMuVXNlUnVubmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJh
c2UudGVzdC5wYXJhbXMuUGFyYW1ldGVyU2V0OwotaW1wb3J0IG9yZy5jaHJvbWl1bS5iYXNlLnRl
c3QucGFyYW1zLlBhcmFtZXRlcml6ZWRSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNs
YXNzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVu
V2l0aDsKLQotLyoqCi0gKiBUZXN0IFZpZGVvRnJhbWUgYnVmZmVycyBvZiBkaWZmZXJlbnQga2lu
ZCBvZiBmb3JtYXRzOiBJNDIwLCBSR0IsIE9FUywgTlYxMiwgTlYyMSwgYW5kIHZlcmlmeQotICog
dG9JNDIwKCkgYW5kIGNyb3BBbmRTY2FsZSgpIGJlaGF2aW9yLiBDcmVhdGluZyBSR0IvT0VTIHRl
eHR1cmVzIGludm9sdmVzIFZpZGVvRnJhbWVEcmF3ZXIgYW5kCi0gKiBHbFJlY3REcmF3ZXIgYW5k
IHdlIGFyZSB0ZXN0aW5nIHRoZSBmdWxsIGNoYWluIEk0MjAgLT4gT0VTL1JHQiB0ZXh0dXJlIC0+
IEk0MjAsIHdpdGggYW5kIHdpdGhvdXQKLSAqIGNyb3BwaW5nIGluIHRoZSBtaWRkbGUuIFJlYWRp
bmcgdGV4dHVyZXMgYmFjayB0byBJNDIwIGFsc28gZXhlcmNpc2VzIHRoZSBZdXZDb252ZXJ0ZXIg
Y29kZS4KLSAqLwotQFJ1bldpdGgoUGFyYW1ldGVyaXplZFJ1bm5lci5jbGFzcykKLUBVc2VSdW5u
ZXJEZWxlZ2F0ZShCYXNlSlVuaXQ0UnVubmVyRGVsZWdhdGUuY2xhc3MpCi1wdWJsaWMgY2xhc3Mg
VmlkZW9GcmFtZUJ1ZmZlclRlc3QgewotICAvKioKLSAgICogVGhlc2UgdGVzdHMgYXJlIHBhcmFt
ZXRlcml6ZWQgb24gdGhpcyBlbnVtIHdoaWNoIHJlcHJlc2VudHMgdGhlIGRpZmZlcmVudCBWaWRl
b0ZyYW1lLkJ1ZmZlcnMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBlbnVtIEJ1ZmZlclR5cGUg
eyBJNDIwLCBSR0JfVEVYVFVSRSwgT0VTX1RFWFRVUkUsIE5WMjEsIE5WMTIgfQotCi0gIEBDbGFz
c1BhcmFtZXRlciBwcml2YXRlIHN0YXRpYyBMaXN0PFBhcmFtZXRlclNldD4gQ0xBU1NfUEFSQU1T
ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgc3RhdGljIHsKLSAgICBmb3IgKEJ1ZmZlclR5cGUg
YnVmZmVyVHlwZSA6IEJ1ZmZlclR5cGUudmFsdWVzKCkpIHsKLSAgICAgIC8vIFRoZSBwYXJhbWV0
ZXJpemF0aW9uIGZyYW1ld29yayBjYW4gbm90IHNlbmQgRW51bXMsIHNvIHdlIHBhc3MgaXQgYXMg
YSBzdHJpbmcgaW5zdGVhZC4KLSAgICAgIENMQVNTX1BBUkFNUy5hZGQobmV3IFBhcmFtZXRlclNl
dCgpLnZhbHVlKGJ1ZmZlclR5cGUubmFtZSgpKS5uYW1lKGJ1ZmZlclR5cGUubmFtZSgpKSk7Ci0g
ICAgfQotICB9Ci0KLSAgQEJlZm9yZUNsYXNzCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgp
IHsKLSAgICAvLyBOZWVkZWQgZm9yIEpuaUNvbW1vbi5uYXRpdmVBbGxvY2F0ZUJ5dGVCdWZmZXIo
KSB0byB3b3JrLCB3aGljaCBpcyB1c2VkIGZyb20gSmF2YUk0MjBCdWZmZXIuCi0gICAgU3lzdGVt
LmxvYWRMaWJyYXJ5KFRlc3RDb25zdGFudHMuTkFUSVZFX0xJQlJBUlkpOwotICB9Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBCdWZmZXJUeXBlIGJ1ZmZlclR5cGU7Ci0KLSAgcHVibGljIFZpZGVvRnJhbWVC
dWZmZXJUZXN0KFN0cmluZyBidWZmZXJUeXBlTmFtZSkgewotICAgIC8vIFBhcnNlIHRoZSBzdHJp
bmcgYmFjayB0byBhbiBlbnVtLgotICAgIGJ1ZmZlclR5cGUgPSBCdWZmZXJUeXBlLnZhbHVlT2Yo
YnVmZmVyVHlwZU5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIFZpZGVvRnJhbWUu
QnVmZmVyIG9mIHRoZSBnaXZlbiB0eXBlIHdpdGggdGhlIHNhbWUgcGl4ZWwgY29udGVudCBhcyB0
aGUgZ2l2ZW4gSTQyMAotICAgKiBidWZmZXIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBWaWRl
b0ZyYW1lLkJ1ZmZlciBjcmVhdGVCdWZmZXJXaXRoVHlwZSgKLSAgICAgIEJ1ZmZlclR5cGUgYnVm
ZmVyVHlwZSwgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGk0MjBCdWZmZXIpIHsKLSAgICBzd2l0Y2gg
KGJ1ZmZlclR5cGUpIHsKLSAgICAgIGNhc2UgSTQyMDoKLSAgICAgICAgcmV0dXJuIGk0MjBCdWZm
ZXIudG9JNDIwKCk7Ci0gICAgICBjYXNlIFJHQl9URVhUVVJFOgotICAgICAgICByZXR1cm4gY3Jl
YXRlUmdiVGV4dHVyZUJ1ZmZlcigvKiBlZ2xDb250ZXh0PSAqLyBudWxsLCBpNDIwQnVmZmVyKTsK
LSAgICAgIGNhc2UgT0VTX1RFWFRVUkU6Ci0gICAgICAgIHJldHVybiBjcmVhdGVPZXNUZXh0dXJl
QnVmZmVyKC8qIGVnbENvbnRleHQ9ICovIG51bGwsIGk0MjBCdWZmZXIpOwotICAgICAgY2FzZSBO
VjIxOgotICAgICAgICByZXR1cm4gY3JlYXRlTlYyMUJ1ZmZlcihpNDIwQnVmZmVyKTsKLSAgICAg
IGNhc2UgTlYxMjoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5WMTJCdWZmZXIoaTQyMEJ1ZmZlcik7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uKCJVbmtub3duIGJ1ZmZlciB0eXBlOiAiICsgYnVmZmVyVHlwZSk7Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSBWaWRlb0ZyYW1lLkJ1ZmZlciBjcmVhdGVCdWZmZXJUb1Rlc3QoVmlkZW9GcmFt
ZS5JNDIwQnVmZmVyIGk0MjBCdWZmZXIpIHsKLSAgICByZXR1cm4gY3JlYXRlQnVmZmVyV2l0aFR5
cGUodGhpcy5idWZmZXJUeXBlLCBpNDIwQnVmZmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVh
dGVzIGEgMTZ4MTYgSTQyMCBidWZmZXIgdGhhdCB2YXJpZXMgc21vb3RobHkgYW5kIHNwYW5zIGFs
bCBSR0IgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBWaWRlb0ZyYW1lLkk0MjBCdWZm
ZXIgY3JlYXRlVGVzdEk0MjBCdWZmZXIoKSB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0gMTY7Ci0g
ICAgZmluYWwgaW50IGhlaWdodCA9IDE2OwotICAgIGZpbmFsIGludFtdIHlEYXRhID0gbmV3IGlu
dFtdIHsxNTYsIDE2MiwgMTY3LCAxNzIsIDE3NywgMTgyLCAxODcsIDE5MywgMTk5LCAyMDMsIDIw
OSwgMjE0LCAyMTksCi0gICAgICAgIDIyNCwgMjI5LCAyMzUsIDE0NywgMTUyLCAxNTcsIDE2Miwg
MTY4LCAxNzMsIDE3OCwgMTgzLCAxODgsIDE5MywgMTk5LCAyMDUsIDIxMCwgMjE1LCAyMjAsCi0g
ICAgICAgIDIyNSwgMTM4LCAxNDMsIDE0OCwgMTUzLCAxNTgsIDE2MywgMTY4LCAxNzQsIDE4MCwg
MTg0LCAxOTAsIDE5NSwgMjAwLCAyMDUsIDIxMSwgMjE2LCAxMjgsCi0gICAgICAgIDEzMywgMTM4
LCAxNDQsIDE0OSwgMTU0LCAxNTksIDE2NSwgMTcwLCAxNzUsIDE4MSwgMTg2LCAxOTEsIDE5Niwg
MjAxLCAyMDYsIDExOSwgMTI0LCAxMjksCi0gICAgICAgIDEzNCwgMTQwLCAxNDUsIDE1MCwgMTU2
LCAxNjEsIDE2NiwgMTcxLCAxNzYsIDE4MSwgMTg3LCAxOTIsIDE5NywgMTA5LCAxMTQsIDExOSwg
MTI2LCAxMzAsCi0gICAgICAgIDEzNiwgMTQxLCAxNDYsIDE1MSwgMTU2LCAxNjIsIDE2NywgMTcy
LCAxNzcsIDE4MiwgMTg3LCAxMDEsIDEwNSwgMTExLCAxMTYsIDEyMSwgMTI2LCAxMzIsCi0gICAg
ICAgIDEzNywgMTQyLCAxNDcsIDE1MiwgMTU3LCAxNjIsIDE2OCwgMTczLCAxNzgsIDkwLCA5Niwg
MTAxLCAxMDcsIDExMiwgMTE3LCAxMjIsIDEyNywgMTMyLCAxMzgsCi0gICAgICAgIDE0MywgMTQ4
LCAxNTMsIDE1OCwgMTYzLCAxNjgsIDgyLCA4NywgOTIsIDk3LCAxMDIsIDEwNywgMTEzLCAxMTgs
IDEyMywgMTI4LCAxMzMsIDEzOCwgMTQ0LAotICAgICAgICAxNDksIDE1NCwgMTU5LCA3MiwgNzcs
IDgzLCA4OCwgOTMsIDk4LCAxMDMsIDEwOCwgMTEzLCAxMTksIDEyNCwgMTI5LCAxMzQsIDEzOSwg
MTQ0LCAxNTAsIDYzLAotICAgICAgICA2OCwgNzMsIDc4LCA4MywgODksIDk0LCA5OSwgMTA0LCAx
MDksIDExNCwgMTE5LCAxMjUsIDEzMCwgMTM1LCAxNDAsIDUzLCA1OCwgNjQsIDY5LCA3NCwgNzks
Ci0gICAgICAgIDg0LCA4OSwgOTUsIDEwMCwgMTA1LCAxMTAsIDExNSwgMTIwLCAxMjYsIDEzMSwg
NDQsIDQ5LCA1NCwgNTksIDY0LCA3MCwgNzUsIDgwLCA4NSwgOTAsIDk1LAotICAgICAgICAxMDEs
IDEwNiwgMTExLCAxMTYsIDEyMSwgMzQsIDQwLCA0NSwgNTAsIDU1LCA2MCwgNjUsIDcxLCA3Niwg
ODEsIDg2LCA5MSwgOTYsIDEwMSwgMTA3LCAxMTMsCi0gICAgICAgIDI1LCAzMCwgMzUsIDQwLCA0
NiwgNTEsIDU2LCA2MSwgNjYsIDcxLCA3NywgODIsIDg3LCA5MiwgOTgsIDEwMywgMTYsIDIxLCAy
NiwgMzEsIDM2LCA0MSwgNDYsCi0gICAgICAgIDUyLCA1NywgNjIsIDY3LCA3MiwgNzcsIDgzLCA4
OSwgOTR9OwotICAgIGZpbmFsIGludFtdIHVEYXRhID0gbmV3IGludFtdIHsxMTAsIDExMywgMTE2
LCAxMTgsIDEyMCwgMTIzLCAxMjUsIDEyOCwgMTEzLCAxMTYsIDExOCwgMTIwLCAxMjMsCi0gICAg
ICAgIDEyNSwgMTI4LCAxMzAsIDExNiwgMTE4LCAxMjAsIDEyMywgMTI1LCAxMjgsIDEzMCwgMTMy
LCAxMTgsIDEyMCwgMTIzLCAxMjUsIDEyOCwgMTMwLCAxMzIsCi0gICAgICAgIDEzNSwgMTIwLCAx
MjMsIDEyNSwgMTI4LCAxMzAsIDEzMiwgMTM1LCAxMzgsIDEyMywgMTI1LCAxMjgsIDEzMCwgMTMy
LCAxMzUsIDEzOCwgMTM5LCAxMjUsCi0gICAgICAgIDEyOCwgMTMwLCAxMzIsIDEzNSwgMTM4LCAx
MzksIDE0MiwgMTI4LCAxMzAsIDEzMiwgMTM1LCAxMzgsIDEzOSwgMTQyLCAxNDV9OwotICAgIGZp
bmFsIGludFtdIHZEYXRhID0gbmV3IGludFtdIHszMSwgNDUsIDU5LCA3MywgODcsIDEwMCwgMTE0
LCAxMjcsIDQ1LCA1OSwgNzMsIDg3LCAxMDAsIDExNCwgMTI4LAotICAgICAgICAxNDEsIDU5LCA3
MywgODcsIDEwMCwgMTE0LCAxMjcsIDE0MSwgMTU1LCA3MywgODcsIDEwMCwgMTE0LCAxMjcsIDE0
MSwgMTU1LCAxNjgsIDg3LCAxMDAsCi0gICAgICAgIDExNCwgMTI4LCAxNDEsIDE1NSwgMTY4LCAx
ODIsIDEwMCwgMTE0LCAxMjgsIDE0MSwgMTU1LCAxNjgsIDE4MiwgMTk3LCAxMTQsIDEyNywgMTQx
LCAxNTUsCi0gICAgICAgIDE2OCwgMTgyLCAxOTYsIDIxMCwgMTI3LCAxNDEsIDE1NSwgMTY4LCAx
ODIsIDE5NiwgMjEwLCAyMjR9OwotICAgIHJldHVybiBKYXZhSTQyMEJ1ZmZlci53cmFwKHdpZHRo
LCBoZWlnaHQsIHRvQnl0ZUJ1ZmZlcih5RGF0YSksCi0gICAgICAgIC8qIHN0cmlkZVk9ICovIHdp
ZHRoLCB0b0J5dGVCdWZmZXIodURhdGEpLCAvKiBzdHJpZGVVPSAqLyB3aWR0aCAvIDIsIHRvQnl0
ZUJ1ZmZlcih2RGF0YSksCi0gICAgICAgIC8qIHN0cmlkZVY9ICovIHdpZHRoIC8gMiwKLSAgICAg
ICAgLyogcmVsZWFzZUNhbGxiYWNrPSAqLyBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVh
dGUgYW4gUkdCIHRleHR1cmUgYnVmZmVyIGF2YWlsYWJsZSBpbiB8ZWdsQ29udGV4dHwgd2l0aCB0
aGUgc2FtZSBwaXhlbCBjb250ZW50IGFzIHRoZSBnaXZlbgotICAgKiBJNDIwIGJ1ZmZlci4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyIGNyZWF0ZVJnYlRl
eHR1cmVCdWZmZXIoCi0gICAgICBFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCwgVmlkZW9GcmFt
ZS5JNDIwQnVmZmVyIGk0MjBCdWZmZXIpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSBpNDIwQnVm
ZmVyLmdldFdpZHRoKCk7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IGk0MjBCdWZmZXIuZ2V0SGVp
Z2h0KCk7Ci0KLSAgICBmaW5hbCBIYW5kbGVyVGhyZWFkIHJlbmRlclRocmVhZCA9IG5ldyBIYW5k
bGVyVGhyZWFkKCJSR0IgdGV4dHVyZSB0aHJlYWQiKTsKLSAgICByZW5kZXJUaHJlYWQuc3RhcnQo
KTsKLSAgICBmaW5hbCBIYW5kbGVyIHJlbmRlclRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihy
ZW5kZXJUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICAgIHJldHVybiBUaHJlYWRVdGlscy5pbnZva2VB
dEZyb250VW5pbnRlcnJ1cHRpYmx5KHJlbmRlclRocmVhZEhhbmRsZXIsICgpIC0+IHsKLSAgICAg
IC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFzIGRpc3BsYXkgb3V0cHV0
LgotICAgICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoZWdsQ29udGV4
dCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICAgIGVnbEJhc2UuY3JlYXRlRHVt
bXlQYnVmZmVyU3VyZmFjZSgpOwotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotCi0gICAg
ICBmaW5hbCBHbFRleHR1cmVGcmFtZUJ1ZmZlciB0ZXh0dXJlRnJhbWVCdWZmZXIgPSBuZXcgR2xU
ZXh0dXJlRnJhbWVCdWZmZXIoR0xFUzIwLkdMX1JHQkEpOwotICAgICAgdGV4dHVyZUZyYW1lQnVm
ZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1
ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIHRleHR1cmVGcmFtZUJ1ZmZlci5nZXRGcmFtZUJ1
ZmZlcklkKCkpOwotICAgICAgZHJhd0k0MjBCdWZmZXIoaTQyMEJ1ZmZlcik7Ci0gICAgICBHTEVT
MjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLQotICAgICAg
ZmluYWwgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlciA9IG5ldyBZdXZDb252ZXJ0ZXIoKTsKLSAg
ICAgIHJldHVybiBuZXcgVGV4dHVyZUJ1ZmZlckltcGwod2lkdGgsIGhlaWdodCwgVmlkZW9GcmFt
ZS5UZXh0dXJlQnVmZmVyLlR5cGUuUkdCLAotICAgICAgICAgIHRleHR1cmVGcmFtZUJ1ZmZlci5n
ZXRUZXh0dXJlSWQoKSwKLSAgICAgICAgICAvKiB0cmFuc2Zvcm1NYXRyaXg9ICovIG5ldyBNYXRy
aXgoKSwgcmVuZGVyVGhyZWFkSGFuZGxlciwgeXV2Q29udmVydGVyLAotICAgICAgICAgIC8qIHJl
bGVhc2VDYWxsYmFjaz0gKi8gKCkgLT4gcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KCgpIC0+IHsK
LSAgICAgICAgICAgIHRleHR1cmVGcmFtZUJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICB5
dXZDb252ZXJ0ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICByZW5kZXJUaHJlYWQucXVpdCgpOwotICAgICAgICAgIH0pKTsKLSAgICB9KTsK
LSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gT0VTIHRleHR1cmUgYnVmZmVyIGF2YWlsYWJs
ZSBpbiB8ZWdsQ29udGV4dHwgd2l0aCB0aGUgc2FtZSBwaXhlbCBjb250ZW50IGFzIHRoZSBnaXZl
bgotICAgKiBJNDIwIGJ1ZmZlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9GcmFtZS5U
ZXh0dXJlQnVmZmVyIGNyZWF0ZU9lc1RleHR1cmVCdWZmZXIoCi0gICAgICBFZ2xCYXNlLkNvbnRl
eHQgZWdsQ29udGV4dCwgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGk0MjBCdWZmZXIpIHsKLSAgICBm
aW5hbCBpbnQgd2lkdGggPSBpNDIwQnVmZmVyLmdldFdpZHRoKCk7Ci0gICAgZmluYWwgaW50IGhl
aWdodCA9IGk0MjBCdWZmZXIuZ2V0SGVpZ2h0KCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2Vz
IGZvciBnZW5lcmF0aW5nIE9FUyB0ZXh0dXJlcy4KLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVy
LmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIsIGVnbENvbnRleHQpOwotICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLnNldFRleHR1cmVTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0gICAg
ZmluYWwgSGFuZGxlclRocmVhZCByZW5kZXJUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCgiT0VT
IHRleHR1cmUgdGhyZWFkIik7Ci0gICAgcmVuZGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgZmluYWwg
SGFuZGxlciByZW5kZXJUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIocmVuZGVyVGhyZWFkLmdl
dExvb3BlcigpKTsKLSAgICBmaW5hbCBWaWRlb0ZyYW1lLlRleHR1cmVCdWZmZXIgb2VzQnVmZmVy
ID0KLSAgICAgICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShyZW5k
ZXJUaHJlYWRIYW5kbGVyLCAoKSAtPiB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdp
dGggdGhlIFN1cmZhY2VUZXh0dXJlIGFzIGRpc3BsYXkgb3V0cHV0LgotICAgICAgICAgIGZpbmFs
IEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKGVnbENvbnRleHQsIEVnbEJhc2UuQ09O
RklHX1BMQUlOKTsKLSAgICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1
cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgICAgICAgZWdsQmFzZS5tYWtlQ3Vy
cmVudCgpOwotICAgICAgICAgIGFzc2VydEVxdWFscyh3aWR0aCwgZWdsQmFzZS5zdXJmYWNlV2lk
dGgoKSk7Ci0gICAgICAgICAgYXNzZXJ0RXF1YWxzKGhlaWdodCwgZWdsQmFzZS5zdXJmYWNlSGVp
Z2h0KCkpOwotCi0gICAgICAgICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXJUZXN0Lk1vY2tU
ZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPQotICAgICAgICAgICAgICBuZXcgU3VyZmFjZVRleHR1
cmVIZWxwZXJUZXN0Lk1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICAgICAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0KLSAgICAgICAgICAvLyBEcmF3
IHRoZSBmcmFtZSBhbmQgYmxvY2sgdW50aWwgYW4gT0VTIHRleHR1cmUgaXMgZGVsaXZlcmVkLgot
ICAgICAgICAgIGRyYXdJNDIwQnVmZmVyKGk0MjBCdWZmZXIpOwotICAgICAgICAgIGVnbEJhc2Uu
c3dhcEJ1ZmZlcnMoKTsKLSAgICAgICAgICBmaW5hbCBWaWRlb0ZyYW1lLlRleHR1cmVCdWZmZXIg
dGV4dHVyZUJ1ZmZlciA9IGxpc3RlbmVyLndhaXRGb3JUZXh0dXJlQnVmZmVyKCk7Ci0gICAgICAg
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAgICAgICAgIHN1cmZh
Y2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLQotICAgICAgICAgIHJldHVybiB0ZXh0dXJlQnVm
ZmVyOwotICAgICAgICB9KTsKLSAgICByZW5kZXJUaHJlYWQucXVpdCgpOwotCi0gICAgcmV0dXJu
IG9lc0J1ZmZlcjsKLSAgfQotCi0gIC8qKiBDcmVhdGUgYW4gTlYyMUJ1ZmZlciB3aXRoIHRoZSBz
YW1lIHBpeGVsIGNvbnRlbnQgYXMgdGhlIGdpdmVuIEk0MjAgYnVmZmVyLiAqLwotICBwdWJsaWMg
c3RhdGljIE5WMjFCdWZmZXIgY3JlYXRlTlYyMUJ1ZmZlcihWaWRlb0ZyYW1lLkk0MjBCdWZmZXIg
aTQyMEJ1ZmZlcikgewotICAgIGZpbmFsIGludCB3aWR0aCA9IGk0MjBCdWZmZXIuZ2V0V2lkdGgo
KTsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gaTQyMEJ1ZmZlci5nZXRIZWlnaHQoKTsKLSAgICBm
aW5hbCBpbnQgY2hyb21hU3RyaWRlID0gd2lkdGg7Ci0gICAgZmluYWwgaW50IGNocm9tYVdpZHRo
ID0gKHdpZHRoICsgMSkgLyAyOwotICAgIGZpbmFsIGludCBjaHJvbWFIZWlnaHQgPSAoaGVpZ2h0
ICsgMSkgLyAyOwotICAgIGZpbmFsIGludCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0OwotCi0gICAg
ZmluYWwgQnl0ZUJ1ZmZlciBudjIxQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh5
U2l6ZSArIGNocm9tYVN0cmlkZSAqIGNocm9tYUhlaWdodCk7Ci0gICAgLy8gV2UgZG9uJ3QgY2Fy
ZSB3aGF0IHRoZSBhcnJheSBvZmZzZXQgaXMgc2luY2Ugd2Ugb25seSB3YW50IGFuIGFycmF5IHRo
YXQgaXMgZGlyZWN0LgotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJCeXRlQnVmZmVyQmFja2luZ0Fy
cmF5IikgZmluYWwgYnl0ZVtdIG52MjFEYXRhID0gbnYyMUJ1ZmZlci5hcnJheSgpOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgIGZpbmFsIGJ5dGUgeVZhbHVlID0gaTQyMEJ1ZmZl
ci5nZXREYXRhWSgpLmdldCh5ICogaTQyMEJ1ZmZlci5nZXRTdHJpZGVZKCkgKyB4KTsKLSAgICAg
ICAgbnYyMURhdGFbeSAqIHdpZHRoICsgeF0gPSB5VmFsdWU7Ci0gICAgICB9Ci0gICAgfQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgY2hyb21hSGVpZ2h0OyArK3kpIHsKLSAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgY2hyb21hV2lkdGg7ICsreCkgewotICAgICAgICBmaW5hbCBieXRlIHVWYWx1
ZSA9IGk0MjBCdWZmZXIuZ2V0RGF0YVUoKS5nZXQoeSAqIGk0MjBCdWZmZXIuZ2V0U3RyaWRlVSgp
ICsgeCk7Ci0gICAgICAgIGZpbmFsIGJ5dGUgdlZhbHVlID0gaTQyMEJ1ZmZlci5nZXREYXRhVigp
LmdldCh5ICogaTQyMEJ1ZmZlci5nZXRTdHJpZGVWKCkgKyB4KTsKLSAgICAgICAgbnYyMURhdGFb
eVNpemUgKyB5ICogY2hyb21hU3RyaWRlICsgMiAqIHggKyAwXSA9IHZWYWx1ZTsKLSAgICAgICAg
bnYyMURhdGFbeVNpemUgKyB5ICogY2hyb21hU3RyaWRlICsgMiAqIHggKyAxXSA9IHVWYWx1ZTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBOVjIxQnVmZmVyKG52MjFEYXRhLCB3aWR0
aCwgaGVpZ2h0LCAvKiByZWxlYXNlQ2FsbGJhY2s9ICovIG51bGwpOwotICB9Ci0KLSAgLyoqIENy
ZWF0ZSBhbiBOVjEyQnVmZmVyIHdpdGggdGhlIHNhbWUgcGl4ZWwgY29udGVudCBhcyB0aGUgZ2l2
ZW4gSTQyMCBidWZmZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgTlYxMkJ1ZmZlciBjcmVhdGVOVjEy
QnVmZmVyKFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBpNDIwQnVmZmVyKSB7Ci0gICAgZmluYWwgaW50
IHdpZHRoID0gaTQyMEJ1ZmZlci5nZXRXaWR0aCgpOwotICAgIGZpbmFsIGludCBoZWlnaHQgPSBp
NDIwQnVmZmVyLmdldEhlaWdodCgpOwotICAgIGZpbmFsIGludCBjaHJvbWFTdHJpZGUgPSB3aWR0
aDsKLSAgICBmaW5hbCBpbnQgY2hyb21hV2lkdGggPSAod2lkdGggKyAxKSAvIDI7Ci0gICAgZmlu
YWwgaW50IGNocm9tYUhlaWdodCA9IChoZWlnaHQgKyAxKSAvIDI7Ci0gICAgZmluYWwgaW50IHlT
aXplID0gd2lkdGggKiBoZWlnaHQ7Ci0KLSAgICBmaW5hbCBCeXRlQnVmZmVyIG52MTJCdWZmZXIg
PSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHlTaXplICsgY2hyb21hU3RyaWRlICogY2hyb21h
SGVpZ2h0KTsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewotICAgICAgICBmaW5hbCBieXRlIHlW
YWx1ZSA9IGk0MjBCdWZmZXIuZ2V0RGF0YVkoKS5nZXQoeSAqIGk0MjBCdWZmZXIuZ2V0U3RyaWRl
WSgpICsgeCk7Ci0gICAgICAgIG52MTJCdWZmZXIucHV0KHkgKiB3aWR0aCArIHgsIHlWYWx1ZSk7
Ci0gICAgICB9Ci0gICAgfQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY2hyb21hSGVpZ2h0OyAr
K3kpIHsKLSAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgY2hyb21hV2lkdGg7ICsreCkgewotICAg
ICAgICBmaW5hbCBieXRlIHVWYWx1ZSA9IGk0MjBCdWZmZXIuZ2V0RGF0YVUoKS5nZXQoeSAqIGk0
MjBCdWZmZXIuZ2V0U3RyaWRlVSgpICsgeCk7Ci0gICAgICAgIGZpbmFsIGJ5dGUgdlZhbHVlID0g
aTQyMEJ1ZmZlci5nZXREYXRhVigpLmdldCh5ICogaTQyMEJ1ZmZlci5nZXRTdHJpZGVWKCkgKyB4
KTsKLSAgICAgICAgbnYxMkJ1ZmZlci5wdXQoeVNpemUgKyB5ICogY2hyb21hU3RyaWRlICsgMiAq
IHggKyAwLCB1VmFsdWUpOwotICAgICAgICBudjEyQnVmZmVyLnB1dCh5U2l6ZSArIHkgKiBjaHJv
bWFTdHJpZGUgKyAyICogeCArIDEsIHZWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBuZXcgTlYxMkJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCAvKiBzdHJpZGU9ICovIHdpZHRoLCAvKiBz
bGljZUhlaWdodD0gKi8gaGVpZ2h0LCBudjEyQnVmZmVyLAotICAgICAgICAvKiByZWxlYXNlQ2Fs
bGJhY2sgKi8gbnVsbCk7Ci0gIH0KLQotICAvKiogUHJpbnQgdGhlIEJ5dGVCdWZmZXIgcGxhbmUg
dG8gdGhlIFN0cmluZ0J1aWxkZXIuICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRQbGFu
ZSgKLSAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlciwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBCeXRlQnVmZmVyIHBsYW5lLCBpbnQgc3RyaWRlKSB7Ci0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4
KSB7Ci0gICAgICAgIGZpbmFsIGludCB2YWx1ZSA9IHBsYW5lLmdldCh5ICogc3RyaWRlICsgeCkg
JiAweEZGOwotICAgICAgICBpZiAoeCAhPSAwKSB7Ci0gICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiwgIik7Ci0gICAgICAgIH0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodmFs
dWUpOwotICAgICAgfQotICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuIik7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqIENvbnZlcnQgdGhlIHBpeGVsIGNvbnRlbnQgb2YgYW4gSTQyMCBidWZmZXIg
dG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBp
NDIwQnVmZmVyVG9TdHJpbmcoVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGJ1ZmZlcikgewotICAgIGZp
bmFsIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICJJNDIwIGJ1ZmZlciB3aXRoIHNpemU6
ICIgKyBidWZmZXIuZ2V0V2lkdGgoKSArICJ4IiArIGJ1ZmZlci5nZXRIZWlnaHQoKSArICIuXG4i
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiWS1wbGFuZTpcbiIpOwotICAgIHByaW50UGxh
bmUoc3RyaW5nQnVpbGRlciwgYnVmZmVyLmdldFdpZHRoKCksIGJ1ZmZlci5nZXRIZWlnaHQoKSwg
YnVmZmVyLmdldERhdGFZKCksCi0gICAgICAgIGJ1ZmZlci5nZXRTdHJpZGVZKCkpOwotICAgIGZp
bmFsIGludCBjaHJvbWFXaWR0aCA9IChidWZmZXIuZ2V0V2lkdGgoKSArIDEpIC8gMjsKLSAgICBm
aW5hbCBpbnQgY2hyb21hSGVpZ2h0ID0gKGJ1ZmZlci5nZXRIZWlnaHQoKSArIDEpIC8gMjsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiVS1wbGFuZTpcbiIpOwotICAgIHByaW50UGxhbmUoc3Ry
aW5nQnVpbGRlciwgY2hyb21hV2lkdGgsIGNocm9tYUhlaWdodCwgYnVmZmVyLmdldERhdGFVKCks
IGJ1ZmZlci5nZXRTdHJpZGVVKCkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJWLXBsYW5l
OlxuIik7Ci0gICAgcHJpbnRQbGFuZShzdHJpbmdCdWlsZGVyLCBjaHJvbWFXaWR0aCwgY2hyb21h
SGVpZ2h0LCBidWZmZXIuZ2V0RGF0YVYoKSwgYnVmZmVyLmdldFN0cmlkZVYoKSk7Ci0gICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBBc3NlcnQg
dGhhdCB0aGUgZ2l2ZW4gSTQyMCBidWZmZXJzIGFyZSBhbG1vc3QgaWRlbnRpY2FsLCBhbGxvd2lu
ZyBmb3Igc29tZSBkaWZmZXJlbmNlIGR1ZSB0bwotICAgKiBudW1lcmljYWwgZXJyb3JzLiBJdCBo
YXMgbGltaXRzIGZvciBib3RoIG92ZXJhbGwgUFNOUiBhbmQgbWF4aW11bSBpbmRpdmlkdWFsIHBp
eGVsIGRpZmZlcmVuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0QWxtb3N0
RXF1YWxJNDIwQnVmZmVycygKLSAgICAgIFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBidWZmZXJBLCBW
aWRlb0ZyYW1lLkk0MjBCdWZmZXIgYnVmZmVyQikgewotICAgIGZpbmFsIGludCBkaWZmID0gbWF4
RGlmZihidWZmZXJBLCBidWZmZXJCKTsKLSAgICBhc3NlcnRUaGF0KCJQaXhlbCBkaWZmZXJlbmNl
IHRvbyBoaWdoOiAiICsgZGlmZiArICIuIgotICAgICAgICAgICAgKyAiXG5CdWZmZXIgQTogIiAr
IGk0MjBCdWZmZXJUb1N0cmluZyhidWZmZXJBKQotICAgICAgICAgICAgKyAiQnVmZmVyIEI6ICIg
KyBpNDIwQnVmZmVyVG9TdHJpbmcoYnVmZmVyQiksCi0gICAgICAgIGRpZmYsIGxlc3NUaGFuT3JF
cXVhbFRvKDQpKTsKLSAgICBmaW5hbCBkb3VibGUgcHNuciA9IGNhbGN1bGF0ZVBzbnIoYnVmZmVy
QSwgYnVmZmVyQik7Ci0gICAgYXNzZXJ0VGhhdCgiUFNOUiB0b28gbG93OiAiICsgcHNuciArICIu
IgotICAgICAgICAgICAgKyAiXG5CdWZmZXIgQTogIiArIGk0MjBCdWZmZXJUb1N0cmluZyhidWZm
ZXJBKQotICAgICAgICAgICAgKyAiQnVmZmVyIEI6ICIgKyBpNDIwQnVmZmVyVG9TdHJpbmcoYnVm
ZmVyQiksCi0gICAgICAgIHBzbnIsIGdyZWF0ZXJUaGFuT3JFcXVhbFRvKDUwLjApKTsKLSAgfQot
Ci0gIC8qKiBSZXR1cm5zIGEgZmxhdHRlbmVkIGxpc3Qgb2YgcGl4ZWwgZGlmZmVyZW5jZXMgZm9y
IHR3byBCeXRlQnVmZmVyIHBsYW5lcy4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxJbnRlZ2Vy
PiBnZXRQaXhlbERpZmZzKAotICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBCeXRlQnVmZmVy
IHBsYW5lQSwgaW50IHN0cmlkZUEsIEJ5dGVCdWZmZXIgcGxhbmVCLCBpbnQgc3RyaWRlQikgewot
ICAgIExpc3Q8SW50ZWdlcj4gcmVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KSB7Ci0gICAgICAgIGZpbmFsIGludCB2YWx1ZUEgPSBwbGFuZUEuZ2V0KHkgKiBzdHJp
ZGVBICsgeCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgdmFsdWVCID0gcGxhbmVCLmdldCh5
ICogc3RyaWRlQiArIHgpICYgMHhGRjsKLSAgICAgICAgcmVzLmFkZChNYXRoLmFicyh2YWx1ZUEg
LSB2YWx1ZUIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8q
KiBSZXR1cm5zIGEgZmxhdHRlbmVkIGxpc3Qgb2YgcGl4ZWwgZGlmZmVyZW5jZXMgZm9yIHR3byBJ
NDIwIGJ1ZmZlcnMuICovCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8SW50ZWdlcj4gZ2V0UGl4ZWxE
aWZmcygKLSAgICAgIFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBidWZmZXJBLCBWaWRlb0ZyYW1lLkk0
MjBCdWZmZXIgYnVmZmVyQikgewotICAgIGFzc2VydEVxdWFscyhidWZmZXJBLmdldFdpZHRoKCks
IGJ1ZmZlckIuZ2V0V2lkdGgoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGJ1ZmZlckEuZ2V0SGVpZ2h0
KCksIGJ1ZmZlckIuZ2V0SGVpZ2h0KCkpOwotICAgIGZpbmFsIGludCB3aWR0aCA9IGJ1ZmZlckEu
Z2V0V2lkdGgoKTsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gYnVmZmVyQS5nZXRIZWlnaHQoKTsK
LSAgICBmaW5hbCBpbnQgY2hyb21hV2lkdGggPSAod2lkdGggKyAxKSAvIDI7Ci0gICAgZmluYWwg
aW50IGNocm9tYUhlaWdodCA9IChoZWlnaHQgKyAxKSAvIDI7Ci0gICAgZmluYWwgTGlzdDxJbnRl
Z2VyPiBkaWZmcyA9IGdldFBpeGVsRGlmZnMod2lkdGgsIGhlaWdodCwgYnVmZmVyQS5nZXREYXRh
WSgpLAotICAgICAgICBidWZmZXJBLmdldFN0cmlkZVkoKSwgYnVmZmVyQi5nZXREYXRhWSgpLCBi
dWZmZXJCLmdldFN0cmlkZVkoKSk7Ci0gICAgZGlmZnMuYWRkQWxsKGdldFBpeGVsRGlmZnMoY2hy
b21hV2lkdGgsIGNocm9tYUhlaWdodCwgYnVmZmVyQS5nZXREYXRhVSgpLCBidWZmZXJBLmdldFN0
cmlkZVUoKSwKLSAgICAgICAgYnVmZmVyQi5nZXREYXRhVSgpLCBidWZmZXJCLmdldFN0cmlkZVUo
KSkpOwotICAgIGRpZmZzLmFkZEFsbChnZXRQaXhlbERpZmZzKGNocm9tYVdpZHRoLCBjaHJvbWFI
ZWlnaHQsIGJ1ZmZlckEuZ2V0RGF0YVYoKSwgYnVmZmVyQS5nZXRTdHJpZGVWKCksCi0gICAgICAg
IGJ1ZmZlckIuZ2V0RGF0YVYoKSwgYnVmZmVyQi5nZXRTdHJpZGVWKCkpKTsKLSAgICByZXR1cm4g
ZGlmZnM7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSBwaXhlbCBkaWZmZXJlbmNl
IGZyb20gYW55IG9mIHRoZSBZL1UvViBwbGFuZXMgaW4gdGhlIGdpdmVuIGJ1ZmZlcnMuICovCi0g
IHByaXZhdGUgc3RhdGljIGludCBtYXhEaWZmKFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBidWZmZXJB
LCBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgYnVmZmVyQikgewotICAgIHJldHVybiBDb2xsZWN0aW9u
cy5tYXgoZ2V0UGl4ZWxEaWZmcyhidWZmZXJBLCBidWZmZXJCKSk7Ci0gIH0KLQotICAvKioKLSAg
ICogUmV0dXJucyB0aGUgUFNOUiBnaXZlbiBhIHN1bSBvZiBzcXVhcmVkIGVycm9yIGFuZCB0aGUg
bnVtYmVyIG9mIG1lYXN1cmVtZW50cyB0aGF0IHdlcmUgYWRkZWQuCi0gICAqLwotICBwcml2YXRl
IHN0YXRpYyBkb3VibGUgc3NlVG9Qc25yKGxvbmcgc3NlLCBpbnQgY291bnQpIHsKLSAgICBpZiAo
c3NlID09IDApIHsKLSAgICAgIHJldHVybiBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFk7Ci0gICAg
fQotICAgIGZpbmFsIGRvdWJsZSBtZWFuU3F1YXJlZEVycm9yID0gKGRvdWJsZSkgc3NlIC8gKGRv
dWJsZSkgY291bnQ7Ci0gICAgZmluYWwgZG91YmxlIG1heFBpeGVsVmFsdWUgPSAyNTUuMDsKLSAg
ICByZXR1cm4gMTAuMCAqIE1hdGgubG9nMTAobWF4UGl4ZWxWYWx1ZSAqIG1heFBpeGVsVmFsdWUg
LyBtZWFuU3F1YXJlZEVycm9yKTsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIHRoZSBQU05SIG9mIHRo
ZSBnaXZlbiBJNDIwIGJ1ZmZlcnMuICovCi0gIHByaXZhdGUgc3RhdGljIGRvdWJsZSBjYWxjdWxh
dGVQc25yKAotICAgICAgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGJ1ZmZlckEsIFZpZGVvRnJhbWUu
STQyMEJ1ZmZlciBidWZmZXJCKSB7Ci0gICAgZmluYWwgTGlzdDxJbnRlZ2VyPiBwaXhlbERpZmZz
ID0gZ2V0UGl4ZWxEaWZmcyhidWZmZXJBLCBidWZmZXJCKTsKLSAgICBsb25nIHNzZSA9IDA7Ci0g
ICAgZm9yIChpbnQgcGl4ZWxEaWZmIDogcGl4ZWxEaWZmcykgewotICAgICAgc3NlICs9IHBpeGVs
RGlmZiAqIHBpeGVsRGlmZjsKLSAgICB9Ci0gICAgcmV0dXJuIHNzZVRvUHNucihzc2UsIHBpeGVs
RGlmZnMuc2l6ZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGFuIGludCBhcnJheSB0
byBhIGJ5dGUgYXJyYXkgYW5kIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJh
bmdlIFswLCAyNTVdLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIHRvQnl0ZUFycmF5
KGludFtdIGFycmF5KSB7Ci0gICAgZmluYWwgYnl0ZVtdIHJlcyA9IG5ldyBieXRlW2FycmF5Lmxl
bmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewotICAg
ICAgZmluYWwgaW50IHZhbHVlID0gYXJyYXlbaV07Ci0gICAgICBhc3NlcnRUaGF0KHZhbHVlLCBn
cmVhdGVyVGhhbk9yRXF1YWxUbygwKSk7Ci0gICAgICBhc3NlcnRUaGF0KHZhbHVlLCBsZXNzVGhh
bk9yRXF1YWxUbygyNTUpKTsKLSAgICAgIHJlc1tpXSA9IChieXRlKSB2YWx1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qKiBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIGRp
cmVjdCBCeXRlQnVmZmVyLiAqLwotICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmZmVyIHRvQnl0ZUJ1
ZmZlcihpbnRbXSBhcnJheSkgewotICAgIGZpbmFsIEJ5dGVCdWZmZXIgYnVmZmVyID0gQnl0ZUJ1
ZmZlci5hbGxvY2F0ZURpcmVjdChhcnJheS5sZW5ndGgpOwotICAgIGJ1ZmZlci5wdXQodG9CeXRl
QXJyYXkoYXJyYXkpKTsKLSAgICBidWZmZXIucmV3aW5kKCk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsK
LSAgfQotCi0gIC8qKgotICAgKiBEcmF3IGFuIEk0MjAgYnVmZmVyIG9uIHRoZSBjdXJyZW50bHkg
Ym91bmQgZnJhbWUgYnVmZmVyLCBhbGxvY2F0aW5nIGFuZCByZWxlYXNpbmcgYW55Ci0gICAqIHJl
c291cmNlcyBuZWNlc3NhcnkuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXdJNDIw
QnVmZmVyKFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBpNDIwQnVmZmVyKSB7Ci0gICAgZmluYWwgR2xS
ZWN0RHJhd2VyIGRyYXdlciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsKLSAgICBmaW5hbCBWaWRlb0Zy
YW1lRHJhd2VyIHZpZGVvRnJhbWVEcmF3ZXIgPSBuZXcgVmlkZW9GcmFtZURyYXdlcigpOwotICAg
IHZpZGVvRnJhbWVEcmF3ZXIuZHJhd0ZyYW1lKAotICAgICAgICBuZXcgVmlkZW9GcmFtZShpNDIw
QnVmZmVyLCAvKiByb3RhdGlvbj0gKi8gMCwgLyogdGltZXN0YW1wTnM9ICovIDApLCBkcmF3ZXIp
OwotICAgIHZpZGVvRnJhbWVEcmF3ZXIucmVsZWFzZSgpOwotICAgIGRyYXdlci5yZWxlYXNlKCk7
Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgdGVzdHMgY3JvcEFuZFNj
YWxlKCkgd2l0aCB0aGUgZ2l2ZW4gY3JvcHBpbmcgYW5kIHNjYWxpbmcgcGFyYW1ldGVycywgYW5k
Ci0gICAqIGNvbXBhcmVzIHRoZSBwaXhlbCBjb250ZW50IGFnYWluc3QgYSByZWZlcmVuY2UgSTQy
MCBidWZmZXIuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdGVzdENyb3BBbmRTY2FsZSgKLSAgICAg
IGludCBjcm9wWCwgaW50IGNyb3BZLCBpbnQgY3JvcFdpZHRoLCBpbnQgY3JvcEhlaWdodCwgaW50
IHNjYWxlV2lkdGgsIGludCBzY2FsZUhlaWdodCkgewotICAgIGZpbmFsIFZpZGVvRnJhbWUuSTQy
MEJ1ZmZlciByZWZlcmVuY2VJNDIwQnVmZmVyID0gY3JlYXRlVGVzdEk0MjBCdWZmZXIoKTsKLSAg
ICBmaW5hbCBWaWRlb0ZyYW1lLkJ1ZmZlciBidWZmZXJUb1Rlc3QgPSBjcmVhdGVCdWZmZXJUb1Rl
c3QocmVmZXJlbmNlSTQyMEJ1ZmZlcik7Ci0KLSAgICBmaW5hbCBWaWRlb0ZyYW1lLkJ1ZmZlciBj
cm9wcGVkUmVmZXJlbmNlQnVmZmVyID0gcmVmZXJlbmNlSTQyMEJ1ZmZlci5jcm9wQW5kU2NhbGUo
Ci0gICAgICAgIGNyb3BYLCBjcm9wWSwgY3JvcFdpZHRoLCBjcm9wSGVpZ2h0LCBzY2FsZVdpZHRo
LCBzY2FsZUhlaWdodCk7Ci0gICAgcmVmZXJlbmNlSTQyMEJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAg
ZmluYWwgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGNyb3BwZWRSZWZlcmVuY2VJNDIwQnVmZmVyID0g
Y3JvcHBlZFJlZmVyZW5jZUJ1ZmZlci50b0k0MjAoKTsKLSAgICBjcm9wcGVkUmVmZXJlbmNlQnVm
ZmVyLnJlbGVhc2UoKTsKLQotICAgIGZpbmFsIFZpZGVvRnJhbWUuQnVmZmVyIGNyb3BwZWRCdWZm
ZXJUb1Rlc3QgPQotICAgICAgICBidWZmZXJUb1Rlc3QuY3JvcEFuZFNjYWxlKGNyb3BYLCBjcm9w
WSwgY3JvcFdpZHRoLCBjcm9wSGVpZ2h0LCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCk7Ci0gICAg
YnVmZmVyVG9UZXN0LnJlbGVhc2UoKTsKLQotICAgIGZpbmFsIFZpZGVvRnJhbWUuSTQyMEJ1ZmZl
ciBjcm9wcGVkT3V0cHV0STQyMEJ1ZmZlciA9IGNyb3BwZWRCdWZmZXJUb1Rlc3QudG9JNDIwKCk7
Ci0gICAgY3JvcHBlZEJ1ZmZlclRvVGVzdC5yZWxlYXNlKCk7Ci0KLSAgICBhc3NlcnRBbG1vc3RF
cXVhbEk0MjBCdWZmZXJzKGNyb3BwZWRSZWZlcmVuY2VJNDIwQnVmZmVyLCBjcm9wcGVkT3V0cHV0
STQyMEJ1ZmZlcik7Ci0gICAgY3JvcHBlZFJlZmVyZW5jZUk0MjBCdWZmZXIucmVsZWFzZSgpOwot
ICAgIGNyb3BwZWRPdXRwdXRJNDIwQnVmZmVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBUZXN0Ci0g
IEBTbWFsbFRlc3QKLSAgLyoqIFRlc3QgY2FsbGluZyB0b0k0MjAoKSBhbmQgY29tcGFyaW5nIHBp
eGVsIGNvbnRlbnQgYWdhaW5zdCBJNDIwIHJlZmVyZW5jZS4gKi8KLSAgcHVibGljIHZvaWQgdGVz
dFRvSTQyMCgpIHsKLSAgICBmaW5hbCBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgcmVmZXJlbmNlSTQy
MEJ1ZmZlciA9IGNyZWF0ZVRlc3RJNDIwQnVmZmVyKCk7Ci0gICAgZmluYWwgVmlkZW9GcmFtZS5C
dWZmZXIgYnVmZmVyVG9UZXN0ID0gY3JlYXRlQnVmZmVyVG9UZXN0KHJlZmVyZW5jZUk0MjBCdWZm
ZXIpOwotCi0gICAgZmluYWwgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIG91dHB1dEk0MjBCdWZmZXIg
PSBidWZmZXJUb1Rlc3QudG9JNDIwKCk7Ci0gICAgYnVmZmVyVG9UZXN0LnJlbGVhc2UoKTsKLQot
ICAgIGFzc2VydEFsbW9zdEVxdWFsSTQyMEJ1ZmZlcnMocmVmZXJlbmNlSTQyMEJ1ZmZlciwgb3V0
cHV0STQyMEJ1ZmZlcik7Ci0gICAgcmVmZXJlbmNlSTQyMEJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAg
b3V0cHV0STQyMEJ1ZmZlci5yZWxlYXNlKCk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0
Ci0gIC8qKiBQdXJlIDJ4IHNjYWxpbmcgd2l0aCBubyBjcm9wcGluZy4gKi8KLSAgcHVibGljIHZv
aWQgdGVzdFNjYWxlMngoKSB7Ci0gICAgdGVzdENyb3BBbmRTY2FsZSgwIC8qIGNyb3BYPSAqLywg
MCAvKiBjcm9wWT0gKi8sIC8qIGNyb3BXaWR0aD0gKi8gMTYsIC8qIGNyb3BIZWlnaHQ9ICovIDE2
LAotICAgICAgICAvKiBzY2FsZVdpZHRoPSAqLyA4LCAvKiBzY2FsZUhlaWdodD0gKi8gOCk7Ci0g
IH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIC8qKiBUZXN0IGNyb3BwaW5nIG9ubHkgWCBk
aXJlY3Rpb24sIHdpdGggbm8gc2NhbGluZy4gKi8KLSAgcHVibGljIHZvaWQgdGVzdENyb3BYKCkg
ewotICAgIHRlc3RDcm9wQW5kU2NhbGUoOCAvKiBjcm9wWD0gKi8sIDAgLyogY3JvcFk9ICovLCAv
KiBjcm9wV2lkdGg9ICovIDgsIC8qIGNyb3BIZWlnaHQ9ICovIDE2LAotICAgICAgICAvKiBzY2Fs
ZVdpZHRoPSAqLyA4LCAvKiBzY2FsZUhlaWdodD0gKi8gMTYpOwotICB9Ci0KLSAgQFRlc3QKLSAg
QFNtYWxsVGVzdAotICAvKiogVGVzdCBjcm9wcGluZyBvbmx5IFkgZGlyZWN0aW9uLCB3aXRoIG5v
IHNjYWxpbmcuICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDcm9wWSgpIHsKLSAgICB0ZXN0Q3JvcEFu
ZFNjYWxlKDAgLyogY3JvcFg9ICovLCA4IC8qIGNyb3BZPSAqLywgLyogY3JvcFdpZHRoPSAqLyAx
NiwgLyogY3JvcEhlaWdodD0gKi8gOCwKLSAgICAgICAgLyogc2NhbGVXaWR0aD0gKi8gMTYsIC8q
IHNjYWxlSGVpZ2h0PSAqLyA4KTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgLyoq
IFRlc3QgY2VudGVyIGNyb3AsIHdpdGggbm8gc2NhbGluZy4gKi8KLSAgcHVibGljIHZvaWQgdGVz
dENlbnRlckNyb3AoKSB7Ci0gICAgdGVzdENyb3BBbmRTY2FsZSg0IC8qIGNyb3BYPSAqLywgNCAv
KiBjcm9wWT0gKi8sIC8qIGNyb3BXaWR0aD0gKi8gOCwgLyogY3JvcEhlaWdodD0gKi8gOCwKLSAg
ICAgICAgLyogc2NhbGVXaWR0aD0gKi8gOCwgLyogc2NhbGVIZWlnaHQ9ICovIDgpOwotICB9Ci0K
LSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICAvKiogVGVzdCBub24tY2VudGVyIGNyb3AgZm9yIHJp
Z2h0IGJvdHRvbSBjb3JuZXIsIHdpdGggbm8gc2NhbGluZy4gKi8KLSAgcHVibGljIHZvaWQgdGVz
dFJpZ2h0Qm90dG9tQ29ybmVyQ3JvcCgpIHsKLSAgICB0ZXN0Q3JvcEFuZFNjYWxlKDggLyogY3Jv
cFg9ICovLCA4IC8qIGNyb3BZPSAqLywgLyogY3JvcFdpZHRoPSAqLyA4LCAvKiBjcm9wSGVpZ2h0
PSAqLyA4LAotICAgICAgICAvKiBzY2FsZVdpZHRoPSAqLyA4LCAvKiBzY2FsZUhlaWdodD0gKi8g
OCk7Ci0gIH0KLQotICBAVGVzdAotICBAU21hbGxUZXN0Ci0gIC8qKiBUZXN0IGNvbWJpbmVkIGNy
b3BwaW5nIGFuZCBzY2FsaW5nLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q3JvcEFuZFNjYWxlKCkg
ewotICAgIHRlc3RDcm9wQW5kU2NhbGUoNCAvKiBjcm9wWD0gKi8sIDQgLyogY3JvcFk9ICovLCAv
KiBjcm9wV2lkdGg9ICovIDEyLCAvKiBjcm9wSGVpZ2h0PSAqLyAxMiwKLSAgICAgICAgLyogc2Nh
bGVXaWR0aD0gKi8gOCwgLyogc2NhbGVIZWlnaHQ9ICovIDgpOwotICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9p
bnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrVGVzdC5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5z
dHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvVmlkZW9UcmFja1Rlc3QuamF2YQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIwZmJmNjAwYmY4YjkwN2JlOTVlOWFlMzQ1ZjA5
Yjc1YTRhNjhhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9p
bnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrVGVzdC5qYXZhCisr
KyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVx
dWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi1pbXBvcnQgYW5k
cm9pZC5zdXBwb3J0LnRlc3QuSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgYW5kcm9p
ZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgb3JnLmNocm9taXVtLmJh
c2UudGVzdC5CYXNlSlVuaXQ0Q2xhc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsK
LWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7
Ci0KLS8qKiBVbml0IHRlc3RzIGZvciB7QGxpbmsgVmlkZW9UcmFja30uICovCi1AUnVuV2l0aChC
YXNlSlVuaXQ0Q2xhc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgVmlkZW9UcmFja1Rlc3Qg
ewotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5OwotICBwcml2YXRlIFZp
ZGVvU291cmNlIHZpZGVvU291cmNlOwotICBwcml2YXRlIFZpZGVvVHJhY2sgdmlkZW9UcmFjazsK
LQotICBAQmVmb3JlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5pbml0aWFsaXplKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5Jbml0aWFsaXphdGlvbk9w
dGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkZXIo
SW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENv
bnN0YW50cy5OQVRJVkVfTElCUkFSWSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsKLQotICAgIGZhY3Rvcnkg
PSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuYnVpbGRlcigpLmNyZWF0ZVBlZXJDb25uZWN0aW9uRmFj
dG9yeSgpOwotICAgIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRlb1NvdXJjZSgvKiBp
c1NjcmVlbmNhc3Q9ICovIGZhbHNlKTsKLSAgICB2aWRlb1RyYWNrID0gZmFjdG9yeS5jcmVhdGVW
aWRlb1RyYWNrKCJ2aWRlbyIsIHZpZGVvU291cmNlKTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEFkZGluZ051bGxWaWRlb1NpbmsoKSB7Ci0gICAgdHJ5
IHsKLSAgICAgIHZpZGVvVHJhY2suYWRkU2luaygvKiBzaW5rPSAqLyBudWxsKTsKLSAgICAgIGZh
aWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uIik7Ci0g
ICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVj
dGVkIHBhdGguCi0gICAgfQotICB9Ci0KLSAgQFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0UmVtb3ZpbmdOdWxsVmlkZW9TaW5rKCkgewotICAgIHZpZGVvVHJhY2sucmVtb3Zl
U2luaygvKiBzaW5rPSAqLyBudWxsKTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdFJlbW92aW5nTm9uRXhpc3RhbnRWaWRlb1NpbmsoKSB7Ci0gICAgZmlu
YWwgVmlkZW9TaW5rIHZpZGVvU2luayA9IG5ldyBWaWRlb1NpbmsoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkge30KLSAgICB9
OwotICAgIHZpZGVvVHJhY2sucmVtb3ZlU2luayh2aWRlb1NpbmspOwotICB9Ci0KLSAgQFRlc3QK
LSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkaW5nU2FtZVZpZGVvU2lua011bHRp
cGxlVGltZXMoKSB7Ci0gICAgY2xhc3MgRnJhbWVDb3VudGVyIGltcGxlbWVudHMgVmlkZW9TaW5r
IHsKLSAgICAgIHByaXZhdGUgaW50IGNvdW50OwotCi0gICAgICBwdWJsaWMgaW50IGdldENvdW50
KCkgewotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgb25GcmFtZShWaWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAgICAgIGNv
dW50ICs9IDE7Ci0gICAgICB9Ci0gICAgfQotICAgIGZpbmFsIEZyYW1lQ291bnRlciBmcmFtZUNv
dW50ZXIgPSBuZXcgRnJhbWVDb3VudGVyKCk7Ci0KLSAgICBmaW5hbCBWaWRlb0ZyYW1lIHZpZGVv
RnJhbWUgPSBuZXcgVmlkZW9GcmFtZSgKLSAgICAgICAgSmF2YUk0MjBCdWZmZXIuYWxsb2NhdGUo
Lyogd2lkdGg9ICovIDMyLCAvKiBoZWlnaHQ9ICovIDMyKSwgLyogcm90YXRpb249ICovIDAsCi0g
ICAgICAgIC8qIHRpbWVzdGFtcE5zPSAqLyAwKTsKLQotICAgIHZpZGVvVHJhY2suYWRkU2luayhm
cmFtZUNvdW50ZXIpOwotICAgIHZpZGVvVHJhY2suYWRkU2luayhmcmFtZUNvdW50ZXIpOwotICAg
IHZpZGVvU291cmNlLmdldENhcHR1cmVyT2JzZXJ2ZXIoKS5vbkZyYW1lQ2FwdHVyZWQodmlkZW9G
cmFtZSk7Ci0KLSAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYWxsZWQgYWRkU2luaygpIG11bHRpcGxl
IHRpbWVzLCB3ZSBzaG91bGQgb25seSBnZXQgb25lIGZyYW1lIG91dC4KLSAgICBhc3NlcnRFcXVh
bHMoMSwgZnJhbWVDb3VudGVyLmNvdW50KTsKLSAgfQotCi0gIEBUZXN0Ci0gIEBTbWFsbFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdEFkZGluZ0FuZFJlbW92aW5nVmlkZW9TaW5rKCkgewotICAgIGZp
bmFsIFZpZGVvRnJhbWUgdmlkZW9GcmFtZSA9IG5ldyBWaWRlb0ZyYW1lKAotICAgICAgICBKYXZh
STQyMEJ1ZmZlci5hbGxvY2F0ZSgvKiB3aWR0aD0gKi8gMzIsIC8qIGhlaWdodD0gKi8gMzIpLCAv
KiByb3RhdGlvbj0gKi8gMCwKLSAgICAgICAgLyogdGltZXN0YW1wTnM9ICovIDApOwotCi0gICAg
ZmluYWwgVmlkZW9TaW5rIGZhaWxTaW5rID0gbmV3IFZpZGVvU2luaygpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgb25GcmFtZShWaWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAg
ICAgIGZhaWwoIm9uRnJhbWUoKSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbiByZW1vdmVkIHNpbmsi
KTsKLSAgICAgIH0KLSAgICB9OwotICAgIHZpZGVvVHJhY2suYWRkU2luayhmYWlsU2luayk7Ci0g
ICAgdmlkZW9UcmFjay5yZW1vdmVTaW5rKGZhaWxTaW5rKTsKLSAgICB2aWRlb1NvdXJjZS5nZXRD
YXB0dXJlck9ic2VydmVyKCkub25GcmFtZUNhcHR1cmVkKHZpZGVvRnJhbWUpOwotICB9Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9XZWJSdGNKbmlCb290
VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvV2ViUnRjSm5pQm9v
dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjNDMyOGRkOTMzODQ1
NTE3M2I4MWJhYzYzMGVlYTZjNDI4NjNlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9XZWJSdGNK
bmlCb290VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0
LnRlc3QuSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRl
c3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QucnVubmVy
LkFuZHJvaWRKVW5pdDQ7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0
LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb25GYWN0b3J5
OwotCi0vLyBUaGlzIHRlc3QgaXMgaW50ZW5kZWQgdG8gcnVuIG9uIEFSTSBhbmQgY2F0Y2ggTG9h
ZExpYnJhcnkgZXJyb3JzIHdoZW4gd2UgbG9hZCB0aGUgV2ViUlRDCi0vLyBKTkkuIEl0IGNhbid0
IHJlYWxseSBiZSBzZXR0aW5nIHVwIGNhbGxzIHNpbmNlIEFSTSBlbXVsYXRvcnMgYXJlIHRvbyBz
bG93LCBidXQgaW5zdGFudGlhdGluZwotLy8gYSBwZWVyIGNvbm5lY3Rpb24gaXNuJ3QgdGltaW5n
LXNlbnNpdGl2ZSwgc28gd2UgY2FuIGF0IGxlYXN0IGRvIHRoYXQuCi1AUnVuV2l0aChBbmRyb2lk
SlVuaXQ0LmNsYXNzKQotcHVibGljIGNsYXNzIFdlYlJ0Y0puaUJvb3RUZXN0IHsKLSAgQFRlc3QK
LSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Sm5pTG9hZHNXaXRob3V0RXJyb3IoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5p
bml0aWFsaXplKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5Jbml0aWFsaXphdGlvbk9wdGlvbnMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkZXIoSW5zdHJ1bWVu
dGF0aW9uUmVnaXN0cnkuZ2V0VGFyZ2V0Q29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuc2V0TmF0aXZlTGlicmFyeU5hbWUoVGVzdENvbnN0YW50cy5O
QVRJVkVfTElCUkFSWSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmNyZWF0ZUluaXRpYWxpemF0aW9uT3B0aW9ucygpKTsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkuYnVpbGRlcigpLmNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9ZdXZIZWxwZXJUZXN0Lmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9pbnN0cnVtZW50YXRpb250ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9ZdXZIZWxwZXJUZXN0LmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YTg4ZjBlNmU3Y2ViNzU5MDg2M2VhMmI0
NjMyNjlhZDE0NmMxMGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvaW5zdHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvWXV2SGVscGVyVGVzdC5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2Vy
dEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi1p
bXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZmlsdGVycy5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2
YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LkJhc2VKVW5p
dDRDbGFzc1J1bm5lcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5p
dC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotQFJ1bldpdGgoQmFz
ZUpVbml0NENsYXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIFl1dkhlbHBlclRlc3Qgewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF9XSURUSCA9IDM7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBURVNUX0hFSUdIVCA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBURVNUX0NIUk9NQV9XSURUSCA9IDI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVNU
X0NIUk9NQV9IRUlHSFQgPSAyOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVNUX0k0
MjBfU1RSSURFX1kgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF9JNDIwX1NU
UklERV9WID0gMjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFU1RfSTQyMF9TVFJJREVf
VSA9IDQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQnl0ZUJ1ZmZlciBURVNUX0k0MjBfWSA9
IGdldFRlc3RZKCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ5dGVCdWZmZXIgVEVTVF9JNDIw
X1UgPSBnZXRUZXN0VSgpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCeXRlQnVmZmVyIFRFU1Rf
STQyMF9WID0gZ2V0VGVzdFYoKTsKLQotICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRl
c3RZKCkgewotICAgIGZpbmFsIEJ5dGVCdWZmZXIgdGVzdFkgPSBCeXRlQnVmZmVyLmFsbG9jYXRl
RGlyZWN0KFRFU1RfSEVJR0hUICogVEVTVF9JNDIwX1NUUklERV9ZKTsKLSAgICB0ZXN0WS5wdXQo
bmV3IGJ5dGVbXSB7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX0pOwotICAgIHJldHVybiB0ZXN0
WTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdFUoKSB7Ci0gICAg
ZmluYWwgQnl0ZUJ1ZmZlciB0ZXN0VSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoVEVTVF9D
SFJPTUFfSEVJR0hUICogVEVTVF9JNDIwX1NUUklERV9WKTsKLSAgICB0ZXN0VS5wdXQobmV3IGJ5
dGVbXSB7NTEsIDUyLCA1MywgNTR9KTsKLSAgICByZXR1cm4gdGVzdFU7Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RWKCkgewotICAgIGZpbmFsIEJ5dGVCdWZmZXIg
dGVzdFYgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFRFU1RfQ0hST01BX0hFSUdIVCAqIFRF
U1RfSTQyMF9TVFJJREVfVSk7Ci0gICAgdGVzdFYucHV0KG5ldyBieXRlW10gezEwMSwgMTAyLCAx
MDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4fSk7Ci0gICAgcmV0dXJuIHRlc3RWOwotICB9Ci0K
LSAgQEJlZm9yZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBOYXRpdmVMaWJyYXJ5Lmlu
aXRpYWxpemUobmV3IE5hdGl2ZUxpYnJhcnkuRGVmYXVsdExvYWRlcigpLCBUZXN0Q29uc3RhbnRz
Lk5BVElWRV9MSUJSQVJZKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgQFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdENvcHlQbGFuZSgpIHsKLSAgICBmaW5hbCBpbnQgZHN0U3RyaWRlID0gVEVTVF9X
SURUSDsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdCA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJl
Y3QoVEVTVF9IRUlHSFQgKiBkc3RTdHJpZGUpOwotCi0gICAgWXV2SGVscGVyLmNvcHlQbGFuZShU
RVNUX0k0MjBfWSwgVEVTVF9JNDIwX1NUUklERV9ZLCBkc3QsIGRzdFN0cmlkZSwgVEVTVF9XSURU
SCwgVEVTVF9IRUlHSFQpOwotCi0gICAgYXNzZXJ0Qnl0ZUJ1ZmZlckNvbnRlbnRFcXVhbHMobmV3
IGJ5dGVbXSB7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX0sIGRzdCk7Ci0gIH0KLQotICBAU21h
bGxUZXN0Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJNDIwQ29weSgpIHsKLSAgICBmaW5h
bCBpbnQgZHN0U3RyaWRlWSA9IFRFU1RfV0lEVEg7Ci0gICAgZmluYWwgaW50IGRzdFN0cmlkZVUg
PSBURVNUX0NIUk9NQV9XSURUSDsKLSAgICBmaW5hbCBpbnQgZHN0U3RyaWRlViA9IFRFU1RfQ0hS
T01BX1dJRFRIOwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZHN0WSA9IEJ5dGVCdWZmZXIuYWxsb2Nh
dGVEaXJlY3QoVEVTVF9IRUlHSFQgKiBkc3RTdHJpZGVZKTsKLSAgICBmaW5hbCBCeXRlQnVmZmVy
IGRzdFUgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFRFU1RfQ0hST01BX0hFSUdIVCAqIGRz
dFN0cmlkZVUpOwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZHN0ViA9IEJ5dGVCdWZmZXIuYWxsb2Nh
dGVEaXJlY3QoVEVTVF9DSFJPTUFfSEVJR0hUICogZHN0U3RyaWRlVik7Ci0KLSAgICBZdXZIZWxw
ZXIuSTQyMENvcHkoVEVTVF9JNDIwX1ksIFRFU1RfSTQyMF9TVFJJREVfWSwgVEVTVF9JNDIwX1Us
IFRFU1RfSTQyMF9TVFJJREVfViwKLSAgICAgICAgVEVTVF9JNDIwX1YsIFRFU1RfSTQyMF9TVFJJ
REVfVSwgZHN0WSwgZHN0U3RyaWRlWSwgZHN0VSwgZHN0U3RyaWRlVSwgZHN0ViwgZHN0U3RyaWRl
ViwKLSAgICAgICAgVEVTVF9XSURUSCwgVEVTVF9IRUlHSFQpOwotCi0gICAgYXNzZXJ0Qnl0ZUJ1
ZmZlckNvbnRlbnRFcXVhbHMobmV3IGJ5dGVbXSB7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX0s
IGRzdFkpOwotICAgIGFzc2VydEJ5dGVCdWZmZXJDb250ZW50RXF1YWxzKG5ldyBieXRlW10gezUx
LCA1MiwgNTMsIDU0fSwgZHN0VSk7Ci0gICAgYXNzZXJ0Qnl0ZUJ1ZmZlckNvbnRlbnRFcXVhbHMo
bmV3IGJ5dGVbXSB7MTAxLCAxMDIsIDEwNSwgMTA2fSwgZHN0Vik7Ci0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJNDIwQ29weVRpZ2h0KCkgewotICAgIGZp
bmFsIEJ5dGVCdWZmZXIgZHN0ID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCgKLSAgICAgICAg
VEVTVF9XSURUSCAqIFRFU1RfSEVJR0hUICsgVEVTVF9DSFJPTUFfV0lEVEggKiBURVNUX0NIUk9N
QV9IRUlHSFQgKiAyKTsKLQotICAgIFl1dkhlbHBlci5JNDIwQ29weShURVNUX0k0MjBfWSwgVEVT
VF9JNDIwX1NUUklERV9ZLCBURVNUX0k0MjBfVSwgVEVTVF9JNDIwX1NUUklERV9WLAotICAgICAg
ICBURVNUX0k0MjBfViwgVEVTVF9JNDIwX1NUUklERV9VLCBkc3QsIFRFU1RfV0lEVEgsIFRFU1Rf
SEVJR0hUKTsKLQotICAgIGFzc2VydEJ5dGVCdWZmZXJDb250ZW50RXF1YWxzKAotICAgICAgICBu
ZXcgYnl0ZVtdIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCA1MSwgNTIsIDUzLCA1NCwgMTAx
LCAxMDIsIDEwNSwgMTA2fSwgZHN0KTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgQFRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdEk0MjBUb05WMTIoKSB7Ci0gICAgZmluYWwgaW50IGRzdFN0cmlkZVkg
PSBURVNUX1dJRFRIOwotICAgIGZpbmFsIGludCBkc3RTdHJpZGVVViA9IFRFU1RfQ0hST01BX1dJ
RFRIICogMjsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdFkgPSBCeXRlQnVmZmVyLmFsbG9jYXRl
RGlyZWN0KFRFU1RfSEVJR0hUICogZHN0U3RyaWRlWSk7Ci0gICAgZmluYWwgQnl0ZUJ1ZmZlciBk
c3RVViA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoMiAqIFRFU1RfQ0hST01BX0hFSUdIVCAq
IGRzdFN0cmlkZVVWKTsKLQotICAgIFl1dkhlbHBlci5JNDIwVG9OVjEyKFRFU1RfSTQyMF9ZLCBU
RVNUX0k0MjBfU1RSSURFX1ksIFRFU1RfSTQyMF9VLCBURVNUX0k0MjBfU1RSSURFX1YsCi0gICAg
ICAgIFRFU1RfSTQyMF9WLCBURVNUX0k0MjBfU1RSSURFX1UsIGRzdFksIGRzdFN0cmlkZVksIGRz
dFVWLCBkc3RTdHJpZGVVViwgVEVTVF9XSURUSCwKLSAgICAgICAgVEVTVF9IRUlHSFQpOwotCi0g
ICAgYXNzZXJ0Qnl0ZUJ1ZmZlckNvbnRlbnRFcXVhbHMobmV3IGJ5dGVbXSB7MSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOX0sIGRzdFkpOwotICAgIGFzc2VydEJ5dGVCdWZmZXJDb250ZW50RXF1YWxz
KG5ldyBieXRlW10gezUxLCAxMDEsIDUyLCAxMDIsIDUzLCAxMDUsIDU0LCAxMDZ9LCBkc3RVVik7
Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJNDIwVG9O
VjEyVGlnaHQoKSB7Ci0gICAgZmluYWwgaW50IGRzdFN0cmlkZVkgPSBURVNUX1dJRFRIOwotICAg
IGZpbmFsIGludCBkc3RTdHJpZGVVViA9IFRFU1RfQ0hST01BX1dJRFRIICogMjsKLSAgICBmaW5h
bCBCeXRlQnVmZmVyIGRzdCA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoCi0gICAgICAgIFRF
U1RfV0lEVEggKiBURVNUX0hFSUdIVCArIFRFU1RfQ0hST01BX1dJRFRIICogVEVTVF9DSFJPTUFf
SEVJR0hUICogMik7Ci0KLSAgICBZdXZIZWxwZXIuSTQyMFRvTlYxMihURVNUX0k0MjBfWSwgVEVT
VF9JNDIwX1NUUklERV9ZLCBURVNUX0k0MjBfVSwgVEVTVF9JNDIwX1NUUklERV9WLAotICAgICAg
ICBURVNUX0k0MjBfViwgVEVTVF9JNDIwX1NUUklERV9VLCBkc3QsIFRFU1RfV0lEVEgsIFRFU1Rf
SEVJR0hUKTsKLQotICAgIGFzc2VydEJ5dGVCdWZmZXJDb250ZW50RXF1YWxzKAotICAgICAgICBu
ZXcgYnl0ZVtdIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCA1MSwgMTAxLCA1MiwgMTAyLCA1
MywgMTA1LCA1NCwgMTA2fSwgZHN0KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNz
ZXJ0Qnl0ZUJ1ZmZlckNvbnRlbnRFcXVhbHMoYnl0ZVtdIGV4cGVjdGVkLCBCeXRlQnVmZmVyIHRl
c3QpIHsKLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiQnl0ZUJ1ZmZlciBpcyB0b28gc21hbGwu
IEV4cGVjdGVkICIgKyBleHBlY3RlZC5sZW5ndGggKyAiIGJ1dCB3YXMgIiArIHRlc3QuY2FwYWNp
dHkoKSwKLSAgICAgICAgdGVzdC5jYXBhY2l0eSgpID49IGV4cGVjdGVkLmxlbmd0aCk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7IGkrKykgewotICAgICAgYXNzZXJ0
RXF1YWxzKCJVbmV4cGVjdGVkIEJ5dGVCdWZmZXIgY29udGVudHMgYXQgaW5kZXg6ICIgKyBpLCBl
eHBlY3RlZFtpXSwgdGVzdC5nZXQoaSkpOwotICAgIH0KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAg
QFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEk0MjBSb3RhdGU5MCgpIHsKLSAgICBmaW5hbCBpbnQg
ZHN0U3RyaWRlWSA9IFRFU1RfSEVJR0hUOwotICAgIGZpbmFsIGludCBkc3RTdHJpZGVVID0gVEVT
VF9DSFJPTUFfSEVJR0hUOwotICAgIGZpbmFsIGludCBkc3RTdHJpZGVWID0gVEVTVF9DSFJPTUFf
SEVJR0hUOwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZHN0WSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVE
aXJlY3QoVEVTVF9XSURUSCAqIGRzdFN0cmlkZVkpOwotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZHN0
VSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoVEVTVF9DSFJPTUFfV0lEVEggKiBkc3RTdHJp
ZGVVKTsKLSAgICBmaW5hbCBCeXRlQnVmZmVyIGRzdFYgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGly
ZWN0KFRFU1RfQ0hST01BX1dJRFRIICogZHN0U3RyaWRlVik7Ci0KLSAgICBZdXZIZWxwZXIuSTQy
MFJvdGF0ZShURVNUX0k0MjBfWSwgVEVTVF9JNDIwX1NUUklERV9ZLCBURVNUX0k0MjBfVSwgVEVT
VF9JNDIwX1NUUklERV9WLAotICAgICAgICBURVNUX0k0MjBfViwgVEVTVF9JNDIwX1NUUklERV9V
LCBkc3RZLCBkc3RTdHJpZGVZLCBkc3RVLCBkc3RTdHJpZGVVLCBkc3RWLCBkc3RTdHJpZGVWLAot
ICAgICAgICBURVNUX1dJRFRILCBURVNUX0hFSUdIVCwgOTApOwotCi0gICAgYXNzZXJ0Qnl0ZUJ1
ZmZlckNvbnRlbnRFcXVhbHMobmV3IGJ5dGVbXSB7NywgNCwgMSwgOCwgNSwgMiwgOSwgNiwgM30s
IGRzdFkpOwotICAgIGFzc2VydEJ5dGVCdWZmZXJDb250ZW50RXF1YWxzKG5ldyBieXRlW10gezUz
LCA1MSwgNTQsIDUyfSwgZHN0VSk7Ci0gICAgYXNzZXJ0Qnl0ZUJ1ZmZlckNvbnRlbnRFcXVhbHMo
bmV3IGJ5dGVbXSB7MTA1LCAxMDEsIDEwNiwgMTAyfSwgZHN0Vik7Ci0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJNDIwUm90YXRlOTBUaWdodCgpIHsKLSAg
ICBmaW5hbCBCeXRlQnVmZmVyIGRzdCA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoCi0gICAg
ICAgIFRFU1RfV0lEVEggKiBURVNUX0hFSUdIVCArIFRFU1RfQ0hST01BX1dJRFRIICogVEVTVF9D
SFJPTUFfSEVJR0hUICogMik7Ci0KLSAgICBZdXZIZWxwZXIuSTQyMFJvdGF0ZShURVNUX0k0MjBf
WSwgVEVTVF9JNDIwX1NUUklERV9ZLCBURVNUX0k0MjBfVSwgVEVTVF9JNDIwX1NUUklERV9WLAot
ICAgICAgICBURVNUX0k0MjBfViwgVEVTVF9JNDIwX1NUUklERV9VLCBkc3QsIFRFU1RfV0lEVEgs
IFRFU1RfSEVJR0hULCA5MCk7Ci0KLSAgICBhc3NlcnRCeXRlQnVmZmVyQ29udGVudEVxdWFscygK
LSAgICAgICAgbmV3IGJ5dGVbXSB7NywgNCwgMSwgOCwgNSwgMiwgOSwgNiwgMywgNTMsIDUxLCA1
NCwgNTIsIDEwNSwgMTAxLCAxMDYsIDEwMn0sIGRzdCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL2luc3Ry
dW1lbnRhdGlvbnRlc3RzL3NyYy9vcmcvd2VicnRjL2NhcHR1cmV0ZXN0dmlkZW8ueTRtIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5zdHJ1
bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvY2FwdHVyZXRlc3R2aWRlby55NG0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYzY5NWEwOWFlMjQ4OTVkOTkzN2UxYjBiZTYxZGE1
YjA1MWQ3ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvaW5z
dHJ1bWVudGF0aW9udGVzdHMvc3JjL29yZy93ZWJydGMvY2FwdHVyZXRlc3R2aWRlby55NG0KKysr
IC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVlVVjRNUEVHMiBDNDIwIFc0IEg0IElwIEYzMDox
IEExOjEKLUZSQU1FCi1USElTIElTIEpVU1QgU09NRSBURVhUIHhGUkFNRQotVEhFIFNFQ09ORCBG
UkFNRSBxd2VydHkuRlJBTUUKLUhFUkUgSVMgVEhFIFRIUklEIEZSQU1FIQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS9ERVBTIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9ERVBTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMjBlMWNiZjA5ZTAzMmYwZDAyMGRjNjExMTgxMWM0NmZkY2IwM2Y0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvREVQUworKysgL2Rldi9u
dWxsCkBAIC0xLDQgKzAsMCBAQAotaW5jbHVkZV9ydWxlcyA9IFsKLSAgIittb2R1bGVzL2F1ZGlv
X2RldmljZS9pbmNsdWRlL2F1ZGlvX2RldmljZS5oIiwKLSAgIitzeXN0ZW1fd3JhcHBlcnMvaW5j
bHVkZSIsCi1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2F1ZGlvX2RldmljZV9tb2R1bGUvYXVkaW9f
ZGV2aWNlX2FuZHJvaWQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2F1ZGlvX2RldmljZV9tb2R1bGUvYXVkaW9fZGV2
aWNlX2FuZHJvaWQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTM2NDNhZTAy
MmQxY2UxMjhlY2Y2MjJkNTYzNjc4ODExYWExZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9hdWRpb19kZXZpY2VfbW9kdWxlL2F1ZGlvX2Rl
dmljZV9hbmRyb2lkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9hdWRpb19k
ZXZpY2VfbW9kdWxlL2F1ZGlvX2RldmljZV9hbmRyb2lkLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAi
YXBpL3Njb3BlZF9yZWZwdHIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9sb2dnaW5nLmgiCi0jaW5j
bHVkZSAicnRjX2Jhc2UvcmVmX2NvdW50LmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvcmVmX2NvdW50
ZWRfb2JqZWN0LmgiCi0KLSNpZiBkZWZpbmVkKFdFQlJUQ19BVURJT19ERVZJQ0VfSU5DTFVERV9B
TkRST0lEX0FBVURJTykKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rldmlj
ZS9hYXVkaW9fcGxheWVyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19k
ZXZpY2UvYWF1ZGlvX3JlY29yZGVyLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgInNkay9hbmRyb2lk
L3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX3JlY29yZF9qbmkuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hdWRpb190cmFja19qbmkuaCIKLSNpbmNsdWRl
ICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9vcGVuc2xlc19wbGF5ZXIuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9vcGVuc2xlc19yZWNvcmRl
ci5oIgotI2luY2x1ZGUgInN5c3RlbV93cmFwcGVycy9pbmNsdWRlL21ldHJpY3MuaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQgR2V0RGVmYXVsdEF1ZGlvUGFy
YW1ldGVycyhKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2Jq
ZWN0IGFwcGxpY2F0aW9uX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXVkaW9QYXJhbWV0ZXJzKiBpbnB1dF9wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEF1ZGlvUGFyYW1ldGVycyogb3V0cHV0X3BhcmFtZXRlcnMpIHsKLSAgY29uc3Qg
SmF2YVBhcmFtUmVmPGpvYmplY3Q+IGpfY29udGV4dChhcHBsaWNhdGlvbl9jb250ZXh0KTsKLSAg
Y29uc3QgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfYXVkaW9fbWFuYWdlciA9Ci0gICAg
ICBqbmk6OkdldEF1ZGlvTWFuYWdlcihlbnYsIGpfY29udGV4dCk7Ci0gIGNvbnN0IGludCBpbnB1
dF9zYW1wbGVfcmF0ZSA9IGpuaTo6R2V0RGVmYXVsdFNhbXBsZVJhdGUoZW52LCBqX2F1ZGlvX21h
bmFnZXIpOwotICBjb25zdCBpbnQgb3V0cHV0X3NhbXBsZV9yYXRlID0KLSAgICAgIGpuaTo6R2V0
RGVmYXVsdFNhbXBsZVJhdGUoZW52LCBqX2F1ZGlvX21hbmFnZXIpOwotICBqbmk6OkdldEF1ZGlv
UGFyYW1ldGVycyhlbnYsIGpfY29udGV4dCwgal9hdWRpb19tYW5hZ2VyLCBpbnB1dF9zYW1wbGVf
cmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NhbXBsZV9yYXRlLCBmYWxz
ZSAvKiB1c2Vfc3RlcmVvX2lucHV0ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSAvKiB1c2Vfc3RlcmVvX291dHB1dCAqLywgaW5wdXRfcGFyYW1ldGVycywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0X3BhcmFtZXRlcnMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UK
LQotI2lmIGRlZmluZWQoV0VCUlRDX0FVRElPX0RFVklDRV9JTkNMVURFX0FORFJPSURfQUFVRElP
KQotcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9kdWxlPiBDcmVhdGVBQXVkaW9BdWRp
b0RldmljZU1vZHVsZSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBqb2JqZWN0IGFwcGxpY2F0aW9u
X2NvbnRleHQpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gIC8vIEdldCBk
ZWZhdWx0IGF1ZGlvIGlucHV0L291dHB1dCBwYXJhbWV0ZXJzLgotICBBdWRpb1BhcmFtZXRlcnMg
aW5wdXRfcGFyYW1ldGVyczsKLSAgQXVkaW9QYXJhbWV0ZXJzIG91dHB1dF9wYXJhbWV0ZXJzOwot
ICBHZXREZWZhdWx0QXVkaW9QYXJhbWV0ZXJzKGVudiwgYXBwbGljYXRpb25fY29udGV4dCwgJmlu
cHV0X3BhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dF9wYXJh
bWV0ZXJzKTsKLSAgLy8gQ3JlYXRlIEFETSBmcm9tIEFBdWRpb1JlY29yZGVyIGFuZCBBQXVkaW9Q
bGF5ZXIuCi0gIHJldHVybiBDcmVhdGVBdWRpb0RldmljZU1vZHVsZUZyb21JbnB1dEFuZE91dHB1
dCgKLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEFBdWRpb0F1ZGlvLCBmYWxzZSAv
KiB1c2Vfc3RlcmVvX2lucHV0ICovLAotICAgICAgZmFsc2UgLyogdXNlX3N0ZXJlb19vdXRwdXQg
Ki8sCi0gICAgICBqbmk6OmtMb3dMYXRlbmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25k
cywKLSAgICAgIHN0ZDo6bWFrZV91bmlxdWU8am5pOjpBQXVkaW9SZWNvcmRlcj4oaW5wdXRfcGFy
YW1ldGVycyksCi0gICAgICBzdGQ6Om1ha2VfdW5pcXVlPGpuaTo6QUF1ZGlvUGxheWVyPihvdXRw
dXRfcGFyYW1ldGVycykpOwotfQotI2VuZGlmCi0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0Rl
dmljZU1vZHVsZT4gQ3JlYXRlSmF2YUF1ZGlvRGV2aWNlTW9kdWxlKAotICAgIEpOSUVudiogZW52
LAotICAgIGpvYmplY3QgYXBwbGljYXRpb25fY29udGV4dCkgewotICBSVENfTE9HKElORk8pIDw8
IF9fRlVOQ1RJT05fXzsKLSAgLy8gR2V0IGRlZmF1bHQgYXVkaW8gaW5wdXQvb3V0cHV0IHBhcmFt
ZXRlcnMuCi0gIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiBqX2NvbnRleHQoYXBwbGljYXRp
b25fY29udGV4dCk7Ci0gIGNvbnN0IFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2F1ZGlv
X21hbmFnZXIgPQotICAgICAgam5pOjpHZXRBdWRpb01hbmFnZXIoZW52LCBqX2NvbnRleHQpOwot
ICBBdWRpb1BhcmFtZXRlcnMgaW5wdXRfcGFyYW1ldGVyczsKLSAgQXVkaW9QYXJhbWV0ZXJzIG91
dHB1dF9wYXJhbWV0ZXJzOwotICBHZXREZWZhdWx0QXVkaW9QYXJhbWV0ZXJzKGVudiwgYXBwbGlj
YXRpb25fY29udGV4dCwgJmlucHV0X3BhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm91dHB1dF9wYXJhbWV0ZXJzKTsKLSAgLy8gQ3JlYXRlIEFETSBmcm9tIEF1ZGlvUmVj
b3JkIGFuZCBBdWRpb1RyYWNrLgotICBhdXRvIGF1ZGlvX2lucHV0ID0gc3RkOjptYWtlX3VuaXF1
ZTxqbmk6OkF1ZGlvUmVjb3JkSm5pPigKLSAgICAgIGVudiwgaW5wdXRfcGFyYW1ldGVycywgam5p
OjprSGlnaExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzLAotICAgICAgam5p
OjpBdWRpb1JlY29yZEpuaTo6Q3JlYXRlSmF2YVdlYlJ0Y0F1ZGlvUmVjb3JkKGVudiwgal9jb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpfYXVkaW9fbWFuYWdlcikpOwotICBhdXRvIGF1ZGlvX291dHB1dCA9IHN0ZDo6bWFrZV91
bmlxdWU8am5pOjpBdWRpb1RyYWNrSm5pPigKLSAgICAgIGVudiwgb3V0cHV0X3BhcmFtZXRlcnMs
Ci0gICAgICBqbmk6OkF1ZGlvVHJhY2tKbmk6OkNyZWF0ZUphdmFXZWJSdGNBdWRpb1RyYWNrKGVu
diwgal9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqX2F1ZGlvX21hbmFnZXIpKTsKLSAgcmV0dXJuIENyZWF0ZUF1ZGlvRGV2aWNl
TW9kdWxlRnJvbUlucHV0QW5kT3V0cHV0KAotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRy
b2lkSmF2YUF1ZGlvLCBmYWxzZSAvKiB1c2Vfc3RlcmVvX2lucHV0ICovLAotICAgICAgZmFsc2Ug
LyogdXNlX3N0ZXJlb19vdXRwdXQgKi8sCi0gICAgICBqbmk6OmtIaWdoTGF0ZW5jeU1vZGVEZWxh
eUVzdGltYXRlSW5NaWxsaXNlY29uZHMsIHN0ZDo6bW92ZShhdWRpb19pbnB1dCksCi0gICAgICBz
dGQ6Om1vdmUoYXVkaW9fb3V0cHV0KSk7Ci19Ci0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0Rl
dmljZU1vZHVsZT4gQ3JlYXRlT3BlblNMRVNBdWRpb0RldmljZU1vZHVsZSgKLSAgICBKTklFbnYq
IGVudiwKLSAgICBqb2JqZWN0IGFwcGxpY2F0aW9uX2NvbnRleHQpIHsKLSAgUlRDX0xPRyhJTkZP
KSA8PCBfX0ZVTkNUSU9OX187Ci0gIC8vIEdldCBkZWZhdWx0IGF1ZGlvIGlucHV0L291dHB1dCBw
YXJhbWV0ZXJzLgotICBBdWRpb1BhcmFtZXRlcnMgaW5wdXRfcGFyYW1ldGVyczsKLSAgQXVkaW9Q
YXJhbWV0ZXJzIG91dHB1dF9wYXJhbWV0ZXJzOwotICBHZXREZWZhdWx0QXVkaW9QYXJhbWV0ZXJz
KGVudiwgYXBwbGljYXRpb25fY29udGV4dCwgJmlucHV0X3BhcmFtZXRlcnMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm91dHB1dF9wYXJhbWV0ZXJzKTsKLSAgLy8gQ3JlYXRlIEFETSBm
cm9tIE9wZW5TTEVTUmVjb3JkZXIgYW5kIE9wZW5TTEVTUGxheWVyLgotICBydGM6OnNjb3BlZF9y
ZWZwdHI8am5pOjpPcGVuU0xFbmdpbmVNYW5hZ2VyPiBlbmdpbmVfbWFuYWdlcigKLSAgICAgIG5l
dyBqbmk6Ok9wZW5TTEVuZ2luZU1hbmFnZXIoKSk7Ci0gIGF1dG8gYXVkaW9faW5wdXQgPQotICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxqbmk6Ok9wZW5TTEVTUmVjb3JkZXI+KGlucHV0X3BhcmFtZXRl
cnMsIGVuZ2luZV9tYW5hZ2VyKTsKLSAgYXV0byBhdWRpb19vdXRwdXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPGpuaTo6T3BlblNMRVNQbGF5ZXI+KAotICAgICAgb3V0cHV0X3BhcmFtZXRlcnMsIHN0ZDo6
bW92ZShlbmdpbmVfbWFuYWdlcikpOwotICByZXR1cm4gQ3JlYXRlQXVkaW9EZXZpY2VNb2R1bGVG
cm9tSW5wdXRBbmRPdXRwdXQoCi0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRPcGVu
U0xFU0F1ZGlvLCBmYWxzZSAvKiB1c2Vfc3RlcmVvX2lucHV0ICovLAotICAgICAgZmFsc2UgLyog
dXNlX3N0ZXJlb19vdXRwdXQgKi8sCi0gICAgICBqbmk6OmtMb3dMYXRlbmN5TW9kZURlbGF5RXN0
aW1hdGVJbk1pbGxpc2Vjb25kcywgc3RkOjptb3ZlKGF1ZGlvX2lucHV0KSwKLSAgICAgIHN0ZDo6
bW92ZShhdWRpb19vdXRwdXQpKTsKLX0KLQotcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNl
TW9kdWxlPgotQ3JlYXRlSmF2YUlucHV0QW5kT3BlblNMRVNPdXRwdXRBdWRpb0RldmljZU1vZHVs
ZShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgam9iamVjdCBhcHBsaWNhdGlvbl9jb250ZXh0KSB7Ci0gIFJUQ19MT0coSU5GTykg
PDwgX19GVU5DVElPTl9fOwotICAvLyBHZXQgZGVmYXVsdCBhdWRpbyBpbnB1dC9vdXRwdXQgcGFy
YW1ldGVycy4KLSAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+IGpfY29udGV4dChhcHBsaWNh
dGlvbl9jb250ZXh0KTsKLSAgY29uc3QgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfYXVk
aW9fbWFuYWdlciA9Ci0gICAgICBqbmk6OkdldEF1ZGlvTWFuYWdlcihlbnYsIGpfY29udGV4dCk7
Ci0gIEF1ZGlvUGFyYW1ldGVycyBpbnB1dF9wYXJhbWV0ZXJzOwotICBBdWRpb1BhcmFtZXRlcnMg
b3V0cHV0X3BhcmFtZXRlcnM7Ci0gIEdldERlZmF1bHRBdWRpb1BhcmFtZXRlcnMoZW52LCBhcHBs
aWNhdGlvbl9jb250ZXh0LCAmaW5wdXRfcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmb3V0cHV0X3BhcmFtZXRlcnMpOwotICAvLyBDcmVhdGUgQURNIGZyb20gQXVkaW9S
ZWNvcmQgYW5kIE9wZW5TTEVTUGxheWVyLgotICBhdXRvIGF1ZGlvX2lucHV0ID0gc3RkOjptYWtl
X3VuaXF1ZTxqbmk6OkF1ZGlvUmVjb3JkSm5pPigKLSAgICAgIGVudiwgaW5wdXRfcGFyYW1ldGVy
cywgam5pOjprTG93TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMsCi0gICAg
ICBqbmk6OkF1ZGlvUmVjb3JkSm5pOjpDcmVhdGVKYXZhV2ViUnRjQXVkaW9SZWNvcmQoZW52LCBq
X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgal9hdWRpb19tYW5hZ2VyKSk7Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPGpuaTo6
T3BlblNMRW5naW5lTWFuYWdlcj4gZW5naW5lX21hbmFnZXIoCi0gICAgICBuZXcgam5pOjpPcGVu
U0xFbmdpbmVNYW5hZ2VyKCkpOwotICBhdXRvIGF1ZGlvX291dHB1dCA9IHN0ZDo6bWFrZV91bmlx
dWU8am5pOjpPcGVuU0xFU1BsYXllcj4oCi0gICAgICBvdXRwdXRfcGFyYW1ldGVycywgc3RkOjpt
b3ZlKGVuZ2luZV9tYW5hZ2VyKSk7Ci0gIHJldHVybiBDcmVhdGVBdWRpb0RldmljZU1vZHVsZUZy
b21JbnB1dEFuZE91dHB1dCgKLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFJ
bnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW8sCi0gICAgICBmYWxzZSAvKiB1c2Vfc3RlcmVvX2lu
cHV0ICovLCBmYWxzZSAvKiB1c2Vfc3RlcmVvX291dHB1dCAqLywKLSAgICAgIGpuaTo6a0xvd0xh
dGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzLCBzdGQ6Om1vdmUoYXVkaW9faW5w
dXQpLAotICAgICAgc3RkOjptb3ZlKGF1ZGlvX291dHB1dCkpOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2F1ZGlvX2RldmljZV9tb2R1bGUvYXVkaW9f
ZGV2aWNlX2FuZHJvaWQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvYXVkaW9fZGV2aWNlX21vZHVsZS9hdWRpb19kZXZp
Y2VfYW5kcm9pZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDkzZjhjODk1YjBm
YzBlYjk0OTk0OGEyNWViYjZkM2MwOTBiZWIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvYXVkaW9fZGV2aWNlX21vZHVsZS9hdWRpb19kZXZp
Y2VfYW5kcm9pZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKGMpIDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9BVURJT19ERVZJQ0Vf
TU9EVUxFX0FVRElPX0RFVklDRV9BTkRST0lEX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX05BVElW
RV9BUElfQVVESU9fREVWSUNFX01PRFVMRV9BVURJT19ERVZJQ0VfQU5EUk9JRF9IXwotCi0jaW5j
bHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1
ZGlvX2RldmljZS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotI2lmIGRlZmluZWQoV0VCUlRD
X0FVRElPX0RFVklDRV9JTkNMVURFX0FORFJPSURfQUFVRElPKQotcnRjOjpzY29wZWRfcmVmcHRy
PEF1ZGlvRGV2aWNlTW9kdWxlPiBDcmVhdGVBQXVkaW9BdWRpb0RldmljZU1vZHVsZSgKLSAgICBK
TklFbnYqIGVudiwKLSAgICBqb2JqZWN0IGFwcGxpY2F0aW9uX2NvbnRleHQpOwotI2VuZGlmCi0K
LXJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVsZT4gQ3JlYXRlSmF2YUF1ZGlvRGV2
aWNlTW9kdWxlKAotICAgIEpOSUVudiogZW52LAotICAgIGpvYmplY3QgYXBwbGljYXRpb25fY29u
dGV4dCk7Ci0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVsZT4gQ3JlYXRlT3Bl
blNMRVNBdWRpb0RldmljZU1vZHVsZSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBqb2JqZWN0IGFw
cGxpY2F0aW9uX2NvbnRleHQpOwotCi1ydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1
bGU+Ci1DcmVhdGVKYXZhSW5wdXRBbmRPcGVuU0xFU091dHB1dEF1ZGlvRGV2aWNlTW9kdWxlKEpO
SUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqb2JqZWN0IGFwcGxpY2F0aW9uX2NvbnRleHQpOwotCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfTkFUSVZFX0FQSV9BVURJT19ERVZJQ0VfTU9E
VUxFX0FVRElPX0RFVklDRV9BTkRST0lEX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2Jhc2UvaW5p
dC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL25hdGl2ZV9hcGkvYmFzZS9pbml0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxNzZhYTg5ZWNlYzgwNTA4NmU3MDhmYjRmN2M5ZTQxN2MyNTA3YmZlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvYmFzZS9pbml0LmNjCisr
KyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1
ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvYmFzZS9pbml0LmgiCi0KLSNpbmNsdWRlICJydGNf
YmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9jbGFz
c19sb2FkZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgi
Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi12b2lkIEluaXRBbmRyb2lkKEphdmFWTSoganZtKSB7
Ci0gIFJUQ19DSEVDS19HRShqbmk6OkluaXRHbG9iYWxKbmlWYXJpYWJsZXMoanZtKSwgMCk7Ci0g
IEluaXRDbGFzc0xvYWRlcihqbmk6OkdldEVudigpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9iYXNlL2luaXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvYmFzZS9pbml0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YTBlYzE1MDkwOGU4MzIwMDJiNmI5
NzViZDFiMmFlNWU0ZjgzOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvbmF0aXZlX2FwaS9iYXNlL2luaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9C
QVNFX0lOSVRfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9CQVNFX0lOSVRfSF8K
LQotI2luY2x1ZGUgPGpuaS5oPgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gSW5pdGlhbGl6
ZXMgZ2xvYmFsIHN0YXRlIG5lZWRlZCBieSBXZWJSVEMgQW5kcm9pZCBOREsuCi12b2lkIEluaXRB
bmRyb2lkKEphdmFWTSoganZtKTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYg
IC8vIFNES19BTkRST0lEX05BVElWRV9BUElfQkFTRV9JTklUX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVf
YXBpL2Jhc2UvbmV0d29ya19tb25pdG9yLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9iYXNlL25ldHdvcmtfbW9uaXRv
ci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE1ZTlmMjFmYjgxOWI0ZDUzNjI4
Y2E0ZjY0MzU0ODNhM2QzOTI0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9uYXRpdmVfYXBpL2Jhc2UvbmV0d29ya19tb25pdG9yLmNjCisrKyAvZGV2L251bGwK
QEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRy
b2lkL25hdGl2ZV9hcGkvYmFzZS9uZXR3b3JrX21vbml0b3IuaCIKLQotI2luY2x1ZGUgPG1lbW9y
eT4KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYW5kcm9pZF9uZXR3b3JrX21vbml0
b3IuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxydGM6Ok5ldHdv
cmtNb25pdG9yRmFjdG9yeT4gQ3JlYXRlQW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgKLSAg
ICBKTklFbnYqIGVudiwKLSAgICBqb2JqZWN0IGFwcGxpY2F0aW9uX2NvbnRleHQpIHsKLSAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8am5pOjpBbmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5PigK
LSAgICAgIGVudiwgSmF2YVBhcmFtUmVmPGpvYmplY3Q+KGFwcGxpY2F0aW9uX2NvbnRleHQpKTsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5PgotQ3JlYXRl
QW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgpIHsKLSAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8am5pOjpBbmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5PigpOwotfQotCi19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2Jhc2UvbmV0d29ya19tb25pdG9yLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9u
YXRpdmVfYXBpL2Jhc2UvbmV0d29ya19tb25pdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDEzNWViYjFlODY2NzQyYzU1NWNlYjFkYTdmZmQzMDM3YjMwYTViOTYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9iYXNlL25ldHdv
cmtfbW9uaXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX0JBU0VfTkVUV09SS19NT05J
VE9SX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX05BVElWRV9BUElfQkFTRV9ORVRXT1JLX01PTklU
T1JfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVk
ZSAicnRjX2Jhc2UvbmV0d29ya19tb25pdG9yLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0v
LyBDcmVhdGVzIGFuIEFuZHJvaWQtc3BlY2lmaWMgbmV0d29yayBtb25pdG9yLCB3aGljaCBpcyBj
YXBhYmxlIG9mIGRldGVjdGluZwotLy8gbmV0d29yayBjaGFuZ2VzIGFzIHNvb24gYXMgdGhleSBv
Y2N1ciwgcmVxdWVzdGluZyBhIGNlbGx1bGFyIGludGVyZmFjZQotLy8gKGRlcGVuZGVudCBvbiBw
ZXJtaXNzaW9ucyksIGFuZCBiaW5kaW5nIHNvY2tldHMgdG8gbmV0d29yayBpbnRlcmZhY2VzICht
b3JlCi0vLyByZWxpYWJsZSB0aGFuIGJpbmRpbmcgdG8gSVAgYWRkcmVzc2VzIG9uIEFuZHJvaWQp
Lgotc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5PiBDcmVhdGVBbmRy
b2lkTmV0d29ya01vbml0b3JGYWN0b3J5KAotICAgIEpOSUVudiogZW52LAotICAgIGpvYmplY3Qg
YXBwbGljYXRpb25fY29udGV4dCk7Ci0KLS8vIERlcHJlY2F0ZWQuIFBhc3MgaW4gYXBwbGljYXRp
b24gY29udGV4dCBpbnN0ZWFkLgotc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6TmV0d29ya01vbml0b3JG
YWN0b3J5PgotQ3JlYXRlQW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgpOwotCi19ICAvLyBu
YW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfTkFUSVZFX0FQSV9CQVNF
X05FVFdPUktfTU9OSVRPUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9jb2RlY3Mvd3JhcHBlci5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L25hdGl2ZV9hcGkvY29kZWNzL3dyYXBwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA4Y2FmZDgzYjhjYzVmZDQxNzQzODE2YTdiN2RhZmEyOTZlN2FlYzkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9jb2RlY3Mvd3JhcHBl
ci5jYworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2NvZGVjcy93cmFwcGVyLmgiCi0KLSNp
bmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9z
Y29wZWRfamF2YV9yZWYuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2Nv
ZGVjX2luZm8uaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2RlY29kZXJf
ZmFjdG9yeV93cmFwcGVyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19l
bmNvZGVyX2ZhY3Rvcnlfd3JhcHBlci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotU2RwVmlk
ZW9Gb3JtYXQgSmF2YVRvTmF0aXZlVmlkZW9Db2RlY0luZm8oSk5JRW52KiBqbmksIGpvYmplY3Qg
Y29kZWNfaW5mbykgewotICByZXR1cm4gam5pOjpWaWRlb0NvZGVjSW5mb1RvU2RwVmlkZW9Gb3Jt
YXQoam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2
YVBhcmFtUmVmPGpvYmplY3Q+KGNvZGVjX2luZm8pKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFZp
ZGVvRGVjb2RlckZhY3Rvcnk+IEphdmFUb05hdGl2ZVZpZGVvRGVjb2RlckZhY3RvcnkoCi0gICAg
Sk5JRW52KiBqbmksCi0gICAgam9iamVjdCBkZWNvZGVyX2ZhY3RvcnkpIHsKLSAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8am5pOjpWaWRlb0RlY29kZXJGYWN0b3J5V3JhcHBlcj4oCi0gICAgICBq
bmksIEphdmFQYXJhbVJlZjxqb2JqZWN0PihkZWNvZGVyX2ZhY3RvcnkpKTsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPFZpZGVvRW5jb2RlckZhY3Rvcnk+IEphdmFUb05hdGl2ZVZpZGVvRW5jb2RlckZh
Y3RvcnkoCi0gICAgSk5JRW52KiBqbmksCi0gICAgam9iamVjdCBlbmNvZGVyX2ZhY3RvcnkpIHsK
LSAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8am5pOjpWaWRlb0VuY29kZXJGYWN0b3J5V3JhcHBl
cj4oCi0gICAgICBqbmksIEphdmFQYXJhbVJlZjxqb2JqZWN0PihlbmNvZGVyX2ZhY3RvcnkpKTsK
LX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9jb2RlY3Mv
d3JhcHBlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvbmF0aXZlX2FwaS9jb2RlY3Mvd3JhcHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiMWZmMjRjNjc5NjM4MzVhMDA1NzdkZTJmNmYxYmUzMDYwZDMzMmM3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvY29kZWNz
L3dyYXBwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9DT0RFQ1NfV1JBUFBFUl9IXwot
I2RlZmluZSBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX0NPREVDU19XUkFQUEVSX0hfCi0KLSNpbmNs
dWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJhcGkvdmlkZW9fY29k
ZWNzL3NkcF92aWRlb19mb3JtYXQuaCIKLSNpbmNsdWRlICJhcGkvdmlkZW9fY29kZWNzL3ZpZGVv
X2RlY29kZXJfZmFjdG9yeS5oIgotI2luY2x1ZGUgImFwaS92aWRlb19jb2RlY3MvdmlkZW9fZW5j
b2Rlcl9mYWN0b3J5LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBDcmVhdGVzIGFuIGlu
c3RhbmNlIG9mIHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQgZnJvbSBKYXZhIFZpZGVvQ29kZWNJbmZv
LgotU2RwVmlkZW9Gb3JtYXQgSmF2YVRvTmF0aXZlVmlkZW9Db2RlY0luZm8oSk5JRW52KiBqbmks
IGpvYmplY3QgY29kZWNfaW5mbyk7Ci0KLS8vIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Ygd2VicnRj
OjpWaWRlb0RlY29kZXJGYWN0b3J5IGZyb20gSmF2YQotLy8gVmlkZW9EZWNvZGVyRmFjdG9yeS4K
LXN0ZDo6dW5pcXVlX3B0cjxWaWRlb0RlY29kZXJGYWN0b3J5PiBKYXZhVG9OYXRpdmVWaWRlb0Rl
Y29kZXJGYWN0b3J5KAotICAgIEpOSUVudiogam5pLAotICAgIGpvYmplY3QgZGVjb2Rlcl9mYWN0
b3J5KTsKLQotLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB3ZWJydGM6OlZpZGVvRW5jb2RlckZh
Y3RvcnkgZnJvbSBKYXZhCi0vLyBWaWRlb0VuY29kZXJGYWN0b3J5Lgotc3RkOjp1bmlxdWVfcHRy
PFZpZGVvRW5jb2RlckZhY3Rvcnk+IEphdmFUb05hdGl2ZVZpZGVvRW5jb2RlckZhY3RvcnkoCi0g
ICAgSk5JRW52KiBqbmksCi0gICAgam9iamVjdCBlbmNvZGVyX2ZhY3RvcnkpOwotCi19ICAvLyBu
YW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfTkFUSVZFX0FQSV9DT0RF
Q1NfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvY2xhc3NfbG9hZGVyLmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS9qbmkvY2xhc3NfbG9hZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkMGFhMzk1YTFlNjYwOTgyZmViOTllODQ0NjY3ODUxMmI3Y2Y3M2ZmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2NsYXNzX2xvYWRl
ci5jYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9jbGFzc19sb2FkZXIuaCIKLQot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJydGNf
YmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfbmF0aXZlX2Fw
aV9qbmkvV2ViUnRjQ2xhc3NMb2FkZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9h
cGkvam5pL3Njb3BlZF9qYXZhX3JlZi5oIgotCi0vLyBBYm9ydCB0aGUgcHJvY2VzcyBpZiB8am5p
fCBoYXMgYSBKYXZhIGV4Y2VwdGlvbiBwZW5kaW5nLiBUaGlzIG1hY3JvcyB1c2VzIHRoZQotLy8g
Y29tbWEgb3BlcmF0b3IgdG8gZXhlY3V0ZSBFeGNlcHRpb25EZXNjcmliZSBhbmQgRXhjZXB0aW9u
Q2xlYXIgaWdub3JpbmcgdGhlaXIKLS8vIHJldHVybiB2YWx1ZXMgYW5kIHNlbmRpbmcgIiIgdG8g
dGhlIGVycm9yIHN0cmVhbS4KLSNkZWZpbmUgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgICAgICAgIFwK
LSAgUlRDX0NIRUNLKCFqbmktPkV4Y2VwdGlvbkNoZWNrKCkpIFwKLSAgICAgIDw8IChqbmktPkV4
Y2VwdGlvbkRlc2NyaWJlKCksIGpuaS0+RXhjZXB0aW9uQ2xlYXIoKSwgIiIpCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBDbGFzc0xvYWRlciB7Ci0gcHVibGlj
OgotICBleHBsaWNpdCBDbGFzc0xvYWRlcihKTklFbnYqIGVudikKLSAgICAgIDogY2xhc3NfbG9h
ZGVyXyhqbmk6OkphdmFfV2ViUnRjQ2xhc3NMb2FkZXJfZ2V0Q2xhc3NMb2FkZXIoZW52KSkgewot
ICAgIGNsYXNzX2xvYWRlcl9jbGFzc18gPSByZWludGVycHJldF9jYXN0PGpjbGFzcz4oCi0gICAg
ICAgIGVudi0+TmV3R2xvYmFsUmVmKGVudi0+RmluZENsYXNzKCJqYXZhL2xhbmcvQ2xhc3NMb2Fk
ZXIiKSkpOwotICAgIENIRUNLX0VYQ0VQVElPTihlbnYpOwotICAgIGxvYWRfY2xhc3NfbWV0aG9k
XyA9Ci0gICAgICAgIGVudi0+R2V0TWV0aG9kSUQoY2xhc3NfbG9hZGVyX2NsYXNzXywgImxvYWRD
bGFzcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZzspTGph
dmEvbGFuZy9DbGFzczsiKTsKLSAgICBDSEVDS19FWENFUFRJT04oZW52KTsKLSAgfQotCi0gIFNj
b3BlZEphdmFMb2NhbFJlZjxqY2xhc3M+IEZpbmRDbGFzcyhKTklFbnYqIGVudiwgY29uc3QgY2hh
ciogY19uYW1lKSB7Ci0gICAgLy8gQ2xhc3NMb2FkZXIubG9hZENsYXNzIGV4cGVjdHMgYSBjbGFz
c25hbWUgd2l0aCBjb21wb25lbnRzIHNlcGFyYXRlZCBieQotICAgIC8vIGRvdHMgaW5zdGVhZCBv
ZiB0aGUgc2xhc2hlcyB0aGF0IEpOSUVudjo6RmluZENsYXNzIGV4cGVjdHMuCi0gICAgc3RkOjpz
dHJpbmcgbmFtZShjX25hbWUpOwotICAgIHN0ZDo6cmVwbGFjZShuYW1lLmJlZ2luKCksIG5hbWUu
ZW5kKCksICcvJywgJy4nKTsKLSAgICBTY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4gal9uYW1l
ID0gTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgbmFtZSk7Ci0gICAgY29uc3QgamNsYXNzIGNsYXp6
ID0gc3RhdGljX2Nhc3Q8amNsYXNzPihlbnYtPkNhbGxPYmplY3RNZXRob2QoCi0gICAgICAgIGNs
YXNzX2xvYWRlcl8ub2JqKCksIGxvYWRfY2xhc3NfbWV0aG9kXywgal9uYW1lLm9iaigpKSk7Ci0g
ICAgQ0hFQ0tfRVhDRVBUSU9OKGVudik7Ci0gICAgcmV0dXJuIFNjb3BlZEphdmFMb2NhbFJlZjxq
Y2xhc3M+KGVudiwgY2xhenopOwotICB9Ci0KLSBwcml2YXRlOgotICBTY29wZWRKYXZhR2xvYmFs
UmVmPGpvYmplY3Q+IGNsYXNzX2xvYWRlcl87Ci0gIGpjbGFzcyBjbGFzc19sb2FkZXJfY2xhc3Nf
OwotICBqbWV0aG9kSUQgbG9hZF9jbGFzc19tZXRob2RfOwotfTsKLQotc3RhdGljIENsYXNzTG9h
ZGVyKiBnX2NsYXNzX2xvYWRlciA9IG51bGxwdHI7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi12b2lk
IEluaXRDbGFzc0xvYWRlcihKTklFbnYqIGVudikgewotICBSVENfQ0hFQ0soZ19jbGFzc19sb2Fk
ZXIgPT0gbnVsbHB0cik7Ci0gIGdfY2xhc3NfbG9hZGVyID0gbmV3IENsYXNzTG9hZGVyKGVudik7
Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqY2xhc3M+IEdldENsYXNzKEpOSUVudiogZW52LCBj
b25zdCBjaGFyKiBuYW1lKSB7Ci0gIC8vIFRoZSBjbGFzcyBsb2FkZXIgd2lsbCBiZSBudWxsIGlu
IHRoZSBKTkkgY29kZSBjYWxsZWQgZnJvbSB0aGUgQ2xhc3NMb2FkZXIKLSAgLy8gY3RvciB3aGVu
IHdlIGFyZSBib290c3RyYXBwaW5nIG91cnNlbGYuCi0gIHJldHVybiAoZ19jbGFzc19sb2FkZXIg
PT0gbnVsbHB0cikKLSAgICAgICAgICAgICA/IFNjb3BlZEphdmFMb2NhbFJlZjxqY2xhc3M+KGVu
diwgZW52LT5GaW5kQ2xhc3MobmFtZSkpCi0gICAgICAgICAgICAgOiBnX2NsYXNzX2xvYWRlci0+
RmluZENsYXNzKGVudiwgbmFtZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL25hdGl2ZV9hcGkvam5pL2NsYXNzX2xvYWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvY2xhc3NfbG9h
ZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMTAyZmU0YTIyZWQ2ZTBkN2Ex
Yzc2YjdjZTAyZTNkNjY4YzdjOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvY2xhc3NfbG9hZGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0vLyBBbmRyb2lkJ3MgRmluZENsYXNz
KCkgaXMgdHJpY2t5IGJlY2F1c2UgdGhlIGFwcC1zcGVjaWZpYyBDbGFzc0xvYWRlciBpcyBub3QK
LS8vIGNvbnN1bHRlZCB3aGVuIHRoZXJlIGlzIG5vIGFwcC1zcGVjaWZpYyBmcmFtZSBvbiB0aGUg
c3RhY2sgKGkuZS4gd2hlbiBjYWxsZWQKLS8vIGZyb20gYSB0aHJlYWQgY3JlYXRlZCBmcm9tIG5h
dGl2ZSBDKysgY29kZSkuIFRoZXNlIGhlbHBlciBmdW5jdGlvbnMgcHJvdmlkZSBhCi0vLyB3b3Jr
YXJvdW5kIGZvciB0aGlzLgotLy8gaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS90cmFpbmlu
Zy9hcnRpY2xlcy9wZXJmLWpuaS5odG1sI2ZhcV9GaW5kQ2xhc3MKLQotI2lmbmRlZiBTREtfQU5E
Uk9JRF9OQVRJVkVfQVBJX0pOSV9DTEFTU19MT0FERVJfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURf
TkFUSVZFX0FQSV9KTklfQ0xBU1NfTE9BREVSX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLQotI2lu
Y2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL3Njb3BlZF9qYXZhX3JlZi5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9t
IEpOSV9PbkxvYWQgYW5kIGJlZm9yZSBhbnkgY2FsbHMgdG8KLS8vIEZpbmRDbGFzcy4gVGhpcyBp
cyBub3JtYWxseSBjYWxsZWQgYnkgSW5pdEFuZHJvaWQuCi12b2lkIEluaXRDbGFzc0xvYWRlcihK
TklFbnYqIGVudik7Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIEpOSUVudjo6
RmluZENsYXNzIGV4Y2VwdCB0aGF0IGl0IHdvcmtzIGZyb20gYW55Ci0vLyB0aHJlYWQuIFRoaXMg
ZnVuY3Rpb24gbG9hZHMgYW5kIHJldHVybnMgYSBsb2NhbCByZWZlcmVuY2UgdG8gdGhlIGNsYXNz
IHdpdGgKLS8vIHRoZSBnaXZlbiBuYW1lLiBUaGUgbmFtZSBhcmd1bWVudCBpcyBhIGZ1bGx5LXF1
YWxpZmllZCBjbGFzcyBuYW1lLiBGb3IKLS8vIGV4YW1wbGUsIHRoZSBmdWxseS1xdWFsaWZpZWQg
Y2xhc3MgbmFtZSBmb3IgdGhlIGphdmEubGFuZy5TdHJpbmcgY2xhc3MgaXM6Ci0vLyAiamF2YS9s
YW5nL1N0cmluZyIuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIGZyb20gdGhlIEpOSSBnZW5l
cmF0ZWQgY29kZQotLy8gYW5kIHNob3VsZCByYXJlbHkgYmUgdXNlZCBtYW51YWxseS4KLVNjb3Bl
ZEphdmFMb2NhbFJlZjxqY2xhc3M+IEdldENsYXNzKEpOSUVudiogZW52LCBjb25zdCBjaGFyKiBu
YW1lKTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNES19BTkRST0lE
X05BVElWRV9BUElfSk5JX0NMQVNTX0xPQURFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkv
amF2YV90eXBlcy5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGE5N2M4MWYxZjJkMjEzMjQ4NWIwNGQ5OTVlNTljMzNjNDVhZDEzODQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9q
bmkvamF2YV90eXBlcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90
eXBlcy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfZXh0ZXJuYWxfY2xhc3Nlc19qbmkvQXJyYXlMaXN0
X2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9leHRlcm5hbF9jbGFzc2Vz
X2puaS9Cb29sZWFuX2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9leHRl
cm5hbF9jbGFzc2VzX2puaS9Eb3VibGVfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2Vu
ZXJhdGVkX2V4dGVybmFsX2NsYXNzZXNfam5pL0VudW1fam5pLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvZ2VuZXJhdGVkX2V4dGVybmFsX2NsYXNzZXNfam5pL0ludGVnZXJfam5pLmgiCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2V4dGVybmFsX2NsYXNzZXNfam5pL0l0ZXJhYmxl
X2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9leHRlcm5hbF9jbGFzc2Vz
X2puaS9JdGVyYXRvcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfZXh0
ZXJuYWxfY2xhc3Nlc19qbmkvTGlua2VkSGFzaE1hcF9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9nZW5lcmF0ZWRfZXh0ZXJuYWxfY2xhc3Nlc19qbmkvTG9uZ19qbmkuaCIKLSNpbmNsdWRl
ICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfZXh0ZXJuYWxfY2xhc3Nlc19qbmkvTWFwX2puaS5oIgot
I2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9uYXRpdmVfYXBpX2puaS9KbmlIZWxwZXJf
am5pLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1JdGVyYWJsZTo6SXRlcmFibGUoSk5JRW52
KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGl0ZXJhYmxlKQotICAgIDogam5pXyhqbmkp
LCBpdGVyYWJsZV8oam5pLCBpdGVyYWJsZSkge30KLQotSXRlcmFibGU6Okl0ZXJhYmxlKEl0ZXJh
YmxlJiYgb3RoZXIpID0gZGVmYXVsdDsKLQotSXRlcmFibGU6On5JdGVyYWJsZSgpID0gZGVmYXVs
dDsKLQotLy8gQ3JlYXRlcyBhbiBpdGVyYXRvciByZXByZXNlbnRpbmcgdGhlIGVuZCBvZiBhbnkg
Y29sbGVjdGlvbi4KLUl0ZXJhYmxlOjpJdGVyYXRvcjo6SXRlcmF0b3IoKSA9IGRlZmF1bHQ7Ci0K
LS8vIENyZWF0ZXMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg
c3BlY2lmaWVkIGNvbGxlY3Rpb24uCi1JdGVyYWJsZTo6SXRlcmF0b3I6Okl0ZXJhdG9yKEpOSUVu
diogam5pLCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBpdGVyYWJsZSkKLSAgICA6IGpuaV8oam5p
KSB7Ci0gIGl0ZXJhdG9yXyA9IEpOSV9JdGVyYWJsZTo6SmF2YV9JdGVyYWJsZV9pdGVyYXRvcihq
bmksIGl0ZXJhYmxlKTsKLSAgUlRDX0NIRUNLKCFpdGVyYXRvcl8uaXNfbnVsbCgpKTsKLSAgLy8g
U3RhcnQgYXQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb24uCi0gICsrKCp0aGlz
KTsKLX0KLQotLy8gTW92ZSBjb25zdHJ1Y3RvciAtIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIHJl
dHVybiBpdGVyYXRvciB0eXBlcyBmcm9tCi0vLyBmdW5jdGlvbnMuCi1JdGVyYWJsZTo6SXRlcmF0
b3I6Okl0ZXJhdG9yKEl0ZXJhdG9yJiYgb3RoZXIpCi0gICAgOiBqbmlfKHN0ZDo6bW92ZShvdGhl
ci5qbmlfKSksCi0gICAgICBpdGVyYXRvcl8oc3RkOjptb3ZlKG90aGVyLml0ZXJhdG9yXykpLAot
ICAgICAgdmFsdWVfKHN0ZDo6bW92ZShvdGhlci52YWx1ZV8pKSwKLSAgICAgIHRocmVhZF9jaGVj
a2VyXyhzdGQ6Om1vdmUob3RoZXIudGhyZWFkX2NoZWNrZXJfKSkge30KLQotSXRlcmFibGU6Okl0
ZXJhdG9yOjp+SXRlcmF0b3IoKSA9IGRlZmF1bHQ7Ci0KLS8vIEFkdmFuY2VzIHRoZSBpdGVyYXRv
ciBvbmUgc3RlcC4KLUl0ZXJhYmxlOjpJdGVyYXRvciYgSXRlcmFibGU6Okl0ZXJhdG9yOjpvcGVy
YXRvcisrKCkgewotICBSVENfQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAg
aWYgKEF0RW5kKCkpIHsKLSAgICAvLyBDYW4ndCBtb3ZlIHBhc3QgdGhlIGVuZC4KLSAgICByZXR1
cm4gKnRoaXM7Ci0gIH0KLSAgYm9vbCBoYXNfbmV4dCA9IEpOSV9JdGVyYXRvcjo6SmF2YV9JdGVy
YXRvcl9oYXNOZXh0KGpuaV8sIGl0ZXJhdG9yXyk7Ci0gIGlmICghaGFzX25leHQpIHsKLSAgICBp
dGVyYXRvcl8gPSBudWxscHRyOwotICAgIHZhbHVlXyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgdmFsdWVfID0gSk5JX0l0ZXJhdG9yOjpKYXZhX0l0ZXJhdG9yX25leHQo
am5pXywgaXRlcmF0b3JfKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi12b2lkIEl0ZXJhYmxlOjpJ
dGVyYXRvcjo6UmVtb3ZlKCkgewotICBKTklfSXRlcmF0b3I6OkphdmFfSXRlcmF0b3JfcmVtb3Zl
KGpuaV8sIGl0ZXJhdG9yXyk7Ci19Ci0KLS8vIFByb3ZpZGVzIGEgd2F5IHRvIGNvbXBhcmUgdGhl
IGl0ZXJhdG9yIHdpdGggaXRzZWxmIGFuZCB3aXRoIHRoZSBlbmQgaXRlcmF0b3IuCi0vLyBOb3Rl
OiBhbGwgb3RoZXIgY29tcGFyaXNvbiByZXN1bHRzIGFyZSB1bmRlZmluZWQsIGp1c3QgbGlrZSBm
b3IgQysrIGlucHV0Ci0vLyBpdGVyYXRvcnMuCi1ib29sIEl0ZXJhYmxlOjpJdGVyYXRvcjo6b3Bl
cmF0b3I9PShjb25zdCBJdGVyYWJsZTo6SXRlcmF0b3ImIG90aGVyKSB7Ci0gIC8vIFR3byBkaWZm
ZXJlbnQgYWN0aXZlIGl0ZXJhdG9ycyBzaG91bGQgbmV2ZXIgYmUgY29tcGFyZWQuCi0gIFJUQ19E
Q0hFQ0sodGhpcyA9PSAmb3RoZXIgfHwgQXRFbmQoKSB8fCBvdGhlci5BdEVuZCgpKTsKLSAgcmV0
dXJuIEF0RW5kKCkgPT0gb3RoZXIuQXRFbmQoKTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpv
YmplY3Q+JiBJdGVyYWJsZTo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIHsKLSAgUlRDX0NIRUNLKCFB
dEVuZCgpKTsKLSAgcmV0dXJuIHZhbHVlXzsKLX0KLQotYm9vbCBJdGVyYWJsZTo6SXRlcmF0b3I6
OkF0RW5kKCkgY29uc3QgewotICBSVENfQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgcmV0dXJuIGpuaV8gPT0gbnVsbHB0ciB8fCBJc051bGwoam5pXywgaXRlcmF0b3JfKTsK
LX0KLQotYm9vbCBJc051bGwoSk5JRW52KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIG9i
aikgewotICByZXR1cm4gam5pLT5Jc1NhbWVPYmplY3Qob2JqLm9iaigpLCBudWxscHRyKTsKLX0K
LQotc3RkOjpzdHJpbmcgR2V0SmF2YUVudW1OYW1lKEpOSUVudiogam5pLCBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX2VudW0pIHsKLSAgcmV0dXJuIEphdmFUb1N0ZFN0cmluZyhqbmksIEpOSV9F
bnVtOjpKYXZhX0VudW1fbmFtZShqbmksIGpfZW51bSkpOwotfQotCi1JdGVyYWJsZSBHZXRKYXZh
TWFwRW50cnlTZXQoSk5JRW52KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfbWFwKSB7
Ci0gIHJldHVybiBJdGVyYWJsZShqbmksIEpOSV9NYXA6OkphdmFfTWFwX2VudHJ5U2V0KGpuaSwg
al9tYXApKTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEdldEphdmFNYXBFbnRy
eUtleSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2Vu
dHJ5KSB7Ci0gIHJldHVybiBqbmk6OkphdmFfSm5pSGVscGVyX2dldEtleShqbmksIGpfZW50cnkp
OwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gR2V0SmF2YU1hcEVudHJ5VmFsdWUo
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9lbnRyeSkg
ewotICByZXR1cm4gam5pOjpKYXZhX0puaUhlbHBlcl9nZXRWYWx1ZShqbmksIGpfZW50cnkpOwot
fQotCi1pbnQ2NF90IEphdmFUb05hdGl2ZUxvbmcoSk5JRW52KiBlbnYsIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIGpfbG9uZykgewotICByZXR1cm4gSk5JX0xvbmc6OkphdmFfTG9uZ19sb25nVmFs
dWUoZW52LCBqX2xvbmcpOwotfQotCi1hYnNsOjpvcHRpb25hbDxib29sPiBKYXZhVG9OYXRpdmVP
cHRpb25hbEJvb2woSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgYm9vbGVhbikgewotICBpZiAo
SXNOdWxsKGpuaSwgYm9vbGVhbikpCi0gICAgcmV0dXJuIGFic2w6Om51bGxvcHQ7Ci0gIHJldHVy
biBKTklfQm9vbGVhbjo6SmF2YV9Cb29sZWFuX2Jvb2xlYW5WYWx1ZShqbmksIGJvb2xlYW4pOwot
fQotCi1hYnNsOjpvcHRpb25hbDxkb3VibGU+IEphdmFUb05hdGl2ZU9wdGlvbmFsRG91YmxlKAot
ICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZG91YmxlKSB7
Ci0gIGlmIChJc051bGwoam5pLCBqX2RvdWJsZSkpCi0gICAgcmV0dXJuIGFic2w6Om51bGxvcHQ7
Ci0gIHJldHVybiBKTklfRG91YmxlOjpKYXZhX0RvdWJsZV9kb3VibGVWYWx1ZShqbmksIGpfZG91
YmxlKTsKLX0KLQotYWJzbDo6b3B0aW9uYWw8aW50MzJfdD4gSmF2YVRvTmF0aXZlT3B0aW9uYWxJ
bnQoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgaW50ZWdl
cikgewotICBpZiAoSXNOdWxsKGpuaSwgaW50ZWdlcikpCi0gICAgcmV0dXJuIGFic2w6Om51bGxv
cHQ7Ci0gIHJldHVybiBKTklfSW50ZWdlcjo6SmF2YV9JbnRlZ2VyX2ludFZhbHVlKGpuaSwgaW50
ZWdlcik7Ci19Ci0KLS8vIEdpdmVuIGEganN0cmluZywgcmVpbnRlcnByZXRzIGl0IHRvIGEgbmV3
IG5hdGl2ZSBzdHJpbmcuCi1zdGQ6OnN0cmluZyBKYXZhVG9OYXRpdmVTdHJpbmcoSk5JRW52KiBq
bmksIGNvbnN0IEphdmFSZWY8anN0cmluZz4mIGpfc3RyaW5nKSB7Ci0gIGNvbnN0IFNjb3BlZEph
dmFMb2NhbFJlZjxqYnl0ZUFycmF5PiBqX2J5dGVfYXJyYXkgPQotICAgICAgam5pOjpKYXZhX0pu
aUhlbHBlcl9nZXRTdHJpbmdCeXRlcyhqbmksIGpfc3RyaW5nKTsKLQotICBjb25zdCBzaXplX3Qg
bGVuID0gam5pLT5HZXRBcnJheUxlbmd0aChqX2J5dGVfYXJyYXkub2JqKCkpOwotICBDSEVDS19F
WENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldEFycmF5TGVuZ3RoIjsKLSAgc3RkOjpz
dHJpbmcgc3RyKGxlbiwgJ1wwJyk7Ci0gIGpuaS0+R2V0Qnl0ZUFycmF5UmVnaW9uKGpfYnl0ZV9h
cnJheS5vYmooKSwgMCwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PGpieXRlKj4oJnN0clswXSkpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJy
b3IgZHVyaW5nIEdldEJ5dGVBcnJheVJlZ2lvbiI7Ci0gIHJldHVybiBzdHI7Ci19Ci0KLXN0ZDo6
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gSmF2YVRvTmF0aXZlU3RyaW5nTWFwKAotICAg
IEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfbWFwKSB7Ci0gIHJl
dHVybiBKYXZhVG9OYXRpdmVNYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPigKLSAgICAgIGpu
aSwgal9tYXAsCi0gICAgICBbXShKTklFbnYqIGVudiwgSmF2YVJlZjxqb2JqZWN0PiBjb25zdCYg
a2V5LAotICAgICAgICAgSmF2YVJlZjxqb2JqZWN0PiBjb25zdCYgdmFsdWUpIHsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKAotICAgICAgICAgICAgSmF2YVRvTmF0aXZlU3RyaW5nKGVu
diwgc3RhdGljX2phdmFfcmVmX2Nhc3Q8anN0cmluZz4oZW52LCBrZXkpKSwKLSAgICAgICAgICAg
IEphdmFUb05hdGl2ZVN0cmluZyhlbnYsIHN0YXRpY19qYXZhX3JlZl9jYXN0PGpzdHJpbmc+KGVu
diwgdmFsdWUpKSk7Ci0gICAgICB9KTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+
IE5hdGl2ZVRvSmF2YUJvb2xlYW4oSk5JRW52KiBlbnYsIGJvb2wgYikgewotICByZXR1cm4gSk5J
X0Jvb2xlYW46OkphdmFfQm9vbGVhbl9Db25zdHJ1Y3RvckpMQl9aKGVudiwgYik7Ci19Ci0KLVNj
b3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFEb3VibGUoSk5JRW52KiBlbnYs
IGRvdWJsZSBkKSB7Ci0gIHJldHVybiBKTklfRG91YmxlOjpKYXZhX0RvdWJsZV9Db25zdHJ1Y3Rv
ckpMRF9EKGVudiwgZCk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVU
b0phdmFJbnRlZ2VyKEpOSUVudiogam5pLCBpbnQzMl90IGkpIHsKLSAgcmV0dXJuIEpOSV9JbnRl
Z2VyOjpKYXZhX0ludGVnZXJfQ29uc3RydWN0b3JKTElfSShqbmksIGkpOwotfQotCi1TY29wZWRK
YXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhTG9uZyhKTklFbnYqIGVudiwgaW50NjRf
dCB1KSB7Ci0gIHJldHVybiBKTklfTG9uZzo6SmF2YV9Mb25nX0NvbnN0cnVjdG9ySkxMT19KKGVu
diwgdSk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqc3RyaW5nPiBOYXRpdmVUb0phdmFTdHJp
bmcoSk5JRW52KiBlbnYsIGNvbnN0IGNoYXIqIHN0cikgewotICBqc3RyaW5nIGpfc3RyID0gZW52
LT5OZXdTdHJpbmdVVEYoc3RyKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGVudikgPDwgImVycm9yIGR1
cmluZyBOZXdTdHJpbmdVVEYiOwotICByZXR1cm4gU2NvcGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+
KGVudiwgal9zdHIpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4gTmF0aXZlVG9K
YXZhU3RyaW5nKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyKSB7Ci0gIHJldHVybiBOYXRpdmVU
b0phdmFTdHJpbmcoam5pLCBzdHIuY19zdHIoKSk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxq
b2JqZWN0PiBOYXRpdmVUb0phdmFEb3VibGUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3Qg
YWJzbDo6b3B0aW9uYWw8ZG91YmxlPiYgb3B0aW9uYWxfZG91YmxlKSB7Ci0gIHJldHVybiBvcHRp
b25hbF9kb3VibGUgPyBOYXRpdmVUb0phdmFEb3VibGUoam5pLCAqb3B0aW9uYWxfZG91YmxlKSA6
IG51bGxwdHI7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFJ
bnRlZ2VyKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IGFic2w6Om9wdGlvbmFsPGludDMy
X3Q+JiBvcHRpb25hbF9pbnQpIHsKLSAgcmV0dXJuIG9wdGlvbmFsX2ludCA/IE5hdGl2ZVRvSmF2
YUludGVnZXIoam5pLCAqb3B0aW9uYWxfaW50KSA6IG51bGxwdHI7Ci19Ci0KLVNjb3BlZEphdmFM
b2NhbFJlZjxqc3RyaW5nPiBOYXRpdmVUb0phdmFTdHJpbmcoCi0gICAgSk5JRW52KiBqbmksCi0g
ICAgY29uc3QgYWJzbDo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+JiBzdHIpIHsKLSAgcmV0dXJuIHN0
ciA/IE5hdGl2ZVRvSmF2YVN0cmluZyhqbmksICpzdHIpIDogbnVsbHB0cjsKLX0KLQotU2NvcGVk
SmF2YUxvY2FsUmVmPGpieXRlQXJyYXk+IE5hdGl2ZVRvSmF2YUJ5dGVBcnJheSgKLSAgICBKTklF
bnYqIGVudiwKLSAgICBydGM6OkFycmF5VmlldzxpbnQ4X3Q+IGNvbnRhaW5lcikgewotICBTY29w
ZWRKYXZhTG9jYWxSZWY8amJ5dGVBcnJheT4gamFycmF5KGVudiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnYtPk5ld0J5dGVBcnJheShjb250YWluZXIuc2l6ZSgp
KSk7Ci0gIGludDhfdCogYXJyYXlfcHRyID0KLSAgICAgIGVudi0+R2V0Qnl0ZUFycmF5RWxlbWVu
dHMoamFycmF5Lm9iaigpLCAvKmlzQ29weT0qL251bGxwdHIpOwotICBtZW1jcHkoYXJyYXlfcHRy
LCBjb250YWluZXIuZGF0YSgpLCBjb250YWluZXIuc2l6ZSgpICogc2l6ZW9mKGludDhfdCkpOwot
ICBlbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhqYXJyYXkub2JqKCksIGFycmF5X3B0ciwg
Lyptb2RlPSovMCk7Ci0gIHJldHVybiBqYXJyYXk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxq
aW50QXJyYXk+IE5hdGl2ZVRvSmF2YUludEFycmF5KAotICAgIEpOSUVudiogZW52LAotICAgIHJ0
Yzo6QXJyYXlWaWV3PGludDMyX3Q+IGNvbnRhaW5lcikgewotICBTY29wZWRKYXZhTG9jYWxSZWY8
amludEFycmF5PiBqYXJyYXkoZW52LCBlbnYtPk5ld0ludEFycmF5KGNvbnRhaW5lci5zaXplKCkp
KTsKLSAgaW50MzJfdCogYXJyYXlfcHRyID0KLSAgICAgIGVudi0+R2V0SW50QXJyYXlFbGVtZW50
cyhqYXJyYXkub2JqKCksIC8qaXNDb3B5PSovbnVsbHB0cik7Ci0gIG1lbWNweShhcnJheV9wdHIs
IGNvbnRhaW5lci5kYXRhKCksIGNvbnRhaW5lci5zaXplKCkgKiBzaXplb2YoaW50MzJfdCkpOwot
ICBlbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGphcnJheS5vYmooKSwgYXJyYXlfcHRyLCAv
Km1vZGU9Ki8wKTsKLSAgcmV0dXJuIGphcnJheTsKLX0KLQotc3RkOjp2ZWN0b3I8aW50OF90PiBK
YXZhVG9OYXRpdmVCeXRlQXJyYXkoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpieXRlQXJyYXk+JiBqYXJyYXkpIHsK
LSAgaW50OF90KiBhcnJheV9wdHIgPQotICAgICAgZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhq
YXJyYXkub2JqKCksIC8qaXNDb3B5PSovbnVsbHB0cik7Ci0gIHNpemVfdCBhcnJheV9sZW5ndGgg
PSBlbnYtPkdldEFycmF5TGVuZ3RoKGphcnJheS5vYmooKSk7Ci0gIHN0ZDo6dmVjdG9yPGludDhf
dD4gY29udGFpbmVyKGFycmF5X3B0ciwgYXJyYXlfcHRyICsgYXJyYXlfbGVuZ3RoKTsKLSAgZW52
LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoamFycmF5Lm9iaigpLCBhcnJheV9wdHIsIC8qbW9k
ZT0qL0pOSV9BQk9SVCk7Ci0gIHJldHVybiBjb250YWluZXI7Ci19Ci0KLXN0ZDo6dmVjdG9yPGlu
dDMyX3Q+IEphdmFUb05hdGl2ZUludEFycmF5KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqaW50QXJyYXk+JiBqYXJy
YXkpIHsKLSAgaW50MzJfdCogYXJyYXlfcHRyID0KLSAgICAgIGVudi0+R2V0SW50QXJyYXlFbGVt
ZW50cyhqYXJyYXkub2JqKCksIC8qaXNDb3B5PSovbnVsbHB0cik7Ci0gIHNpemVfdCBhcnJheV9s
ZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKGphcnJheS5vYmooKSk7Ci0gIHN0ZDo6dmVjdG9y
PGludDMyX3Q+IGNvbnRhaW5lcihhcnJheV9wdHIsIGFycmF5X3B0ciArIGFycmF5X2xlbmd0aCk7
Ci0gIGVudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoamFycmF5Lm9iaigpLCBhcnJheV9wdHIs
IC8qbW9kZT0qL0pOSV9BQk9SVCk7Ci0gIHJldHVybiBjb250YWluZXI7Ci19Ci0KLVNjb3BlZEph
dmFMb2NhbFJlZjxqb2JqZWN0QXJyYXk+IE5hdGl2ZVRvSmF2YUJvb2xlYW5BcnJheSgKLSAgICBK
TklFbnYqIGVudiwKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjxib29sPiYgY29udGFpbmVyKSB7Ci0g
IHJldHVybiBOYXRpdmVUb0phdmFPYmplY3RBcnJheShlbnYsIGNvbnRhaW5lciwgamF2YV9sYW5n
X0Jvb2xlYW5fY2xhenooZW52KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZO
YXRpdmVUb0phdmFCb29sZWFuKTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RBcnJh
eT4gTmF0aXZlVG9KYXZhRG91YmxlQXJyYXkoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3Qg
c3RkOjp2ZWN0b3I8ZG91YmxlPiYgY29udGFpbmVyKSB7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxq
b2JqZWN0PiAoKmNvbnZlcnRfZnVuY3Rpb24pKEpOSUVudiosIGRvdWJsZSkgPQotICAgICAgJk5h
dGl2ZVRvSmF2YURvdWJsZTsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YU9iamVjdEFycmF5KGVudiwg
Y29udGFpbmVyLCBqYXZhX2xhbmdfRG91YmxlX2NsYXp6KGVudiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0X2Z1bmN0aW9uKTsKLX0KLQotU2NvcGVkSmF2YUxvY2Fs
UmVmPGpvYmplY3RBcnJheT4gTmF0aXZlVG9KYXZhSW50ZWdlckFycmF5KAotICAgIEpOSUVudiog
ZW52LAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGludDMyX3Q+JiBjb250YWluZXIpIHsKLSAgU2Nv
cGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+ICgqY29udmVydF9mdW5jdGlvbikoSk5JRW52KiwgaW50
MzJfdCkgPQotICAgICAgJk5hdGl2ZVRvSmF2YUludGVnZXI7Ci0gIHJldHVybiBOYXRpdmVUb0ph
dmFPYmplY3RBcnJheShlbnYsIGNvbnRhaW5lciwgamF2YV9sYW5nX0ludGVnZXJfY2xhenooZW52
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRfZnVuY3Rpb24pOwot
fQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBOYXRpdmVUb0phdmFMb25nQXJy
YXkoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8aW50NjRfdD4mIGNv
bnRhaW5lcikgewotICByZXR1cm4gTmF0aXZlVG9KYXZhT2JqZWN0QXJyYXkoZW52LCBjb250YWlu
ZXIsIGphdmFfbGFuZ19Mb25nX2NsYXp6KGVudiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmTmF0aXZlVG9KYXZhTG9uZyk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0QXJyYXk+IE5hdGl2ZVRvSmF2YVN0cmluZ0FycmF5KAotICAgIEpOSUVudiogZW52LAotICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29udGFpbmVyKSB7Ci0gIFNjb3BlZEph
dmFMb2NhbFJlZjxqc3RyaW5nPiAoKmNvbnZlcnRfZnVuY3Rpb24pKEpOSUVudiosIGNvbnN0IHN0
ZDo6c3RyaW5nJikgPQotICAgICAgJk5hdGl2ZVRvSmF2YVN0cmluZzsKLSAgcmV0dXJuIE5hdGl2
ZVRvSmF2YU9iamVjdEFycmF5KAotICAgICAgZW52LCBjb250YWluZXIsCi0gICAgICBzdGF0aWNf
Y2FzdDxqY2xhc3M+KGpuaTo6SmF2YV9KbmlIZWxwZXJfZ2V0U3RyaW5nQ2xhc3MoZW52KS5vYmoo
KSksCi0gICAgICBjb252ZXJ0X2Z1bmN0aW9uKTsKLX0KLQotSmF2YUxpc3RCdWlsZGVyOjpKYXZh
TGlzdEJ1aWxkZXIoSk5JRW52KiBlbnYpCi0gICAgOiBlbnZfKGVudiksIGpfbGlzdF8oSk5JX0Fy
cmF5TGlzdDo6SmF2YV9BcnJheUxpc3RfQ29uc3RydWN0b3JKVUFMSShlbnYpKSB7fQotCi1KYXZh
TGlzdEJ1aWxkZXI6On5KYXZhTGlzdEJ1aWxkZXIoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgSmF2YUxp
c3RCdWlsZGVyOjphZGQoY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgZWxlbWVudCkgewotICBKTklf
QXJyYXlMaXN0OjpKYXZhX0FycmF5TGlzdF9hZGRaX0pVRShlbnZfLCBqX2xpc3RfLCBlbGVtZW50
KTsKLX0KLQotSmF2YU1hcEJ1aWxkZXI6OkphdmFNYXBCdWlsZGVyKEpOSUVudiogZW52KQotICAg
IDogZW52XyhlbnYpLAotICAgICAgal9tYXBfKEpOSV9MaW5rZWRIYXNoTWFwOjpKYXZhX0xpbmtl
ZEhhc2hNYXBfQ29uc3RydWN0b3JKVUxJSE0oZW52KSkge30KLQotSmF2YU1hcEJ1aWxkZXI6On5K
YXZhTWFwQnVpbGRlcigpID0gZGVmYXVsdDsKLQotdm9pZCBKYXZhTWFwQnVpbGRlcjo6cHV0KGNv
bnN0IEphdmFSZWY8am9iamVjdD4mIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBKYXZhUmVmPGpvYmplY3Q+JiB2YWx1ZSkgewotICBKTklfTWFwOjpKYXZhX01hcF9wdXQoZW52
Xywgal9tYXBfLCBrZXksIHZhbHVlKTsKLX0KLQotamxvbmcgTmF0aXZlVG9KYXZhUG9pbnRlcih2
b2lkKiBwdHIpIHsKLSAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50cHRyX3QpIDw9IHNpemVvZihq
bG9uZyksCi0gICAgICAgICAgICAgICAgIlRpbWUgdG8gcmV0aGluayB0aGUgdXNlIG9mIGpsb25n
cyIpOwotICAvLyBHb2luZyB0aHJvdWdoIGludHB0cl90IHRvIGJlIG9idmlvdXMgYWJvdXQgdGhl
IGRlZmluZWRuZXNzIG9mIHRoZQotICAvLyBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBpbnRl
Z3JhbCB0eXBlLiAgaW50cHRyX3QgdG8gamxvbmcgaXMgYSBzdGFuZGFyZAotICAvLyB3aWRlbmlu
ZyBieSB0aGUgc3RhdGljX2Fzc2VydCBhYm92ZS4KLSAgamxvbmcgcmV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4ocHRyKTsKLSAgUlRDX0RDSEVDSyhyZWludGVycHJldF9jYXN0PHZvaWQq
PihyZXQpID09IHB0cik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBq
c3RyaW5ncywgcmVpbnRlcnByZXRzIGl0IHRvIGEgbmV3IHZlY3RvciBvZiBuYXRpdmUgc3RyaW5n
cy4KLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBKYXZhVG9TdGRWZWN0b3JTdHJpbmdzKEpOSUVu
diogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgbGlzdCkgewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gY29udmVydGVkX2xpc3Q7Ci0gIGlmICghbGlzdC5pc19udWxsKCkpIHsKLSAgICBmb3IgKGNv
bnN0IEphdmFSZWY8am9iamVjdD4mIHN0ciA6IEl0ZXJhYmxlKGpuaSwgbGlzdCkpIHsKLSAgICAg
IGNvbnZlcnRlZF9saXN0LnB1c2hfYmFjayhKYXZhVG9TdGRTdHJpbmcoCi0gICAgICAgICAgam5p
LCBKYXZhUGFyYW1SZWY8anN0cmluZz4oc3RhdGljX2Nhc3Q8anN0cmluZz4oc3RyLm9iaigpKSkp
KTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGNvbnZlcnRlZF9saXN0OwotfQotCi19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVf
YXBpL2puaS9qYXZhX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NTkx
MWMxODYzNmVkNzhmZWRlMjBkNDFmZTdlYTkyZmFhZjE0NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLS8vIEFuZHJv
aWQncyBGaW5kQ2xhc3MoKSBpcyB0cmlja3kgYmVjYXVzZSB0aGUgYXBwLXNwZWNpZmljIENsYXNz
TG9hZGVyIGlzIG5vdAotLy8gY29uc3VsdGVkIHdoZW4gdGhlcmUgaXMgbm8gYXBwLXNwZWNpZmlj
IGZyYW1lIG9uIHRoZSBzdGFjayAoaS5lLiB3aGVuIGNhbGxlZAotLy8gZnJvbSBhIHRocmVhZCBj
cmVhdGVkIGZyb20gbmF0aXZlIEMrKyBjb2RlKS4gVGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBwcm92
aWRlIGEKLS8vIHdvcmthcm91bmQgZm9yIHRoaXMuCi0vLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJv
aWQuY29tL3RyYWluaW5nL2FydGljbGVzL3BlcmYtam5pLmh0bWwjZmFxX0ZpbmRDbGFzcwotCi0j
aWZuZGVmIFNES19BTkRST0lEX05BVElWRV9BUElfSk5JX0pBVkFfVFlQRVNfSF8KLSNkZWZpbmUg
U0RLX0FORFJPSURfTkFUSVZFX0FQSV9KTklfSkFWQV9UWVBFU19IXwotCi0jaW5jbHVkZSA8am5p
Lmg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+
Ci0KLSNpbmNsdWRlICJhYnNsL3R5cGVzL29wdGlvbmFsLmgiCi0jaW5jbHVkZSAiYXBpL2FycmF5
X3ZpZXcuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFz
ZS90aHJlYWRfY2hlY2tlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5p
L3Njb3BlZF9qYXZhX3JlZi5oIgotCi0vLyBBYm9ydCB0aGUgcHJvY2VzcyBpZiB8am5pfCBoYXMg
YSBKYXZhIGV4Y2VwdGlvbiBwZW5kaW5nLgotLy8gVGhpcyBtYWNyb3MgdXNlcyB0aGUgY29tbWEg
b3BlcmF0b3IgdG8gZXhlY3V0ZSBFeGNlcHRpb25EZXNjcmliZQotLy8gYW5kIEV4Y2VwdGlvbkNs
ZWFyIGlnbm9yaW5nIHRoZWlyIHJldHVybiB2YWx1ZXMgYW5kIHNlbmRpbmcgIiIKLS8vIHRvIHRo
ZSBlcnJvciBzdHJlYW0uCi0jZGVmaW5lIENIRUNLX0VYQ0VQVElPTihqbmkpICAgICAgICBcCi0g
IFJUQ19DSEVDSygham5pLT5FeGNlcHRpb25DaGVjaygpKSBcCi0gICAgICA8PCAoam5pLT5FeGNl
cHRpb25EZXNjcmliZSgpLCBqbmktPkV4Y2VwdGlvbkNsZWFyKCksICIiKQotCi1uYW1lc3BhY2Ug
d2VicnRjIHsKLQotLy8gLS0tLS0tLS0tLS0tLS0tCi0vLyAtLSBVdGlsaXRpZXMgLS0KLS8vIC0t
LS0tLS0tLS0tLS0tLQotCi0vLyBQcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IHRvIGl0ZXJhdGUg
b3ZlciBhIEphdmEgSXRlcmFibGUgdXNpbmcgdGhlCi0vLyBDKysgcmFuZ2UtZm9yIGxvb3AuCi0v
LyBFLmcuIGZvciAoam9iamVjdCB2YWx1ZSA6IEl0ZXJhYmxlKGpuaSwgal9pdGVyYWJsZSkpIHsg
Li4uIH0KLS8vIE5vdGU6IFNpbmNlIEphdmEgaXRlcmF0b3JzIGNhbm5vdCBiZSBkdXBsaWNhdGVk
LCB0aGUgaXRlcmF0b3IgY2xhc3MgaXMgbm90Ci0vLyBjb3B5YWJsZSB0byBwcmV2ZW50IGNyZWF0
aW5nIG11bHRpcGxlIEMrKyBpdGVyYXRvcnMgdGhhdCByZWZlciB0byB0aGUgc2FtZQotLy8gSmF2
YSBpdGVyYXRvci4KLWNsYXNzIEl0ZXJhYmxlIHsKLSBwdWJsaWM6Ci0gIEl0ZXJhYmxlKEpOSUVu
diogam5pLCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBpdGVyYWJsZSk7Ci0gIEl0ZXJhYmxlKEl0
ZXJhYmxlJiYgb3RoZXIpOwotCi0gIH5JdGVyYWJsZSgpOwotCi0gIGNsYXNzIEl0ZXJhdG9yIHsK
LSAgIHB1YmxpYzoKLSAgICAvLyBDcmVhdGVzIGFuIGl0ZXJhdG9yIHJlcHJlc2VudGluZyB0aGUg
ZW5kIG9mIGFueSBjb2xsZWN0aW9uLgotICAgIEl0ZXJhdG9yKCk7Ci0gICAgLy8gQ3JlYXRlcyBh
biBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzcGVjaWZpZWQKLSAg
ICAvLyBjb2xsZWN0aW9uLgotICAgIEl0ZXJhdG9yKEpOSUVudiogam5pLCBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBpdGVyYWJsZSk7Ci0KLSAgICAvLyBNb3ZlIGNvbnN0cnVjdG9yIC0gbmVjZXNz
YXJ5IHRvIGJlIGFibGUgdG8gcmV0dXJuIGl0ZXJhdG9yIHR5cGVzIGZyb20KLSAgICAvLyBmdW5j
dGlvbnMuCi0gICAgSXRlcmF0b3IoSXRlcmF0b3ImJiBvdGhlcik7Ci0KLSAgICB+SXRlcmF0b3Io
KTsKLQotICAgIC8vIE1vdmUgYXNzaWdubWVudCBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgSXRl
cmF0b3ImIG9wZXJhdG9yPShJdGVyYXRvciYmKSA9IGRlbGV0ZTsKLQotICAgIC8vIEFkdmFuY2Vz
IHRoZSBpdGVyYXRvciBvbmUgc3RlcC4KLSAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotCi0g
ICAgLy8gUmVtb3ZlcyB0aGUgZWxlbWVudCB0aGUgaXRlcmF0b3IgaXMgcG9pbnRpbmcgdG8uIE11
c3Qgc3RpbGwgYWR2YW5jZSB0aGUKLSAgICAvLyBpdGVyYXRvciBhZnRlcndhcmRzLgotICAgIHZv
aWQgUmVtb3ZlKCk7Ci0KLSAgICAvLyBQcm92aWRlcyBhIHdheSB0byBjb21wYXJlIHRoZSBpdGVy
YXRvciB3aXRoIGl0c2VsZiBhbmQgd2l0aCB0aGUgZW5kCi0gICAgLy8gaXRlcmF0b3IuCi0gICAg
Ly8gTm90ZTogYWxsIG90aGVyIGNvbXBhcmlzb24gcmVzdWx0cyBhcmUgdW5kZWZpbmVkLCBqdXN0
IGxpa2UgZm9yIEMrKyBpbnB1dAotICAgIC8vIGl0ZXJhdG9ycy4KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKTsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRl
cmF0b3ImIG90aGVyKSB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQotICAgIFNjb3BlZEph
dmFMb2NhbFJlZjxqb2JqZWN0PiYgb3BlcmF0b3IqKCk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgYm9v
bCBBdEVuZCgpIGNvbnN0OwotCi0gICAgSk5JRW52KiBqbmlfID0gbnVsbHB0cjsKLSAgICBTY29w
ZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gaXRlcmF0b3JfOwotICAgIFNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiB2YWx1ZV87Ci0gICAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2Vy
XzsKLQotICAgIFJUQ19ESVNBTExPV19DT1BZX0FORF9BU1NJR04oSXRlcmF0b3IpOwotICB9Owot
Ci0gIEl0ZXJhYmxlOjpJdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIEl0ZXJhYmxlOjpJdGVyYXRv
cihqbmlfLCBpdGVyYWJsZV8pOyB9Ci0gIEl0ZXJhYmxlOjpJdGVyYXRvciBlbmQoKSB7IHJldHVy
biBJdGVyYWJsZTo6SXRlcmF0b3IoKTsgfQotCi0gcHJpdmF0ZToKLSAgSk5JRW52KiBqbmlfOwot
ICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gaXRlcmFibGVfOwotCi0gIFJUQ19ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSXRlcmFibGUpOwotfTsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHxv
Ymp8ID09IG51bGwgaW4gSmF2YS4KLWJvb2wgSXNOdWxsKEpOSUVudiogam5pLCBjb25zdCBKYXZh
UmVmPGpvYmplY3Q+JiBvYmopOwotCi0vLyBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgSmF2YSBlbnVt
Lgotc3RkOjpzdHJpbmcgR2V0SmF2YUVudW1OYW1lKEpOSUVudiogam5pLCBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX2VudW0pOwotCi1JdGVyYWJsZSBHZXRKYXZhTWFwRW50cnlTZXQoSk5JRW52
KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfbWFwKTsKLVNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiBHZXRKYXZhTWFwRW50cnlLZXkoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4m
IGpfZW50cnkpOwotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEdldEphdmFNYXBFbnRyeVZh
bHVlKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZW50
cnkpOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gLS0gTWV0aG9kcyBmb3IgY29udmVydGluZyBKYXZhIHR5cGVzIHRvIG5h
dGl2ZSB0eXBlcy4gLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWludDY0X3QgSmF2YVRvTmF0aXZlTG9uZyhKTklFbnYqIGVu
diwgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9sb25nKTsKLQotYWJzbDo6b3B0aW9uYWw8Ym9v
bD4gSmF2YVRvTmF0aXZlT3B0aW9uYWxCb29sKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGJv
b2xlYW4pOwotYWJzbDo6b3B0aW9uYWw8ZG91YmxlPiBKYXZhVG9OYXRpdmVPcHRpb25hbERvdWJs
ZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2RvdWJs
ZSk7Ci1hYnNsOjpvcHRpb25hbDxpbnQzMl90PiBKYXZhVG9OYXRpdmVPcHRpb25hbEludCgKLSAg
ICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBpbnRlZ2VyKTsKLQot
Ly8gR2l2ZW4gYSAoVVRGLTE2KSBqc3RyaW5nIHJldHVybiBhIG5ldyBVVEYtOCBuYXRpdmUgc3Ry
aW5nLgotc3RkOjpzdHJpbmcgSmF2YVRvTmF0aXZlU3RyaW5nKEpOSUVudiogam5pLCBjb25zdCBK
YXZhUmVmPGpzdHJpbmc+JiBqX3N0cmluZyk7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBDb252ZXJ0Pgotc3RkOjp2ZWN0b3I8VD4gSmF2YVRvTmF0aXZlVmVjdG9yKEpOSUVudiog
ZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdEFycmF5PiYgal9jb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29udmVydCBjb252ZXJ0KSB7Ci0gIHN0ZDo6dmVjdG9yPFQ+IGNvbnRhaW5lcjsKLSAgY29u
c3Qgc2l6ZV90IHNpemUgPSBlbnYtPkdldEFycmF5TGVuZ3RoKGpfY29udGFpbmVyLm9iaigpKTsK
LSAgY29udGFpbmVyLnJlc2VydmUoc2l6ZSk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgY29udGFpbmVyLmVtcGxhY2VfYmFjayhjb252ZXJ0KAotICAgICAgICBl
bnYsIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PigKLSAgICAgICAgICAgICAgICAgZW52LCBl
bnYtPkdldE9iamVjdEFycmF5RWxlbWVudChqX2NvbnRhaW5lci5vYmooKSwgaSkpKSk7Ci0gIH0K
LSAgQ0hFQ0tfRVhDRVBUSU9OKGVudikgPDwgIkVycm9yIGR1cmluZyBKYXZhVG9OYXRpdmVWZWN0
b3IiOwotICByZXR1cm4gY29udGFpbmVyOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgSmF2YV9UID0gam9iamVjdCwgdHlwZW5hbWUgQ29udmVydD4KLXN0ZDo6dmVjdG9yPFQ+
IEphdmFMaXN0VG9OYXRpdmVWZWN0b3IoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfbGlzdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydCBjb252ZXJ0KSB7Ci0gIHN0
ZDo6dmVjdG9yPFQ+IG5hdGl2ZV9saXN0OwotICBpZiAoIWpfbGlzdC5pc19udWxsKCkpIHsKLSAg
ICBmb3IgKFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiYgal9pdGVtIDogSXRlcmFibGUoZW52
LCBqX2xpc3QpKSB7Ci0gICAgICBuYXRpdmVfbGlzdC5lbXBsYWNlX2JhY2soCi0gICAgICAgICAg
Y29udmVydChlbnYsIHN0YXRpY19qYXZhX3JlZl9jYXN0PEphdmFfVD4oZW52LCBqX2l0ZW0pKSk7
Ci0gICAgfQotICAgIENIRUNLX0VYQ0VQVElPTihlbnYpIDw8ICJFcnJvciBkdXJpbmcgSmF2YUxp
c3RUb05hdGl2ZVZlY3RvciI7Ci0gIH0KLSAgcmV0dXJuIG5hdGl2ZV9saXN0OwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBDb252ZXJ0Pgotc3RkOjpt
YXA8S2V5LCBUPiBKYXZhVG9OYXRpdmVNYXAoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX21hcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnQgY29udmVydCkgewotICBzdGQ6Om1hcDxL
ZXksIFQ+IGNvbnRhaW5lcjsKLSAgZm9yIChhdXRvIGNvbnN0JiBqX2VudHJ5IDogR2V0SmF2YU1h
cEVudHJ5U2V0KGVudiwgal9tYXApKSB7Ci0gICAgY29udGFpbmVyLmVtcGxhY2UoY29udmVydChl
bnYsIEdldEphdmFNYXBFbnRyeUtleShlbnYsIGpfZW50cnkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0SmF2YU1hcEVudHJ5VmFsdWUoZW52LCBqX2VudHJ5KSkpOwotICB9Ci0g
IHJldHVybiBjb250YWluZXI7Ci19Ci0KLS8vIENvbnZlcnRzIE1hcDxTdHJpbmcsIFN0cmluZz4g
dG8gc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPi4KLXN0ZDo6bWFwPHN0ZDo6c3Ry
aW5nLCBzdGQ6OnN0cmluZz4gSmF2YVRvTmF0aXZlU3RyaW5nTWFwKAotICAgIEpOSUVudiogZW52
LAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfbWFwKTsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tIE1ldGhv
ZHMgZm9yIGNvbnZlcnRpbmcgbmF0aXZlIHR5cGVzIHRvIEphdmEgdHlwZXMuIC0tCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1T
Y29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhQm9vbGVhbihKTklFbnYqIGVu
diwgYm9vbCBiKTsKLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFEb3Vi
bGUoSk5JRW52KiBlbnYsIGRvdWJsZSBkKTsKLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBO
YXRpdmVUb0phdmFJbnRlZ2VyKEpOSUVudiogam5pLCBpbnQzMl90IGkpOwotU2NvcGVkSmF2YUxv
Y2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YUxvbmcoSk5JRW52KiBlbnYsIGludDY0X3QgdSk7
Ci1TY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4gTmF0aXZlVG9KYXZhU3RyaW5nKEpOSUVudiog
am5pLCBjb25zdCBjaGFyKiBzdHIpOwotU2NvcGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+IE5hdGl2
ZVRvSmF2YVN0cmluZyhKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7Ci0KLVNjb3BlZEphdmFM
b2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFEb3VibGUoCi0gICAgSk5JRW52KiBqbmksCi0g
ICAgY29uc3QgYWJzbDo6b3B0aW9uYWw8ZG91YmxlPiYgb3B0aW9uYWxfZG91YmxlKTsKLVNjb3Bl
ZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFJbnRlZ2VyKAotICAgIEpOSUVudiog
am5pLAotICAgIGNvbnN0IGFic2w6Om9wdGlvbmFsPGludDMyX3Q+JiBvcHRpb25hbF9pbnQpOwot
U2NvcGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+IE5hdGl2ZVRvSmF2YVN0cmluZygKLSAgICBKTklF
bnYqIGpuaSwKLSAgICBjb25zdCBhYnNsOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4mIHN0cik7Ci0K
LS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29udmVydGluZyBzdGQ6OnZlY3RvcjxUPiBpbnRvIGEg
SmF2YSBhcnJheS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb252ZXJ0PgotU2Nv
cGVkSmF2YUxvY2FsUmVmPGpvYmplY3RBcnJheT4gTmF0aXZlVG9KYXZhT2JqZWN0QXJyYXkoCi0g
ICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGNvbnRhaW5lciwKLSAg
ICBqY2xhc3MgY2xhenosCi0gICAgQ29udmVydCBjb252ZXJ0KSB7Ci0gIFNjb3BlZEphdmFMb2Nh
bFJlZjxqb2JqZWN0QXJyYXk+IGpfY29udGFpbmVyKAotICAgICAgZW52LCBlbnYtPk5ld09iamVj
dEFycmF5KGNvbnRhaW5lci5zaXplKCksIGNsYXp6LCBudWxscHRyKSk7Ci0gIGludCBpID0gMDsK
LSAgZm9yIChjb25zdCBUJiBlbGVtZW50IDogY29udGFpbmVyKSB7Ci0gICAgZW52LT5TZXRPYmpl
Y3RBcnJheUVsZW1lbnQoal9jb250YWluZXIub2JqKCksIGksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udmVydChlbnYsIGVsZW1lbnQpLm9iaigpKTsKLSAgICArK2k7Ci0gIH0K
LSAgcmV0dXJuIGpfY29udGFpbmVyOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8amJ5dGVBcnJh
eT4gTmF0aXZlVG9KYXZhQnl0ZUFycmF5KAotICAgIEpOSUVudiogZW52LAotICAgIHJ0Yzo6QXJy
YXlWaWV3PGludDhfdD4gY29udGFpbmVyKTsKLVNjb3BlZEphdmFMb2NhbFJlZjxqaW50QXJyYXk+
IE5hdGl2ZVRvSmF2YUludEFycmF5KAotICAgIEpOSUVudiogZW52LAotICAgIHJ0Yzo6QXJyYXlW
aWV3PGludDMyX3Q+IGNvbnRhaW5lcik7Ci0KLXN0ZDo6dmVjdG9yPGludDhfdD4gSmF2YVRvTmF0
aXZlQnl0ZUFycmF5KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqYnl0ZUFycmF5PiYgamFycmF5KTsKLXN0ZDo6dmVj
dG9yPGludDMyX3Q+IEphdmFUb05hdGl2ZUludEFycmF5KEpOSUVudiogZW52LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqaW50QXJyYXk+
JiBqYXJyYXkpOwotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBOYXRpdmVUb0ph
dmFCb29sZWFuQXJyYXkoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8
Ym9vbD4mIGNvbnRhaW5lcik7Ci1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBOYXRp
dmVUb0phdmFEb3VibGVBcnJheSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBzdGQ6OnZl
Y3Rvcjxkb3VibGU+JiBjb250YWluZXIpOwotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RBcnJh
eT4gTmF0aXZlVG9KYXZhSW50ZWdlckFycmF5KAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGludDMyX3Q+JiBjb250YWluZXIpOwotU2NvcGVkSmF2YUxvY2FsUmVmPGpv
YmplY3RBcnJheT4gTmF0aXZlVG9KYXZhTG9uZ0FycmF5KAotICAgIEpOSUVudiogZW52LAotICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPGludDY0X3Q+JiBjb250YWluZXIpOwotU2NvcGVkSmF2YUxvY2Fs
UmVmPGpvYmplY3RBcnJheT4gTmF0aXZlVG9KYXZhU3RyaW5nQXJyYXkoCi0gICAgSk5JRW52KiBl
bnYsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb250YWluZXIpOwotCi0v
LyBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGZvciBOYXRpdmVUb0phdmFMaXN0KCkuIFVzZSB0aGF0
IGZ1bmN0aW9uIGluc3RlYWQgb2YKLS8vIHVzaW5nIHRoaXMgY2xhc3MgZGlyZWN0bHkuCi1jbGFz
cyBKYXZhTGlzdEJ1aWxkZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgSmF2YUxpc3RCdWlsZGVy
KEpOSUVudiogZW52KTsKLSAgfkphdmFMaXN0QnVpbGRlcigpOwotICB2b2lkIGFkZChjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBlbGVtZW50KTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+
IGphdmFfbGlzdCgpIHsgcmV0dXJuIGpfbGlzdF87IH0KLQotIHByaXZhdGU6Ci0gIEpOSUVudiog
ZW52XzsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfbGlzdF87Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgQ29udmVydD4KLVNjb3BlZEphdmFMb2NhbFJlZjxq
b2JqZWN0PiBOYXRpdmVUb0phdmFMaXN0KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQyYgY29udGFpbmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydCBjb252ZXJ0KSB7Ci0g
IEphdmFMaXN0QnVpbGRlciBidWlsZGVyKGVudik7Ci0gIGZvciAoY29uc3QgYXV0byYgZSA6IGNv
bnRhaW5lcikKLSAgICBidWlsZGVyLmFkZChjb252ZXJ0KGVudiwgZSkpOwotICByZXR1cm4gYnVp
bGRlci5qYXZhX2xpc3QoKTsKLX0KLQotLy8gVGhpcyBpcyBhIGhlbHBlciBjbGFzcyBmb3IgTmF0
aXZlVG9KYXZhTWFwKCkuIFVzZSB0aGF0IGZ1bmN0aW9uIGluc3RlYWQgb2YKLS8vIHVzaW5nIHRo
aXMgY2xhc3MgZGlyZWN0bHkuCi1jbGFzcyBKYXZhTWFwQnVpbGRlciB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBKYXZhTWFwQnVpbGRlcihKTklFbnYqIGVudik7Ci0gIH5KYXZhTWFwQnVpbGRlcigp
OwotICB2b2lkIHB1dChjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBrZXksIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIHZhbHVlKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEdldEphdmFN
YXAoKSB7IHJldHVybiBqX21hcF87IH0KLQotIHByaXZhdGU6Ci0gIEpOSUVudiogZW52XzsKLSAg
U2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfbWFwXzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDLCB0eXBlbmFtZSBDb252ZXJ0PgotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5h
dGl2ZVRvSmF2YU1hcChKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQyYgY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0IGNvbnZlcnQpIHsKLSAgSmF2YU1hcEJ1aWxk
ZXIgYnVpbGRlcihlbnYpOwotICBmb3IgKGNvbnN0IGF1dG8mIGUgOiBjb250YWluZXIpIHsKLSAg
ICBjb25zdCBhdXRvIGtleV92YWx1ZV9wYWlyID0gY29udmVydChlbnYsIGUpOwotICAgIGJ1aWxk
ZXIucHV0KGtleV92YWx1ZV9wYWlyLmZpcnN0LCBrZXlfdmFsdWVfcGFpci5zZWNvbmQpOwotICB9
Ci0gIHJldHVybiBidWlsZGVyLkdldEphdmFNYXAoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEM+Ci1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhU3RyaW5nTWFwKEpO
SUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDJiBjb250YWluZXIpIHsKLSAgSmF2YU1hcEJ1aWxkZXIgYnVpbGRlcihlbnYp
OwotICBmb3IgKGNvbnN0IGF1dG8mIGUgOiBjb250YWluZXIpIHsKLSAgICBjb25zdCBhdXRvIGtl
eV92YWx1ZV9wYWlyID0gc3RkOjptYWtlX3BhaXIoCi0gICAgICAgIE5hdGl2ZVRvSmF2YVN0cmlu
ZyhlbnYsIGUuZmlyc3QpLCBOYXRpdmVUb0phdmFTdHJpbmcoZW52LCBlLnNlY29uZCkpOwotICAg
IGJ1aWxkZXIucHV0KGtleV92YWx1ZV9wYWlyLmZpcnN0LCBrZXlfdmFsdWVfcGFpci5zZWNvbmQp
OwotICB9Ci0gIHJldHVybiBidWlsZGVyLkdldEphdmFNYXAoKTsKLX0KLQotLy8gUmV0dXJuIGEg
fGpsb25nfCB0aGF0IHdpbGwgY29ycmVjdGx5IGNvbnZlcnQgYmFjayB0byB8cHRyfC4gIFRoaXMg
aXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSAob2Ygc2lsZW50bHkgcGFzc2lu
ZyBhIDMyLWJpdCBwb2ludGVyIHRvIGEgdmFyYXJnCi0vLyBmdW5jdGlvbiBleHBlY3RpbmcgYSA2
NC1iaXQgcGFyYW0pIHBpY2tzIHVwIGdhcmJhZ2UgaW4gdGhlIGhpZ2ggMzIgYml0cy4KLWpsb25n
IE5hdGl2ZVRvSmF2YVBvaW50ZXIodm9pZCogcHRyKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyAtLSBEZXByZWNhdGVkIG1ldGhvZHMgLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0vLyBEZXByZWNhdGVkLiBVc2UgSmF2YVRvTmF0aXZlU3RyaW5nLgotaW5saW5l
IHN0ZDo6c3RyaW5nIEphdmFUb1N0ZFN0cmluZyhKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqc3RyaW5nPiYgal9zdHJpbmcpIHsK
LSAgcmV0dXJuIEphdmFUb05hdGl2ZVN0cmluZyhqbmksIGpfc3RyaW5nKTsKLX0KLQotLy8gRGVw
cmVjYXRlZC4gVXNlIHNjb3BlZCBqb2JqZWN0cyBpbnN0ZWFkLgotaW5saW5lIHN0ZDo6c3RyaW5n
IEphdmFUb1N0ZFN0cmluZyhKTklFbnYqIGpuaSwganN0cmluZyBqX3N0cmluZykgewotICByZXR1
cm4gSmF2YVRvU3RkU3RyaW5nKGpuaSwgSmF2YVBhcmFtUmVmPGpzdHJpbmc+KGpfc3RyaW5nKSk7
Ci19Ci0KLS8vIERlcHJlY2F0ZWQuIFVzZSBKYXZhTGlzdFRvTmF0aXZlVmVjdG9yPHN0ZDo6c3Ry
aW5nLCBqc3RyaW5nPiBpbnN0ZWFkLgotLy8gR2l2ZW4gYSBMaXN0IG9mIChVVEYtMTYpIGpzdHJp
bmdzCi0vLyByZXR1cm4gYSBuZXcgdmVjdG9yIG9mIFVURi04IG5hdGl2ZSBzdHJpbmdzLgotc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IEphdmFUb1N0ZFZlY3RvclN0cmluZ3MoSk5JRW52KiBqbmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBsaXN0KTsKLQotLy8gRGVwcmVjYXRlZC4gVXNlIEphdmFUb05hdGl2
ZVN0cmluZ01hcCBpbnN0ZWFkLgotLy8gUGFyc2VzIE1hcDxTdHJpbmcsIFN0cmluZz4gdG8gc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPi4KLWlubGluZSBzdGQ6Om1hcDxzdGQ6OnN0
cmluZywgc3RkOjpzdHJpbmc+IEphdmFUb1N0ZE1hcFN0cmluZ3MoCi0gICAgSk5JRW52KiBqbmks
Ci0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9tYXApIHsKLSAgcmV0dXJuIEphdmFUb05h
dGl2ZVN0cmluZ01hcChqbmksIGpfbWFwKTsKLX0KLQotLy8gRGVwcmVjYXRlZC4gVXNlIHNjb3Bl
ZCBqb2JqZWN0cyBpbnN0ZWFkLgotaW5saW5lIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0
cmluZz4gSmF2YVRvU3RkTWFwU3RyaW5ncyhKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBqX21h
cCkgewotICByZXR1cm4gSmF2YVRvU3RkTWFwU3RyaW5ncyhqbmksIEphdmFQYXJhbVJlZjxqb2Jq
ZWN0PihqX21hcCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8g
U0RLX0FORFJPSURfTkFUSVZFX0FQSV9KTklfSkFWQV9UWVBFU19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZl
X2FwaS9qbmkvam5pX2ludF93cmFwcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qbmlfaW50X3dyYXBwZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkYTdmMmNlNDk0ZjM1NGRjNTIyM2Fi
ZjE0ZGFjYjM2MTU5ZTRiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9uYXRpdmVfYXBpL2puaS9qbmlfaW50X3dyYXBwZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLS8vIE9yaWdpbmFsbHkgdGhpcyBjbGFz
cyBpcyBmcm9tIENocm9taXVtLgotLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0v
c3JjL2Jhc2UvYW5kcm9pZC9qbmlfaW50X3dyYXBwZXIuaC4KLQotI2lmbmRlZiBTREtfQU5EUk9J
RF9OQVRJVkVfQVBJX0pOSV9KTklfSU5UX1dSQVBQRVJfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURf
TkFUSVZFX0FQSV9KTklfSk5JX0lOVF9XUkFQUEVSX0hfCi0KLS8vIFdyYXBwZXIgdXNlZCB0byBy
ZWNlaXZlIGludCB3aGVuIGNhbGxpbmcgSmF2YSBmcm9tIG5hdGl2ZS4gVGhlIHdyYXBwZXIKLS8v
IGRpc2FsbG93cyBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiBhbnl0aGluZyBiZXNpZGVzIGludDMy
X3QgdG8gYSBqaW50LgotLy8gQ2hlY2tpbmcgaXMgb25seSBkb25lIGluIGRlYnVnZ2luZyBidWls
ZHMuCi0KLSNpZmRlZiBOREVCVUcKLQotdHlwZWRlZiBqaW50IEpuaUludFdyYXBwZXI7Ci0KLS8v
IFRoaXMgaW5saW5lIGlzIHN1ZmZpY2llbnRseSB0cml2aWFsIHRoYXQgaXQgZG9lcyBub3QgY2hh
bmdlIHRoZQotLy8gZmluYWwgY29kZSBnZW5lcmF0ZWQgYnkgZysrLgotaW5saW5lIGppbnQgYXNf
amludChKbmlJbnRXcmFwcGVyIHdyYXBwZXIpIHsKLSAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLSNl
bHNlCi0KLWNsYXNzIEpuaUludFdyYXBwZXIgewotIHB1YmxpYzoKLSAgSm5pSW50V3JhcHBlcigp
IDogaV8oMCkge30KLSAgSm5pSW50V3JhcHBlcihpbnQzMl90IGkpIDogaV8oaSkge30gIC8vIE5P
TElOVChydW50aW1lL2V4cGxpY2l0KQotICBleHBsaWNpdCBKbmlJbnRXcmFwcGVyKGNvbnN0IEpu
aUludFdyYXBwZXImIGppKSA6IGlfKGppLmlfKSB7fQotCi0gIGppbnQgYXNfamludCgpIGNvbnN0
IHsgcmV0dXJuIGlfOyB9Ci0KLSAgLy8gSWYgeW91IGdldCBhbiAiaW52b2tlcyBhIGRlbGV0ZWQg
ZnVuY3Rpb24iIGVycm9yIGF0IHRoZSBsaW5lcyBiZWxvdyBpdCBpcwotICAvLyBiZWNhdXNlIHlv
dSB1c2VkIGFuIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gY29udmVydCBlLmcuIGEgbG9uZyB0byBh
bgotICAvLyBpbnQzMl90IHdoZW4gY2FsbGluZyBKYXZhLiBXZSBkaXNhbGxvdyB0aGlzLiBJZiB5
b3Ugd2FudCBhIGxvc3N5Ci0gIC8vIGNvbnZlcnNpb24sIHBsZWFzZSB1c2UgYW4gZXhwbGljaXQg
Y29udmVyc2lvbiBpbiB5b3VyIEMrKyBjb2RlLgotICBKbmlJbnRXcmFwcGVyKHVpbnQzMl90KSA9
IGRlbGV0ZTsgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQotICBKbmlJbnRXcmFwcGVyKHVp
bnQ2NF90KSA9IGRlbGV0ZTsgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQotICBKbmlJbnRX
cmFwcGVyKGludDY0X3QpID0gZGVsZXRlOyAgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQot
Ci0gcHJpdmF0ZToKLSAgY29uc3QgamludCBpXzsKLX07Ci0KLWlubGluZSBqaW50IGFzX2ppbnQo
Y29uc3QgSm5pSW50V3JhcHBlciYgd3JhcHBlcikgewotICByZXR1cm4gd3JhcHBlci5hc19qaW50
KCk7Ci19Ci0KLSNlbmRpZiAgLy8gTkRFQlVHCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfTkFU
SVZFX0FQSV9KTklfSk5JX0lOVF9XUkFQUEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9q
dm0uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9uYXRpdmVfYXBpL2puaS9qdm0uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDMzNTZjYmViNmZkNGYxODdmZjRjZDNiNjY4OWUzMmNlNzQ5NWM5ZTkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvanZtLmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUg
InNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2p2bS5oIgotCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS9qdm0uaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLUpOSUVudiogQXR0YWNo
Q3VycmVudFRocmVhZElmTmVlZGVkKCkgewotICByZXR1cm4gam5pOjpBdHRhY2hDdXJyZW50VGhy
ZWFkSWZOZWVkZWQoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS9qbmkvanZtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qdm0uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDBiY2U2NzM0ZDg1Mjk4NTk2ZjJjZWQ4YzhlYWIwOWM2ZjhiYzczNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9q
dm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpZm5kZWYgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9KTklfSlZNX0hfCi0jZGVmaW5lIFNES19B
TkRST0lEX05BVElWRV9BUElfSk5JX0pWTV9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLW5hbWVz
cGFjZSB3ZWJydGMgewotLy8gUmV0dXJucyBhIEpOSSBlbnZpcm9ubWVudCB1c2FibGUgb24gdGhp
cyB0aHJlYWQuCi1KTklFbnYqIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNES19BTkRST0lEX05BVElWRV9BUElfSk5J
X0pWTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvc2NvcGVkX2phdmFfcmVmLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVf
YXBpL2puaS9zY29wZWRfamF2YV9yZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTM3YTk5MjQ0NWQ4MDFkNWEzMjkxM2U5Y2UxYjU3Mjc2OTdhYjYxNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9zY29wZWRfamF2YV9y
ZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0vLyBPcmlnaW5hbGx5IHRoZXNlIGNsYXNzZXMgYXJlIGZyb20gQ2hyb21pdW0uCi0vLyBodHRw
czovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvYmFzZS9hbmRyb2lkL3Njb3BlZF9qYXZh
X3JlZi5oLgotCi0jaWZuZGVmIFNES19BTkRST0lEX05BVElWRV9BUElfSk5JX1NDT1BFRF9KQVZB
X1JFRl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX0pOSV9TQ09QRURfSkFWQV9S
RUZfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRl
ICJydGNfYmFzZS9jb25zdHJ1Y3Rvcl9tYWdpYy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25h
dGl2ZV9hcGkvam5pL2p2bS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gR2VuZXJpYyBi
YXNlIGNsYXNzIGZvciBTY29wZWRKYXZhTG9jYWxSZWYgYW5kIFNjb3BlZEphdmFHbG9iYWxSZWYu
IFVzZWZ1bAotLy8gZm9yIGFsbG93aW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgYSByZWZlcmVuY2Ug
d2l0aG91dCBoYXZpbmcgdG8gbWFuZGF0ZQotLy8gd2hldGhlciBpdCBpcyBhIGxvY2FsIG9yIGds
b2JhbCB0eXBlLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBKYXZhUmVmOwotCi0vLyBU
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvZiBKYXZhUmVmLCB3aGljaCBhY3RzIGFzIHRoZSBiYXNl
IGNsYXNzIGZvciBhbGwKLS8vIG90aGVyIEphdmFSZWY8PiB0ZW1wbGF0ZSB0eXBlcy4gVGhpcyBh
bGxvd3MgeW91IHRvIGUuZy4gcGFzcyBKYXZhUmVmPGpzdHJpbmc+Ci0vLyBpbnRvIGEgZnVuY3Rp
b24gdGFraW5nIGNvbnN0IEphdmFSZWY8am9iamVjdD4mLgotdGVtcGxhdGUgPD4KLWNsYXNzIEph
dmFSZWY8am9iamVjdD4gewotIHB1YmxpYzoKLSAgam9iamVjdCBvYmooKSBjb25zdCB7IHJldHVy
biBvYmpfOyB9Ci0gIGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsKLSAgICAvLyBUaGlzIGlzIG5vdCB2
YWxpZCBmb3Igd2VhayByZWZlcmVuY2VzLiBGb3Igd2VhayByZWZlcmVuY2VzIHlvdSBuZWVkIHRv
Ci0gICAgLy8gdXNlIGVudi0+SXNTYW1lT2JqZWN0KG9iamNfLCBudWxscHRyKSwgYnV0IHRoYXQg
c2hvdWxkIGJlIGF2b2lkZWQgYW55d2F5Ci0gICAgLy8gc2luY2UgaXQgZG9lcyBub3QgcHJldmVu
dCB0aGUgb2JqZWN0IGZyb20gYmVpbmcgZnJlZWQgaW1tZWRpYXRlbHkKLSAgICAvLyB0aGVyZWFm
dGVyLiBDb25zZXF1ZW50bHksIHByb2dyYW1tZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgY2hlY2sg
b24gd2VhawotICAgIC8vIHJlZmVyZW5jZXMgYW55d2F5IGFuZCBzaG91bGQgZmlyc3QgbWFrZSBh
IFNjb3BlZEphdmFMb2NhbFJlZiBvcgotICAgIC8vIFNjb3BlZEphdmFHbG9iYWxSZWYgYmVmb3Jl
IGNoZWNraW5nIGlmIGl0IGlzIG51bGwuCi0gICAgcmV0dXJuIG9ial8gPT0gbnVsbHB0cjsKLSAg
fQotCi0gcHJvdGVjdGVkOgotICBjb25zdGV4cHIgSmF2YVJlZigpIDogb2JqXyhudWxscHRyKSB7
fQotICBleHBsaWNpdCBKYXZhUmVmKGpvYmplY3Qgb2JqKSA6IG9ial8ob2JqKSB7fQotICBqb2Jq
ZWN0IG9ial87Ci0KLSBwcml2YXRlOgotICBSVENfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEph
dmFSZWYpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBKYXZhUmVmIDogcHVi
bGljIEphdmFSZWY8am9iamVjdD4gewotIHB1YmxpYzoKLSAgVCBvYmooKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUPihvYmpfKTsgfQotCi0gcHJvdGVjdGVkOgotICBKYXZhUmVmKCkgOiBK
YXZhUmVmPGpvYmplY3Q+KG51bGxwdHIpIHt9Ci0gIGV4cGxpY2l0IEphdmFSZWYoVCBvYmopIDog
SmF2YVJlZjxqb2JqZWN0PihvYmopIHt9Ci0KLSBwcml2YXRlOgotICBSVENfRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEphdmFSZWYpOwotfTsKLQotLy8gSG9sZHMgYSBsb2NhbCByZWZlcmVuY2Ug
dG8gYSBKTkkgbWV0aG9kIHBhcmFtZXRlci4KLS8vIE1ldGhvZCBwYXJhbWV0ZXJzIHNob3VsZCBu
b3QgYmUgZGVsZXRlZCwgYW5kIHNvIHRoaXMgY2xhc3MgZXhpc3RzIHB1cmVseSB0bwotLy8gd3Jh
cCB0aGVtIGFzIGEgSmF2YVJlZjxUPiBpbiB0aGUgSk5JIGJpbmRpbmcgZ2VuZXJhdG9yLiBEbyBu
b3QgY3JlYXRlCi0vLyBpbnN0YW5jZXMgbWFudWFsbHkuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LWNsYXNzIEphdmFQYXJhbVJlZiA6IHB1YmxpYyBKYXZhUmVmPFQ+IHsKLSBwdWJsaWM6Ci0gIC8v
IEFzc3VtZXMgdGhhdCB8b2JqfCBpcyBhIHBhcmFtZXRlciBwYXNzZWQgdG8gYSBKTkkgbWV0aG9k
IGZyb20gSmF2YS4KLSAgLy8gRG9lcyBub3QgYXNzdW1lIG93bmVyc2hpcCBhcyBwYXJhbWV0ZXJz
IHNob3VsZCBub3QgYmUgZGVsZXRlZC4KLSAgZXhwbGljaXQgSmF2YVBhcmFtUmVmKFQgb2JqKSA6
IEphdmFSZWY8VD4ob2JqKSB7fQotICBKYXZhUGFyYW1SZWYoSk5JRW52KiwgVCBvYmopIDogSmF2
YVJlZjxUPihvYmopIHt9Ci0KLSBwcml2YXRlOgotICBSVENfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKEphdmFQYXJhbVJlZik7Ci19OwotCi0vLyBIb2xkcyBhIGxvY2FsIHJlZmVyZW5jZSB0byBh
IEphdmEgb2JqZWN0LiBUaGUgbG9jYWwgcmVmZXJlbmNlIGlzIHNjb3BlZAotLy8gdG8gdGhlIGxp
ZmV0aW1lIG9mIHRoaXMgb2JqZWN0LgotLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgbWF5IGhv
bGQgb250byBhbnkgSk5JRW52IHBhc3NlZCBpbnRvIGl0IHVudGlsCi0vLyBkZXN0cm95ZWQuIFRo
ZXJlZm9yZSwgc2luY2UgYSBKTklFbnYgaXMgb25seSBzdWl0YWJsZSBmb3IgdXNlIG9uIGEgc2lu
Z2xlCi0vLyB0aHJlYWQsIG9iamVjdHMgb2YgdGhpcyBjbGFzcyBtdXN0IGJlIGNyZWF0ZWQsIHVz
ZWQsIGFuZCBkZXN0cm95ZWQsIG9uIGEKLS8vIHNpbmdsZSB0aHJlYWQuCi0vLyBUaGVyZWZvcmUs
IHRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIHN0YWNrLWJhc2VkIG9iamVjdCBh
bmQgZnJvbSBhCi0vLyBzaW5nbGUgdGhyZWFkLiBJZiB5b3Ugd2lzaCB0byBoYXZlIHRoZSByZWZl
cmVuY2Ugb3V0bGl2ZSB0aGUgY3VycmVudAotLy8gY2FsbHN0YWNrIChlLmcuIGFzIGEgY2xhc3Mg
bWVtYmVyKSBvciB5b3Ugd2lzaCB0byBwYXNzIGl0IGFjcm9zcyB0aHJlYWRzLAotLy8gdXNlIGEg
U2NvcGVkSmF2YUdsb2JhbFJlZiBpbnN0ZWFkLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBTY29wZWRKYXZhTG9jYWxSZWYgOiBwdWJsaWMgSmF2YVJlZjxUPiB7Ci0gcHVibGljOgotICBT
Y29wZWRKYXZhTG9jYWxSZWYoKSA9IGRlZmF1bHQ7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZihzdGQ6
Om51bGxwdHJfdCkge30gIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQotCi0gIFNjb3BlZEph
dmFMb2NhbFJlZihKTklFbnYqIGVudiwgY29uc3QgSmF2YVJlZjxUPiYgb3RoZXIpIDogZW52Xyhl
bnYpIHsKLSAgICBSZXNldChvdGhlci5vYmooKSwgT3duZXJzaGlwUG9saWN5OjpSRVRBSU4pOwot
ICB9Ci0gIC8vIEFsbG93IGNvbnN0cnVjdGluZyBlLmcuIFNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PiBmcm9tCi0gIC8vIFNjb3BlZEphdmFMb2NhbFJlZjxqc3RyaW5nPi4KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIEc+Ci0gIFNjb3BlZEphdmFMb2NhbFJlZihTY29wZWRKYXZhTG9jYWxSZWY8Rz4m
JiBvdGhlcikgOiBlbnZfKG90aGVyLmVudigpKSB7Ci0gICAgUmVzZXQob3RoZXIuUmVsZWFzZSgp
LCBPd25lcnNoaXBQb2xpY3k6OkFET1BUKTsKLSAgfQotICBTY29wZWRKYXZhTG9jYWxSZWYoY29u
c3QgU2NvcGVkSmF2YUxvY2FsUmVmJiBvdGhlcikgOiBlbnZfKG90aGVyLmVudl8pIHsKLSAgICBS
ZXNldChvdGhlci5vYmooKSwgT3duZXJzaGlwUG9saWN5OjpSRVRBSU4pOwotICB9Ci0KLSAgLy8g
QXNzdW1lcyB0aGF0IHxvYmp8IGlzIGEgcmVmZXJlbmNlIHRvIGEgSmF2YSBvYmplY3QgYW5kIHRh
a2VzCi0gIC8vIG93bmVyc2hpcCAgb2YgdGhpcyAgcmVmZXJlbmNlLiBUaGlzIHNob3VsZCBwcmVm
ZXJhYmx5IG5vdCBiZSB1c2VkCi0gIC8vIG91dHNpZGUgb2YgSk5JIGhlbHBlciBmdW5jdGlvbnMu
Ci0gIFNjb3BlZEphdmFMb2NhbFJlZihKTklFbnYqIGVudiwgVCBvYmopIDogSmF2YVJlZjxUPihv
YmopLCBlbnZfKGVudikge30KLQotICB+U2NvcGVkSmF2YUxvY2FsUmVmKCkgewotICAgIGlmIChv
YmpfICE9IG51bGxwdHIpCi0gICAgICBlbnZfLT5EZWxldGVMb2NhbFJlZihvYmpfKTsKLSAgfQot
Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNjb3BlZEphdmFMb2NhbFJlZiYgb3RoZXIpIHsKLSAg
ICBSZXNldChvdGhlci5vYmooKSwgT3duZXJzaGlwUG9saWN5OjpSRVRBSU4pOwotICB9Ci0gIHZv
aWQgb3BlcmF0b3I9KFNjb3BlZEphdmFMb2NhbFJlZiYmIG90aGVyKSB7Ci0gICAgUmVzZXQob3Ro
ZXIuUmVsZWFzZSgpLCBPd25lcnNoaXBQb2xpY3k6OkFET1BUKTsKLSAgfQotCi0gIC8vIFJlbGVh
c2VzIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbGxlci4gVGhlIGNhbGxlciAqbXVzdCogZGVsZXRl
IHRoZQotICAvLyByZWZlcmVuY2Ugd2hlbiBpdCBpcyBkb25lIHdpdGggaXQuIE5vdGUgdGhhdCBj
YWxsaW5nIGEgSmF2YSBtZXRob2QKLSAgLy8gaXMgKm5vdCogYSB0cmFuc2ZlciBvZiBvd25lcnNo
aXAgYW5kIFJlbGVhc2UoKSBzaG91bGQgbm90IGJlIHVzZWQuCi0gIFQgUmVsZWFzZSgpIHsKLSAg
ICBUIG9iaiA9IHN0YXRpY19jYXN0PFQ+KG9ial8pOwotICAgIG9ial8gPSBudWxscHRyOwotICAg
IHJldHVybiBvYmo7Ci0gIH0KLQotICBKTklFbnYqIGVudigpIGNvbnN0IHsgcmV0dXJuIGVudl87
IH0KLQotIHByaXZhdGU6Ci0gIHVzaW5nIEphdmFSZWY8VD46Om9ial87Ci0KLSAgZW51bSBPd25l
cnNoaXBQb2xpY3kgewotICAgIC8vIFRoZSBzY29wZWQgb2JqZWN0IHRha2VzIG93bmVyc2hpcCBv
ZiBhbiBvYmplY3QgYnkgdGFraW5nIG92ZXIgYW4gZXhpc3RpbmcKLSAgICAvLyBvd25lcnNoaXAg
Y2xhaW0uCi0gICAgQURPUFQsCi0gICAgLy8gVGhlIHNjb3BlZCBvYmplY3Qgd2lsbCByZXRhaW4g
dGhlIHRoZSBvYmplY3QgYW5kIGFueSBpbml0aWFsIG93bmVyc2hpcCBpcwotICAgIC8vIG5vdCBj
aGFuZ2VkLgotICAgIFJFVEFJTgotICB9OwotCi0gIHZvaWQgUmVzZXQoVCBvYmosIE93bmVyc2hp
cFBvbGljeSBwb2xpY3kpIHsKLSAgICBpZiAob2JqXyAhPSBudWxscHRyKQotICAgICAgZW52Xy0+
RGVsZXRlTG9jYWxSZWYob2JqXyk7Ci0gICAgb2JqXyA9IChvYmogIT0gbnVsbHB0ciAmJiBwb2xp
Y3kgPT0gT3duZXJzaGlwUG9saWN5OjpSRVRBSU4pCi0gICAgICAgICAgICAgICA/IGVudl8tPk5l
d0xvY2FsUmVmKG9iaikKLSAgICAgICAgICAgICAgIDogb2JqOwotICB9Ci0KLSAgSk5JRW52KiBj
b25zdCBlbnZfID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci19OwotCi0vLyBIb2xk
cyBhIGdsb2JhbCByZWZlcmVuY2UgdG8gYSBKYXZhIG9iamVjdC4gVGhlIGdsb2JhbCByZWZlcmVu
Y2UgaXMgc2NvcGVkCi0vLyB0byB0aGUgbGlmZXRpbWUgb2YgdGhpcyBvYmplY3QuIFRoaXMgY2xh
c3MgZG9lcyBub3QgaG9sZCBvbnRvIGFueSBKTklFbnYqCi0vLyBwYXNzZWQgdG8gaXQsIGhlbmNl
IGl0IGlzIHNhZmUgdG8gdXNlIGFjcm9zcyB0aHJlYWRzICh3aXRoaW4gdGhlIGNvbnN0cmFpbnRz
Ci0vLyBpbXBvc2VkIGJ5IHRoZSB1bmRlcmx5aW5nIEphdmEgb2JqZWN0IHRoYXQgaXQgcmVmZXJl
bmNlcykuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFNjb3BlZEphdmFHbG9iYWxSZWYg
OiBwdWJsaWMgSmF2YVJlZjxUPiB7Ci0gcHVibGljOgotICB1c2luZyBKYXZhUmVmPFQ+OjpvYmpf
OwotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBTY29wZWRKYXZhR2xvYmFsUmVmKHN0ZDo6bnVsbHB0
cl90KSB7fQotICBTY29wZWRKYXZhR2xvYmFsUmVmKEpOSUVudiogZW52LCBjb25zdCBKYXZhUmVm
PFQ+JiBvdGhlcikKLSAgICAgIDogSmF2YVJlZjxUPihzdGF0aWNfY2FzdDxUPihlbnYtPk5ld0ds
b2JhbFJlZihvdGhlci5vYmooKSkpKSB7fQotICBleHBsaWNpdCBTY29wZWRKYXZhR2xvYmFsUmVm
KGNvbnN0IFNjb3BlZEphdmFMb2NhbFJlZjxUPiYgb3RoZXIpCi0gICAgICA6IFNjb3BlZEphdmFH
bG9iYWxSZWYob3RoZXIuZW52KCksIG90aGVyKSB7fQotICBTY29wZWRKYXZhR2xvYmFsUmVmKFNj
b3BlZEphdmFHbG9iYWxSZWYmJiBvdGhlcikKLSAgICAgIDogSmF2YVJlZjxUPihvdGhlci5SZWxl
YXNlKCkpIHt9Ci0KLSAgflNjb3BlZEphdmFHbG9iYWxSZWYoKSB7Ci0gICAgaWYgKG9ial8gIT0g
bnVsbHB0cikKLSAgICAgIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpLT5EZWxldGVHbG9i
YWxSZWYob2JqXyk7Ci0gIH0KLQotICAvLyBSZWxlYXNlcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBj
YWxsZXIuIFRoZSBjYWxsZXIgKm11c3QqIGRlbGV0ZSB0aGUKLSAgLy8gcmVmZXJlbmNlIHdoZW4g
aXQgaXMgZG9uZSB3aXRoIGl0LiBOb3RlIHRoYXQgY2FsbGluZyBhIEphdmEgbWV0aG9kCi0gIC8v
IGlzICpub3QqIGEgdHJhbnNmZXIgb2Ygb3duZXJzaGlwIGFuZCBSZWxlYXNlKCkgc2hvdWxkIG5v
dCBiZSB1c2VkLgotICBUIFJlbGVhc2UoKSB7Ci0gICAgVCBvYmogPSBzdGF0aWNfY2FzdDxUPihv
YmpfKTsKLSAgICBvYmpfID0gbnVsbHB0cjsKLSAgICByZXR1cm4gb2JqOwotICB9Ci0KLSBwcml2
YXRlOgotICBSVENfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZEphdmFHbG9iYWxSZWYp
OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgU2NvcGVkSmF2YUxvY2FsUmVm
PFQ+IHN0YXRpY19qYXZhX3JlZl9jYXN0KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhUmVmPGpvYmplY3Q+IGNvbnN0JiBy
ZWYpIHsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IG93bmVkX3JlZihlbnYsIHJlZik7
Ci0gIHJldHVybiBTY29wZWRKYXZhTG9jYWxSZWY8VD4oZW52LCBzdGF0aWNfY2FzdDxUPihvd25l
ZF9yZWYuUmVsZWFzZSgpKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlm
ICAvLyBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX0pOSV9TQ09QRURfSkFWQV9SRUZfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL25hdGl2ZV9hcGkvbmV0d29ya19tb25pdG9yL25ldHdvcmtfbW9uaXRvci5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9h
cGkvbmV0d29ya19tb25pdG9yL25ldHdvcmtfbW9uaXRvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzhiZTdmZGVmN2RkNDUzZDRlYzlkYjdkOWI2NTc3YTFjMGIzODJlMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL25ldHdv
cmtfbW9uaXRvci9uZXR3b3JrX21vbml0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2Fw
aS9uZXR3b3JrX21vbml0b3IvbmV0d29ya19tb25pdG9yLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+
Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbmV0d29ya19tb25pdG9y
LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1zdGQ6OnVuaXF1ZV9wdHI8cnRjOjpOZXR3b3Jr
TW9uaXRvckZhY3Rvcnk+IENyZWF0ZUFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoCi0gICAg
Sk5JRW52KiBlbnYsCi0gICAgam9iamVjdCBhcHBsaWNhdGlvbl9jb250ZXh0KSB7Ci0gIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPGpuaTo6QW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeT4oCi0g
ICAgICBlbnYsIEphdmFQYXJhbVJlZjxqb2JqZWN0PihhcHBsaWNhdGlvbl9jb250ZXh0KSk7Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeT4KLUNyZWF0ZUFu
ZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKSB7Ci0gIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PGpuaTo6QW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeT4oKTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9uZXR3b3JrX21vbml0b3IvbmV0d29ya19t
b25pdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9uYXRpdmVfYXBpL25ldHdvcmtfbW9uaXRvci9uZXR3b3JrX21vbml0b3IuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlY2Q3NTU0MzY5OGUxNzhmZTM4Y2VjY2Q2Y2Rj
OTNkZDA0ZDI3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9u
YXRpdmVfYXBpL25ldHdvcmtfbW9uaXRvci9uZXR3b3JrX21vbml0b3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJP
SURfTkFUSVZFX0FQSV9ORVRXT1JLX01PTklUT1JfTkVUV09SS19NT05JVE9SX0hfCi0jZGVmaW5l
IFNES19BTkRST0lEX05BVElWRV9BUElfTkVUV09SS19NT05JVE9SX05FVFdPUktfTU9OSVRPUl9I
XwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJy
dGNfYmFzZS9uZXR3b3JrX21vbml0b3JfZmFjdG9yeS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsK
LQotLy8gQ3JlYXRlcyBhbiBBbmRyb2lkLXNwZWNpZmljIG5ldHdvcmsgbW9uaXRvciwgd2hpY2gg
aXMgY2FwYWJsZSBvZiBkZXRlY3RpbmcKLS8vIG5ldHdvcmsgY2hhbmdlcyBhcyBzb29uIGFzIHRo
ZXkgb2NjdXIsIHJlcXVlc3RpbmcgYSBjZWxsdWxhciBpbnRlcmZhY2UKLS8vIChkZXBlbmRlbnQg
b24gcGVybWlzc2lvbnMpLCBhbmQgYmluZGluZyBzb2NrZXRzIHRvIG5ldHdvcmsgaW50ZXJmYWNl
cyAobW9yZQotLy8gcmVsaWFibGUgdGhhbiBiaW5kaW5nIHRvIElQIGFkZHJlc3NlcyBvbiBBbmRy
b2lkKS4KLXN0ZDo6dW5pcXVlX3B0cjxydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeT4gQ3JlYXRl
QW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBqb2Jq
ZWN0IGFwcGxpY2F0aW9uX2NvbnRleHQpOwotCi0vLyBEZXByZWNhdGVkLiBQYXNzIGluIGFwcGxp
Y2F0aW9uIGNvbnRleHQgaW5zdGVhZC4KLXN0ZDo6dW5pcXVlX3B0cjxydGM6Ok5ldHdvcmtNb25p
dG9yRmFjdG9yeT4KLUNyZWF0ZUFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKTsKLQotfSAg
Ly8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNES19BTkRST0lEX05BVElWRV9BUElf
TkVUV09SS19NT05JVE9SX05FVFdPUktfTU9OSVRPUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9w
ZWVyY29ubmVjdGlvbi9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeS5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvcGVlcmNv
bm5lY3Rpb24vcGVlcl9jb25uZWN0aW9uX2ZhY3RvcnkuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU2ODM5NzU0YWNkYzdkMmI4MzE5OGE2MmZhZGIwMTY1NDA1ZmRlNDIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9wZWVyY29u
bmVjdGlvbi9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeS5jYworKysgL2Rldi9udWxsCkBAIC0xLDMz
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZl
X2FwaS9wZWVyY29ubmVjdGlvbi9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeS5oIgotCi0jaW5jbHVk
ZSA8am5pLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2lu
Y2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvcGVlcl9jb25uZWN0aW9uX2ZhY3RvcnkuaCIK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLWpvYmplY3QgTmF0aXZlVG9KYXZhUGVlckNvbm5lY3Rp
b25GYWN0b3J5KAotICAgIEpOSUVudiogam5pLAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gcGNmLAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxydGM6OlRocmVhZD4gbmV0d29ya190aHJlYWQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPHJ0
Yzo6VGhyZWFkPiB3b3JrZXJfdGhyZWFkLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVh
ZD4gc2lnbmFsaW5nX3RocmVhZCwKLSAgICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0
d29ya19tb25pdG9yX2ZhY3RvcnkpIHsKLSAgcmV0dXJuIHdlYnJ0Yzo6am5pOjpOYXRpdmVUb0ph
dmFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoCi0gICAgICBqbmksIHBjZiwgc3RkOjptb3ZlKG5ldHdv
cmtfdGhyZWFkKSwgc3RkOjptb3ZlKHdvcmtlcl90aHJlYWQpLAotICAgICAgc3RkOjptb3ZlKHNp
Z25hbGluZ190aHJlYWQpLCBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSk7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvcGVlcmNvbm5lY3Rpb24vcGVlcl9j
b25uZWN0aW9uX2ZhY3RvcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvcGVlcmNvbm5lY3Rpb24vcGVlcl9jb25uZWN0
aW9uX2ZhY3RvcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg5ZDYwOTJlNzg2
ZGYzMjcyMDQxMGU5YjZjZmJlMWE0NmU4ODIxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL3BlZXJjb25uZWN0aW9uL3BlZXJfY29ubmVjdGlv
bl9mYWN0b3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX05BVElWRV9BUElfUEVFUkNPTk5FQ1RJT05fUEVF
Ul9DT05ORUNUSU9OX0ZBQ1RPUllfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9Q
RUVSQ09OTkVDVElPTl9QRUVSX0NPTk5FQ1RJT05fRkFDVE9SWV9IXwotCi0jaW5jbHVkZSA8am5p
Lmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJhcGkvcGVlcl9jb25uZWN0aW9u
X2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZC5oIgotCi1uYW1lc3BhY2Ug
d2VicnRjIHsKLQotLy8gQ3JlYXRlcyBqYXZhIFBlZXJDb25uZWN0aW9uRmFjdG9yeSB3aXRoIHNw
ZWNpZmllZCB8cGNmfC4KLWpvYmplY3QgTmF0aXZlVG9KYXZhUGVlckNvbm5lY3Rpb25GYWN0b3J5
KAotICAgIEpOSUVudiogam5pLAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlBlZXJD
b25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gcGNmLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6
OlRocmVhZD4gbmV0d29ya190aHJlYWQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFk
PiB3b3JrZXJfdGhyZWFkLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gc2lnbmFs
aW5nX3RocmVhZCwKLSAgICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29ya19tb25p
dG9yX2ZhY3RvcnkgPSBudWxscHRyKTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5k
aWYgIC8vIFNES19BTkRST0lEX05BVElWRV9BUElfUEVFUkNPTk5FQ1RJT05fUEVFUl9DT05ORUNU
SU9OX0ZBQ1RPUllfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvc3RhY2t0cmFjZS9zdGFja3RyYWNl
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvbmF0aXZlX2FwaS9zdGFja3RyYWNlL3N0YWNrdHJhY2UuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRmMWVlNjQzNWFlOTQ4YTRjZTljYWM3YWRiYjZlNjg1YzEyYzJlMDAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9zdGFj
a3RyYWNlL3N0YWNrdHJhY2UuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxOSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvc3RhY2t0
cmFjZS9zdGFja3RyYWNlLmgiCi0KLSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgPGVycm5v
Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KLSNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+Ci0j
aW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+Ci0jaW5jbHVkZSA8c3lzY2FsbC5oPgotI2luY2x1ZGUg
PHVjb250ZXh0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dW53aW5kLmg+Ci0j
aW5jbHVkZSA8YXRvbWljPgotCi0vLyBwdHJhY2UuaCBpcyBwb2xsdXRpbmcgdGhlIG5hbWVzcGFj
ZS4gQ2xlYW4gdXAgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggcnRjLgotI2lmIGRlZmluZWQoRFMp
Ci0jdW5kZWYgRFMKLSNlbmRpZgotCi0jaW5jbHVkZSAiYWJzbC9iYXNlL2F0dHJpYnV0ZXMuaCIK
LSNpbmNsdWRlICJydGNfYmFzZS9jcml0aWNhbF9zZWN0aW9uLmgiCi0jaW5jbHVkZSAicnRjX2Jh
c2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3N0cmluZ3Mvc3RyaW5nX2J1aWxkZXIu
aCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIE1heGltdW0gc3Rh
Y2sgdHJhY2UgZGVwdGggd2UgYWxsb3cgYmVmb3JlIGFib3J0aW5nLgotY29uc3RleHByIHNpemVf
dCBrTWF4U3RhY2tTaXplID0gMTAwOwotLy8gU2lnbmFsIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGlu
dGVycnVwdCB0aHJlYWRzLiBTSUdVUkcgKCJVcmdlbnQgY29uZGl0aW9uIG9uCi0vLyBzb2NrZXQi
KSBpcyBjaG9zZW4gYmVjYXVzZSBBbmRyb2lkIGRvZXMgbm90IHNldCB1cCBhIHNwZWNpZmljIGhh
bmRsZXIgZm9yCi0vLyB0aGlzIHNpZ25hbC4KLWNvbnN0ZXhwciBpbnQga1NpZ25hbCA9IFNJR1VS
RzsKLQotLy8gTm90ZTogVGhpcyBjbGFzcyBpcyBvbmx5IG1lYW50IGZvciB1c2Ugd2l0aGluIHRo
aXMgZmlsZSwgYW5kIGZvciB0aGUKLS8vIHNpbXBsaWZpZWQgdXNlIGNhc2Ugb2YgYSBzaW5nbGUg
V2FpdCgpIGFuZCBhIHNpbmdsZSBTaWduYWwoKSwgZm9sbG93ZWQgYnkKLS8vIGRpc2NhcmRpbmcg
dGhlIG9iamVjdCAobmV2ZXIgcmV1c2VkKS4KLS8vIFRoaXMgaXMgYSByZXBsYWNlbWVudCBvZiBy
dGM6OkV2ZW50IHRoYXQgaXMgYXN5bmMtc2FmZSBhbmQgZG9lc24ndCB1c2UKLS8vIHB0aHJlYWQg
YXBpLiBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZSBzaWduYWwgaGFuZGxlcnMgY2Fubm90IGFsbG9j
YXRlIG1lbW9yeQotLy8gb3IgdXNlIHB0aHJlYWQgYXBpLiBUaGlzIGNsYXNzIGlzIHBvcnRlZCBm
cm9tIENocm9taXVtLgotY2xhc3MgQXN5bmNTYWZlV2FpdGFibGVFdmVudCB7Ci0gcHVibGljOgot
ICBBc3luY1NhZmVXYWl0YWJsZUV2ZW50KCkgewotICAgIHN0ZDo6YXRvbWljX3N0b3JlX2V4cGxp
Y2l0KCZmdXRleF8sIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICB9Ci0KLSAgfkFz
eW5jU2FmZVdhaXRhYmxlRXZlbnQoKSB7fQotCi0gIC8vIFJldHVybnMgZmFsc2UgaW4gdGhlIGV2
ZW50IG9mIGFuIGVycm9yIGFuZCBlcnJubyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlCi0gIC8vIGNh
dXNlIG9mIHRoZSBlcnJvci4KLSAgYm9vbCBXYWl0KCkgewotICAgIC8vIGZ1dGV4KCkgY2FuIHdh
a2UgdXAgc3B1cmlvdXNseSBpZiB0aGlzIG1lbW9yeSBhZGRyZXNzIHdhcyBwcmV2aW91c2x5IHVz
ZWQKLSAgICAvLyBmb3IgYSBwdGhyZWFkIG11dGV4LiBTbywgYWxzbyBjaGVjayB0aGUgY29uZGl0
aW9uLgotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBpbnQgcmVzID0gc3lzY2FsbChTWVNfZnV0
ZXgsICZmdXRleF8sIEZVVEVYX1dBSVQgfCBGVVRFWF9QUklWQVRFX0ZMQUcsIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCAwKTsKLSAgICAgIGlmIChzdGQ6OmF0
b21pY19sb2FkX2V4cGxpY2l0KCZmdXRleF8sIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICE9
IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYgKHJlcyAhPSAwKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBTaWduYWwoKSB7Ci0gICAgc3RkOjph
dG9taWNfc3RvcmVfZXhwbGljaXQoJmZ1dGV4XywgMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFz
ZSk7Ci0gICAgc3lzY2FsbChTWVNfZnV0ZXgsICZmdXRleF8sIEZVVEVYX1dBS0UgfCBGVVRFWF9Q
UklWQVRFX0ZMQUcsIDEsIG51bGxwdHIsCi0gICAgICAgICAgICBudWxscHRyLCAwKTsKLSAgfQot
Ci0gcHJpdmF0ZToKLSAgc3RkOjphdG9taWM8aW50PiBmdXRleF87Ci19OwotCi0vLyBTdHJ1Y3Qg
dG8gc3RvcmUgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi1zdHJ1Y3QgU2ln
bmFsSGFuZGxlck91dHB1dFN0YXRlIHsKLSAgLy8gVGhpcyBldmVudCBpcyBzaWduYWxsZWQgd2hl
biBzaWduYWwgaGFuZGxlciBpcyBkb25lIGV4ZWN1dGluZy4KLSAgQXN5bmNTYWZlV2FpdGFibGVF
dmVudCBzaWduYWxfaGFuZGxlcl9maW5pc2hfZXZlbnQ7Ci0gIC8vIFJ1bm5pbmcgY291bnRlciBv
ZiBhcnJheSBpbmRleCBiZWxvdy4KLSAgc2l6ZV90IHN0YWNrX3NpemVfY291bnRlciA9IDA7Ci0g
IC8vIEFycmF5IHN0b3JpbmcgdGhlIHN0YWNrIHRyYWNlLgotICB1aW50cHRyX3QgYWRkcmVzc2Vz
W2tNYXhTdGFja1NpemVdOwotfTsKLQotLy8gR2xvYmFsIGxvY2sgdG8gZW5zdXJlIG9ubHkgb25l
IHRocmVhZCBnZXRzIGludGVycnVwdGVkIGF0IGEgdGltZS4KLUFCU0xfQ09OU1RfSU5JVCBydGM6
Okdsb2JhbExvY2sgZ19zaWduYWxfaGFuZGxlcl9sb2NrOwotLy8gQXJndW1lbnQgcGFzc2VkIHRv
IHRoZSBUaHJlYWRTaWduYWxIYW5kbGVyKCkgZnJvbSB0aGUgc2FtcGxpbmcgdGhyZWFkIHRvIHRo
ZQotLy8gc2FtcGxlZCAoc3RvcHBlZCkgdGhyZWFkLiBUaGlzIHZhbHVlIGlzIHNldCBqdXN0IGJl
Zm9yZSBzZW5kaW5nIHNpZ25hbCB0byB0aGUKLS8vIHRocmVhZCBhbmQgcmVzZXQgd2hlbiBoYW5k
bGVyIGlzIGRvbmUuCi1TaWduYWxIYW5kbGVyT3V0cHV0U3RhdGUqIHZvbGF0aWxlIGdfc2lnbmFs
X2hhbmRsZXJfb3V0cHV0X3N0YXRlOwotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpdGVy
YXRpdmVseSBmb3IgZWFjaCBzdGFjayB0cmFjZSBlbGVtZW50IGFuZCBzdG9yZXMKLS8vIHRoZSBl
bGVtZW50IGluIHRoZSBhcnJheSBmcm9tIHx1bndpbmRfb3V0cHV0X3N0YXRlfC4KLV9VbndpbmRf
UmVhc29uX0NvZGUgVW53aW5kQmFja3RyYWNlKHN0cnVjdCBfVW53aW5kX0NvbnRleHQqIHVud2lu
ZF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdW53
aW5kX291dHB1dF9zdGF0ZSkgewotICBTaWduYWxIYW5kbGVyT3V0cHV0U3RhdGUqIGNvbnN0IG91
dHB1dF9zdGF0ZSA9Ci0gICAgICBzdGF0aWNfY2FzdDxTaWduYWxIYW5kbGVyT3V0cHV0U3RhdGUq
Pih1bndpbmRfb3V0cHV0X3N0YXRlKTsKLQotICAvLyBBdm9pZCBvdmVyZmxvd2luZyB0aGUgc3Rh
Y2sgdHJhY2UgYXJyYXkuCi0gIGlmIChvdXRwdXRfc3RhdGUtPnN0YWNrX3NpemVfY291bnRlciA+
PSBrTWF4U3RhY2tTaXplKQotICAgIHJldHVybiBfVVJDX0VORF9PRl9TVEFDSzsKLQotICAvLyBT
dG9yZSB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBpbiB0aGUgYXJyYXkuIFN1YnRyYWN0IDIgc2lu
Y2Ugd2Ugd2FudCB0byBnZXQKLSAgLy8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24gcG9pbnRlciwgbm90
IHRoZSByZXR1cm4gYWRkcmVzcyB3aGljaCBpcyB0aGUKLSAgLy8gaW5zdHJ1Y3Rpb24gYWZ0ZXIu
Ci0gIG91dHB1dF9zdGF0ZS0+YWRkcmVzc2VzW291dHB1dF9zdGF0ZS0+c3RhY2tfc2l6ZV9jb3Vu
dGVyXSA9Ci0gICAgICBfVW53aW5kX0dldElQKHVud2luZF9jb250ZXh0KSAtIDI7Ci0gICsrb3V0
cHV0X3N0YXRlLT5zdGFja19zaXplX2NvdW50ZXI7Ci0KLSAgcmV0dXJuIF9VUkNfTk9fUkVBU09O
OwotfQotCi0vLyBUaGlzIHNpZ25hbCBoYW5kbGVyIGlzIGV4ZWN0dWVkIG9uIHRoZSBpbnRlcnJ1
cHRlZCB0aHJlYWQuCi12b2lkIFNpZ25hbEhhbmRsZXIoaW50IHNpZ251bSwgc2lnaW5mb190KiBp
bmZvLCB2b2lkKiBwdHIpIHsKLSAgX1Vud2luZF9CYWNrdHJhY2UoJlVud2luZEJhY2t0cmFjZSwg
Z19zaWduYWxfaGFuZGxlcl9vdXRwdXRfc3RhdGUpOwotICBnX3NpZ25hbF9oYW5kbGVyX291dHB1
dF9zdGF0ZS0+c2lnbmFsX2hhbmRsZXJfZmluaXNoX2V2ZW50LlNpZ25hbCgpOwotfQotCi0vLyBU
ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIHNpZ25hbCBoYW5kbGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBy
ZWNvcmRzIGEgcmF3IHN0YWNrCi0vLyB0cmFjZSBhbmQgaW50ZXJydXB0IHRoZSBnaXZlbiB0aWQu
IFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgb3V0cHV0Ci0vLyB0aHJlYWQgc3Rh
Y2sgdHJhY2UgaGFzIGJlZW4gc3RvcmVkIGluIHxwYXJhbXN8LiBUaGUgcmV0dXJuIHZhbHVlIGlz
IGFuIGVycm9yCi0vLyBzdHJpbmcgb24gZmFpbHVyZSBhbmQgbnVsbCBvbiBzdWNjZXNzLgotY29u
c3QgY2hhciogQ2FwdHVyZVJhd1N0YWNrdHJhY2UoaW50IHBpZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB0aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaWduYWxIYW5kbGVyT3V0cHV0U3RhdGUqIHBhcmFtcykgewotICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIHVuZGVyIGEgZ2xvYmFsIGxvY2sgc2luY2Ugd2UgYXJlIGNoYW5naW5nIHRoZSBzaWduYWwK
LSAgLy8gaGFuZGxlciBhbmQgdXNpbmcgZ2xvYmFsIHN0YXRlIGZvciB0aGUgb3V0cHV0LiBUaGUg
bG9jayBpcyB0byBlbnN1cmUgb25seQotICAvLyBvbmUgdGhyZWFkIGF0IGEgdGltZSBnZXRzIGNh
cHR1cmVkLiBUaGUgbG9jayBhbHNvIG1lYW5zIHdlIG5lZWQgdG8gYmUgdmVyeQotICAvLyBjYXJl
ZnVsIHdpdGggd2hhdCBzdGF0ZW1lbnRzIHdlIHB1dCBpbiB0aGlzIGZ1bmN0aW9uLCBhbmQgd2Ug
c2hvdWxkIGV2ZW4KLSAgLy8gYXZvaWQgbG9nZ2luZyBoZXJlLgotICBzdHJ1Y3Qgc2lnYWN0aW9u
IGFjdDsKLSAgc3RydWN0IHNpZ2FjdGlvbiBvbGRfYWN0OwotICBtZW1zZXQoJmFjdCwgMCwgc2l6
ZW9mKGFjdCkpOwotICBhY3Quc2Ffc2lnYWN0aW9uID0gJlNpZ25hbEhhbmRsZXI7Ci0gIGFjdC5z
YV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOwotICBzaWdlbXB0eXNldCgmYWN0LnNh
X21hc2spOwotCi0gIHJ0Yzo6R2xvYmFsTG9ja1Njb3BlIGxzKCZnX3NpZ25hbF9oYW5kbGVyX2xv
Y2spOwotICBnX3NpZ25hbF9oYW5kbGVyX291dHB1dF9zdGF0ZSA9IHBhcmFtczsKLQotICBpZiAo
c2lnYWN0aW9uKGtTaWduYWwsICZhY3QsICZvbGRfYWN0KSAhPSAwKQotICAgIHJldHVybiAiRmFp
bGVkIHRvIGNoYW5nZSBzaWduYWwgYWN0aW9uIjsKLQotICAvLyBJbnRlcnJ1cHQgdGhlIHRocmVh
ZCB3aGljaCB3aWxsIGV4ZWN1dGUgU2lnbmFsSGFuZGxlcigpIG9uIHRoZSBnaXZlbgotICAvLyB0
aHJlYWQuCi0gIGlmICh0Z2tpbGwocGlkLCB0aWQsIGtTaWduYWwpICE9IDApCi0gICAgcmV0dXJu
ICJGYWlsZWQgdG8gaW50ZXJydXB0IHRocmVhZCI7Ci0KLSAgLy8gV2FpdCB1bnRpbCB0aGUgdGhy
ZWFkIGlzIGRvbmUgcmVjb3JkaW5nIGl0cyBzdGFjayB0cmFjZS4KLSAgaWYgKCFwYXJhbXMtPnNp
Z25hbF9oYW5kbGVyX2ZpbmlzaF9ldmVudC5XYWl0KCkpCi0gICAgcmV0dXJuICJGYWlsZWQgdG8g
d2FpdCBmb3IgdGhyZWFkIHRvIGZpbmlzaCBzdGFjayB0cmFjZSI7Ci0KLSAgLy8gUmVzdG9yZSBw
cmV2aW91cyBzaWduYWwgaGFuZGxlci4KLSAgc2lnYWN0aW9uKGtTaWduYWwsICZvbGRfYWN0LCAv
KiBvbGRfYWN0PSAqLyBudWxscHRyKTsKLQotICByZXR1cm4gbnVsbHB0cjsKLX0KLQotLy8gVHJh
bnNsYXRlIGFkZHJlc3NlcyBpbnRvIHN5bWJvbGljIGluZm9ybWF0aW9uIHVzaW5nIGRsYWRkcigp
Lgotc3RkOjp2ZWN0b3I8U3RhY2tUcmFjZUVsZW1lbnQ+IEZvcm1hdFN0YWNrVHJhY2UoCi0gICAg
Y29uc3QgU2lnbmFsSGFuZGxlck91dHB1dFN0YXRlJiBwYXJhbXMpIHsKLSAgc3RkOjp2ZWN0b3I8
U3RhY2tUcmFjZUVsZW1lbnQ+IHN0YWNrX3RyYWNlOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtcy5zdGFja19zaXplX2NvdW50ZXI7ICsraSkgewotICAgIGNvbnN0IHVpbnRwdHJfdCBh
ZGRyZXNzID0gcGFyYW1zLmFkZHJlc3Nlc1tpXTsKLQotICAgIERsX2luZm8gZGxfaW5mbyA9IHt9
OwotICAgIGlmICghZGxhZGRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpLCAmZGxf
aW5mbykpIHsKLSAgICAgIFJUQ19MT0coTFNfV0FSTklORykKLSAgICAgICAgICA8PCAiQ291bGQg
bm90IHRyYW5zbGF0ZSBhZGRyZXNzIHRvIHN5bWJvbGljIGluZm9ybWF0aW9uIGZvciBhZGRyZXNz
ICIKLSAgICAgICAgICA8PCBhZGRyZXNzIDw8ICIgYXQgc3RhY2sgZGVwdGggIiA8PCBpOwotICAg
ICAgY29udGludWU7Ci0gICAgfQotCi0gICAgU3RhY2tUcmFjZUVsZW1lbnQgc3RhY2tfdHJhY2Vf
ZWxlbWVudDsKLSAgICBzdGFja190cmFjZV9lbGVtZW50LnNoYXJlZF9vYmplY3RfcGF0aCA9IGRs
X2luZm8uZGxpX2ZuYW1lOwotICAgIHN0YWNrX3RyYWNlX2VsZW1lbnQucmVsYXRpdmVfYWRkcmVz
cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigKLSAgICAgICAgYWRkcmVzcyAtIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihkbF9pbmZvLmRsaV9mYmFzZSkpOwotICAgIHN0YWNrX3RyYWNlX2Vs
ZW1lbnQuc3ltYm9sX25hbWUgPSBkbF9pbmZvLmRsaV9zbmFtZTsKLQotICAgIHN0YWNrX3RyYWNl
LnB1c2hfYmFjayhzdGFja190cmFjZV9lbGVtZW50KTsKLSAgfQotCi0gIHJldHVybiBzdGFja190
cmFjZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLXN0ZDo6dmVjdG9yPFN0YWNrVHJhY2VFbGVt
ZW50PiBHZXRTdGFja1RyYWNlKGludCB0aWQpIHsKLSAgLy8gT25seSBhIHRocmVhZCBpdHNlbGYg
Y2FuIHVud2luZCBpdHMgc3RhY2ssIHNvIHdlIHdpbGwgaW50ZXJydXB0IHRoZSBnaXZlbgotICAv
LyB0aWQgd2l0aCBhIGN1c3RvbSBzaWduYWwgaGFuZGxlciBpbiBvcmRlciB0byB1bndpbmQgaXRz
IHN0YWNrLiBUaGUgc3RhY2sKLSAgLy8gd2lsbCBiZSByZWNvcmRlZCB0byB8cGFyYW1zfCB0aHJv
dWdoIHRoZSB1c2Ugb2YgdGhlIGdsb2JhbCBwb2ludGVyCi0gIC8vIHxnX3NpZ25hbF9oYW5kbGVy
X3BhcmFtfC4KLSAgU2lnbmFsSGFuZGxlck91dHB1dFN0YXRlIHBhcmFtczsKLQotICBjb25zdCBj
aGFyKiBlcnJvcl9zdHJpbmcgPSBDYXB0dXJlUmF3U3RhY2t0cmFjZShnZXRwaWQoKSwgdGlkLCAm
cGFyYW1zKTsKLSAgaWYgKGVycm9yX3N0cmluZyAhPSBudWxscHRyKSB7Ci0gICAgUlRDX0xPRyhM
U19FUlJPUikgPDwgZXJyb3Jfc3RyaW5nIDw8ICIuIHRpZDogIiA8PCB0aWQKLSAgICAgICAgICAg
ICAgICAgICAgICA8PCAiLiBlcnJubzogIiA8PCBlcnJubzsKLSAgICByZXR1cm4ge307Ci0gIH0K
LSAgaWYgKHBhcmFtcy5zdGFja19zaXplX2NvdW50ZXIgPj0ga01heFN0YWNrU2l6ZSkgewotICAg
IFJUQ19MT0coTFNfV0FSTklORykgPDwgIlN0YWNrIHRyYWNlIGZvciB0aHJlYWQgIiA8PCB0aWQg
PDwgIiB3YXMgdHJ1bmNhdGVkIjsKLSAgfQotICByZXR1cm4gRm9ybWF0U3RhY2tUcmFjZShwYXJh
bXMpOwotfQotCi1zdGQ6OnZlY3RvcjxTdGFja1RyYWNlRWxlbWVudD4gR2V0U3RhY2tUcmFjZSgp
IHsKLSAgU2lnbmFsSGFuZGxlck91dHB1dFN0YXRlIHBhcmFtczsKLSAgX1Vud2luZF9CYWNrdHJh
Y2UoJlVud2luZEJhY2t0cmFjZSwgJnBhcmFtcyk7Ci0gIGlmIChwYXJhbXMuc3RhY2tfc2l6ZV9j
b3VudGVyID49IGtNYXhTdGFja1NpemUpIHsKLSAgICBSVENfTE9HKExTX1dBUk5JTkcpIDw8ICJT
dGFjayB0cmFjZSB3YXMgdHJ1bmNhdGVkIjsKLSAgfQotICByZXR1cm4gRm9ybWF0U3RhY2tUcmFj
ZShwYXJhbXMpOwotfQotCi1zdGQ6OnN0cmluZyBTdGFja1RyYWNlVG9TdHJpbmcoCi0gICAgY29u
c3Qgc3RkOjp2ZWN0b3I8U3RhY2tUcmFjZUVsZW1lbnQ+JiBzdGFja190cmFjZSkgewotICBydGM6
OlN0cmluZ0J1aWxkZXIgc3RyaW5nX2J1aWxkZXI7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdGFja190cmFjZS5zaXplKCk7ICsraSkgewotICAgIGNvbnN0IFN0YWNrVHJhY2VFbGVtZW50
JiBzdGFja190cmFjZV9lbGVtZW50ID0gc3RhY2tfdHJhY2VbaV07Ci0gICAgc3RyaW5nX2J1aWxk
ZXIuQXBwZW5kRm9ybWF0KAotICAgICAgICAiIyUwMnp1IHBjICUwOHggJXMiLCBpLAotICAgICAg
ICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhY2tfdHJhY2VfZWxlbWVudC5yZWxhdGl2ZV9hZGRy
ZXNzKSwKLSAgICAgICAgc3RhY2tfdHJhY2VfZWxlbWVudC5zaGFyZWRfb2JqZWN0X3BhdGgpOwot
ICAgIC8vIFRoZSBzeW1ib2wgbmFtZSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdW5zdHJpcHBlZCAu
c28gZmlsZXMuCi0gICAgaWYgKHN0YWNrX3RyYWNlX2VsZW1lbnQuc3ltYm9sX25hbWUgIT0gbnVs
bHB0cikKLSAgICAgIHN0cmluZ19idWlsZGVyLkFwcGVuZEZvcm1hdCgiICVzIiwgc3RhY2tfdHJh
Y2VfZWxlbWVudC5zeW1ib2xfbmFtZSk7Ci0KLSAgICBzdHJpbmdfYnVpbGRlci5BcHBlbmRGb3Jt
YXQoIlxuIik7Ci0gIH0KLQotICByZXR1cm4gc3RyaW5nX2J1aWxkZXIuUmVsZWFzZSgpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL3N0YWNrdHJhY2Uv
c3RhY2t0cmFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9zdGFja3RyYWNlL3N0YWNrdHJhY2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhZTFhNThkZGE1YjJhMzIwZDNiZjQ4NDBjNmFiOTM0MzZj
YTIwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVf
YXBpL3N0YWNrdHJhY2Uvc3RhY2t0cmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX1NU
QUNLVFJBQ0VfU1RBQ0tUUkFDRV9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX1NU
QUNLVFJBQ0VfU1RBQ0tUUkFDRV9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLXN0cnVjdCBTdGFja1RyYWNlRWxlbWVudCB7
Ci0gIC8vIFBhdGhuYW1lIG9mIHNoYXJlZCBvYmplY3QgKC5zbyBmaWxlKSB0aGF0IGNvbnRhaW5z
IGFkZHJlc3MuCi0gIGNvbnN0IGNoYXIqIHNoYXJlZF9vYmplY3RfcGF0aDsKLSAgLy8gRXhlY3V0
aW9uIGFkZHJlc3MgcmVsYXRpdmUgdG8gdGhlIC5zbyBiYXNlIGFkZHJlc3MuIFRoaXMgbWF0Y2hl
cyB0aGUKLSAgLy8gYWRkcmVzc2VzIHlvdSBnZXQgd2l0aCAibm0iLCAib2JqZHVtcCIsIGFuZCAi
bmRrLXN0YWNrIiwgYXMgbG9uZyBhcyB0aGUKLSAgLy8gY29kZSBpcyBjb21waWxlZCB3aXRoIHBv
c2l0aW9uLWluZGVwZW5kZW50IGNvZGUuIEFuZHJvaWQgcmVxdWlyZXMKLSAgLy8gcG9zaXRpb24t
aW5kZXBlbmRlbnQgY29kZSBzaW5jZSBMb2xsaXBvcC4KLSAgdWludDMyX3QgcmVsYXRpdmVfYWRk
cmVzczsKLSAgLy8gTmFtZSBvZiBzeW1ib2wgd2hvc2UgZGVmaW5pdGlvbiBvdmVybGFwcyB0aGUg
YWRkcmVzcy4gVGhpcyB2YWx1ZSBpcyBudWxsCi0gIC8vIHdoZW4gc3ltYm9sIG5hbWVzIGFyZSBz
dHJpcHBlZC4KLSAgY29uc3QgY2hhciogc3ltYm9sX25hbWU7Ci19OwotCi0vLyBVdGlsaXR5IHRv
IHVud2luZCBzdGFjayBmb3IgYSBnaXZlbiB0aHJlYWQgb24gQW5kcm9pZCBBUk0gZGV2aWNlcy4g
VGhpcyB3b3JrcwotLy8gb24gdG9wIG9mIHVud2luZC5oIGFuZCB1bndpbmRzIG5hdGl2ZSAoQysr
KSBzdGFjayB0cmFjZXMgb25seS4KLXN0ZDo6dmVjdG9yPFN0YWNrVHJhY2VFbGVtZW50PiBHZXRT
dGFja1RyYWNlKGludCB0aWQpOwotCi0vLyBVbndpbmQgdGhlIHN0YWNrIG9mIHRoZSBjdXJyZW50
IHRocmVhZC4KLXN0ZDo6dmVjdG9yPFN0YWNrVHJhY2VFbGVtZW50PiBHZXRTdGFja1RyYWNlKCk7
Ci0KLS8vIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhY2sgdHJhY2UgaW4g
YSBmb3JtYXQgbmRrLXN0YWNrIGFjY2VwdHMuCi1zdGQ6OnN0cmluZyBTdGFja1RyYWNlVG9TdHJp
bmcoCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3RhY2tUcmFjZUVsZW1lbnQ+JiBzdGFja190cmFj
ZSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9O
QVRJVkVfQVBJX1NUQUNLVFJBQ0VfU1RBQ0tUUkFDRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS92
aWRlby92aWRlb19zb3VyY2UuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfYXBpL3ZpZGVvL3ZpZGVvX3NvdXJjZS5jYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgxM2Y0MDMxMzUxZjI3YTkzMjcxNWFlM2VmYjI3
NWUwNDU2Y2NiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9u
YXRpdmVfYXBpL3ZpZGVvL3ZpZGVvX3NvdXJjZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwNyAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL25h
dGl2ZV9hcGkvdmlkZW8vdmlkZW9fc291cmNlLmgiCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9z
cmMvam5pL2FuZHJvaWRfdmlkZW9fdHJhY2tfc291cmNlLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS9uYXRpdmVfY2FwdHVyZXJfb2JzZXJ2ZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
YyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIEhpZGVzIGZ1bGwgam5pOjpBbmRyb2lkVmlkZW9UcmFj
a1NvdXJjZSBpbnRlcmZhY2UgYW5kIHByb3ZpZGVzIGFuIGluc3RhbmNlIG9mCi0vLyBOYXRpdmVD
YXB0dXJlck9ic2VydmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlkZW8gc291cmNlLiBEb2VzIG5v
dCBleHRlbmQKLS8vIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlIHRvIGF2b2lkIGRpYW1vbmQgaW5o
ZXJpdGFuY2Ugb24KLS8vIFZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UuCi1jbGFzcyBKYXZhVmlk
ZW9UcmFja1NvdXJjZUltcGwgOiBwdWJsaWMgSmF2YVZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2Ug
ewotIHB1YmxpYzoKLSAgSmF2YVZpZGVvVHJhY2tTb3VyY2VJbXBsKEpOSUVudiogZW52LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpUaHJlYWQqIHNpZ25hbGluZ190aHJlYWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX3NjcmVlbmNhc3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsaWduX3RpbWVzdGFtcHMpCi0gICAgICA6IGFuZHJvaWRf
dmlkZW9fdHJhY2tfc291cmNlXygKLSAgICAgICAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmpl
Y3Q8am5pOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZT4oCi0gICAgICAgICAgICAgICAgc2lnbmFs
aW5nX3RocmVhZCwKLSAgICAgICAgICAgICAgICBlbnYsCi0gICAgICAgICAgICAgICAgaXNfc2Ny
ZWVuY2FzdCwKLSAgICAgICAgICAgICAgICBhbGlnbl90aW1lc3RhbXBzKSksCi0gICAgICAgIG5h
dGl2ZV9jYXB0dXJlcl9vYnNlcnZlcl8oam5pOjpDcmVhdGVKYXZhTmF0aXZlQ2FwdHVyZXJPYnNl
cnZlcigKLSAgICAgICAgICAgIGVudiwKLSAgICAgICAgICAgIGFuZHJvaWRfdmlkZW9fdHJhY2tf
c291cmNlXykpIHt9Ci0KLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEdldEphdmFWaWRl
b0NhcHR1cmVyT2JzZXJ2ZXIoCi0gICAgICBKTklFbnYqIGVudikgb3ZlcnJpZGUgewotICAgIHJl
dHVybiBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4oZW52LCBuYXRpdmVfY2FwdHVyZXJfb2Jz
ZXJ2ZXJfKTsKLSAgfQotCi0gIC8vIERlbGVnYXRlIFZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2Ug
bWV0aG9kcyB0byBhbmRyb2lkX3ZpZGVvX3RyYWNrX3NvdXJjZV8uCi0gIHZvaWQgUmVnaXN0ZXJP
YnNlcnZlcihPYnNlcnZlckludGVyZmFjZSogb2JzZXJ2ZXIpIG92ZXJyaWRlIHsKLSAgICBhbmRy
b2lkX3ZpZGVvX3RyYWNrX3NvdXJjZV8tPlJlZ2lzdGVyT2JzZXJ2ZXIob2JzZXJ2ZXIpOwotICB9
Ci0KLSAgdm9pZCBVbnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXJJbnRlcmZhY2UqIG9ic2VydmVy
KSBvdmVycmlkZSB7Ci0gICAgYW5kcm9pZF92aWRlb190cmFja19zb3VyY2VfLT5VbnJlZ2lzdGVy
T2JzZXJ2ZXIob2JzZXJ2ZXIpOwotICB9Ci0KLSAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBv
dmVycmlkZSB7Ci0gICAgcmV0dXJuIGFuZHJvaWRfdmlkZW9fdHJhY2tfc291cmNlXy0+c3RhdGUo
KTsKLSAgfQotCi0gIGJvb2wgcmVtb3RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5kcm9p
ZF92aWRlb190cmFja19zb3VyY2VfLT5yZW1vdGUoKTsgfQotCi0gIHZvaWQgQWRkT3JVcGRhdGVT
aW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPFZpZGVvRnJhbWU+KiBzaW5rLAotICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJiB3YW50cykgb3ZlcnJpZGUg
ewotICAgIC8vIFRoZSBtZXRob2QgaXMgZGVmaW5lZCBwcml2YXRlIGluIHRoZSBpbXBsZW1lbnRh
dGlvbiBzbyB3ZSBoYXZlIHRvIGFjY2VzcwotICAgIC8vIGl0IHRocm91Z2ggdGhlIGludGVyZmFj
ZS4uLgotICAgIHN0YXRpY19jYXN0PFZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UqPihhbmRyb2lk
X3ZpZGVvX3RyYWNrX3NvdXJjZV8uZ2V0KCkpCi0gICAgICAgIC0+QWRkT3JVcGRhdGVTaW5rKHNp
bmssIHdhbnRzKTsKLSAgfQotCi0gIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVy
ZmFjZTxWaWRlb0ZyYW1lPiogc2luaykgb3ZlcnJpZGUgewotICAgIC8vIFRoZSBtZXRob2QgaXMg
ZGVmaW5lZCBwcml2YXRlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBzbyB3ZSBoYXZlIHRvIGFjY2Vz
cwotICAgIC8vIGl0IHRocm91Z2ggdGhlIGludGVyZmFjZS4uLgotICAgIHN0YXRpY19jYXN0PFZp
ZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UqPihhbmRyb2lkX3ZpZGVvX3RyYWNrX3NvdXJjZV8uZ2V0
KCkpCi0gICAgICAgIC0+UmVtb3ZlU2luayhzaW5rKTsKLSAgfQotCi0gIGJvb2wgaXNfc2NyZWVu
Y2FzdCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICByZXR1cm4gYW5kcm9pZF92aWRlb190cmFja19z
b3VyY2VfLT5pc19zY3JlZW5jYXN0KCk7Ci0gIH0KLQotICBhYnNsOjpvcHRpb25hbDxib29sPiBu
ZWVkc19kZW5vaXNpbmcoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIGFuZHJvaWRfdmlk
ZW9fdHJhY2tfc291cmNlXy0+bmVlZHNfZGVub2lzaW5nKCk7Ci0gIH0KLQotICBib29sIEdldFN0
YXRzKFN0YXRzKiBzdGF0cykgb3ZlcnJpZGUgewotICAgIC8vIFRoZSBtZXRob2QgaXMgZGVmaW5l
ZCBwcml2YXRlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBzbyB3ZSBoYXZlIHRvIGFjY2VzcwotICAg
IC8vIGl0IHRocm91Z2ggdGhlIGludGVyZmFjZS4uLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
aWRlb1RyYWNrU291cmNlSW50ZXJmYWNlKj4oCi0gICAgICAgICAgICAgICBhbmRyb2lkX3ZpZGVv
X3RyYWNrX3NvdXJjZV8uZ2V0KCkpCi0gICAgICAgIC0+R2V0U3RhdHMoc3RhdHMpOwotICB9Ci0K
LSBwcml2YXRlOgotICBydGM6OnNjb3BlZF9yZWZwdHI8am5pOjpBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZT4gYW5kcm9pZF92aWRlb190cmFja19zb3VyY2VfOwotICBTY29wZWRKYXZhR2xvYmFsUmVm
PGpvYmplY3Q+IG5hdGl2ZV9jYXB0dXJlcl9vYnNlcnZlcl87Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UKLQotcnRjOjpzY29wZWRfcmVmcHRyPEphdmFWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlPiBD
cmVhdGVKYXZhVmlkZW9Tb3VyY2UoCi0gICAgSk5JRW52KiBqbmksCi0gICAgcnRjOjpUaHJlYWQq
IHNpZ25hbGluZ190aHJlYWQsCi0gICAgYm9vbCBpc19zY3JlZW5jYXN0LAotICAgIGJvb2wgYWxp
Z25fdGltZXN0YW1wcykgewotICByZXR1cm4gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxKYXZh
VmlkZW9UcmFja1NvdXJjZUltcGw+KAotICAgICAgam5pLCBzaWduYWxpbmdfdGhyZWFkLCBpc19z
Y3JlZW5jYXN0LCBhbGlnbl90aW1lc3RhbXBzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvbmF0aXZlX2FwaS92aWRlby92aWRlb19zb3VyY2UuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvdmlk
ZW8vdmlkZW9fc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NmYzZThm
NTMzYjM3YjFhZWRjMTVlYjViMDAyODIxOGVjYzM1NTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX2FwaS92aWRlby92aWRlb19zb3VyY2UuaAorKysg
L2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYg
U0RLX0FORFJPSURfTkFUSVZFX0FQSV9WSURFT19WSURFT19TT1VSQ0VfSF8KLSNkZWZpbmUgU0RL
X0FORFJPSURfTkFUSVZFX0FQSV9WSURFT19WSURFT19TT1VSQ0VfSF8KLQotI2luY2x1ZGUgPGpu
aS5oPgotCi0jaW5jbHVkZSAiYXBpL21lZGlhX3N0cmVhbV9pbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJydGNfYmFzZS90aHJlYWQuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2pu
aS9zY29wZWRfamF2YV9yZWYuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIEludGVyZmFj
ZSBmb3IgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIFZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UgYW5k
IHByb3ZpZGVzIGEKLS8vIEphdmEgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZmVlZCBmcmFt
ZXMgdG8gdGhlIHNvdXJjZS4KLWNsYXNzIEphdmFWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIDog
cHVibGljIFZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgLy8gUmV0dXJu
cyBDYXB0dXJlck9ic2VydmVyIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGZlZWQgZnJhbWVz
IHRvIHRoZQotICAvLyB2aWRlbyBzb3VyY2UuCi0gIHZpcnR1YWwgU2NvcGVkSmF2YUxvY2FsUmVm
PGpvYmplY3Q+IEdldEphdmFWaWRlb0NhcHR1cmVyT2JzZXJ2ZXIoCi0gICAgICBKTklFbnYqIGVu
dikgPSAwOwotfTsKLQotLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBKYXZhVmlkZW9UcmFja1Nv
dXJjZUludGVyZmFjZSwKLXJ0Yzo6c2NvcGVkX3JlZnB0cjxKYXZhVmlkZW9UcmFja1NvdXJjZUlu
dGVyZmFjZT4gQ3JlYXRlSmF2YVZpZGVvU291cmNlKAotICAgIEpOSUVudiogZW52LAotICAgIHJ0
Yzo6VGhyZWFkKiBzaWduYWxpbmdfdGhyZWFkLAotICAgIGJvb2wgaXNfc2NyZWVuY2FzdCwKLSAg
ICBib29sIGFsaWduX3RpbWVzdGFtcHMpOwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNl
bmRpZiAgLy8gU0RLX0FORFJPSURfTkFUSVZFX0FQSV9WSURFT19WSURFT19TT1VSQ0VfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL25hdGl2ZV9hcGkvdmlkZW8vd3JhcHBlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvdmlkZW8vd3JhcHBl
ci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhZGRjM2IyNmUzNjIwZjNjY2Vi
NTQ0N2UwZGRjNmFiZTMzNmIwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9uYXRpdmVfYXBpL3ZpZGVvL3dyYXBwZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwz
MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS92aWRlby93cmFwcGVyLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRl
ICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9zY29wZWRfamF2YV9yZWYuaCIKLSNpbmNsdWRl
ICJzZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2ZyYW1lLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS92aWRlb19zaW5rLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1zdGQ6OnVu
aXF1ZV9wdHI8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8VmlkZW9GcmFtZT4+IEphdmFUb05hdGl2
ZVZpZGVvU2luaygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqb2JqZWN0IHZpZGVvX3NpbmspIHsK
LSAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8am5pOjpWaWRlb1NpbmtXcmFwcGVyPigKLSAgICAg
IGpuaSwgSmF2YVBhcmFtUmVmPGpvYmplY3Q+KHZpZGVvX3NpbmspKTsKLX0KLQotU2NvcGVkSmF2
YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YVZpZGVvRnJhbWUoSk5JRW52KiBqbmksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBW
aWRlb0ZyYW1lJiBmcmFtZSkgewotICByZXR1cm4gam5pOjpOYXRpdmVUb0phdmFWaWRlb0ZyYW1l
KGpuaSwgZnJhbWUpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRp
dmVfYXBpL3ZpZGVvL3dyYXBwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV9hcGkvdmlkZW8vd3JhcHBlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzJjZjM0ODA2YThkMjUxN2Y5NGNkMzBjMWI2MTRhMzU1
NTA0ZmMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2
ZV9hcGkvdmlkZW8vd3JhcHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9OQVRJVkVfQVBJX1ZJREVPX1dS
QVBQRVJfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfTkFUSVZFX0FQSV9WSURFT19XUkFQUEVSX0hf
Ci0KLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJhcGkv
bWVkaWFfc3RyZWFtX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgImFwaS92aWRlby92aWRlb19mcmFt
ZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL3Njb3BlZF9qYXZhX3Jl
Zi5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTxWaWRlb0ZyYW1lPiBmcm9tIEphdmEKLS8vIFZpZGVvU2lu
ay4KLXN0ZDo6dW5pcXVlX3B0cjxydGM6OlZpZGVvU2lua0ludGVyZmFjZTxWaWRlb0ZyYW1lPj4g
SmF2YVRvTmF0aXZlVmlkZW9TaW5rKAotICAgIEpOSUVudiogam5pLAotICAgIGpvYmplY3Qgdmlk
ZW9fc2luayk7Ci0KLS8vIENyZWF0ZXMgYSBKYXZhIFZpZGVvRnJhbWUgb2JqZWN0IGZyb20gYSBu
YXRpdmUgVmlkZW9GcmFtZS4gVGhlIHJldHVybmVkCi0vLyBvYmplY3QgaGFzIHRvIGJlIHJlbGVh
c2VkIGJ5IGNhbGxpbmcgcmVsZWFzZS4KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRp
dmVUb0phdmFWaWRlb0ZyYW1lKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmlkZW9GcmFtZSYgZnJhbWUpOwotCi19
ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfTkFUSVZFX0FQ
SV9WSURFT19XUkFQUEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL0RFUFMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVf
dW5pdHRlc3RzL0RFUFMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjUxMDNmYjQ0
YjQyMzk4N2RhMjJkZTljMWZmZjNhN2VjNmNjYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9ERVBTCisrKyAvZGV2L251bGwKQEAg
LTEsNSArMCwwIEBACi1pbmNsdWRlX3J1bGVzID0gWwotICAiK21vZHVsZXMvYXVkaW9fZGV2aWNl
L2luY2x1ZGUvYXVkaW9fZGV2aWNlLmgiLAotICAiK21vZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1
ZGUvbW9ja19hdWRpb190cmFuc3BvcnQuaCIsCi0gICIrc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUi
LAotXQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9hbmRyb2lkX25ldHdvcmtfbW9uaXRvcl91
bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvYW5kcm9pZF9uZXR3b3JrX21vbml0b3JfdW5pdHRl
c3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTdkNDRmYjIzOGRlNGNmZDBk
YTNmMGY5NzgzMTliOTJlOGRmNGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9hbmRyb2lkX25ldHdvcmtfbW9uaXRvcl91bml0dGVz
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAo
YykgMjAxOSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYW5kcm9pZF9uZXR3b3JrX21vbml0
b3IuaCIKLQotI2luY2x1ZGUgInJ0Y19iYXNlL2lwX2FkZHJlc3MuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRleHRfcHJvdmlkZXIuaCIK
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAi
c3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvZmllbGRfdHJpYWwuaCIKLSNpbmNsdWRlICJ0ZXN0L2Zp
ZWxkX3RyaWFsLmgiCi0jaW5jbHVkZSAidGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2Ugd2VicnRj
IHsKLW5hbWVzcGFjZSB0ZXN0IHsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVzdElwdjRBZGRy
ZXNzID0gMHhDMEE4MDAxMTsgIC8vIDE5Mi4xNjguMC4xNwotLy8gVGhlIGZvbGxvd2luZyB0d28g
aXB2NiBhZGRyZXNzZXMgb25seSBkaWZmIGJ5IHRoZSBsYXN0IDY0IGJpdHMuCi1zdGF0aWMgY29u
c3QgY2hhciBrVGVzdElwdjZBZGRyZXNzMVtdID0gIjJhMDA6OGEwMDphMDAwOjExOTA6MDAwMDow
MDAxOjAwMDoyNTIiOwotc3RhdGljIGNvbnN0IGNoYXIga1Rlc3RJcHY2QWRkcmVzczJbXSA9ICIy
YTAwOjhhMDA6YTAwMDoxMTkwOjAwMDA6MDAwMjowMDA6MjUzIjsKLQotam5pOjpOZXR3b3JrSW5m
b3JtYXRpb24gQ3JlYXRlTmV0d29ya0luZm9ybWF0aW9uKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiBpbnRlcmZhY2VfbmFtZSwKLSAgICBqbmk6Ok5ldHdvcmtIYW5kbGUgbmV0d29ya19oYW5kbGUs
Ci0gICAgY29uc3QgcnRjOjpJUEFkZHJlc3MmIGlwX2FkZHJlc3MpIHsKLSAgam5pOjpOZXR3b3Jr
SW5mb3JtYXRpb24gbmV0X2luZm87Ci0gIG5ldF9pbmZvLmludGVyZmFjZV9uYW1lID0gaW50ZXJm
YWNlX25hbWU7Ci0gIG5ldF9pbmZvLmhhbmRsZSA9IG5ldHdvcmtfaGFuZGxlOwotICBuZXRfaW5m
by50eXBlID0gam5pOjpORVRXT1JLX1dJRkk7Ci0gIG5ldF9pbmZvLmlwX2FkZHJlc3Nlcy5wdXNo
X2JhY2soaXBfYWRkcmVzcyk7Ci0gIHJldHVybiBuZXRfaW5mbzsKLX0KLQotcnRjOjpJUEFkZHJl
c3MgR2V0SXBBZGRyZXNzRnJvbUlwdjZTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikgewot
ICBydGM6OklQQWRkcmVzcyBpcHY2OwotICBSVENfQ0hFQ0socnRjOjpJUEZyb21TdHJpbmcoc3Ry
LCAmaXB2NikpOwotICByZXR1cm4gaXB2NjsKLX0KLQotY2xhc3MgQW5kcm9pZE5ldHdvcmtNb25p
dG9yVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgQW5kcm9pZE5l
dHdvcmtNb25pdG9yVGVzdCgpIHsKLSAgICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJl
YWRJZk5lZWRlZCgpOwotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBjb250ZXh0ID0g
dGVzdDo6R2V0QXBwQ29udGV4dEZvclRlc3QoZW52KTsKLSAgICBuZXR3b3JrX21vbml0b3JfID0K
LSAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxqbmk6OkFuZHJvaWROZXR3b3JrTW9uaXRvcj4oZW52
LCBjb250ZXh0KTsKLSAgfQotCi0gIHZvaWQgU2V0VXAoKSB7Ci0gICAgLy8gUmVzZXQgbmV0d29y
ayBtb25pdG9yIHN0YXRlcy4KLSAgICBuZXR3b3JrX21vbml0b3JfLT5TdG9wKCk7Ci0gIH0KLQot
IHByb3RlY3RlZDoKLSAgc3RkOjp1bmlxdWVfcHRyPGpuaTo6QW5kcm9pZE5ldHdvcmtNb25pdG9y
PiBuZXR3b3JrX21vbml0b3JfOwotfTsKLQotVEVTVF9GKEFuZHJvaWROZXR3b3JrTW9uaXRvclRl
c3QsIFRlc3RGaW5kTmV0d29ya0hhbmRsZVVzaW5nSXB2NEFkZHJlc3MpIHsKLSAgam5pOjpOZXR3
b3JrSGFuZGxlIGlwdjRfaGFuZGxlID0gMTAwOwotICBydGM6OklQQWRkcmVzcyBpcHY0X2FkZHJl
c3Moa1Rlc3RJcHY0QWRkcmVzcyk7Ci0gIGpuaTo6TmV0d29ya0luZm9ybWF0aW9uIG5ldF9pbmZv
ID0KLSAgICAgIENyZWF0ZU5ldHdvcmtJbmZvcm1hdGlvbigid2xhbjAiLCBpcHY0X2hhbmRsZSwg
aXB2NF9hZGRyZXNzKTsKLSAgc3RkOjp2ZWN0b3I8am5pOjpOZXR3b3JrSW5mb3JtYXRpb24+IG5l
dF9pbmZvcygxLCBuZXRfaW5mbyk7Ci0gIG5ldHdvcmtfbW9uaXRvcl8tPlNldE5ldHdvcmtJbmZv
cyhuZXRfaW5mb3MpOwotCi0gIGF1dG8gbmV0d29ya19oYW5kbGUgPQotICAgICAgbmV0d29ya19t
b25pdG9yXy0+RmluZE5ldHdvcmtIYW5kbGVGcm9tQWRkcmVzcyhpcHY0X2FkZHJlc3MpOwotCi0g
IEFTU0VSVF9UUlVFKG5ldHdvcmtfaGFuZGxlLmhhc192YWx1ZSgpKTsKLSAgRVhQRUNUX0VRKGlw
djRfaGFuZGxlLCAqbmV0d29ya19oYW5kbGUpOwotfQotCi1URVNUX0YoQW5kcm9pZE5ldHdvcmtN
b25pdG9yVGVzdCwgVGVzdEZpbmROZXR3b3JrSGFuZGxlVXNpbmdGdWxsSXB2NkFkZHJlc3MpIHsK
LSAgam5pOjpOZXR3b3JrSGFuZGxlIGlwdjZfaGFuZGxlID0gMjAwOwotICBydGM6OklQQWRkcmVz
cyBpcHY2X2FkZHJlc3MxID0gR2V0SXBBZGRyZXNzRnJvbUlwdjZTdHJpbmcoa1Rlc3RJcHY2QWRk
cmVzczEpOwotICBydGM6OklQQWRkcmVzcyBpcHY2X2FkZHJlc3MyID0gR2V0SXBBZGRyZXNzRnJv
bUlwdjZTdHJpbmcoa1Rlc3RJcHY2QWRkcmVzczIpOwotICAvLyBTZXQgdXAgYW4gSVB2NiBuZXR3
b3JrLgotICBqbmk6Ok5ldHdvcmtJbmZvcm1hdGlvbiBuZXRfaW5mbyA9Ci0gICAgICBDcmVhdGVO
ZXR3b3JrSW5mb3JtYXRpb24oIndsYW4wIiwgaXB2Nl9oYW5kbGUsIGlwdjZfYWRkcmVzczEpOwot
ICBzdGQ6OnZlY3Rvcjxqbmk6Ok5ldHdvcmtJbmZvcm1hdGlvbj4gbmV0X2luZm9zKDEsIG5ldF9p
bmZvKTsKLSAgbmV0d29ya19tb25pdG9yXy0+U2V0TmV0d29ya0luZm9zKG5ldF9pbmZvcyk7Ci0K
LSAgYXV0byBuZXR3b3JrX2hhbmRsZTEgPQotICAgICAgbmV0d29ya19tb25pdG9yXy0+RmluZE5l
dHdvcmtIYW5kbGVGcm9tQWRkcmVzcyhpcHY2X2FkZHJlc3MxKTsKLSAgYXV0byBuZXR3b3JrX2hh
bmRsZTIgPQotICAgICAgbmV0d29ya19tb25pdG9yXy0+RmluZE5ldHdvcmtIYW5kbGVGcm9tQWRk
cmVzcyhpcHY2X2FkZHJlc3MyKTsKLQotICBBU1NFUlRfVFJVRShuZXR3b3JrX2hhbmRsZTEuaGFz
X3ZhbHVlKCkpOwotICBFWFBFQ1RfRVEoaXB2Nl9oYW5kbGUsICpuZXR3b3JrX2hhbmRsZTEpOwot
ICBFWFBFQ1RfVFJVRSghbmV0d29ya19oYW5kbGUyKTsKLX0KLQotVEVTVF9GKEFuZHJvaWROZXR3
b3JrTW9uaXRvclRlc3QsCi0gICAgICAgVGVzdEZpbmROZXR3b3JrSGFuZGxlSWdub3JpbmdJcHY2
VGVtcG9yYXJ5UGFydCkgewotICBTY29wZWRGaWVsZFRyaWFscyBmaWVsZF90cmlhbHMoCi0gICAg
ICAiV2ViUlRDLUZpbmROZXR3b3JrSGFuZGxlV2l0aG91dElwdjZUZW1wb3JhcnlQYXJ0L0VuYWJs
ZWQvIik7Ci0gIC8vIFN0YXJ0KCkgdXBkYXRlcyB0aGUgc3RhdGVzIGludHJvZHVjZWQgYnkgdGhl
IGZpZWxkIHRyaWFsLgotICBuZXR3b3JrX21vbml0b3JfLT5TdGFydCgpOwotICBqbmk6Ok5ldHdv
cmtIYW5kbGUgaXB2Nl9oYW5kbGUgPSAyMDA7Ci0gIHJ0Yzo6SVBBZGRyZXNzIGlwdjZfYWRkcmVz
czEgPSBHZXRJcEFkZHJlc3NGcm9tSXB2NlN0cmluZyhrVGVzdElwdjZBZGRyZXNzMSk7Ci0gIHJ0
Yzo6SVBBZGRyZXNzIGlwdjZfYWRkcmVzczIgPSBHZXRJcEFkZHJlc3NGcm9tSXB2NlN0cmluZyhr
VGVzdElwdjZBZGRyZXNzMik7Ci0gIC8vIFNldCB1cCBhbiBJUHY2IG5ldHdvcmsuCi0gIGpuaTo6
TmV0d29ya0luZm9ybWF0aW9uIG5ldF9pbmZvID0KLSAgICAgIENyZWF0ZU5ldHdvcmtJbmZvcm1h
dGlvbigid2xhbjAiLCBpcHY2X2hhbmRsZSwgaXB2Nl9hZGRyZXNzMSk7Ci0gIHN0ZDo6dmVjdG9y
PGpuaTo6TmV0d29ya0luZm9ybWF0aW9uPiBuZXRfaW5mb3MoMSwgbmV0X2luZm8pOwotICBuZXR3
b3JrX21vbml0b3JfLT5TZXROZXR3b3JrSW5mb3MobmV0X2luZm9zKTsKLQotICBhdXRvIG5ldHdv
cmtfaGFuZGxlMSA9Ci0gICAgICBuZXR3b3JrX21vbml0b3JfLT5GaW5kTmV0d29ya0hhbmRsZUZy
b21BZGRyZXNzKGlwdjZfYWRkcmVzczEpOwotICBhdXRvIG5ldHdvcmtfaGFuZGxlMiA9Ci0gICAg
ICBuZXR3b3JrX21vbml0b3JfLT5GaW5kTmV0d29ya0hhbmRsZUZyb21BZGRyZXNzKGlwdjZfYWRk
cmVzczIpOwotCi0gIEFTU0VSVF9UUlVFKG5ldHdvcmtfaGFuZGxlMS5oYXNfdmFsdWUoKSk7Ci0g
IEVYUEVDVF9FUShpcHY2X2hhbmRsZSwgKm5ldHdvcmtfaGFuZGxlMSk7Ci0gIEFTU0VSVF9UUlVF
KG5ldHdvcmtfaGFuZGxlMi5oYXNfdmFsdWUoKSk7Ci0gIEVYUEVDVF9FUShpcHY2X2hhbmRsZSwg
Km5ldHdvcmtfaGFuZGxlMik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRl
eHRfcHJvdmlkZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRleHRfcHJvdmlk
ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjNjMDRmYWZlYzI3NzczMDcz
YWUzMDdjN2E0NTc1ZWM3N2VhNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9hcHBsaWNhdGlvbl9jb250ZXh0X3Byb3ZpZGVyLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOSBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRleHRfcHJv
dmlkZXIuaCIKLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9uYXRpdmVfdW5pdHRl
c3RzX2puaS9BcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFt
ZXNwYWNlIHRlc3QgewotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gR2V0QXBwQ29udGV4
dEZvclRlc3QoSk5JRW52KiBqbmkpIHsKLSAgcmV0dXJuIFNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PigKLSAgICAgIGpuaTo6SmF2YV9BcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcl9nZXRBcHBs
aWNhdGlvbkNvbnRleHRGb3JUZXN0KGpuaSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAot
fSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9hcHBsaWNh
dGlvbl9jb250ZXh0X3Byb3ZpZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRl
eHRfcHJvdmlkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhY2UwMmMzMjEz
NDZjZWZmNDU4OWZmNGRlODM2NWY4OTM0NTZkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRleHRfcHJv
dmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTkgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0jaWZuZGVmIFNES19BTkRST0lEX05BVElWRV9VTklUVEVTVFNfQVBQTElDQVRJT05fQ09OVEVY
VF9QUk9WSURFUl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9OQVRJVkVfVU5JVFRFU1RTX0FQUExJ
Q0FUSU9OX0NPTlRFWFRfUFJPVklERVJfSF8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9q
bmkvam5pX2hlbHBlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7
Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBHZXRBcHBDb250ZXh0Rm9yVGVzdChKTklF
bnYqIGpuaSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
Ci0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfTkFUSVZFX1VOSVRURVNUU19BUFBMSUNBVElPTl9D
T05URVhUX1BST1ZJREVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2F1ZGlvX2Rldmlj
ZS9hdWRpb19kZXZpY2VfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2F1ZGlvX2RldmljZS9h
dWRpb19kZXZpY2VfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4
ZGZhZDRhODgxMjhkOTFlNGJlMTcwMDZmYzI3NmNkOGYzZGNiZDMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9hdWRpb19kZXZpY2Uv
YXVkaW9fZGV2aWNlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE2MiArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPG51bWVyaWM+Ci0KLSNpbmNsdWRlICJhcGkvc2NvcGVkX3JlZnB0ci5o
IgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlLmgi
Ci0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9tb2NrX2F1ZGlvX3RyYW5z
cG9ydC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL2NyaXRpY2FsX3NlY3Rpb24uaCIKLSNpbmNsdWRlICJydGNfYmFzZS9ldmVudC5oIgotI2lu
Y2x1ZGUgInJ0Y19iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1l
X3V0aWxzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX25hdGl2ZV91bml0dGVz
dHNfam5pL0J1aWxkSW5mb19qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBp
L2F1ZGlvX2RldmljZV9tb2R1bGUvYXVkaW9fZGV2aWNlX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2FwcGxpY2F0aW9uX2NvbnRleHRfcHJvdmlkZXIu
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hdWRpb19jb21t
b24uaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hdWRpb19k
ZXZpY2VfbW9kdWxlLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZp
Y2Uvb3BlbnNsZXNfY29tbW9uLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlf
aGVscGVycy5oIgotI2luY2x1ZGUgInRlc3QvZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0L2d0ZXN0
LmgiCi0jaW5jbHVkZSAidGVzdC90ZXN0c3VwcG9ydC9maWxlX3V0aWxzLmgiCi0KLXVzaW5nIHN0
ZDo6Y291dDsKLXVzaW5nIHN0ZDo6ZW5kbDsKLXVzaW5nIDo6dGVzdGluZzo6XzsKLXVzaW5nIDo6
dGVzdGluZzo6QXRMZWFzdDsKLXVzaW5nIDo6dGVzdGluZzo6R3Q7Ci11c2luZyA6OnRlc3Rpbmc6
Okludm9rZTsKLXVzaW5nIDo6dGVzdGluZzo6TmljZU1vY2s7Ci11c2luZyA6OnRlc3Rpbmc6Ok5v
dE51bGw7Ci11c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKLQotLy8gI2RlZmluZSBFTkFCTEVfREVC
VUdfUFJJTlRGCi0jaWZkZWYgRU5BQkxFX0RFQlVHX1BSSU5URgotI2RlZmluZSBQUklOVEQoLi4u
KSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pOwotI2Vsc2UKLSNkZWZpbmUgUFJJTlREKC4u
LikgKCh2b2lkKTApCi0jZW5kaWYKLSNkZWZpbmUgUFJJTlQoLi4uKSBmcHJpbnRmKHN0ZGVyciwg
X19WQV9BUkdTX18pOwotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotbmFtZXNwYWNlIGpuaSB7Ci0K
LS8vIE51bWJlciBvZiBjYWxsYmFja3MgKGlucHV0IG9yIG91dHB1dCkgdGhlIHRlc3RzIHdhaXRz
IGZvciBiZWZvcmUgd2Ugc2V0Ci0vLyBhbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRlc3Qg
d2FzIE9LLgotc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtQ2FsbGJhY2tzID0gMTA7Ci0vLyBNYXgg
YW1vdW50IG9mIHRpbWUgd2Ugd2FpdCBmb3IgYW4gZXZlbnQgdG8gYmUgc2V0IHdoaWxlIGNvdW50
aW5nIGNhbGxiYWNrcy4KLXN0YXRpYyBjb25zdCBpbnQga1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29u
ZHMgPSAxMCAqIDEwMDA7Ci0vLyBBdmVyYWdlIG51bWJlciBvZiBhdWRpbyBjYWxsYmFja3MgcGVy
IHNlY29uZCBhc3N1bWluZyAxMG1zIHBhY2tldCBzaXplLgotc3RhdGljIGNvbnN0IHNpemVfdCBr
TnVtQ2FsbGJhY2tzUGVyU2Vjb25kID0gMTAwOwotLy8gUGxheSBvdXQgYSB0ZXN0IGZpbGUgZHVy
aW5nIHRoaXMgdGltZSAodW5pdCBpcyBpbiBzZWNvbmRzKS4KLXN0YXRpYyBjb25zdCBpbnQga0Zp
bGVQbGF5VGltZUluU2VjID0gNTsKLXN0YXRpYyBjb25zdCBzaXplX3Qga0JpdHNQZXJTYW1wbGUg
PSAxNjsKLXN0YXRpYyBjb25zdCBzaXplX3Qga0J5dGVzUGVyU2FtcGxlID0ga0JpdHNQZXJTYW1w
bGUgLyA4OwotLy8gUnVuIHRoZSBmdWxsLWR1cGxleCB0ZXN0IGR1cmluZyB0aGlzIHRpbWUgKHVu
aXQgaXMgaW4gc2Vjb25kcykuCi0vLyBOb3RlIHRoYXQgZmlyc3QgfGtOdW1JZ25vcmVGaXJzdENh
bGxiYWNrc3wgYXJlIGlnbm9yZWQuCi1zdGF0aWMgY29uc3QgaW50IGtGdWxsRHVwbGV4VGltZUlu
U2VjID0gNTsKLS8vIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBzZXF1ZW5jZSB0byBzdGFiaWxpemUg
YnkgaWdub3JpbmcgdGhpcyBhbW91bnQgb2YgdGhlCi0vLyBpbml0aWFsIGNhbGxiYWNrcyAoYXZv
aWRzIGluaXRpYWwgRklGTyBhY2Nlc3MpLgotLy8gT25seSB1c2VkIGluIHRoZSBSdW5QbGF5b3V0
QW5kUmVjb3JkaW5nSW5GdWxsRHVwbGV4IHRlc3QuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1J
Z25vcmVGaXJzdENhbGxiYWNrcyA9IDUwOwotLy8gU2V0cyB0aGUgbnVtYmVyIG9mIGltcHVsc2Vz
IHBlciBzZWNvbmQgaW4gdGhlIGxhdGVuY3kgdGVzdC4KLXN0YXRpYyBjb25zdCBpbnQga0ltcHVs
c2VGcmVxdWVuY3lJbkh6ID0gMTsKLS8vIExlbmd0aCBvZiByb3VuZC10cmlwIGxhdGVuY3kgbWVh
c3VyZW1lbnRzLiBOdW1iZXIgb2YgdHJhbnNtaXR0ZWQgaW1wdWxzZXMKLS8vIGlzIGtJbXB1bHNl
RnJlcXVlbmN5SW5IeiAqIGtNZWFzdXJlTGF0ZW5jeVRpbWVJblNlYyAtIDEuCi1zdGF0aWMgY29u
c3QgaW50IGtNZWFzdXJlTGF0ZW5jeVRpbWVJblNlYyA9IDExOwotLy8gVXRpbGl6ZWQgaW4gcm91
bmQtdHJpcCBsYXRlbmN5IG1lYXN1cmVtZW50cyB0byBhdm9pZCBjYXB0dXJpbmcgbm9pc2Ugc2Ft
cGxlcy4KLXN0YXRpYyBjb25zdCBpbnQga0ltcHVsc2VUaHJlc2hvbGQgPSAxMDAwOwotc3RhdGlj
IGNvbnN0IGNoYXIga1RhZ1tdID0gIlsuLi4uLi4uLi4uXSAiOwotCi1lbnVtIFRyYW5zcG9ydFR5
cGUgewotICBrUGxheW91dCA9IDB4MSwKLSAga1JlY29yZGluZyA9IDB4MiwKLX07Ci0KLS8vIElu
dGVyZmFjZSBmb3IgcHJvY2Vzc2luZyB0aGUgYXVkaW8gc3RyZWFtLiBSZWFsIGltcGxlbWVudGF0
aW9ucyBjYW4gZS5nLgotLy8gcnVuIGF1ZGlvIGluIGxvb3BiYWNrLCByZWFkIGF1ZGlvIGZyb20g
YSBmaWxlIG9yIHBlcmZvcm0gbGF0ZW5jeQotLy8gbWVhc3VyZW1lbnRzLgotY2xhc3MgQXVkaW9T
dHJlYW1JbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIFdyaXRlKGNvbnN0IHZv
aWQqIHNvdXJjZSwgc2l6ZV90IG51bV9mcmFtZXMpID0gMDsKLSAgdmlydHVhbCB2b2lkIFJlYWQo
dm9pZCogZGVzdGluYXRpb24sIHNpemVfdCBudW1fZnJhbWVzKSA9IDA7Ci0KLSBwcm90ZWN0ZWQ6
Ci0gIHZpcnR1YWwgfkF1ZGlvU3RyZWFtSW50ZXJmYWNlKCkge30KLX07Ci0KLS8vIFJlYWRzIGF1
ZGlvIHNhbXBsZXMgZnJvbSBhIFBDTSBmaWxlIHdoZXJlIHRoZSBmaWxlIGlzIHN0b3JlZCBpbiBt
ZW1vcnkgYXQKLS8vIGNvbnN0cnVjdGlvbi4KLWNsYXNzIEZpbGVBdWRpb1N0cmVhbSA6IHB1Ymxp
YyBBdWRpb1N0cmVhbUludGVyZmFjZSB7Ci0gcHVibGljOgotICBGaWxlQXVkaW9TdHJlYW0oc2l6
ZV90IG51bV9jYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
ZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgaW50IHNhbXBsZV9yYXRlKQotICAgICAgOiBm
aWxlX3NpemVfaW5fYnl0ZXNfKDApLCBzYW1wbGVfcmF0ZV8oc2FtcGxlX3JhdGUpLCBmaWxlX3Bv
c18oMCkgewotICAgIGZpbGVfc2l6ZV9pbl9ieXRlc18gPSB0ZXN0OjpHZXRGaWxlU2l6ZShmaWxl
X25hbWUpOwotICAgIHNhbXBsZV9yYXRlXyA9IHNhbXBsZV9yYXRlOwotICAgIEVYUEVDVF9HRShm
aWxlX3NpemVfaW5fY2FsbGJhY2tzKCksIG51bV9jYWxsYmFja3MpCi0gICAgICAgIDw8ICJTaXpl
IG9mIHRlc3QgZmlsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGxhc3QgZHVyaW5nIHRoZSB0ZXN0
LiI7Ci0gICAgY29uc3Qgc2l6ZV90IG51bV8xNmJpdF9zYW1wbGVzID0KLSAgICAgICAgdGVzdDo6
R2V0RmlsZVNpemUoZmlsZV9uYW1lKSAvIGtCeXRlc1BlclNhbXBsZTsKLSAgICBmaWxlXy5yZXNl
dChuZXcgaW50MTZfdFtudW1fMTZiaXRfc2FtcGxlc10pOwotICAgIEZJTEUqIGF1ZGlvX2ZpbGUg
PSBmb3BlbihmaWxlX25hbWUuY19zdHIoKSwgInJiIik7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX2Zp
bGUsIG51bGxwdHIpOwotICAgIHNpemVfdCBudW1fc2FtcGxlc19yZWFkID0KLSAgICAgICAgZnJl
YWQoZmlsZV8uZ2V0KCksIHNpemVvZihpbnQxNl90KSwgbnVtXzE2Yml0X3NhbXBsZXMsIGF1ZGlv
X2ZpbGUpOwotICAgIEVYUEVDVF9FUShudW1fc2FtcGxlc19yZWFkLCBudW1fMTZiaXRfc2FtcGxl
cyk7Ci0gICAgZmNsb3NlKGF1ZGlvX2ZpbGUpOwotICB9Ci0KLSAgLy8gQXVkaW9TdHJlYW1JbnRl
cmZhY2U6OldyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkLgotICB2b2lkIFdyaXRlKGNvbnN0IHZv
aWQqIHNvdXJjZSwgc2l6ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHt9Ci0KLSAgLy8gUmVhZCBz
YW1wbGVzIGZyb20gZmlsZSBzdG9yZWQgaW4gbWVtb3J5IChhdCBjb25zdHJ1Y3Rpb24pIGFuZCBj
b3B5Ci0gIC8vIHxudW1fZnJhbWVzfCAoPD0+IDEwbXMpIHRvIHRoZSB8ZGVzdGluYXRpb258IGJ5
dGUgYnVmZmVyLgotICB2b2lkIFJlYWQodm9pZCogZGVzdGluYXRpb24sIHNpemVfdCBudW1fZnJh
bWVzKSBvdmVycmlkZSB7Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzdGF0aWNfY2FzdDxpbnQx
Nl90Kj4oJmZpbGVfW2ZpbGVfcG9zX10pLAotICAgICAgICAgICBudW1fZnJhbWVzICogc2l6ZW9m
KGludDE2X3QpKTsKLSAgICBmaWxlX3Bvc18gKz0gbnVtX2ZyYW1lczsKLSAgfQotCi0gIGludCBm
aWxlX3NpemVfaW5fc2Vjb25kcygpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihmaWxlX3NpemVfaW5fYnl0ZXNfIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa0J5
dGVzUGVyU2FtcGxlICogc2FtcGxlX3JhdGVfKSk7Ci0gIH0KLSAgc2l6ZV90IGZpbGVfc2l6ZV9p
bl9jYWxsYmFja3MoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZpbGVfc2l6ZV9pbl9zZWNvbmRzKCkg
KiBrTnVtQ2FsbGJhY2tzUGVyU2Vjb25kOwotICB9Ci0KLSBwcml2YXRlOgotICBzaXplX3QgZmls
ZV9zaXplX2luX2J5dGVzXzsKLSAgaW50IHNhbXBsZV9yYXRlXzsKLSAgc3RkOjp1bmlxdWVfcHRy
PGludDE2X3RbXT4gZmlsZV87Ci0gIHNpemVfdCBmaWxlX3Bvc187Ci19OwotCi0vLyBTaW1wbGUg
Zmlyc3QgaW4gZmlyc3Qgb3V0IChGSUZPKSBjbGFzcyB0aGF0IHdyYXBzIGEgbGlzdCBvZiAxNi1i
aXQgYXVkaW8KLS8vIGJ1ZmZlcnMgb2YgZml4ZWQgc2l6ZSBhbmQgYWxsb3dzIFdyaXRlIGFuZCBS
ZWFkIG9wZXJhdGlvbnMuIFRoZSBpZGVhIGlzIHRvCi0vLyBzdG9yZSByZWNvcmRlZCBhdWRpbyBi
dWZmZXJzICh1c2luZyBXcml0ZSkgYW5kIHRoZW4gcmVhZCAodXNpbmcgUmVhZCkgdGhlc2UKLS8v
IHN0b3JlZCBidWZmZXJzIHdpdGggYXMgc2hvcnQgZGVsYXkgYXMgcG9zc2libGUgd2hlbiB0aGUg
YXVkaW8gbGF5ZXIgbmVlZHMKLS8vIGRhdGEgdG8gcGxheSBvdXQuIFRoZSBudW1iZXIgb2YgYnVm
ZmVycyBpbiB0aGUgRklGTyB3aWxsIHN0YWJpbGl6ZSB1bmRlcgotLy8gbm9ybWFsIGNvbmRpdGlv
bnMgc2luY2UgdGhlcmUgd2lsbCBiZSBhIGJhbGFuY2UgYmV0d2VlbiBXcml0ZSBhbmQgUmVhZCBj
YWxscy4KLS8vIFRoZSBjb250YWluZXIgaXMgYSBzdGQ6Omxpc3QgY29udGFpbmVyIGFuZCBhY2Nl
c3MgaXMgcHJvdGVjdGVkIHdpdGggYSBsb2NrCi0vLyBzaW5jZSBib3RoIHNpZGVzIChwbGF5b3V0
IGFuZCByZWNvcmRpbmcpIGFyZSBkcml2ZW4gYnkgaXRzIG93biB0aHJlYWQuCi1jbGFzcyBGaWZv
QXVkaW9TdHJlYW0gOiBwdWJsaWMgQXVkaW9TdHJlYW1JbnRlcmZhY2UgewotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgRmlmb0F1ZGlvU3RyZWFtKHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcikKLSAgICAg
IDogZnJhbWVzX3Blcl9idWZmZXJfKGZyYW1lc19wZXJfYnVmZmVyKSwKLSAgICAgICAgYnl0ZXNf
cGVyX2J1ZmZlcl8oZnJhbWVzX3Blcl9idWZmZXJfICogc2l6ZW9mKGludDE2X3QpKSwKLSAgICAg
ICAgZmlmb18obmV3IEF1ZGlvQnVmZmVyTGlzdCksCi0gICAgICAgIGxhcmdlc3Rfc2l6ZV8oMCks
Ci0gICAgICAgIHRvdGFsX3dyaXR0ZW5fZWxlbWVudHNfKDApLAotICAgICAgICB3cml0ZV9jb3Vu
dF8oMCkgewotICAgIEVYUEVDVF9ORShmaWZvXy5nZXQoKSwgbnVsbHB0cik7Ci0gIH0KLQotICB+
Rmlmb0F1ZGlvU3RyZWFtKCkgeyBGbHVzaCgpOyB9Ci0KLSAgLy8gQWxsb2NhdGUgbmV3IG1lbW9y
eSwgY29weSB8bnVtX2ZyYW1lc3wgc2FtcGxlcyBmcm9tIHxzb3VyY2V8IGludG8gbWVtb3J5Ci0g
IC8vIGFuZCBhZGQgcG9pbnRlciB0byB0aGUgbWVtb3J5IGxvY2F0aW9uIHRvIGVuZCBvZiB0aGUg
bGlzdC4KLSAgLy8gSW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBGSUZPIGJ5IG9uZSBlbGVtZW50
LgotICB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgc2l6ZV90IG51bV9mcmFtZXMpIG92
ZXJyaWRlIHsKLSAgICBBU1NFUlRfRVEobnVtX2ZyYW1lcywgZnJhbWVzX3Blcl9idWZmZXJfKTsK
LSAgICBQUklOVEQoIisiKTsKLSAgICBpZiAod3JpdGVfY291bnRfKysgPCBrTnVtSWdub3JlRmly
c3RDYWxsYmFja3MpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50MTZfdCogbWVtb3J5
ID0gbmV3IGludDE2X3RbZnJhbWVzX3Blcl9idWZmZXJfXTsKLSAgICBtZW1jcHkoc3RhdGljX2Nh
c3Q8aW50MTZfdCo+KCZtZW1vcnlbMF0pLCBzb3VyY2UsIGJ5dGVzX3Blcl9idWZmZXJfKTsKLSAg
ICBydGM6OkNyaXRTY29wZSBsb2NrKCZsb2NrXyk7Ci0gICAgZmlmb18tPnB1c2hfYmFjayhtZW1v
cnkpOwotICAgIGNvbnN0IHNpemVfdCBzaXplID0gZmlmb18tPnNpemUoKTsKLSAgICBpZiAoc2l6
ZSA+IGxhcmdlc3Rfc2l6ZV8pIHsKLSAgICAgIGxhcmdlc3Rfc2l6ZV8gPSBzaXplOwotICAgICAg
UFJJTlREKCIoJSIgUlRDX1BSSXVTICIpIiwgbGFyZ2VzdF9zaXplXyk7Ci0gICAgfQotICAgIHRv
dGFsX3dyaXR0ZW5fZWxlbWVudHNfICs9IHNpemU7Ci0gIH0KLQotICAvLyBSZWFkIHBvaW50ZXIg
dG8gZGF0YSBidWZmZXIgZnJvbSBmcm9udCBvZiBsaXN0LCBjb3B5IHxudW1fZnJhbWVzfCBvZiBz
dG9yZWQKLSAgLy8gZGF0YSBpbnRvIHxkZXN0aW5hdGlvbnwgYW5kIGRlbGV0ZSB0aGUgdXRpbGl6
ZWQgbWVtb3J5IGFsbG9jYXRpb24uCi0gIC8vIERlY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgRklG
TyBieSBvbmUgZWxlbWVudC4KLSAgdm9pZCBSZWFkKHZvaWQqIGRlc3RpbmF0aW9uLCBzaXplX3Qg
bnVtX2ZyYW1lcykgb3ZlcnJpZGUgewotICAgIEFTU0VSVF9FUShudW1fZnJhbWVzLCBmcmFtZXNf
cGVyX2J1ZmZlcl8pOwotICAgIFBSSU5URCgiLSIpOwotICAgIHJ0Yzo6Q3JpdFNjb3BlIGxvY2so
JmxvY2tfKTsKLSAgICBpZiAoZmlmb18tPmVtcHR5KCkpIHsKLSAgICAgIG1lbXNldChkZXN0aW5h
dGlvbiwgMCwgYnl0ZXNfcGVyX2J1ZmZlcl8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBpbnQxNl90
KiBtZW1vcnkgPSBmaWZvXy0+ZnJvbnQoKTsKLSAgICAgIGZpZm9fLT5wb3BfZnJvbnQoKTsKLSAg
ICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc3RhdGljX2Nhc3Q8aW50MTZfdCo+KCZtZW1vcnlbMF0p
LCBieXRlc19wZXJfYnVmZmVyXyk7Ci0gICAgICBkZWxldGUgbWVtb3J5OwotICAgIH0KLSAgfQot
Ci0gIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gZmlmb18tPnNpemUoKTsgfQotCi0gIHNp
emVfdCBsYXJnZXN0X3NpemUoKSBjb25zdCB7IHJldHVybiBsYXJnZXN0X3NpemVfOyB9Ci0KLSAg
c2l6ZV90IGF2ZXJhZ2Vfc2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gKHRvdGFsX3dyaXR0ZW5f
ZWxlbWVudHNfID09IDApCi0gICAgICAgICAgICAgICA/IDAuMAotICAgICAgICAgICAgICAgOiAw
LjUgKyBzdGF0aWNfY2FzdDxmbG9hdD4odG90YWxfd3JpdHRlbl9lbGVtZW50c18pIC8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh3cml0ZV9jb3VudF8gLSBrTnVtSWdub3JlRmlyc3RDYWxs
YmFja3MpOwotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIEZsdXNoKCkgewotICAgIGZvciAoYXV0
byBpdCA9IGZpZm9fLT5iZWdpbigpOyBpdCAhPSBmaWZvXy0+ZW5kKCk7ICsraXQpIHsKLSAgICAg
IGRlbGV0ZSAqaXQ7Ci0gICAgfQotICAgIGZpZm9fLT5jbGVhcigpOwotICB9Ci0KLSAgdXNpbmcg
QXVkaW9CdWZmZXJMaXN0ID0gc3RkOjpsaXN0PGludDE2X3QqPjsKLSAgcnRjOjpDcml0aWNhbFNl
Y3Rpb24gbG9ja187Ci0gIGNvbnN0IHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcl87Ci0gIGNvbnN0
IHNpemVfdCBieXRlc19wZXJfYnVmZmVyXzsKLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvQnVmZmVy
TGlzdD4gZmlmb187Ci0gIHNpemVfdCBsYXJnZXN0X3NpemVfOwotICBzaXplX3QgdG90YWxfd3Jp
dHRlbl9lbGVtZW50c187Ci0gIHNpemVfdCB3cml0ZV9jb3VudF87Ci19OwotCi0vLyBJbnNlcnRz
IHBlcmlvZGljIGltcHVsc2VzIGFuZCBtZWFzdXJlcyB0aGUgbGF0ZW5jeSBiZXR3ZWVuIHRoZSB0
aW1lIG9mCi0vLyB0cmFuc21pc3Npb24gYW5kIHRpbWUgb2YgcmVjZWl2aW5nIHRoZSBzYW1lIGlt
cHVsc2UuCi0vLyBVc2FnZSByZXF1aXJlcyBhIHNwZWNpYWwgaGFyZHdhcmUgY2FsbGVkIEF1ZGlv
IExvb3BiYWNrIERvbmdsZS4KLS8vIFNlZSBodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2Rldmlj
ZXMvYXVkaW8vbG9vcGJhY2suaHRtbCBmb3IgZGV0YWlscy4KLWNsYXNzIExhdGVuY3lNZWFzdXJp
bmdBdWRpb1N0cmVhbSA6IHB1YmxpYyBBdWRpb1N0cmVhbUludGVyZmFjZSB7Ci0gcHVibGljOgot
ICBleHBsaWNpdCBMYXRlbmN5TWVhc3VyaW5nQXVkaW9TdHJlYW0oc2l6ZV90IGZyYW1lc19wZXJf
YnVmZmVyKQotICAgICAgOiBmcmFtZXNfcGVyX2J1ZmZlcl8oZnJhbWVzX3Blcl9idWZmZXIpLAot
ICAgICAgICBieXRlc19wZXJfYnVmZmVyXyhmcmFtZXNfcGVyX2J1ZmZlcl8gKiBzaXplb2YoaW50
MTZfdCkpLAotICAgICAgICBwbGF5X2NvdW50XygwKSwKLSAgICAgICAgcmVjX2NvdW50XygwKSwK
LSAgICAgICAgcHVsc2VfdGltZV8oMCkge30KLQotICAvLyBJbnNlcnQgcGVyaW9kaWMgaW1wdWxz
ZXMgaW4gZmlyc3QgdHdvIHNhbXBsZXMgb2YgfGRlc3RpbmF0aW9ufC4KLSAgdm9pZCBSZWFkKHZv
aWQqIGRlc3RpbmF0aW9uLCBzaXplX3QgbnVtX2ZyYW1lcykgb3ZlcnJpZGUgewotICAgIEFTU0VS
VF9FUShudW1fZnJhbWVzLCBmcmFtZXNfcGVyX2J1ZmZlcl8pOwotICAgIGlmIChwbGF5X2NvdW50
XyA9PSAwKSB7Ci0gICAgICBQUklOVCgiWyIpOwotICAgIH0KLSAgICBwbGF5X2NvdW50XysrOwot
ICAgIG1lbXNldChkZXN0aW5hdGlvbiwgMCwgYnl0ZXNfcGVyX2J1ZmZlcl8pOwotICAgIGlmIChw
bGF5X2NvdW50XyAlIChrTnVtQ2FsbGJhY2tzUGVyU2Vjb25kIC8ga0ltcHVsc2VGcmVxdWVuY3lJ
bkh6KSA9PSAwKSB7Ci0gICAgICBpZiAocHVsc2VfdGltZV8gPT0gMCkgewotICAgICAgICBwdWxz
ZV90aW1lXyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICAgICAgfQotICAgICAgUFJJTlQoIi4iKTsK
LSAgICAgIGNvbnN0IGludDE2X3QgaW1wdWxzZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZf
dD46Om1heCgpOwotICAgICAgaW50MTZfdCogcHRyMTYgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4o
ZGVzdGluYXRpb24pOwotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAg
ICAgICAgcHRyMTZbaV0gPSBpbXB1bHNlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERl
dGVjdCByZWNlaXZlZCBpbXB1bHNlcyBpbiB8c291cmNlfCwgZGVyaXZlIHRpbWUgYmV0d2VlbiB0
cmFuc21pc3Npb24gYW5kCi0gIC8vIGRldGVjdGlvbiBhbmQgYWRkIHRoZSBjYWxjdWxhdGVkIGRl
bGF5IHRvIGxpc3Qgb2YgbGF0ZW5jaWVzLgotICB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJj
ZSwgc2l6ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHsKLSAgICBBU1NFUlRfRVEobnVtX2ZyYW1l
cywgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgICByZWNfY291bnRfKys7Ci0gICAgaWYgKHB1bHNl
X3RpbWVfID09IDApIHsKLSAgICAgIC8vIEF2b2lkIGRldGVjdGlvbiBvZiBuZXcgaW1wdWxzZSBy
ZXNwb25zZSB1bnRpbCBhIG5ldyBpbXB1bHNlIGhhcwotICAgICAgLy8gYmVlbiB0cmFuc21pdHRl
ZCAoc2V0cyB8cHVsc2VfdGltZV98IHRvIHZhbHVlIGxhcmdlciB0aGFuIHplcm8pLgotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBpbnQxNl90KiBwdHIxNiA9IHN0YXRpY19jYXN0PGNv
bnN0IGludDE2X3QqPihzb3VyY2UpOwotICAgIHN0ZDo6dmVjdG9yPGludDE2X3Q+IHZlYyhwdHIx
NiwgcHRyMTYgKyBudW1fZnJhbWVzKTsKLSAgICAvLyBGaW5kIG1heCB2YWx1ZSBpbiB0aGUgYXVk
aW8gYnVmZmVyLgotICAgIGludCBtYXggPSAqc3RkOjptYXhfZWxlbWVudCh2ZWMuYmVnaW4oKSwg
dmVjLmVuZCgpKTsKLSAgICAvLyBGaW5kIGluZGV4IChlbGVtZW50IHBvc2l0aW9uIGluIHZlY3Rv
cikgb2YgdGhlIG1heCBlbGVtZW50LgotICAgIGludCBpbmRleF9vZl9tYXggPQotICAgICAgICBz
dGQ6OmRpc3RhbmNlKHZlYy5iZWdpbigpLCBzdGQ6OmZpbmQodmVjLmJlZ2luKCksIHZlYy5lbmQo
KSwgbWF4KSk7Ci0gICAgaWYgKG1heCA+IGtJbXB1bHNlVGhyZXNob2xkKSB7Ci0gICAgICBQUklO
VEQoIiglZCwlZCkiLCBtYXgsIGluZGV4X29mX21heCk7Ci0gICAgICBpbnQ2NF90IG5vd190aW1l
ID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gICAgICBpbnQgZXh0cmFfZGVsYXkgPSBJbmRleFRvTWls
bGlzZWNvbmRzKHN0YXRpY19jYXN0PGRvdWJsZT4oaW5kZXhfb2ZfbWF4KSk7Ci0gICAgICBQUklO
VEQoIlslZF0iLCBzdGF0aWNfY2FzdDxpbnQ+KG5vd190aW1lIC0gcHVsc2VfdGltZV8pKTsKLSAg
ICAgIFBSSU5URCgiWyVkXSIsIGV4dHJhX2RlbGF5KTsKLSAgICAgIC8vIFRvdGFsIGxhdGVuY3kg
aXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0cmFuc21pdCB0aW1lIGFuZCBkZXRlY3Rpb24KLSAg
ICAgIC8vIHRvbWUgcGx1cyB0aGUgZXh0cmEgZGVsYXkgd2l0aGluIHRoZSBidWZmZXIgaW4gd2hp
Y2ggd2UgZGV0ZWN0ZWQgdGhlCi0gICAgICAvLyByZWNlaXZlZCBpbXB1bHNlLiBJdCBpcyB0cmFu
c21pdHRlZCBhdCBzYW1wbGUgMCBidXQgY2FuIGJlIHJlY2VpdmVkCi0gICAgICAvLyBhdCBzYW1w
bGUgTiB3aGVyZSBOID4gMC4gVGhlIHRlcm0gfGV4dHJhX2RlbGF5fCBhY2NvdW50cyBmb3IgTiBh
bmQgaXQKLSAgICAgIC8vIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMG1zLgotICAgICAgbGF0
ZW5jaWVzXy5wdXNoX2JhY2sobm93X3RpbWUgLSBwdWxzZV90aW1lXyArIGV4dHJhX2RlbGF5KTsK
LSAgICAgIHB1bHNlX3RpbWVfID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgUFJJTlREKCItIik7
Ci0gICAgfQotICB9Ci0KLSAgc2l6ZV90IG51bV9sYXRlbmN5X3ZhbHVlcygpIGNvbnN0IHsgcmV0
dXJuIGxhdGVuY2llc18uc2l6ZSgpOyB9Ci0KLSAgaW50IG1pbl9sYXRlbmN5KCkgY29uc3Qgewot
ICAgIGlmIChsYXRlbmNpZXNfLmVtcHR5KCkpCi0gICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
KnN0ZDo6bWluX2VsZW1lbnQobGF0ZW5jaWVzXy5iZWdpbigpLCBsYXRlbmNpZXNfLmVuZCgpKTsK
LSAgfQotCi0gIGludCBtYXhfbGF0ZW5jeSgpIGNvbnN0IHsKLSAgICBpZiAobGF0ZW5jaWVzXy5l
bXB0eSgpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICpzdGQ6Om1heF9lbGVtZW50KGxh
dGVuY2llc18uYmVnaW4oKSwgbGF0ZW5jaWVzXy5lbmQoKSk7Ci0gIH0KLQotICBpbnQgYXZlcmFn
ZV9sYXRlbmN5KCkgY29uc3QgewotICAgIGlmIChsYXRlbmNpZXNfLmVtcHR5KCkpCi0gICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gMC41ICsgc3RhdGljX2Nhc3Q8ZG91YmxlPigKLSAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6YWNjdW11bGF0ZShsYXRlbmNpZXNfLmJlZ2luKCksIGxhdGVuY2ll
c18uZW5kKCksIDApKSAvCi0gICAgICAgICAgICAgICAgICAgICBsYXRlbmNpZXNfLnNpemUoKTsK
LSAgfQotCi0gIHZvaWQgUHJpbnRSZXN1bHRzKCkgY29uc3QgewotICAgIFBSSU5UKCJdICIpOwot
ICAgIGZvciAoYXV0byBpdCA9IGxhdGVuY2llc18uYmVnaW4oKTsgaXQgIT0gbGF0ZW5jaWVzXy5l
bmQoKTsgKytpdCkgewotICAgICAgUFJJTlQoIiVkICIsICppdCk7Ci0gICAgfQotICAgIFBSSU5U
KCJcbiIpOwotICAgIFBSSU5UKCIlc1ttaW4sIG1heCwgYXZnXT1bJWQsICVkLCAlZF0gbXNcbiIs
IGtUYWcsIG1pbl9sYXRlbmN5KCksCi0gICAgICAgICAgbWF4X2xhdGVuY3koKSwgYXZlcmFnZV9s
YXRlbmN5KCkpOwotICB9Ci0KLSAgaW50IEluZGV4VG9NaWxsaXNlY29uZHMoZG91YmxlIGluZGV4
KSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMTAuMCAqIChpbmRleCAvIGZy
YW1lc19wZXJfYnVmZmVyXykgKyAwLjUpOwotICB9Ci0KLSBwcml2YXRlOgotICBjb25zdCBzaXpl
X3QgZnJhbWVzX3Blcl9idWZmZXJfOwotICBjb25zdCBzaXplX3QgYnl0ZXNfcGVyX2J1ZmZlcl87
Ci0gIHNpemVfdCBwbGF5X2NvdW50XzsKLSAgc2l6ZV90IHJlY19jb3VudF87Ci0gIGludDY0X3Qg
cHVsc2VfdGltZV87Ci0gIHN0ZDo6dmVjdG9yPGludD4gbGF0ZW5jaWVzXzsKLX07Ci0KLS8vIE1v
Y2tzIHRoZSBBdWRpb1RyYW5zcG9ydCBvYmplY3QgYW5kIHByb3hpZXMgYWN0aW9ucyBmb3IgdGhl
IHR3byBjYWxsYmFja3MKLS8vIChSZWNvcmRlZERhdGFJc0F2YWlsYWJsZSBhbmQgTmVlZE1vcmVQ
bGF5RGF0YSkgdG8gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucwotLy8gb2YgQXVkaW9TdHJlYW1J
bnRlcmZhY2UuCi1jbGFzcyBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIDogcHVibGljIHRlc3Q6
Ok1vY2tBdWRpb1RyYW5zcG9ydCB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNb2NrQXVkaW9UcmFu
c3BvcnRBbmRyb2lkKGludCB0eXBlKQotICAgICAgOiBudW1fY2FsbGJhY2tzXygwKSwKLSAgICAg
ICAgdHlwZV8odHlwZSksCi0gICAgICAgIHBsYXlfY291bnRfKDApLAotICAgICAgICByZWNfY291
bnRfKDApLAotICAgICAgICBhdWRpb19zdHJlYW1fKG51bGxwdHIpIHt9Ci0KLSAgdmlydHVhbCB+
TW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZCgpIHt9Ci0KLSAgLy8gU2V0IGRlZmF1bHQgYWN0aW9u
cyBvZiB0aGUgbW9jayBvYmplY3QuIFdlIGFyZSBkZWxlZ2F0aW5nIHRvIGZha2UKLSAgLy8gaW1w
bGVtZW50YXRpb25zIChvZiBBdWRpb1N0cmVhbUludGVyZmFjZSkgaGVyZS4KLSAgdm9pZCBIYW5k
bGVDYWxsYmFja3MocnRjOjpFdmVudCogdGVzdF9pc19kb25lLAotICAgICAgICAgICAgICAgICAg
ICAgICBBdWRpb1N0cmVhbUludGVyZmFjZSogYXVkaW9fc3RyZWFtLAotICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbnVtX2NhbGxiYWNrcykgewotICAgIHRlc3RfaXNfZG9uZV8gPSB0ZXN0X2lz
X2RvbmU7Ci0gICAgYXVkaW9fc3RyZWFtXyA9IGF1ZGlvX3N0cmVhbTsKLSAgICBudW1fY2FsbGJh
Y2tzXyA9IG51bV9jYWxsYmFja3M7Ci0gICAgaWYgKHBsYXlfbW9kZSgpKSB7Ci0gICAgICBPTl9D
QUxMKCp0aGlzLCBOZWVkTW9yZVBsYXlEYXRhKF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8pKQotICAg
ICAgICAgIC5XaWxsQnlEZWZhdWx0KAotICAgICAgICAgICAgICBJbnZva2UodGhpcywgJk1vY2tB
dWRpb1RyYW5zcG9ydEFuZHJvaWQ6OlJlYWxOZWVkTW9yZVBsYXlEYXRhKSk7Ci0gICAgfQotICAg
IGlmIChyZWNfbW9kZSgpKSB7Ci0gICAgICBPTl9DQUxMKCp0aGlzLCBSZWNvcmRlZERhdGFJc0F2
YWlsYWJsZShfLCBfLCBfLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSkKLSAgICAgICAgICAuV2lsbEJ5
RGVmYXVsdChJbnZva2UoCi0gICAgICAgICAgICAgIHRoaXMsICZNb2NrQXVkaW9UcmFuc3BvcnRB
bmRyb2lkOjpSZWFsUmVjb3JkZWREYXRhSXNBdmFpbGFibGUpKTsKLSAgICB9Ci0gIH0KLQotICBp
bnQzMl90IFJlYWxSZWNvcmRlZERhdGFJc0F2YWlsYWJsZShjb25zdCB2b2lkKiBhdWRpb1NhbXBs
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBu
U2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6
ZV90IG5CeXRlc1BlclNhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IG5DaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdWludDMyX3Qgc2FtcGxlc1BlclNlYywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgdG90YWxEZWxheU1TLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNsb2NrRHJpZnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGN1
cnJlbnRNaWNMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgYm9vbCBrZXlQcmVzc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50MzJfdCYgbmV3TWljTGV2ZWwpIHsKLSAgICBFWFBFQ1RfVFJVRShyZWNfbW9k
ZSgpKSA8PCAiTm8gdGVzdCBpcyBleHBlY3RpbmcgdGhlc2UgY2FsbGJhY2tzLiI7Ci0gICAgcmVj
X2NvdW50XysrOwotICAgIC8vIFByb2Nlc3MgdGhlIHJlY29yZGVkIGF1ZGlvIHN0cmVhbSBpZiBh
biBBdWRpb1N0cmVhbUludGVyZmFjZQotICAgIC8vIGltcGxlbWVudGF0aW9uIGV4aXN0cy4KLSAg
ICBpZiAoYXVkaW9fc3RyZWFtXykgewotICAgICAgYXVkaW9fc3RyZWFtXy0+V3JpdGUoYXVkaW9T
YW1wbGVzLCBuU2FtcGxlcyk7Ci0gICAgfQotICAgIGlmIChSZWNlaXZlZEVub3VnaENhbGxiYWNr
cygpKSB7Ci0gICAgICB0ZXN0X2lzX2RvbmVfLT5TZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci0gIH0KLQotICBpbnQzMl90IFJlYWxOZWVkTW9yZVBsYXlEYXRhKGNvbnN0IHNpemVfdCBuU2Ft
cGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbkJ5dGVz
UGVyU2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBu
Q2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qg
c2FtcGxlc1BlclNlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdWRp
b1NhbXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90JiBuU2FtcGxl
c091dCwgIC8vIE5PTElOVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3Qq
IGVsYXBzZWRfdGltZV9tcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90
KiBudHBfdGltZV9tcykgewotICAgIEVYUEVDVF9UUlVFKHBsYXlfbW9kZSgpKSA8PCAiTm8gdGVz
dCBpcyBleHBlY3RpbmcgdGhlc2UgY2FsbGJhY2tzLiI7Ci0gICAgcGxheV9jb3VudF8rKzsKLSAg
ICBuU2FtcGxlc091dCA9IG5TYW1wbGVzOwotICAgIC8vIFJlYWQgKHBvc3NpYmx5IHByb2Nlc3Nl
ZCkgYXVkaW8gc3RyZWFtIHNhbXBsZXMgdG8gYmUgcGxheWVkIG91dCBpZiBhbgotICAgIC8vIEF1
ZGlvU3RyZWFtSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIGV4aXN0cy4KLSAgICBpZiAoYXVkaW9f
c3RyZWFtXykgewotICAgICAgYXVkaW9fc3RyZWFtXy0+UmVhZChhdWRpb1NhbXBsZXMsIG5TYW1w
bGVzKTsKLSAgICB9Ci0gICAgaWYgKFJlY2VpdmVkRW5vdWdoQ2FsbGJhY2tzKCkpIHsKLSAgICAg
IHRlc3RfaXNfZG9uZV8tPlNldCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGJv
b2wgUmVjZWl2ZWRFbm91Z2hDYWxsYmFja3MoKSB7Ci0gICAgYm9vbCByZWNvcmRpbmdfZG9uZSA9
IGZhbHNlOwotICAgIGlmIChyZWNfbW9kZSgpKQotICAgICAgcmVjb3JkaW5nX2RvbmUgPSByZWNf
Y291bnRfID49IG51bV9jYWxsYmFja3NfOwotICAgIGVsc2UKLSAgICAgIHJlY29yZGluZ19kb25l
ID0gdHJ1ZTsKLQotICAgIGJvb2wgcGxheW91dF9kb25lID0gZmFsc2U7Ci0gICAgaWYgKHBsYXlf
bW9kZSgpKQotICAgICAgcGxheW91dF9kb25lID0gcGxheV9jb3VudF8gPj0gbnVtX2NhbGxiYWNr
c187Ci0gICAgZWxzZQotICAgICAgcGxheW91dF9kb25lID0gdHJ1ZTsKLQotICAgIHJldHVybiBy
ZWNvcmRpbmdfZG9uZSAmJiBwbGF5b3V0X2RvbmU7Ci0gIH0KLQotICBib29sIHBsYXlfbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGVfICYga1BsYXlvdXQ7IH0KLSAgYm9vbCByZWNfbW9kZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGVfICYga1JlY29yZGluZzsgfQotCi0gcHJpdmF0ZToKLSAgcnRjOjpF
dmVudCogdGVzdF9pc19kb25lXzsKLSAgc2l6ZV90IG51bV9jYWxsYmFja3NfOwotICBpbnQgdHlw
ZV87Ci0gIHNpemVfdCBwbGF5X2NvdW50XzsKLSAgc2l6ZV90IHJlY19jb3VudF87Ci0gIEF1ZGlv
U3RyZWFtSW50ZXJmYWNlKiBhdWRpb19zdHJlYW1fOwotICBzdGQ6OnVuaXF1ZV9wdHI8TGF0ZW5j
eU1lYXN1cmluZ0F1ZGlvU3RyZWFtPiBsYXRlbmN5X2F1ZGlvX3N0cmVhbV87Ci19OwotCi0vLyBB
dWRpb0RldmljZVRlc3QgdGVzdCBmaXh0dXJlLgotY2xhc3MgQXVkaW9EZXZpY2VUZXN0IDogcHVi
bGljIDo6dGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBBdWRpb0RldmljZVRlc3QoKSB7
Ci0gICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgSlZNIGFuZCBhcHBsaWNhdGlvbiBj
b250ZXh0LiBFbnN1cmVzIHRoYXQgd2UKLSAgICAvLyBjYW4gZG8gY2FsbHMgYmV0d2VlbiBDKysg
YW5kIEphdmEuIEluaXRpYWxpemVzIGJvdGggSmF2YSBhbmQgT3BlblNMIEVTCi0gICAgLy8gaW1w
bGVtZW50YXRpb25zLgotICAgIC8vIENyZWF0ZXMgYW4gYXVkaW8gZGV2aWNlIHVzaW5nIGEgZGVm
YXVsdCBhdWRpbyBsYXllci4KLSAgICBqbmlfID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
KCk7Ci0gICAgY29udGV4dF8gPSB0ZXN0OjpHZXRBcHBDb250ZXh0Rm9yVGVzdChqbmlfKTsKLSAg
ICBhdWRpb19kZXZpY2VfID0gQ3JlYXRlSmF2YUF1ZGlvRGV2aWNlTW9kdWxlKGpuaV8sIGNvbnRl
eHRfLm9iaigpKTsKLSAgICBFWFBFQ1RfTkUoYXVkaW9fZGV2aWNlXy5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZV8tPkluaXQoKSk7Ci0gICAgYXVkaW9fbWFu
YWdlcl8gPSBHZXRBdWRpb01hbmFnZXIoam5pXywgY29udGV4dF8pOwotICAgIFVwZGF0ZVBhcmFt
ZXRlcnMoKTsKLSAgfQotICB2aXJ0dWFsIH5BdWRpb0RldmljZVRlc3QoKSB7IEVYUEVDVF9FUSgw
LCBhdWRpb19kZXZpY2VfLT5UZXJtaW5hdGUoKSk7IH0KLQotICBpbnQgdG90YWxfZGVsYXlfbXMo
KSBjb25zdCB7IHJldHVybiAxMDsgfQotCi0gIHZvaWQgVXBkYXRlUGFyYW1ldGVycygpIHsKLSAg
ICBpbnQgaW5wdXRfc2FtcGxlX3JhdGUgPSBHZXREZWZhdWx0U2FtcGxlUmF0ZShqbmlfLCBhdWRp
b19tYW5hZ2VyXyk7Ci0gICAgaW50IG91dHB1dF9zYW1wbGVfcmF0ZSA9IEdldERlZmF1bHRTYW1w
bGVSYXRlKGpuaV8sIGF1ZGlvX21hbmFnZXJfKTsKLSAgICBib29sIHN0ZXJlb19wbGF5b3V0X2lz
X2F2YWlsYWJsZTsKLSAgICBib29sIHN0ZXJlb19yZWNvcmRfaXNfYXZhaWxhYmxlOwotICAgIGF1
ZGlvX2RldmljZV8tPlN0ZXJlb1BsYXlvdXRJc0F2YWlsYWJsZSgmc3RlcmVvX3BsYXlvdXRfaXNf
YXZhaWxhYmxlKTsKLSAgICBhdWRpb19kZXZpY2VfLT5TdGVyZW9SZWNvcmRpbmdJc0F2YWlsYWJs
ZSgmc3RlcmVvX3JlY29yZF9pc19hdmFpbGFibGUpOwotICAgIEdldEF1ZGlvUGFyYW1ldGVycyhq
bmlfLCBjb250ZXh0XywgYXVkaW9fbWFuYWdlcl8sIGlucHV0X3NhbXBsZV9yYXRlLAotICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRfc2FtcGxlX3JhdGUsIHN0ZXJlb19wbGF5b3V0X2lzX2F2
YWlsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVvX3JlY29yZF9pc19hdmFpbGFi
bGUsICZpbnB1dF9wYXJhbWV0ZXJzXywKLSAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dF9w
YXJhbWV0ZXJzXyk7Ci0gIH0KLQotICB2b2lkIFNldEFjdGl2ZUF1ZGlvTGF5ZXIoQXVkaW9EZXZp
Y2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXIpIHsKLSAgICBhdWRpb19kZXZpY2VfID0g
Q3JlYXRlQXVkaW9EZXZpY2UoYXVkaW9fbGF5ZXIpOwotICAgIEVYUEVDVF9ORShhdWRpb19kZXZp
Y2VfLmdldCgpLCBudWxscHRyKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlXy0+SW5p
dCgpKTsKLSAgICBVcGRhdGVQYXJhbWV0ZXJzKCk7Ci0gIH0KLQotICBpbnQgcGxheW91dF9zYW1w
bGVfcmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG91dHB1dF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgp
OyB9Ci0gIGludCByZWNvcmRfc2FtcGxlX3JhdGUoKSBjb25zdCB7IHJldHVybiBpbnB1dF9wYXJh
bWV0ZXJzXy5zYW1wbGVfcmF0ZSgpOyB9Ci0gIHNpemVfdCBwbGF5b3V0X2NoYW5uZWxzKCkgY29u
c3QgeyByZXR1cm4gb3V0cHV0X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7IH0KLSAgc2l6ZV90IHJl
Y29yZF9jaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIGlucHV0X3BhcmFtZXRlcnNfLmNoYW5uZWxz
KCk7IH0KLSAgc2l6ZV90IHBsYXlvdXRfZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpIGNvbnN0IHsK
LSAgICByZXR1cm4gb3V0cHV0X3BhcmFtZXRlcnNfLmZyYW1lc19wZXJfMTBtc19idWZmZXIoKTsK
LSAgfQotICBzaXplX3QgcmVjb3JkX2ZyYW1lc19wZXJfMTBtc19idWZmZXIoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIGlucHV0X3BhcmFtZXRlcnNfLmZyYW1lc19wZXJfMTBtc19idWZmZXIoKTsKLSAg
fQotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVsZT4gYXVkaW9fZGV2aWNl
KCkgY29uc3QgewotICAgIHJldHVybiBhdWRpb19kZXZpY2VfOwotICB9Ci0KLSAgcnRjOjpzY29w
ZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9kdWxlPiBDcmVhdGVBdWRpb0RldmljZSgKLSAgICAgIEF1
ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGF1ZGlvX2xheWVyKSB7Ci0jaWYgZGVmaW5lZChX
RUJSVENfQVVESU9fREVWSUNFX0lOQ0xVREVfQU5EUk9JRF9BQVVESU8pCi0gICAgaWYgKGF1ZGlv
X2xheWVyID09IEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEFBdWRpb0F1ZGlvKSB7Ci0gICAg
ICByZXR1cm4gcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9kdWxlPigKLSAgICAgICAg
ICBDcmVhdGVBQXVkaW9BdWRpb0RldmljZU1vZHVsZShqbmlfLCBjb250ZXh0Xy5vYmooKSkpOwot
ICAgIH0KLSNlbmRpZgotICAgIGlmIChhdWRpb19sYXllciA9PSBBdWRpb0RldmljZU1vZHVsZTo6
a0FuZHJvaWRKYXZhQXVkaW8pIHsKLSAgICAgIHJldHVybiBydGM6OnNjb3BlZF9yZWZwdHI8QXVk
aW9EZXZpY2VNb2R1bGU+KAotICAgICAgICAgIENyZWF0ZUphdmFBdWRpb0RldmljZU1vZHVsZShq
bmlfLCBjb250ZXh0Xy5vYmooKSkpOwotICAgIH0gZWxzZSBpZiAoYXVkaW9fbGF5ZXIgPT0gQXVk
aW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkT3BlblNMRVNBdWRpbykgewotICAgICAgcmV0dXJuIHJ0
Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVsZT4oCi0gICAgICAgICAgQ3JlYXRlT3Bl
blNMRVNBdWRpb0RldmljZU1vZHVsZShqbmlfLCBjb250ZXh0Xy5vYmooKSkpOwotICAgIH0gZWxz
ZSBpZiAoYXVkaW9fbGF5ZXIgPT0KLSAgICAgICAgICAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpr
QW5kcm9pZEphdmFJbnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW8pIHsKLSAgICAgIHJldHVybiBy
dGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1bGU+KAotICAgICAgICAgIENyZWF0ZUph
dmFJbnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW9EZXZpY2VNb2R1bGUoam5pXywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHRfLm9iaigpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgfQotCi0gIC8vIFJldHVybnMgZmlsZSBuYW1lIHJlbGF0aXZlIHRvIHRoZSByZXNvdXJjZSBy
b290IGdpdmVuIGEgc2FtcGxlIHJhdGUuCi0gIHN0ZDo6c3RyaW5nIEdldEZpbGVOYW1lKGludCBz
YW1wbGVfcmF0ZSkgewotICAgIEVYUEVDVF9UUlVFKHNhbXBsZV9yYXRlID09IDQ4MDAwIHx8IHNh
bXBsZV9yYXRlID09IDQ0MTAwKTsKLSAgICBjaGFyIGZuYW1lWzY0XTsKLSAgICBzbnByaW50Zihm
bmFtZSwgc2l6ZW9mKGZuYW1lKSwgImF1ZGlvX2RldmljZS9hdWRpb19zaG9ydCVkIiwKLSAgICAg
ICAgICAgICBzYW1wbGVfcmF0ZSAvIDEwMDApOwotICAgIHN0ZDo6c3RyaW5nIGZpbGVfbmFtZSh3
ZWJydGM6OnRlc3Q6OlJlc291cmNlUGF0aChmbmFtZSwgInBjbSIpKTsKLSAgICBFWFBFQ1RfVFJV
RSh0ZXN0OjpGaWxlRXhpc3RzKGZpbGVfbmFtZSkpOwotI2lmZGVmIEVOQUJMRV9QUklOVEYKLSAg
ICBQUklOVCgiZmlsZSBuYW1lOiAlc1xuIiwgZmlsZV9uYW1lLmNfc3RyKCkpOwotICAgIGNvbnN0
IHNpemVfdCBieXRlcyA9IHRlc3Q6OkdldEZpbGVTaXplKGZpbGVfbmFtZSk7Ci0gICAgUFJJTlQo
ImZpbGUgc2l6ZTogJSIgUlRDX1BSSXVTICIgW2J5dGVzXVxuIiwgYnl0ZXMpOwotICAgIFBSSU5U
KCJmaWxlIHNpemU6ICUiIFJUQ19QUkl1UyAiIFtzYW1wbGVzXVxuIiwgYnl0ZXMgLyBrQnl0ZXNQ
ZXJTYW1wbGUpOwotICAgIGNvbnN0IGludCBzZWNvbmRzID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihieXRlcyAvIChzYW1wbGVfcmF0ZSAqIGtCeXRlc1BlclNhbXBsZSkpOwotICAgIFBSSU5U
KCJmaWxlIHNpemU6ICVkIFtzZWNzXVxuIiwgc2Vjb25kcyk7Ci0gICAgUFJJTlQoImZpbGUgc2l6
ZTogJSIgUlRDX1BSSXVTICIgW2NhbGxiYWNrc11cbiIsCi0gICAgICAgICAgc2Vjb25kcyAqIGtO
dW1DYWxsYmFja3NQZXJTZWNvbmQpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZpbGVfbmFtZTsKLSAg
fQotCi0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIEdldEFjdGl2ZUF1ZGlvTGF5ZXIo
KSBjb25zdCB7Ci0gICAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXI7
Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5BY3RpdmVBdWRpb0xheWVyKCZhdWRp
b19sYXllcikpOwotICAgIHJldHVybiBhdWRpb19sYXllcjsKLSAgfQotCi0gIGludCBUZXN0RGVs
YXlPbkF1ZGlvTGF5ZXIoCi0gICAgICBjb25zdCBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXll
ciYgbGF5ZXJfdG9fdGVzdCkgewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1v
ZHVsZT4gYXVkaW9fZGV2aWNlOwotICAgIGF1ZGlvX2RldmljZSA9IENyZWF0ZUF1ZGlvRGV2aWNl
KGxheWVyX3RvX3Rlc3QpOwotICAgIEVYUEVDVF9ORShhdWRpb19kZXZpY2UuZ2V0KCksIG51bGxw
dHIpOwotICAgIHVpbnQxNl90IHBsYXlvdXRfZGVsYXk7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlv
X2RldmljZS0+UGxheW91dERlbGF5KCZwbGF5b3V0X2RlbGF5KSk7Ci0gICAgcmV0dXJuIHBsYXlv
dXRfZGVsYXk7Ci0gIH0KLQotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBUZXN0QWN0
aXZlQXVkaW9MYXllcigKLSAgICAgIGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVy
JiBsYXllcl90b190ZXN0KSB7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9k
dWxlPiBhdWRpb19kZXZpY2U7Ci0gICAgYXVkaW9fZGV2aWNlID0gQ3JlYXRlQXVkaW9EZXZpY2Uo
bGF5ZXJfdG9fdGVzdCk7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX2RldmljZS5nZXQoKSwgbnVsbHB0
cik7Ci0gICAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlOwotICAgIEVYUEVD
VF9FUSgwLCBhdWRpb19kZXZpY2UtPkFjdGl2ZUF1ZGlvTGF5ZXIoJmFjdGl2ZSkpOwotICAgIHJl
dHVybiBhY3RpdmU7Ci0gIH0KLQotICAvLyBPbmUgd2F5IHRvIGVuc3VyZSB0aGF0IHRoZSBlbmdp
bmUgb2JqZWN0IGlzIHZhbGlkIGlzIHRvIGNyZWF0ZSBhbgotICAvLyBTTCBFbmdpbmUgaW50ZXJm
YWNlIHNpbmNlIGl0IGV4cG9zZXMgY3JlYXRpb24gbWV0aG9kcyBvZiBhbGwgdGhlIE9wZW5TTCBF
UwotICAvLyBvYmplY3QgdHlwZXMgYW5kIGl0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRoZSBlbmdp
bmUgb2JqZWN0LiBUaGlzIG1ldGhvZAotICAvLyBhbHNvIHZlcmlmaWVzIHRoYXQgdGhlIGVuZ2lu
ZSBpbnRlcmZhY2Ugc3VwcG9ydHMgYXQgbGVhc3Qgb25lIGludGVyZmFjZS4KLSAgLy8gTm90ZSB0
aGF0LCB0aGUgdGVzdCBiZWxvdyBpcyBub3QgYSBmdWxsIHRlc3Qgb2YgdGhlIFNMRW5naW5lSXRm
IG9iamVjdAotICAvLyBidXQgb25seSBhIHNpbXBsZSBzYW5pdHkgdGVzdCB0byBjaGVjayB0aGF0
IHRoZSBnbG9iYWwgZW5naW5lIG9iamVjdCBpcyBPSy4KLSAgdm9pZCBWYWxpZGF0ZVNMRW5naW5l
KFNMT2JqZWN0SXRmIGVuZ2luZV9vYmplY3QpIHsKLSAgICBFWFBFQ1RfTkUobnVsbHB0ciwgZW5n
aW5lX29iamVjdCk7Ci0gICAgLy8gR2V0IHRoZSBTTCBFbmdpbmUgaW50ZXJmYWNlIHdoaWNoIGlz
IGV4cG9zZWQgYnkgdGhlIGVuZ2luZSBvYmplY3QuCi0gICAgU0xFbmdpbmVJdGYgZW5naW5lOwot
ICAgIFNMcmVzdWx0IHJlc3VsdCA9Ci0gICAgICAgICgqZW5naW5lX29iamVjdCktPkdldEludGVy
ZmFjZShlbmdpbmVfb2JqZWN0LCBTTF9JSURfRU5HSU5FLCAmZW5naW5lKTsKLSAgICBFWFBFQ1Rf
RVEocmVzdWx0LCBTTF9SRVNVTFRfU1VDQ0VTUykgPDwgIkdldEludGVyZmFjZSgpIG9uIGVuZ2lu
ZSBmYWlsZWQiOwotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBTTCBFbmdpbmUgaW50ZXJmYWNlIGV4
cG9zZXMgYXQgbGVhc3Qgb25lIGludGVyZmFjZS4KLSAgICBTTHVpbnQzMiBvYmplY3RfaWQgPSBT
TF9PQkpFQ1RJRF9FTkdJTkU7Ci0gICAgU0x1aW50MzIgbnVtX3N1cHBvcnRlZF9pbnRlcmZhY2Vz
ID0gMDsKLSAgICByZXN1bHQgPSAoKmVuZ2luZSktPlF1ZXJ5TnVtU3VwcG9ydGVkSW50ZXJmYWNl
cyhlbmdpbmUsIG9iamVjdF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbnVtX3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLSAgICBFWFBFQ1Rf
RVEocmVzdWx0LCBTTF9SRVNVTFRfU1VDQ0VTUykKLSAgICAgICAgPDwgIlF1ZXJ5TnVtU3VwcG9y
dGVkSW50ZXJmYWNlcygpIGZhaWxlZCI7Ci0gICAgRVhQRUNUX0dFKG51bV9zdXBwb3J0ZWRfaW50
ZXJmYWNlcywgMXUpOwotICB9Ci0KLSAgLy8gVm9sdW1lIGNvbnRyb2wgaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydGVkIGZvciB0aGUgSmF2YSBvdXRwdXQgYXVkaW8gbGF5ZXIuCi0gIC8vIEZvciBP
cGVuU0wgRVMsIHRoZSBpbnRlcm5hbCBzdHJlYW0gdm9sdW1lIGlzIGFsd2F5cyBvbiBtYXggbGV2
ZWwgYW5kIHRoZXJlCi0gIC8vIGlzIG5vIG5lZWQgZm9yIHRoaXMgdGVzdCB0byBzZXQgaXQgdG8g
bWF4LgotICBib29sIEF1ZGlvTGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2woKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIEdldEFjdGl2ZUF1ZGlvTGF5ZXIoKSA9PSBBdWRpb0RldmljZU1vZHVsZTo6a0Fu
ZHJvaWRKYXZhQXVkaW87Ci0gIH0KLQotICB2b2lkIFNldE1heFBsYXlvdXRWb2x1bWUoKSB7Ci0g
ICAgaWYgKCFBdWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250cm9sKCkpCi0gICAgICByZXR1cm47
Ci0gICAgdWludDMyX3QgbWF4X3ZvbHVtZTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNl
KCktPk1heFNwZWFrZXJWb2x1bWUoJm1heF92b2x1bWUpKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVk
aW9fZGV2aWNlKCktPlNldFNwZWFrZXJWb2x1bWUobWF4X3ZvbHVtZSkpOwotICB9Ci0KLSAgdm9p
ZCBEaXNhYmxlQnVpbHRJbkFFQ0lmQXZhaWxhYmxlKCkgewotICAgIGlmIChhdWRpb19kZXZpY2Uo
KS0+QnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkpIHsKLSAgICAgIEVYUEVDVF9FUSgwLCBhdWRpb19k
ZXZpY2UoKS0+RW5hYmxlQnVpbHRJbkFFQyhmYWxzZSkpOwotICAgIH0KLSAgfQotCi0gIHZvaWQg
U3RhcnRQbGF5b3V0KCkgewotICAgIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+UGxheW91
dElzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5QbGF5
aW5nKCkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+SW5pdFBsYXlvdXQoKSk7
Ci0gICAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCktPlBsYXlvdXRJc0luaXRpYWxpemVkKCkp
OwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+U3RhcnRQbGF5b3V0KCkpOwotICAg
IEVYUEVDVF9UUlVFKGF1ZGlvX2RldmljZSgpLT5QbGF5aW5nKCkpOwotICB9Ci0KLSAgdm9pZCBT
dG9wUGxheW91dCgpIHsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0b3BQbGF5
b3V0KCkpOwotICAgIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+UGxheWluZygpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPlBsYXlvdXRJc0luaXRpYWxpemVkKCkpOwot
ICB9Ci0KLSAgdm9pZCBTdGFydFJlY29yZGluZygpIHsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9f
ZGV2aWNlKCktPlJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGF1
ZGlvX2RldmljZSgpLT5SZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rldmlj
ZSgpLT5Jbml0UmVjb3JkaW5nKCkpOwotICAgIEVYUEVDVF9UUlVFKGF1ZGlvX2RldmljZSgpLT5S
ZWNvcmRpbmdJc0luaXRpYWxpemVkKCkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2Uo
KS0+U3RhcnRSZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCktPlJl
Y29yZGluZygpKTsKLSAgfQotCi0gIHZvaWQgU3RvcFJlY29yZGluZygpIHsKLSAgICBFWFBFQ1Rf
RVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0b3BSZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KGF1ZGlvX2RldmljZSgpLT5SZWNvcmRpbmcoKSk7Ci0gIH0KLQotICBpbnQgR2V0TWF4U3BlYWtl
clZvbHVtZSgpIGNvbnN0IHsKLSAgICB1aW50MzJfdCBtYXhfdm9sdW1lKDApOwotICAgIEVYUEVD
VF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+TWF4U3BlYWtlclZvbHVtZSgmbWF4X3ZvbHVtZSkpOwot
ICAgIHJldHVybiBtYXhfdm9sdW1lOwotICB9Ci0KLSAgaW50IEdldE1pblNwZWFrZXJWb2x1bWUo
KSBjb25zdCB7Ci0gICAgdWludDMyX3QgbWluX3ZvbHVtZSgwKTsKLSAgICBFWFBFQ1RfRVEoMCwg
YXVkaW9fZGV2aWNlKCktPk1pblNwZWFrZXJWb2x1bWUoJm1pbl92b2x1bWUpKTsKLSAgICByZXR1
cm4gbWluX3ZvbHVtZTsKLSAgfQotCi0gIGludCBHZXRTcGVha2VyVm9sdW1lKCkgY29uc3Qgewot
ICAgIHVpbnQzMl90IHZvbHVtZSgwKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCkt
PlNwZWFrZXJWb2x1bWUoJnZvbHVtZSkpOwotICAgIHJldHVybiB2b2x1bWU7Ci0gIH0KLQotICBK
TklFbnYqIGpuaV87Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBjb250ZXh0XzsKLSAg
cnRjOjpFdmVudCB0ZXN0X2lzX2RvbmVfOwotICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZp
Y2VNb2R1bGU+IGF1ZGlvX2RldmljZV87Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBh
dWRpb19tYW5hZ2VyXzsKLSAgQXVkaW9QYXJhbWV0ZXJzIG91dHB1dF9wYXJhbWV0ZXJzXzsKLSAg
QXVkaW9QYXJhbWV0ZXJzIGlucHV0X3BhcmFtZXRlcnNfOwotfTsKLQotVEVTVF9GKEF1ZGlvRGV2
aWNlVGVzdCwgQ29uc3RydWN0RGVzdHJ1Y3QpIHsKLSAgLy8gVXNpbmcgdGhlIHRlc3QgZml4dHVy
ZSB0byBjcmVhdGUgYW5kIGRlc3RydWN0IHRoZSBhdWRpbyBkZXZpY2UgbW9kdWxlLgotfQotCi0v
LyBWZXJpZnkgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBleHBsaWNpdGx5IGNyZWF0ZSB0aGUgdHdv
IHR5cGVzIG9mIHN1cHBvcnRlZAotLy8gQURNcy4gVGhlc2UgdHdvIHRlc3RzIG92ZXJyaWRlcyB0
aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgbmF0aXZlIGF1ZGlvIGxheWVyCi0vLyBieSBpZ25vcmlu
ZyBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGxvdy1sYXRlbmN5IG91dHB1dCBvciBub3QuCi1URVNU
X0YoQXVkaW9EZXZpY2VUZXN0LCBDb3JyZWN0QXVkaW9MYXllcklzVXNlZEZvckNvbWJpbmVkSmF2
YU9wZW5TTENvbWJvKSB7Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGV4cGVjdGVk
X2xheWVyID0KLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFJbnB1dEFuZE9w
ZW5TTEVTT3V0cHV0QXVkaW87Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGFjdGl2
ZV9sYXllciA9Ci0gICAgICBUZXN0QWN0aXZlQXVkaW9MYXllcihleHBlY3RlZF9sYXllcik7Ci0g
IEVYUEVDVF9FUShleHBlY3RlZF9sYXllciwgYWN0aXZlX2xheWVyKTsKLX0KLQotVEVTVF9GKEF1
ZGlvRGV2aWNlVGVzdCwgQ29ycmVjdEF1ZGlvTGF5ZXJJc1VzZWRGb3JKYXZhSW5Cb3RoRGlyZWN0
aW9ucykgewotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBleHBlY3RlZF9sYXllciA9
Ci0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhQXVkaW87Ci0gIEF1ZGlvRGV2
aWNlTW9kdWxlOjpBdWRpb0xheWVyIGFjdGl2ZV9sYXllciA9Ci0gICAgICBUZXN0QWN0aXZlQXVk
aW9MYXllcihleHBlY3RlZF9sYXllcik7Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9sYXllciwgYWN0
aXZlX2xheWVyKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgQ29ycmVjdEF1ZGlvTGF5
ZXJJc1VzZWRGb3JPcGVuU0xJbkJvdGhEaXJlY3Rpb25zKSB7Ci0gIEF1ZGlvRGV2aWNlTW9kdWxl
OjpBdWRpb0xheWVyIGV4cGVjdGVkX2xheWVyID0KLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpr
QW5kcm9pZE9wZW5TTEVTQXVkaW87Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGFj
dGl2ZV9sYXllciA9Ci0gICAgICBUZXN0QWN0aXZlQXVkaW9MYXllcihleHBlY3RlZF9sYXllcik7
Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9sYXllciwgYWN0aXZlX2xheWVyKTsKLX0KLQotLy8gVE9E
TyhidWdzLndlYnJ0Yy5vcmcvODkxNCkKLS8vIFRPRE8ocGhlbnNtYW4pOiBBZGQgdGVzdCBmb3Ig
QUF1ZGlvL0phdmEgY29tYmluYXRpb24gd2hlbiB0aGlzIGNvbWJpbmF0aW9uCi0vLyBpcyBzdXBw
b3J0ZWQuCi0jaWYgIWRlZmluZWQoV0VCUlRDX0FVRElPX0RFVklDRV9JTkNMVURFX0FORFJPSURf
QUFVRElPKQotI2RlZmluZSBNQVlCRV9Db3JyZWN0QXVkaW9MYXllcklzVXNlZEZvckFBdWRpb0lu
Qm90aERpcmVjdGlvbnMgXAotICBESVNBQkxFRF9Db3JyZWN0QXVkaW9MYXllcklzVXNlZEZvckFB
dWRpb0luQm90aERpcmVjdGlvbnMKLSNlbHNlCi0jZGVmaW5lIE1BWUJFX0NvcnJlY3RBdWRpb0xh
eWVySXNVc2VkRm9yQUF1ZGlvSW5Cb3RoRGlyZWN0aW9ucyBcCi0gIENvcnJlY3RBdWRpb0xheWVy
SXNVc2VkRm9yQUF1ZGlvSW5Cb3RoRGlyZWN0aW9ucwotI2VuZGlmCi1URVNUX0YoQXVkaW9EZXZp
Y2VUZXN0LAotICAgICAgIE1BWUJFX0NvcnJlY3RBdWRpb0xheWVySXNVc2VkRm9yQUF1ZGlvSW5C
b3RoRGlyZWN0aW9ucykgewotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBleHBlY3Rl
ZF9sYXllciA9Ci0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRBQXVkaW9BdWRpbzsK
LSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlX2xheWVyID0KLSAgICAgIFRl
c3RBY3RpdmVBdWRpb0xheWVyKGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVk
X2xheWVyLCBhY3RpdmVfbGF5ZXIpOwotfQotCi0vLyBUaGUgQW5kcm9pZCBBRE0gc3VwcG9ydHMg
dHdvIGRpZmZlcmVudCBkZWxheSByZXBvcnRpbmcgbW9kZXMuIE9uZSBmb3IgdGhlCi0vLyBsb3ct
bGF0ZW5jeSBvdXRwdXQgcGF0aCAoaW4gY29tYmluYXRpb24gd2l0aCBPcGVuU0wgRVMpLCBhbmQg
b25lIGZvciB0aGUKLS8vIGhpZ2gtbGF0ZW5jeSBvdXRwdXQgcGF0aCAoSmF2YSBiYWNrZW5kcyBp
biBib3RoIGRpcmVjdGlvbnMpLiBUaGVzZSB0d28gdGVzdHMKLS8vIHZlcmlmaWVzIHRoYXQgdGhl
IGF1ZGlvIGRldmljZSByZXBvcnRzIGNvcnJlY3QgZGVsYXkgZXN0aW1hdGUgZ2l2ZW4gdGhlCi0v
LyBzZWxlY3RlZCBhdWRpbyBsYXllci4gTm90ZSB0aGF0LCB0aGlzIGRlbGF5IGVzdGltYXRlIHdp
bGwgb25seSBiZSB1dGlsaXplZAotLy8gaWYgdGhlIEhXIEFFQyBpcyBkaXNhYmxlZC4KLS8vIERl
bGF5IHNob3VsZCBiZSA3NSBtcyBpbiBoaWdoIGxhdGVuY3kgYW5kIDI1IG1zIGluIGxvdyBsYXRl
bmN5LgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgVXNlc0NvcnJlY3REZWxheUVzdGltYXRlRm9y
SGlnaExhdGVuY3lPdXRwdXRQYXRoKSB7Ci0gIEVYUEVDVF9FUSg3NSwgVGVzdERlbGF5T25BdWRp
b0xheWVyKEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbykpOwotfQotCi1URVNU
X0YoQXVkaW9EZXZpY2VUZXN0LCBVc2VzQ29ycmVjdERlbGF5RXN0aW1hdGVGb3JMb3dMYXRlbmN5
T3V0cHV0UGF0aCkgewotICBFWFBFQ1RfRVEoMjUsCi0gICAgICAgICAgICBUZXN0RGVsYXlPbkF1
ZGlvTGF5ZXIoCi0gICAgICAgICAgICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2
YUlucHV0QW5kT3BlblNMRVNPdXRwdXRBdWRpbykpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VU
ZXN0LCBJbml0VGVybWluYXRlKSB7Ci0gIC8vIEluaXRpYWxpemF0aW9uIGlzIHBhcnQgb2YgdGhl
IHRlc3QgZml4dHVyZS4KLSAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCktPkluaXRpYWxpemVk
KCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlRlcm1pbmF0ZSgpKTsKLSAgRVhQ
RUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5Jbml0aWFsaXplZCgpKTsKLX0KLQotVEVTVF9GKEF1
ZGlvRGV2aWNlVGVzdCwgRGV2aWNlcykgewotICAvLyBEZXZpY2UgZW51bWVyYXRpb24gaXMgbm90
IHN1cHBvcnRlZC4gVmVyaWZ5IGZpeGVkIHZhbHVlcyBvbmx5LgotICBFWFBFQ1RfRVEoMSwgYXVk
aW9fZGV2aWNlKCktPlBsYXlvdXREZXZpY2VzKCkpOwotICBFWFBFQ1RfRVEoMSwgYXVkaW9fZGV2
aWNlKCktPlJlY29yZGluZ0RldmljZXMoKSk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3Qs
IElzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQpIHsKLSAgUFJJTlQoIiVzQWNvdXN0aWMg
RWNobyBDYW5jZWxlciBzdXBwb3J0OiAlc1xuIiwga1RhZywKLSAgICAgICAgYXVkaW9fZGV2aWNl
KCktPkJ1aWx0SW5BRUNJc0F2YWlsYWJsZSgpID8gIlllcyIgOiAiTm8iKTsKLX0KLQotVEVTVF9G
KEF1ZGlvRGV2aWNlVGVzdCwgSXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQpIHsKLSAgUFJJTlQo
IiVzTm9pc2UgU3VwcHJlc3NvciBzdXBwb3J0OiAlc1xuIiwga1RhZywKLSAgICAgICAgYXVkaW9f
ZGV2aWNlKCktPkJ1aWx0SW5OU0lzQXZhaWxhYmxlKCkgPyAiWWVzIiA6ICJObyIpOwotfQotCi0v
LyBWZXJpZnkgdGhhdCBwbGF5b3V0IHNpZGUgaXMgY29uZmlndXJlZCBmb3IgbW9ubyBieSBkZWZh
dWx0LgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgVXNlc01vbm9QbGF5b3V0QnlEZWZhdWx0KSB7
Ci0gIEVYUEVDVF9FUSgxdSwgb3V0cHV0X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCkpOwotfQotCi0v
LyBWZXJpZnkgdGhhdCByZWNvcmRpbmcgc2lkZSBpcyBjb25maWd1cmVkIGZvciBtb25vIGJ5IGRl
ZmF1bHQuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBVc2VzTW9ub1JlY29yZGluZ0J5RGVmYXVs
dCkgewotICBFWFBFQ1RfRVEoMXUsIGlucHV0X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCkpOwotfQot
Ci1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTcGVha2VyVm9sdW1lU2hvdWxkQmVBdmFpbGFibGUp
IHsKLSAgLy8gVGhlIE9wZW5TTCBFUyBvdXRwdXQgYXVkaW8gcGF0aCBkb2VzIG5vdCBzdXBwb3J0
IHZvbHVtZSBjb250cm9sLgotICBpZiAoIUF1ZGlvTGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2wo
KSkKLSAgICByZXR1cm47Ci0gIGJvb2wgYXZhaWxhYmxlOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9f
ZGV2aWNlKCktPlNwZWFrZXJWb2x1bWVJc0F2YWlsYWJsZSgmYXZhaWxhYmxlKSk7Ci0gIEVYUEVD
VF9UUlVFKGF2YWlsYWJsZSk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIE1heFNwZWFr
ZXJWb2x1bWVJc1Bvc2l0aXZlKSB7Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0cHV0IGF1ZGlvIHBh
dGggZG9lcyBub3Qgc3VwcG9ydCB2b2x1bWUgY29udHJvbC4KLSAgaWYgKCFBdWRpb0xheWVyU3Vw
cG9ydHNWb2x1bWVDb250cm9sKCkpCi0gICAgcmV0dXJuOwotICBTdGFydFBsYXlvdXQoKTsKLSAg
RVhQRUNUX0dUKEdldE1heFNwZWFrZXJWb2x1bWUoKSwgMCk7Ci0gIFN0b3BQbGF5b3V0KCk7Ci19
Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIE1pblNwZWFrZXJWb2x1bWVJc1plcm8pIHsKLSAg
Ly8gVGhlIE9wZW5TTCBFUyBvdXRwdXQgYXVkaW8gcGF0aCBkb2VzIG5vdCBzdXBwb3J0IHZvbHVt
ZSBjb250cm9sLgotICBpZiAoIUF1ZGlvTGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2woKSkKLSAg
ICByZXR1cm47Ci0gIEVYUEVDVF9FUShHZXRNaW5TcGVha2VyVm9sdW1lKCksIDApOwotfQotCi1U
RVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBEZWZhdWx0U3BlYWtlclZvbHVtZUlzV2l0aGluTWluTWF4
KSB7Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0cHV0IGF1ZGlvIHBhdGggZG9lcyBub3Qgc3VwcG9y
dCB2b2x1bWUgY29udHJvbC4KLSAgaWYgKCFBdWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250cm9s
KCkpCi0gICAgcmV0dXJuOwotICBjb25zdCBpbnQgZGVmYXVsdF92b2x1bWUgPSBHZXRTcGVha2Vy
Vm9sdW1lKCk7Ci0gIEVYUEVDVF9HRShkZWZhdWx0X3ZvbHVtZSwgR2V0TWluU3BlYWtlclZvbHVt
ZSgpKTsKLSAgRVhQRUNUX0xFKGRlZmF1bHRfdm9sdW1lLCBHZXRNYXhTcGVha2VyVm9sdW1lKCkp
OwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTZXRTcGVha2VyVm9sdW1lQWN0dWFsbHlT
ZXRzVm9sdW1lKSB7Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0cHV0IGF1ZGlvIHBhdGggZG9lcyBu
b3Qgc3VwcG9ydCB2b2x1bWUgY29udHJvbC4KLSAgaWYgKCFBdWRpb0xheWVyU3VwcG9ydHNWb2x1
bWVDb250cm9sKCkpCi0gICAgcmV0dXJuOwotICBjb25zdCBpbnQgZGVmYXVsdF92b2x1bWUgPSBH
ZXRTcGVha2VyVm9sdW1lKCk7Ci0gIGNvbnN0IGludCBtYXhfdm9sdW1lID0gR2V0TWF4U3BlYWtl
clZvbHVtZSgpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlNldFNwZWFrZXJWb2x1
bWUobWF4X3ZvbHVtZSkpOwotICBpbnQgbmV3X3ZvbHVtZSA9IEdldFNwZWFrZXJWb2x1bWUoKTsK
LSAgRVhQRUNUX0VRKG5ld192b2x1bWUsIG1heF92b2x1bWUpOwotICBFWFBFQ1RfRVEoMCwgYXVk
aW9fZGV2aWNlKCktPlNldFNwZWFrZXJWb2x1bWUoZGVmYXVsdF92b2x1bWUpKTsKLX0KLQotLy8g
VGVzdHMgdGhhdCBwbGF5b3V0IGNhbiBiZSBpbml0aWF0ZWQsIHN0YXJ0ZWQgYW5kIHN0b3BwZWQu
IE5vIGF1ZGlvIGNhbGxiYWNrCi0vLyBpcyByZWdpc3RlcmVkIGluIHRoaXMgdGVzdC4KLVRFU1Rf
RihBdWRpb0RldmljZVRlc3QsIFN0YXJ0U3RvcFBsYXlvdXQpIHsKLSAgU3RhcnRQbGF5b3V0KCk7
Ci0gIFN0b3BQbGF5b3V0KCk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICBTdG9wUGxheW91dCgpOwot
fQotCi0vLyBUZXN0cyB0aGF0IHJlY29yZGluZyBjYW4gYmUgaW5pdGlhdGVkLCBzdGFydGVkIGFu
ZCBzdG9wcGVkLiBObyBhdWRpbyBjYWxsYmFjawotLy8gaXMgcmVnaXN0ZXJlZCBpbiB0aGlzIHRl
c3QuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTdGFydFN0b3BSZWNvcmRpbmcpIHsKLSAgU3Rh
cnRSZWNvcmRpbmcoKTsKLSAgU3RvcFJlY29yZGluZygpOwotICBTdGFydFJlY29yZGluZygpOwot
ICBTdG9wUmVjb3JkaW5nKCk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGNhbGxpbmcgU3RvcFBsYXlv
dXQoKSB3aWxsIGxlYXZlIHVzIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUKLS8vIHdoaWNoIHdp
bGwgcmVxdWlyZSBhIG5ldyBjYWxsIHRvIEluaXRQbGF5b3V0KCkuIFRoaXMgdGVzdCBkb2VzIG5v
dCBjYWxsCi0vLyBTdGFydFBsYXlvdXQoKSB3aGlsZSBiZWluZyB1bmluaXRpYWxpemVkIHNpbmNl
IGRvaW5nIHNvIHdpbGwgaGl0IGEKLS8vIFJUQ19EQ0hFQ0sgYW5kIGRlYXRoIHRlc3RzIGFyZSBu
b3Qgc3VwcG9ydGVkIG9uIEFuZHJvaWQuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTdG9wUGxh
eW91dFJlcXVpcmVzSW5pdFRvUmVzdGFydCkgewotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNl
KCktPkluaXRQbGF5b3V0KCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0YXJ0
UGxheW91dCgpKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdG9wUGxheW91dCgp
KTsKLSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5QbGF5b3V0SXNJbml0aWFsaXplZCgp
KTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgY2FsbGluZyBTdG9wUmVjb3JkaW5nKCkgd2lsbCBsZWF2
ZSB1cyBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlCi0vLyB3aGljaCB3aWxsIHJlcXVpcmUgYSBu
ZXcgY2FsbCB0byBJbml0UmVjb3JkaW5nKCkuIFRoaXMgdGVzdCBkb2VzIG5vdCBjYWxsCi0vLyBT
dGFydFJlY29yZGluZygpIHdoaWxlIGJlaW5nIHVuaW5pdGlhbGl6ZWQgc2luY2UgZG9pbmcgc28g
d2lsbCBoaXQgYQotLy8gUlRDX0RDSEVDSyBhbmQgZGVhdGggdGVzdHMgYXJlIG5vdCBzdXBwb3J0
ZWQgb24gQW5kcm9pZC4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFN0b3BSZWNvcmRpbmdSZXF1
aXJlc0luaXRUb1Jlc3RhcnQpIHsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5Jbml0
UmVjb3JkaW5nKCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0YXJ0UmVjb3Jk
aW5nKCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0b3BSZWNvcmRpbmcoKSk7
Ci0gIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+UmVjb3JkaW5nSXNJbml0aWFsaXplZCgp
KTsKLX0KLQotLy8gU3RhcnQgcGxheW91dCBhbmQgdmVyaWZ5IHRoYXQgdGhlIG5hdGl2ZSBhdWRp
byBsYXllciBzdGFydHMgYXNraW5nIGZvciByZWFsCi0vLyBhdWRpbyBzYW1wbGVzIHRvIHBsYXkg
b3V0IHVzaW5nIHRoZSBOZWVkTW9yZVBsYXlEYXRhIGNhbGxiYWNrLgotVEVTVF9GKEF1ZGlvRGV2
aWNlVGVzdCwgU3RhcnRQbGF5b3V0VmVyaWZ5Q2FsbGJhY2tzKSB7Ci0gIE1vY2tBdWRpb1RyYW5z
cG9ydEFuZHJvaWQgbW9jayhrUGxheW91dCk7Ci0gIG1vY2suSGFuZGxlQ2FsbGJhY2tzKCZ0ZXN0
X2lzX2RvbmVfLCBudWxscHRyLCBrTnVtQ2FsbGJhY2tzKTsKLSAgRVhQRUNUX0NBTEwobW9jaywg
TmVlZE1vcmVQbGF5RGF0YShwbGF5b3V0X2ZyYW1lc19wZXJfMTBtc19idWZmZXIoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQnl0ZXNQZXJTYW1wbGUsIHBsYXlvdXRf
Y2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5b3V0
X3NhbXBsZV9yYXRlKCksIE5vdE51bGwoKSwgXywgXywgXykpCi0gICAgICAuVGltZXMoQXRMZWFz
dChrTnVtQ2FsbGJhY2tzKSk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+UmVnaXN0
ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICB0ZXN0X2lzX2Rv
bmVfLldhaXQoa1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29uZHMpOwotICBTdG9wUGxheW91dCgpOwot
fQotCi0vLyBTdGFydCByZWNvcmRpbmcgYW5kIHZlcmlmeSB0aGF0IHRoZSBuYXRpdmUgYXVkaW8g
bGF5ZXIgc3RhcnRzIGZlZWRpbmcgcmVhbAotLy8gYXVkaW8gc2FtcGxlcyB2aWEgdGhlIFJlY29y
ZGVkRGF0YUlzQXZhaWxhYmxlIGNhbGxiYWNrLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgU3Rh
cnRSZWNvcmRpbmdWZXJpZnlDYWxsYmFja3MpIHsKLSAgTW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9p
ZCBtb2NrKGtSZWNvcmRpbmcpOwotICBtb2NrLkhhbmRsZUNhbGxiYWNrcygmdGVzdF9pc19kb25l
XywgbnVsbHB0ciwga051bUNhbGxiYWNrcyk7Ci0gIEVYUEVDVF9DQUxMKAotICAgICAgbW9jaywg
UmVjb3JkZWREYXRhSXNBdmFpbGFibGUoTm90TnVsbCgpLCByZWNvcmRfZnJhbWVzX3Blcl8xMG1z
X2J1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0J5dGVzUGVy
U2FtcGxlLCByZWNvcmRfY2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY29yZF9zYW1wbGVfcmF0ZSgpLCBfLCAwLCAwLCBmYWxzZSwgXykpCi0gICAgICAu
VGltZXMoQXRMZWFzdChrTnVtQ2FsbGJhY2tzKSk7Ci0KLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rl
dmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2soJm1vY2spKTsKLSAgU3RhcnRSZWNvcmRpbmco
KTsKLSAgdGVzdF9pc19kb25lXy5XYWl0KGtUZXN0VGltZU91dEluTWlsbGlzZWNvbmRzKTsKLSAg
U3RvcFJlY29yZGluZygpOwotfQotCi0vLyBTdGFydCBwbGF5b3V0IGFuZCByZWNvcmRpbmcgKGZ1
bGwtZHVwbGV4IGF1ZGlvKSBhbmQgdmVyaWZ5IHRoYXQgYXVkaW8gaXMKLS8vIGFjdGl2ZSBpbiBi
b3RoIGRpcmVjdGlvbnMuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTdGFydFBsYXlvdXRBbmRS
ZWNvcmRpbmdWZXJpZnlDYWxsYmFja3MpIHsKLSAgTW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZCBt
b2NrKGtQbGF5b3V0IHwga1JlY29yZGluZyk7Ci0gIG1vY2suSGFuZGxlQ2FsbGJhY2tzKCZ0ZXN0
X2lzX2RvbmVfLCBudWxscHRyLCBrTnVtQ2FsbGJhY2tzKTsKLSAgRVhQRUNUX0NBTEwobW9jaywg
TmVlZE1vcmVQbGF5RGF0YShwbGF5b3V0X2ZyYW1lc19wZXJfMTBtc19idWZmZXIoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQnl0ZXNQZXJTYW1wbGUsIHBsYXlvdXRf
Y2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5b3V0
X3NhbXBsZV9yYXRlKCksIE5vdE51bGwoKSwgXywgXywgXykpCi0gICAgICAuVGltZXMoQXRMZWFz
dChrTnVtQ2FsbGJhY2tzKSk7Ci0gIEVYUEVDVF9DQUxMKAotICAgICAgbW9jaywgUmVjb3JkZWRE
YXRhSXNBdmFpbGFibGUoTm90TnVsbCgpLCByZWNvcmRfZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0J5dGVzUGVyU2FtcGxlLCBy
ZWNvcmRfY2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y29yZF9zYW1wbGVfcmF0ZSgpLCBfLCAwLCAwLCBmYWxzZSwgXykpCi0gICAgICAuVGltZXMoQXRM
ZWFzdChrTnVtQ2FsbGJhY2tzKSk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+UmVn
aXN0ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICBTdGFydFJl
Y29yZGluZygpOwotICB0ZXN0X2lzX2RvbmVfLldhaXQoa1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29u
ZHMpOwotICBTdG9wUmVjb3JkaW5nKCk7Ci0gIFN0b3BQbGF5b3V0KCk7Ci19Ci0KLS8vIFN0YXJ0
IHBsYXlvdXQgYW5kIHJlYWQgYXVkaW8gZnJvbSBhbiBleHRlcm5hbCBQQ00gZmlsZSB3aGVuIHRo
ZSBhdWRpbyBsYXllcgotLy8gYXNrcyBmb3IgZGF0YSB0byBwbGF5IG91dC4gUmVhbCBhdWRpbyBp
cyBwbGF5ZWQgb3V0IGluIHRoaXMgdGVzdCBidXQgaXQgZG9lcwotLy8gbm90IGNvbnRhaW4gYW55
IGV4cGxpY2l0IHZlcmlmaWNhdGlvbiB0aGF0IHRoZSBhdWRpbyBxdWFsaXR5IGlzIHBlcmZlY3Qu
Ci1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBSdW5QbGF5b3V0V2l0aEZpbGVBc1NvdXJjZSkgewot
ICAvLyBUT0RPKGhlbnJpa2EpOiBleHRlbmQgdGVzdCB3aGVuIG1vbm8gb3V0cHV0IGlzIHN1cHBv
cnRlZC4KLSAgRVhQRUNUX0VRKDF1LCBwbGF5b3V0X2NoYW5uZWxzKCkpOwotICBOaWNlTW9jazxN
b2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkPiBtb2NrKGtQbGF5b3V0KTsKLSAgY29uc3QgaW50IG51
bV9jYWxsYmFja3MgPSBrRmlsZVBsYXlUaW1lSW5TZWMgKiBrTnVtQ2FsbGJhY2tzUGVyU2Vjb25k
OwotICBzdGQ6OnN0cmluZyBmaWxlX25hbWUgPSBHZXRGaWxlTmFtZShwbGF5b3V0X3NhbXBsZV9y
YXRlKCkpOwotICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZUF1ZGlvU3RyZWFtPiBmaWxlX2F1ZGlvX3N0
cmVhbSgKLSAgICAgIG5ldyBGaWxlQXVkaW9TdHJlYW0obnVtX2NhbGxiYWNrcywgZmlsZV9uYW1l
LCBwbGF5b3V0X3NhbXBsZV9yYXRlKCkpKTsKLSAgbW9jay5IYW5kbGVDYWxsYmFja3MoJnRlc3Rf
aXNfZG9uZV8sIGZpbGVfYXVkaW9fc3RyZWFtLmdldCgpLCBudW1fY2FsbGJhY2tzKTsKLSAgLy8g
U2V0TWF4UGxheW91dFZvbHVtZSgpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJl
Z2lzdGVyQXVkaW9DYWxsYmFjaygmbW9jaykpOwotICBTdGFydFBsYXlvdXQoKTsKLSAgdGVzdF9p
c19kb25lXy5XYWl0KGtUZXN0VGltZU91dEluTWlsbGlzZWNvbmRzKTsKLSAgU3RvcFBsYXlvdXQo
KTsKLX0KLQotLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBPcGVuU0wgZW5n
aW5lIG9iamVjdCBpZiBPcGVuU0wgRVMgYmFzZWQKLS8vIGF1ZGlvIGlzIHJlcXVlc3RlZCBpbiBh
bnkgZGlyZWN0aW9uLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgVGVzdENyZWF0ZU9wZW5TTEVu
Z2luZSkgewotICAvLyBWZXJpZnkgdGhhdCB0aGUgZ2xvYmFsIChzaW5nbGV0b24pIE9wZW5TTCBF
bmdpbmUgY2FuIGJlIGFjcXVpcmVkLgotICBPcGVuU0xFbmdpbmVNYW5hZ2VyIGVuZ2luZV9tYW5h
Z2VyOwotICBTTE9iamVjdEl0ZiBlbmdpbmVfb2JqZWN0ID0gZW5naW5lX21hbmFnZXIuR2V0T3Bl
blNMRW5naW5lKCk7Ci0gIEVYUEVDVF9ORShudWxscHRyLCBlbmdpbmVfb2JqZWN0KTsKLSAgLy8g
UGVyZm9ybSBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgb2YgdGhlIGNyZWF0ZWQgZW5naW5lIG9iamVj
dC4KLSAgVmFsaWRhdGVTTEVuZ2luZShlbmdpbmVfb2JqZWN0KTsKLX0KLQotLy8gVGhlIGF1ZGlv
IGRldmljZSBtb2R1bGUgb25seSBzdXBwb3JzIHRoZSBzYW1lIHNhbXBsZSByYXRlIGluIGJvdGgg
ZGlyZWN0aW9ucy4KLS8vIEluIGFkZGl0aW9uLCBpbiBmdWxsLWR1cGxleCBsb3ctbGF0ZW5jeSBt
b2RlIChPcGVuU0wgRVMpLCBib3RoIGlucHV0IGFuZAotLy8gb3V0cHV0IG11c3QgdXNlIHRoZSBz
YW1lIG5hdGl2ZSBidWZmZXIgc2l6ZSB0byBhbGxvdyBmb3IgdXNhZ2Ugb2YgdGhlIGZhc3QKLS8v
IGF1ZGlvIHRyYWNrIGluIEFuZHJvaWQuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBWZXJpZnlB
dWRpb1BhcmFtZXRlcnMpIHsKLSAgRVhQRUNUX0VRKG91dHB1dF9wYXJhbWV0ZXJzXy5zYW1wbGVf
cmF0ZSgpLCBpbnB1dF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpKTsKLSAgU2V0QWN0aXZlQXVk
aW9MYXllcihBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRPcGVuU0xFU0F1ZGlvKTsKLSAgRVhQ
RUNUX0VRKG91dHB1dF9wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1ZmZlcigpLAotICAgICAgICAg
ICAgaW5wdXRfcGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSk7Ci19Ci0KLVRFU1RfRihB
dWRpb0RldmljZVRlc3QsIFNob3dBdWRpb1BhcmFtZXRlckluZm8pIHsKLSAgY29uc3QgYm9vbCBs
b3dfbGF0ZW5jeV9vdXQgPSBmYWxzZTsKLSAgY29uc3QgYm9vbCBsb3dfbGF0ZW5jeV9pbiA9IGZh
bHNlOwotICBQUklOVCgiUExBWU9VVDpcbiIpOwotICBQUklOVCgiJXNhdWRpbyBsYXllcjogJXNc
biIsIGtUYWcsCi0gICAgICAgIGxvd19sYXRlbmN5X291dCA/ICJMb3cgbGF0ZW5jeSBPcGVuU0wi
IDogIkphdmEvSk5JIGJhc2VkIEF1ZGlvVHJhY2siKTsKLSAgUFJJTlQoIiVzc2FtcGxlIHJhdGU6
ICVkIEh6XG4iLCBrVGFnLCBvdXRwdXRfcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSk7Ci0gIFBS
SU5UKCIlc2NoYW5uZWxzOiAlIiBSVENfUFJJdVMgIlxuIiwga1RhZywgb3V0cHV0X3BhcmFtZXRl
cnNfLmNoYW5uZWxzKCkpOwotICBQUklOVCgiJXNmcmFtZXMgcGVyIGJ1ZmZlcjogJSIgUlRDX1BS
SXVTICIgPD0+ICUuMmYgbXNcbiIsIGtUYWcsCi0gICAgICAgIG91dHB1dF9wYXJhbWV0ZXJzXy5m
cmFtZXNfcGVyX2J1ZmZlcigpLAotICAgICAgICBvdXRwdXRfcGFyYW1ldGVyc18uR2V0QnVmZmVy
U2l6ZUluTWlsbGlzZWNvbmRzKCkpOwotICBQUklOVCgiUkVDT1JEOiBcbiIpOwotICBQUklOVCgi
JXNhdWRpbyBsYXllcjogJXNcbiIsIGtUYWcsCi0gICAgICAgIGxvd19sYXRlbmN5X2luID8gIkxv
dyBsYXRlbmN5IE9wZW5TTCIgOiAiSmF2YS9KTkkgYmFzZWQgQXVkaW9SZWNvcmQiKTsKLSAgUFJJ
TlQoIiVzc2FtcGxlIHJhdGU6ICVkIEh6XG4iLCBrVGFnLCBpbnB1dF9wYXJhbWV0ZXJzXy5zYW1w
bGVfcmF0ZSgpKTsKLSAgUFJJTlQoIiVzY2hhbm5lbHM6ICUiIFJUQ19QUkl1UyAiXG4iLCBrVGFn
LCBpbnB1dF9wYXJhbWV0ZXJzXy5jaGFubmVscygpKTsKLSAgUFJJTlQoIiVzZnJhbWVzIHBlciBi
dWZmZXI6ICUiIFJUQ19QUkl1UyAiIDw9PiAlLjJmIG1zXG4iLCBrVGFnLAotICAgICAgICBpbnB1
dF9wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1ZmZlcigpLAotICAgICAgICBpbnB1dF9wYXJhbWV0
ZXJzXy5HZXRCdWZmZXJTaXplSW5NaWxsaXNlY29uZHMoKSk7Ci19Ci0KLS8vIEFkZCBkZXZpY2Ut
c3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIHRlc3QgZm9yIGxvZ2dpbmcgcHVycG9zZXMuCi1U
RVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTaG93RGV2aWNlSW5mbykgewotICBzdGQ6OnN0cmluZyBt
b2RlbCA9Ci0gICAgICBKYXZhVG9OYXRpdmVTdHJpbmcoam5pXywgSmF2YV9CdWlsZEluZm9fZ2V0
RGV2aWNlTW9kZWwoam5pXykpOwotICBzdGQ6OnN0cmluZyBicmFuZCA9IEphdmFUb05hdGl2ZVN0
cmluZyhqbmlfLCBKYXZhX0J1aWxkSW5mb19nZXRCcmFuZChqbmlfKSk7Ci0gIHN0ZDo6c3RyaW5n
IG1hbnVmYWN0dXJlciA9Ci0gICAgICBKYXZhVG9OYXRpdmVTdHJpbmcoam5pXywgSmF2YV9CdWls
ZEluZm9fZ2V0RGV2aWNlTWFudWZhY3R1cmVyKGpuaV8pKTsKLQotICBQUklOVCgiJXNtb2RlbDog
JXNcbiIsIGtUYWcsIG1vZGVsLmNfc3RyKCkpOwotICBQUklOVCgiJXNicmFuZDogJXNcbiIsIGtU
YWcsIGJyYW5kLmNfc3RyKCkpOwotICBQUklOVCgiJXNtYW51ZmFjdHVyZXI6ICVzXG4iLCBrVGFn
LCBtYW51ZmFjdHVyZXIuY19zdHIoKSk7Ci19Ci0KLS8vIEFkZCBBbmRyb2lkIGJ1aWxkIGluZm9y
bWF0aW9uIHRvIHRoZSB0ZXN0IGZvciBsb2dnaW5nIHB1cnBvc2VzLgotVEVTVF9GKEF1ZGlvRGV2
aWNlVGVzdCwgU2hvd0J1aWxkSW5mbykgewotICBzdGQ6OnN0cmluZyByZWxlYXNlID0KLSAgICAg
IEphdmFUb05hdGl2ZVN0cmluZyhqbmlfLCBKYXZhX0J1aWxkSW5mb19nZXRCdWlsZFJlbGVhc2Uo
am5pXykpOwotICBzdGQ6OnN0cmluZyBidWlsZF9pZCA9Ci0gICAgICBKYXZhVG9OYXRpdmVTdHJp
bmcoam5pXywgSmF2YV9CdWlsZEluZm9fZ2V0QW5kcm9pZEJ1aWxkSWQoam5pXykpOwotICBzdGQ6
OnN0cmluZyBidWlsZF90eXBlID0KLSAgICAgIEphdmFUb05hdGl2ZVN0cmluZyhqbmlfLCBKYXZh
X0J1aWxkSW5mb19nZXRCdWlsZFR5cGUoam5pXykpOwotICBpbnQgc2RrID0gSmF2YV9CdWlsZElu
Zm9fZ2V0U2RrVmVyc2lvbihqbmlfKTsKLQotICBQUklOVCgiJXNidWlsZCByZWxlYXNlOiAlc1xu
Iiwga1RhZywgcmVsZWFzZS5jX3N0cigpKTsKLSAgUFJJTlQoIiVzYnVpbGQgaWQ6ICVzXG4iLCBr
VGFnLCBidWlsZF9pZC5jX3N0cigpKTsKLSAgUFJJTlQoIiVzYnVpbGQgdHlwZTogJXNcbiIsIGtU
YWcsIGJ1aWxkX3R5cGUuY19zdHIoKSk7Ci0gIFBSSU5UKCIlc1NESyB2ZXJzaW9uOiAlZFxuIiwg
a1RhZywgc2RrKTsKLX0KLQotLy8gQmFzaWMgdGVzdCBvZiB0aGUgQXVkaW9QYXJhbWV0ZXJzIGNs
YXNzIHVzaW5nIGRlZmF1bHQgY29uc3RydWN0aW9uIHdoZXJlCi0vLyBhbGwgbWVtYmVycyBhcmUg
c2V0IHRvIHplcm8uCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBBdWRpb1BhcmFtZXRlcnNXaXRo
RGVmYXVsdENvbnN0cnVjdGlvbikgewotICBBdWRpb1BhcmFtZXRlcnMgcGFyYW1zOwotICBFWFBF
Q1RfRkFMU0UocGFyYW1zLmlzX3ZhbGlkKCkpOwotICBFWFBFQ1RfRVEoMCwgcGFyYW1zLnNhbXBs
ZV9yYXRlKCkpOwotICBFWFBFQ1RfRVEoMFUsIHBhcmFtcy5jaGFubmVscygpKTsKLSAgRVhQRUNU
X0VRKDBVLCBwYXJhbXMuZnJhbWVzX3Blcl9idWZmZXIoKSk7Ci0gIEVYUEVDVF9FUSgwVSwgcGFy
YW1zLmZyYW1lc19wZXJfMTBtc19idWZmZXIoKSk7Ci0gIEVYUEVDVF9FUSgwVSwgcGFyYW1zLkdl
dEJ5dGVzUGVyRnJhbWUoKSk7Ci0gIEVYUEVDVF9FUSgwVSwgcGFyYW1zLkdldEJ5dGVzUGVyQnVm
ZmVyKCkpOwotICBFWFBFQ1RfRVEoMFUsIHBhcmFtcy5HZXRCeXRlc1BlcjEwbXNCdWZmZXIoKSk7
Ci0gIEVYUEVDVF9FUSgwLjBmLCBwYXJhbXMuR2V0QnVmZmVyU2l6ZUluTWlsbGlzZWNvbmRzKCkp
OwotfQotCi0vLyBCYXNpYyB0ZXN0IG9mIHRoZSBBdWRpb1BhcmFtZXRlcnMgY2xhc3MgdXNpbmcg
bm9uIGRlZmF1bHQgY29uc3RydWN0aW9uLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgQXVkaW9Q
YXJhbWV0ZXJzV2l0aE5vbkRlZmF1bHRDb25zdHJ1Y3Rpb24pIHsKLSAgY29uc3QgaW50IGtTYW1w
bGVSYXRlID0gNDgwMDA7Ci0gIGNvbnN0IHNpemVfdCBrQ2hhbm5lbHMgPSAxOwotICBjb25zdCBz
aXplX3Qga0ZyYW1lc1BlckJ1ZmZlciA9IDQ4MDsKLSAgY29uc3Qgc2l6ZV90IGtGcmFtZXNQZXIx
MG1zQnVmZmVyID0gNDgwOwotICBjb25zdCBzaXplX3Qga0J5dGVzUGVyRnJhbWUgPSAyOwotICBj
b25zdCBmbG9hdCBrQnVmZmVyU2l6ZUluTXMgPSAxMC4wZjsKLSAgQXVkaW9QYXJhbWV0ZXJzIHBh
cmFtcyhrU2FtcGxlUmF0ZSwga0NoYW5uZWxzLCBrRnJhbWVzUGVyQnVmZmVyKTsKLSAgRVhQRUNU
X1RSVUUocGFyYW1zLmlzX3ZhbGlkKCkpOwotICBFWFBFQ1RfRVEoa1NhbXBsZVJhdGUsIHBhcmFt
cy5zYW1wbGVfcmF0ZSgpKTsKLSAgRVhQRUNUX0VRKGtDaGFubmVscywgcGFyYW1zLmNoYW5uZWxz
KCkpOwotICBFWFBFQ1RfRVEoa0ZyYW1lc1BlckJ1ZmZlciwgcGFyYW1zLmZyYW1lc19wZXJfYnVm
ZmVyKCkpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihrU2FtcGxlUmF0ZSAvIDEw
MCksCi0gICAgICAgICAgICBwYXJhbXMuZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpKTsKLSAgRVhQ
RUNUX0VRKGtCeXRlc1BlckZyYW1lLCBwYXJhbXMuR2V0Qnl0ZXNQZXJGcmFtZSgpKTsKLSAgRVhQ
RUNUX0VRKGtCeXRlc1BlckZyYW1lICoga0ZyYW1lc1BlckJ1ZmZlciwgcGFyYW1zLkdldEJ5dGVz
UGVyQnVmZmVyKCkpOwotICBFWFBFQ1RfRVEoa0J5dGVzUGVyRnJhbWUgKiBrRnJhbWVzUGVyMTBt
c0J1ZmZlciwKLSAgICAgICAgICAgIHBhcmFtcy5HZXRCeXRlc1BlcjEwbXNCdWZmZXIoKSk7Ci0g
IEVYUEVDVF9FUShrQnVmZmVyU2l6ZUluTXMsIHBhcmFtcy5HZXRCdWZmZXJTaXplSW5NaWxsaXNl
Y29uZHMoKSk7Ci19Ci0KLS8vIFN0YXJ0IHBsYXlvdXQgYW5kIHJlY29yZGluZyBhbmQgc3RvcmUg
cmVjb3JkZWQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUgRklGTwotLy8gYnVmZmVyIGZyb20gd2hp
Y2ggdGhlIHBsYXlvdXQgc2lkZSB0aGVuIHJlYWRzIGl0cyBzYW1wbGVzIGluIHRoZSBzYW1lIG9y
ZGVyCi0vLyBhcyB0aGV5IHdlcmUgc3RvcmVkLiBVbmRlciBpZGVhbCBjaXJjdW1zdGFuY2VzLCBh
IGNhbGxiYWNrIHNlcXVlbmNlIHdvdWxkCi0vLyBsb29rIGxpa2U6IC4uListKy0rLSstKy0rLSst
Li4uLCB3aGVyZSAnKycgbWVhbnMgJ3BhY2tldCByZWNvcmRlZCcgYW5kICctJwotLy8gbWVhbnMg
J3BhY2tldCBwbGF5ZWQnLiBVbmRlciBzdWNoIGNvbmRpdGlvbnMsIHRoZSBGSUZPIHdvdWxkIG9u
bHkgY29udGFpbgotLy8gb25lIHBhY2tldCBvbiBhdmVyYWdlLiBIb3dldmVyLCB1bmRlciBtb3Jl
IHJlYWxpc3RpYyBjb25kaXRpb25zLCB0aGUgc2l6ZQotLy8gb2YgdGhlIEZJRk8gd2lsbCB2YXJ5
IG1vcmUgZHVlIHRvIGFuIHVuYmFsYW5jZSBiZXR3ZWVuIHRoZSB0d28gc2lkZXMuCi0vLyBUaGlz
IHRlc3QgdHJpZXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGRldmljZSBtYWludGFpbnMgYSBiYWxhbmNl
ZCBjYWxsYmFjay0KLS8vIHNlcXVlbmNlIGJ5IHJ1bm5pbmcgaW4gbG9vcGJhY2sgZm9yIGtGdWxs
RHVwbGV4VGltZUluU2VjIHNlY29uZHMgd2hpbGUKLS8vIG1lYXN1cmluZyB0aGUgc2l6ZSAobWF4
IGFuZCBhdmVyYWdlKSBvZiB0aGUgRklGTy4gVGhlIHNpemUgb2YgdGhlIEZJRk8gaXMKLS8vIGlu
Y3JlYXNlZCBieSB0aGUgcmVjb3JkaW5nIHNpZGUgYW5kIGRlY3JlYXNlZCBieSB0aGUgcGxheW91
dCBzaWRlLgotLy8gVE9ETyhoZW5yaWthKTogdHVuZSB0aGUgZmluYWwgdGVzdCBwYXJhbWV0ZXJz
IGFmdGVyIHJ1bm5pbmcgdGVzdHMgb24gc2V2ZXJhbAotLy8gZGlmZmVyZW50IGRldmljZXMuCi0v
LyBEaXNhYmxpbmcgdGhpcyB0ZXN0IG9uIGJvdHMgc2luY2UgaXQgaXMgZGlmZmljdWx0IHRvIGNv
bWUgdXAgd2l0aCBhIHJvYnVzdAotLy8gdGVzdCBjb25kaXRpb24gdGhhdCBhbGwgd29ya2VkIGFz
IGludGVuZGVkLiBUaGUgbWFpbiBpc3N1ZSBpcyB0aGF0LCB3aGVuCi0vLyBzd2FybWluZyBpcyB1
c2VkLCBhbiBpbml0aWFsIGxhdGVuY3kgY2FuIGJlIGJ1aWx0IHVwIHdoZW4gdGhlIGJvdGggc2lk
ZXMKLS8vIHN0YXJ0cyBhdCBkaWZmZXJlbnQgdGltZXMuIEhlbmNlLCB0aGUgdGVzdCBjYW4gZmFp
bCBldmVuIGlmIGF1ZGlvIHdvcmtzCi0vLyBhcyBpbnRlbmRlZC4gS2VlcGluZyB0aGUgdGVzdCBz
byBpdCBjYW4gYmUgZW5hYmxlZCBtYW51YWxseS4KLS8vIGh0dHA6Ly9idWdzLndlYnJ0Yy5vcmcv
Nzc0NAotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgRElTQUJMRURfUnVuUGxheW91dEFuZFJlY29y
ZGluZ0luRnVsbER1cGxleCkgewotICBFWFBFQ1RfRVEocmVjb3JkX2NoYW5uZWxzKCksIHBsYXlv
dXRfY2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUShyZWNvcmRfc2FtcGxlX3JhdGUoKSwgcGxheW91
dF9zYW1wbGVfcmF0ZSgpKTsKLSAgTmljZU1vY2s8TW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZD4g
bW9jayhrUGxheW91dCB8IGtSZWNvcmRpbmcpOwotICBzdGQ6OnVuaXF1ZV9wdHI8Rmlmb0F1ZGlv
U3RyZWFtPiBmaWZvX2F1ZGlvX3N0cmVhbSgKLSAgICAgIG5ldyBGaWZvQXVkaW9TdHJlYW0ocGxh
eW91dF9mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpKTsKLSAgbW9jay5IYW5kbGVDYWxsYmFja3Mo
JnRlc3RfaXNfZG9uZV8sIGZpZm9fYXVkaW9fc3RyZWFtLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICBrRnVsbER1cGxleFRpbWVJblNlYyAqIGtOdW1DYWxsYmFja3NQZXJTZWNvbmQpOwot
ICBTZXRNYXhQbGF5b3V0Vm9sdW1lKCk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+
UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0gIFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIFN0
YXJ0UGxheW91dCgpOwotICB0ZXN0X2lzX2RvbmVfLldhaXQoCi0gICAgICBzdGQ6Om1heChrVGVz
dFRpbWVPdXRJbk1pbGxpc2Vjb25kcywgMTAwMCAqIGtGdWxsRHVwbGV4VGltZUluU2VjKSk7Ci0g
IFN0b3BQbGF5b3V0KCk7Ci0gIFN0b3BSZWNvcmRpbmcoKTsKLQotICAvLyBUaGVzZSB0aHJlc2hv
bGRzIGFyZSBzZXQgcmF0aGVyIGhpZ2ggdG8gYWNjb21vZGF0ZSBkaWZmZXJlbmNlcyBpbiBoYXJk
d2FyZQotICAvLyBpbiBzZXZlcmFsIGRldmljZXMsIHNvIHRoaXMgdGVzdCBjYW4gYmUgdXNlZCBp
biBzd2FybWluZy4KLSAgLy8gU2VlIGh0dHA6Ly9idWdzLndlYnJ0Yy5vcmcvNjQ2NAotICBFWFBF
Q1RfTEUoZmlmb19hdWRpb19zdHJlYW0tPmF2ZXJhZ2Vfc2l6ZSgpLCA2MHUpOwotICBFWFBFQ1Rf
TEUoZmlmb19hdWRpb19zdHJlYW0tPmxhcmdlc3Rfc2l6ZSgpLCA3MHUpOwotfQotCi0vLyBNZWFz
dXJlcyBsb29wYmFjayBsYXRlbmN5IGFuZCByZXBvcnRzIHRoZSBtaW4sIG1heCBhbmQgYXZlcmFn
ZSB2YWx1ZXMgZm9yCi0vLyBhIGZ1bGwgZHVwbGV4IGF1ZGlvIHNlc3Npb24uCi0vLyBUaGUgbGF0
ZW5jeSBpcyBtZWFzdXJlZCBsaWtlIHNvOgotLy8gLSBJbnNlcnQgaW1wdWxzZXMgcGVyaW9kaWNh
bGx5IG9uIHRoZSBvdXRwdXQgc2lkZS4KLS8vIC0gRGV0ZWN0IHRoZSBpbXB1bHNlcyBvbiB0aGUg
aW5wdXQgc2lkZS4KLS8vIC0gTWVhc3VyZSB0aGUgdGltZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhl
IHRyYW5zbWl0IHRpbWUgYW5kIHJlY2VpdmUgdGltZS4KLS8vIC0gU3RvcmUgdGltZSBkaWZmZXJl
bmNlcyBpbiBhIHZlY3RvciBhbmQgY2FsY3VsYXRlIG1pbiwgbWF4IGFuZCBhdmVyYWdlLgotLy8g
VGhpcyB0ZXN0IHJlcXVpcmVzIGEgc3BlY2lhbCBoYXJkd2FyZSBjYWxsZWQgQXVkaW8gTG9vcGJh
Y2sgRG9uZ2xlLgotLy8gU2VlIGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2aWNlcy9hdWRp
by9sb29wYmFjay5odG1sIGZvciBkZXRhaWxzLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgRElT
QUJMRURfTWVhc3VyZUxvb3BiYWNrTGF0ZW5jeSkgewotICBFWFBFQ1RfRVEocmVjb3JkX2NoYW5u
ZWxzKCksIHBsYXlvdXRfY2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUShyZWNvcmRfc2FtcGxlX3Jh
dGUoKSwgcGxheW91dF9zYW1wbGVfcmF0ZSgpKTsKLSAgTmljZU1vY2s8TW9ja0F1ZGlvVHJhbnNw
b3J0QW5kcm9pZD4gbW9jayhrUGxheW91dCB8IGtSZWNvcmRpbmcpOwotICBzdGQ6OnVuaXF1ZV9w
dHI8TGF0ZW5jeU1lYXN1cmluZ0F1ZGlvU3RyZWFtPiBsYXRlbmN5X2F1ZGlvX3N0cmVhbSgKLSAg
ICAgIG5ldyBMYXRlbmN5TWVhc3VyaW5nQXVkaW9TdHJlYW0ocGxheW91dF9mcmFtZXNfcGVyXzEw
bXNfYnVmZmVyKCkpKTsKLSAgbW9jay5IYW5kbGVDYWxsYmFja3MoJnRlc3RfaXNfZG9uZV8sIGxh
dGVuY3lfYXVkaW9fc3RyZWFtLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICBrTWVhc3Vy
ZUxhdGVuY3lUaW1lSW5TZWMgKiBrTnVtQ2FsbGJhY2tzUGVyU2Vjb25kKTsKLSAgRVhQRUNUX0VR
KDAsIGF1ZGlvX2RldmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2soJm1vY2spKTsKLSAgU2V0
TWF4UGxheW91dFZvbHVtZSgpOwotICBEaXNhYmxlQnVpbHRJbkFFQ0lmQXZhaWxhYmxlKCk7Ci0g
IFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICB0ZXN0X2lzX2RvbmVfLldh
aXQoCi0gICAgICBzdGQ6Om1heChrVGVzdFRpbWVPdXRJbk1pbGxpc2Vjb25kcywgMTAwMCAqIGtN
ZWFzdXJlTGF0ZW5jeVRpbWVJblNlYykpOwotICBTdG9wUGxheW91dCgpOwotICBTdG9wUmVjb3Jk
aW5nKCk7Ci0gIC8vIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IG51bWJlciBvZiB0cmFuc21pdHRl
ZCBpbXB1bHNlcyBhcmUgZGV0ZWN0ZWQuCi0gIEVYUEVDVF9FUShsYXRlbmN5X2F1ZGlvX3N0cmVh
bS0+bnVtX2xhdGVuY3lfdmFsdWVzKCksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+
KAotICAgICAgICAgICAgICAgIGtJbXB1bHNlRnJlcXVlbmN5SW5IeiAqIGtNZWFzdXJlTGF0ZW5j
eVRpbWVJblNlYyAtIDEpKTsKLSAgbGF0ZW5jeV9hdWRpb19zdHJlYW0tPlByaW50UmVzdWx0cygp
OwotfQotCi1URVNUKEphdmFBdWRpb0RldmljZVRlc3QsIFRlc3RSdW5uaW5nVHdvQWRtc1NpbXVs
dGFuZW91c2x5KSB7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
KCk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBjb250ZXh0ID0gdGVzdDo6R2V0QXBw
Q29udGV4dEZvclRlc3Qoam5pKTsKLQotICAvLyBDcmVhdGUgYW5kIHN0YXJ0IHRoZSBmaXJzdCBB
RE0uCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVsZT4gYWRtXzEgPQotICAg
ICAgQ3JlYXRlSmF2YUF1ZGlvRGV2aWNlTW9kdWxlKGpuaSwgY29udGV4dC5vYmooKSk7Ci0gIEVY
UEVDVF9FUSgwLCBhZG1fMS0+SW5pdCgpKTsKLSAgRVhQRUNUX0VRKDAsIGFkbV8xLT5Jbml0UmVj
b3JkaW5nKCkpOwotICBFWFBFQ1RfRVEoMCwgYWRtXzEtPlN0YXJ0UmVjb3JkaW5nKCkpOwotCi0g
IC8vIENyZWF0ZSBhbmQgc3RhcnQgYSBzZWNvbmQgQURNLiBFeHBlY3QgdGhpcyB0byBmYWlsIGR1
ZSB0byB0aGUgbWljcm9waG9uZQotICAvLyBhbHJlYWR5IGJlaW5nIGluIHVzZS4KLSAgcnRjOjpz
Y29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9kdWxlPiBhZG1fMiA9Ci0gICAgICBDcmVhdGVKYXZh
QXVkaW9EZXZpY2VNb2R1bGUoam5pLCBjb250ZXh0Lm9iaigpKTsKLSAgaW50MzJfdCBlcnIgPSBh
ZG1fMi0+SW5pdCgpOwotICBlcnIgfD0gYWRtXzItPkluaXRSZWNvcmRpbmcoKTsKLSAgZXJyIHw9
IGFkbV8yLT5TdGFydFJlY29yZGluZygpOwotICBFWFBFQ1RfTkUoMCwgZXJyKTsKLQotICAvLyBT
dG9wIGFuZCB0ZXJtaW5hdGUgc2Vjb25kIGFkbS4KLSAgYWRtXzItPlN0b3BSZWNvcmRpbmcoKTsK
LSAgYWRtXzItPlRlcm1pbmF0ZSgpOwotCi0gIC8vIFN0b3AgZmlyc3QgQURNLgotICBFWFBFQ1Rf
RVEoMCwgYWRtXzEtPlN0b3BSZWNvcmRpbmcoKSk7Ci0gIEVYUEVDVF9FUSgwLCBhZG1fMS0+VGVy
bWluYXRlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi0KLX0gIC8vIG5hbWVzcGFjZSB3
ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvY29kZWNzL0RFUFMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRl
c3RzL2NvZGVjcy9ERVBTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjJjMzBmYWIx
NGFkZTZjOGNiNDlmMTM0ODYyNjU5MTdjMmY2YTIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvY29kZWNzL0RFUFMKKysrIC9kZXYv
bnVsbApAQCAtMSwzICswLDAgQEAKLWluY2x1ZGVfcnVsZXMgPSBbCi0gICIrbWVkaWEvYmFzZS9t
ZWRpYV9jb25zdGFudHMuaCIsCi1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2NvZGVjcy93
cmFwcGVyX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9jb2RlY3Mvd3JhcHBlcl91bml0dGVz
dC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg1ODA5NWQwNWJkNzNmNzUzZGE4
ZDMzOWZkMzlkYzAwZTA2ZTExOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2NvZGVjcy93cmFwcGVyX3VuaXR0ZXN0LmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTggVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNs
dWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJhYnNsL21lbW9yeS9tZW1vcnkuaCIKLSNpbmNsdWRl
ICJtZWRpYS9iYXNlL21lZGlhX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dl
bmVyYXRlZF9uYXRpdmVfdW5pdHRlc3RzX2puaS9Db2RlY3NXcmFwcGVyVGVzdEhlbHBlcl9qbmku
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2NvZGVjcy93cmFwcGVyLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19lbmNvZGVyX3dyYXBwZXIuaCIKLSNp
bmNsdWRlICJ0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRl
c3QgewotbmFtZXNwYWNlIHsKLVRFU1QoSmF2YUNvZGVjc1dyYXBwZXJUZXN0LCBKYXZhVG9OYXRp
dmVWaWRlb0NvZGVjSW5mbykgewotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJ
Zk5lZWRlZCgpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal92aWRlb19jb2RlY19p
bmZvID0KLSAgICAgIGpuaTo6SmF2YV9Db2RlY3NXcmFwcGVyVGVzdEhlbHBlcl9jcmVhdGVUZXN0
VmlkZW9Db2RlY0luZm8oZW52KTsKLQotICBjb25zdCBTZHBWaWRlb0Zvcm1hdCB2aWRlb19mb3Jt
YXQgPQotICAgICAgSmF2YVRvTmF0aXZlVmlkZW9Db2RlY0luZm8oZW52LCBqX3ZpZGVvX2NvZGVj
X2luZm8ub2JqKCkpOwotCi0gIEVYUEVDVF9FUShjcmlja2V0OjprSDI2NENvZGVjTmFtZSwgdmlk
ZW9fZm9ybWF0Lm5hbWUpOwotICBjb25zdCBhdXRvIGl0ID0KLSAgICAgIHZpZGVvX2Zvcm1hdC5w
YXJhbWV0ZXJzLmZpbmQoY3JpY2tldDo6a0gyNjRGbXRwUHJvZmlsZUxldmVsSWQpOwotICBBU1NF
UlRfTkUoaXQsIHZpZGVvX2Zvcm1hdC5wYXJhbWV0ZXJzLmVuZCgpKTsKLSAgRVhQRUNUX0VRKGNy
aWNrZXQ6OmtIMjY0UHJvZmlsZUxldmVsQ29uc3RyYWluZWRCYXNlbGluZSwgaXQtPnNlY29uZCk7
Ci19Ci0KLVRFU1QoSmF2YUNvZGVjc1dyYXBwZXJUZXN0LCBKYXZhVG9OYXRpdmVSZXNvbHV0aW9u
Qml0cmF0ZUxpbWl0cykgewotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5l
ZWRlZCgpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9mYWtlX2VuY29kZXIgPQot
ICAgICAgam5pOjpKYXZhX0NvZGVjc1dyYXBwZXJUZXN0SGVscGVyX2NyZWF0ZUZha2VWaWRlb0Vu
Y29kZXIoZW52KTsKLQotICBhdXRvIGVuY29kZXIgPSBqbmk6OkphdmFUb05hdGl2ZVZpZGVvRW5j
b2RlcihlbnYsIGpfZmFrZV9lbmNvZGVyKTsKLSAgQVNTRVJUX1RSVUUoZW5jb2Rlcik7Ci0KLSAg
Ly8gQ2hlY2sgdGhhdCB0aGUgYml0cmF0ZSBsaW1pdHMgY29ycmVjdGx5IHBhc3NlZCBmcm9tIEph
dmEgdG8gbmF0aXZlLgotICBjb25zdCBzdGQ6OnZlY3RvcjxWaWRlb0VuY29kZXI6OlJlc29sdXRp
b25CaXRyYXRlTGltaXRzPiBiaXRyYXRlX2xpbWl0cyA9Ci0gICAgICBlbmNvZGVyLT5HZXRFbmNv
ZGVySW5mbygpLnJlc29sdXRpb25fYml0cmF0ZV9saW1pdHM7Ci0gIEFTU0VSVF9FUShiaXRyYXRl
X2xpbWl0cy5zaXplKCksIDF1KTsKLSAgRVhQRUNUX0VRKGJpdHJhdGVfbGltaXRzWzBdLmZyYW1l
X3NpemVfcGl4ZWxzLCA2NDAgKiAzNjApOwotICBFWFBFQ1RfRVEoYml0cmF0ZV9saW1pdHNbMF0u
bWluX3N0YXJ0X2JpdHJhdGVfYnBzLCAzMDAwMDApOwotICBFWFBFQ1RfRVEoYml0cmF0ZV9saW1p
dHNbMF0ubWluX2JpdHJhdGVfYnBzLCAyMDAwMDApOwotICBFWFBFQ1RfRVEoYml0cmF0ZV9saW1p
dHNbMF0ubWF4X2JpdHJhdGVfYnBzLCAxMDAwMDAwKTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotfSAg
Ly8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2
ZV91bml0dGVzdHMvamF2YV90eXBlc191bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvamF2YV90
eXBlc191bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3YTZlZDdj
YTc4ZWY3NTk1NzAwNWI4ODFkZDU5NjBhMDBiYjdkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL2phdmFfdHlwZXNfdW5pdHRlc3Qu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykg
MjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9nZW5lcmF0ZWRfbmF0aXZlX3VuaXR0ZXN0c19qbmkvSmF2YVR5cGVzVGVzdEhlbHBl
cl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVz
LmgiCi0jaW5jbHVkZSAidGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSB0ZXN0IHsKLW5hbWVzcGFjZSB7Ci1URVNUKEphdmFUeXBlc1Rlc3QsIFRlc3RKYXZhVG9O
YXRpdmVTdHJpbmdNYXApIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZO
ZWVkZWQoKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfbWFwID0KLSAgICAgIGpu
aTo6SmF2YV9KYXZhVHlwZXNUZXN0SGVscGVyX2NyZWF0ZVRlc3RTdHJpbmdNYXAoZW52KTsKLQot
ICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG91dHB1dCA9IEphdmFUb05hdGl2
ZVN0cmluZ01hcChlbnYsIGpfbWFwKTsKLQotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpz
dHJpbmc+IGV4cGVjdGVkewotICAgICAgeyJvbmUiLCAiMSJ9LCB7InR3byIsICIyIn0sIHsidGhy
ZWUiLCAiMyJ9LAotICB9OwotICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIG91dHB1dCk7Ci19Ci0KLVRF
U1QoSmF2YVR5cGVzVGVzdCwgVGVzdE5hdGl2ZVRvSmF2YVRvTmF0aXZlSW50QXJyYXkpIHsKLSAg
Sk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLQotICBzdGQ6OnZl
Y3RvcjxpbnQzMl90PiB0ZXN0X2RhdGF7MSwgMjAsIDMwMH07Ci0KLSAgU2NvcGVkSmF2YUxvY2Fs
UmVmPGppbnRBcnJheT4gYXJyYXkgPSBOYXRpdmVUb0phdmFJbnRBcnJheShlbnYsIHRlc3RfZGF0
YSk7Ci0gIEVYUEVDVF9FUSh0ZXN0X2RhdGEsIEphdmFUb05hdGl2ZUludEFycmF5KGVudiwgYXJy
YXkpKTsKLX0KLQotVEVTVChKYXZhVHlwZXNUZXN0LCBUZXN0TmF0aXZlVG9KYXZhVG9OYXRpdmVC
eXRlQXJyYXkpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQo
KTsKLQotICBzdGQ6OnZlY3RvcjxpbnQ4X3Q+IHRlc3RfZGF0YXsxLCAyMCwgMzB9OwotCi0gIFNj
b3BlZEphdmFMb2NhbFJlZjxqYnl0ZUFycmF5PiBhcnJheSA9IE5hdGl2ZVRvSmF2YUJ5dGVBcnJh
eShlbnYsIHRlc3RfZGF0YSk7Ci0gIEVYUEVDVF9FUSh0ZXN0X2RhdGEsIEphdmFUb05hdGl2ZUJ5
dGVBcnJheShlbnYsIGFycmF5KSk7Ci19Ci0KLVRFU1QoSmF2YVR5cGVzVGVzdCwgVGVzdE5hdGl2
ZVRvSmF2YVRvTmF0aXZlSW50QXJyYXlMZWFrVGVzdCkgewotICBKTklFbnYqIGVudiA9IEF0dGFj
aEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotCi0gIHN0ZDo6dmVjdG9yPGludDMyX3Q+IHRlc3Rf
ZGF0YXsxLCAyMCwgMzAwfTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDA7IGkrKykgewot
ICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqaW50QXJyYXk+IGFycmF5ID0gTmF0aXZlVG9KYXZhSW50
QXJyYXkoZW52LCB0ZXN0X2RhdGEpOwotICAgIEVYUEVDVF9FUSh0ZXN0X2RhdGEsIEphdmFUb05h
dGl2ZUludEFycmF5KGVudiwgYXJyYXkpKTsKLSAgfQotfQotCi1URVNUKEphdmFUeXBlc1Rlc3Qs
IFRlc3ROYXRpdmVUb0phdmFUb05hdGl2ZUJ5dGVBcnJheUxlYWtUZXN0KSB7Ci0gIEpOSUVudiog
ZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0KLSAgc3RkOjp2ZWN0b3I8aW50
OF90PiB0ZXN0X2RhdGF7MSwgMjAsIDMwfTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDA7
IGkrKykgewotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqYnl0ZUFycmF5PiBhcnJheSA9Ci0gICAg
ICAgIE5hdGl2ZVRvSmF2YUJ5dGVBcnJheShlbnYsIHRlc3RfZGF0YSk7Ci0gICAgRVhQRUNUX0VR
KHRlc3RfZGF0YSwgSmF2YVRvTmF0aXZlQnl0ZUFycmF5KGVudiwgYXJyYXkpKTsKLSAgfQotfQot
fSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9vcmcvd2VicnRjL0FwcGxpY2F0aW9uQ29u
dGV4dFByb3ZpZGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMvQXBwbGljYXRpb25D
b250ZXh0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwZDM0
NzEwZDMwMWUzNWI1MzE4Mjc4OTgxODNmODUxODQ1ZTgyYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMvQXBwbGlj
YXRpb25Db250ZXh0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEFwcGxpY2F0aW9uQ29udGV4
dFByb3ZpZGVyIHsKLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMgQ29udGV4dCBn
ZXRBcHBsaWNhdGlvbkNvbnRleHRGb3JUZXN0KCkgewotICAgIHJldHVybiBDb250ZXh0VXRpbHMu
Z2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVz
dHMvb3JnL3dlYnJ0Yy9CdWlsZEluZm8uamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9C
dWlsZEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0MGFlNDIwOTk4
OTVkODlhZWRjNjJiOGNjMzE2NzcyNTM5YTY2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMvQnVpbGRJbmZvLmph
dmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9y
dCBvcmcud2VicnRjLkNhbGxlZEJ5TmF0aXZlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQnVpbGRJ
bmZvIHsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlKCkgewotICAgIHJldHVybiBC
dWlsZC5ERVZJQ0U7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIHN0YXRpYyBT
dHJpbmcgZ2V0RGV2aWNlTW9kZWwoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLk1PREVMOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvZHVjdCgpIHsKLSAgICByZXR1cm4gQnVpbGQu
UFJPRFVDVDsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgc3RhdGljIFN0cmlu
ZyBnZXRCcmFuZCgpIHsKLSAgICByZXR1cm4gQnVpbGQuQlJBTkQ7Ci0gIH0KLQotICBAQ2FsbGVk
QnlOYXRpdmUKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlTWFudWZhY3R1cmVyKCkg
ewotICAgIHJldHVybiBCdWlsZC5NQU5VRkFDVFVSRVI7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRp
dmUKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QW5kcm9pZEJ1aWxkSWQoKSB7Ci0gICAgcmV0
dXJuIEJ1aWxkLklEOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMg
U3RyaW5nIGdldEJ1aWxkVHlwZSgpIHsKLSAgICByZXR1cm4gQnVpbGQuVFlQRTsKLSAgfQotCi0g
IEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCdWlsZFJlbGVhc2Uo
KSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uUkVMRUFTRTsKLSAgfQotCi0gIEBDYWxsZWRC
eU5hdGl2ZQotICBwdWJsaWMgc3RhdGljIGludCBnZXRTZGtWZXJzaW9uKCkgewotICAgIHJldHVy
biBCdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVz
dHMvb3JnL3dlYnJ0Yy9Db2RlY3NXcmFwcGVyVGVzdEhlbHBlci5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0
cy9vcmcvd2VicnRjL0NvZGVjc1dyYXBwZXJUZXN0SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDcwMTUxZDNiNzhiNjdhZTA3MDk3MTM2YjY1ZTNjNGJhMGQ2N2RkN2Uu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0
ZXN0cy9vcmcvd2VicnRjL0NvZGVjc1dyYXBwZXJUZXN0SGVscGVyLmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSwzMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxOCBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1h
cDsKLQotcHVibGljIGNsYXNzIENvZGVjc1dyYXBwZXJUZXN0SGVscGVyIHsKLSAgQENhbGxlZEJ5
TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9Db2RlY0luZm8gY3JlYXRlVGVzdFZpZGVvQ29k
ZWNJbmZvKCkgewotICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zID0gbmV3IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+KCk7Ci0gICAgcGFyYW1zLnB1dCgKLSAgICAgICAgVmlkZW9Db2RlY0lu
Zm8uSDI2NF9GTVRQX1BST0ZJTEVfTEVWRUxfSUQsIFZpZGVvQ29kZWNJbmZvLkgyNjRfQ09OU1RS
QUlORURfQkFTRUxJTkVfM18xKTsKLQotICAgIFZpZGVvQ29kZWNJbmZvIGNvZGVjX2luZm8gPSBu
ZXcgVmlkZW9Db2RlY0luZm8oIkgyNjQiLCBwYXJhbXMpOwotICAgIHJldHVybiBjb2RlY19pbmZv
OwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9FbmNvZGVy
IGNyZWF0ZUZha2VWaWRlb0VuY29kZXIoKSB7Ci0gICAgcmV0dXJuIG5ldyBGYWtlVmlkZW9FbmNv
ZGVyKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9GYWtl
VmlkZW9FbmNvZGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMvRmFrZVZpZGVvRW5j
b2Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzU5YjQ5YzVmYzMwYzhm
MGI3MDYzNTY1YzlhZWI3MDQwOTQ2YTZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9GYWtlVmlkZW9FbmNvZGVy
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgVmlk
ZW9FbmNvZGVyIHRoYXQgaXMgdXNlZCBmb3IgdGVzdGluZyBvZiBmdW5jdGlvbmFsaXRpZXMgb2YK
LSAqIFZpZGVvRW5jb2RlcldyYXBwZXIuCi0gKi8KLWNsYXNzIEZha2VWaWRlb0VuY29kZXIgaW1w
bGVtZW50cyBWaWRlb0VuY29kZXIgewotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZGVvQ29kZWNT
dGF0dXMgaW5pdEVuY29kZShTZXR0aW5ncyBzZXR0aW5ncywgQ2FsbGJhY2sgZW5jb2RlQ2FsbGJh
Y2spIHsKLSAgICByZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5PSzsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgVmlkZW9Db2RlY1N0YXR1cyByZWxlYXNlKCkgewotICAgIHJldHVybiBWaWRl
b0NvZGVjU3RhdHVzLk9LOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWRlb0NvZGVj
U3RhdHVzIGVuY29kZShWaWRlb0ZyYW1lIGZyYW1lLCBFbmNvZGVJbmZvIGluZm8pIHsKLSAgICBy
ZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5PSzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
VmlkZW9Db2RlY1N0YXR1cyBzZXRSYXRlQWxsb2NhdGlvbihCaXRyYXRlQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uLCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMuT0s7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFNjYWxpbmdTZXR0aW5ncyBnZXRTY2FsaW5n
U2V0dGluZ3MoKSB7Ci0gICAgcmV0dXJuIFNjYWxpbmdTZXR0aW5ncy5PRkY7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIFJlc29sdXRpb25CaXRyYXRlTGltaXRzW10gZ2V0UmVzb2x1dGlv
bkJpdHJhdGVMaW1pdHMoKSB7Ci0gICAgUmVzb2x1dGlvbkJpdHJhdGVMaW1pdHMgcmVzb2x1dGlv
bl9iaXRyYXRlX2xpbWl0c1tdID0gewotICAgICAgICBuZXcgUmVzb2x1dGlvbkJpdHJhdGVMaW1p
dHMoLyogZnJhbWVTaXplUGl4ZWxzID0gKi8gNjQwICogMzYwLAotICAgICAgICAgICAgLyogbWlu
U3RhcnRCaXRyYXRlQnBzID0gKi8gMzAwMDAwLAotICAgICAgICAgICAgLyogbWluQml0cmF0ZUJw
cyA9ICovIDIwMDAwMCwKLSAgICAgICAgICAgIC8qIG1heEJpdHJhdGVCcHMgPSAqLyAxMDAwMDAw
KX07Ci0KLSAgICByZXR1cm4gcmVzb2x1dGlvbl9iaXRyYXRlX2xpbWl0czsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgU3RyaW5nIGdldEltcGxlbWVudGF0aW9uTmFtZSgpIHsKLSAgICBy
ZXR1cm4gIkZha2VWaWRlb0VuY29kZXIiOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRl
c3RzL29yZy93ZWJydGMvSmF2YVR5cGVzVGVzdEhlbHBlci5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9v
cmcvd2VicnRjL0phdmFUeXBlc1Rlc3RIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjY5NWVmNzlhZjBmYjMxZWMyNzZjMDI0ZDE0OTMyYjEwN2U3MzQ0NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL29y
Zy93ZWJydGMvSmF2YVR5cGVzVGVzdEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLXB1Ymxp
YyBjbGFzcyBKYXZhVHlwZXNUZXN0SGVscGVyIHsKLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1Ymxp
YyBzdGF0aWMgTWFwIGNyZWF0ZVRlc3RTdHJpbmdNYXAoKSB7Ci0gICAgTWFwPFN0cmluZywgU3Ry
aW5nPiB0ZXN0TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0gICAgdGVzdE1h
cC5wdXQoIm9uZSIsICIxIik7Ci0gICAgdGVzdE1hcC5wdXQoInR3byIsICIyIik7Ci0gICAgdGVz
dE1hcC5wdXQoInRocmVlIiwgIjMiKTsKLSAgICByZXR1cm4gdGVzdE1hcDsKLSAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9vcmcvd2VicnRjL0phdmFWaWRlb1NvdXJjZVRlc3RIZWxw
ZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL25hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9KYXZhVmlkZW9Tb3VyY2VUZXN0SGVs
cGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MDNhY2I0NTA4NjhkN2M4
ZGFhNzBlNGZkMjMyYmFjMzIwZGZkYTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9vcmcvd2VicnRjL0phdmFWaWRlb1NvdXJjZVRl
c3RIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhVmlk
ZW9Tb3VyY2VUZXN0SGVscGVyIHsKLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMg
dm9pZCBzdGFydENhcHR1cmUoQ2FwdHVyZXJPYnNlcnZlciBvYnNlcnZlciwgYm9vbGVhbiBzdWNj
ZXNzKSB7Ci0gICAgb2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoc3VjY2Vzcyk7Ci0gIH0KLQot
ICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHVibGljIHN0YXRpYyB2b2lkIHN0b3BDYXB0dXJlKENhcHR1
cmVyT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBvYnNlcnZlci5vbkNhcHR1cmVyU3RvcHBlZCgp
OwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkZWxpdmVy
RnJhbWUoCi0gICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0
aW1lc3RhbXBOcywgQ2FwdHVyZXJPYnNlcnZlciBvYnNlcnZlcikgewotICAgIG9ic2VydmVyLm9u
RnJhbWVDYXB0dXJlZCgKLSAgICAgICAgbmV3IFZpZGVvRnJhbWUoSmF2YUk0MjBCdWZmZXIuYWxs
b2NhdGUod2lkdGgsIGhlaWdodCksIHJvdGF0aW9uLCB0aW1lc3RhbXBOcykpOwotICB9Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5
SW5pdGlhbGl6YXRpb25IZWxwZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvb3JnL3dlYnJ0Yy9QZWVy
Q29ubmVjdGlvbkZhY3RvcnlJbml0aWFsaXphdGlvbkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0NDVhNjczM2VhNTkyODYzYTA3NWJkYjBlMGRiM2U3M2IzOTk0YmQ1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0
dGVzdHMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkZhY3RvcnlJbml0aWFsaXphdGlvbkhlbHBl
ci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250
ZXh0OwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb25GYWN0b3J5LkluaXRpYWxpemF0
aW9uT3B0aW9uczsKLQotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uRmFjdG9yeUluaXRpYWxp
emF0aW9uSGVscGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW9ja0xvYWRlciBpbXBsZW1l
bnRzIE5hdGl2ZUxpYnJhcnlMb2FkZXIgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29s
ZWFuIGxvYWQoU3RyaW5nIG5hbWUpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQot
Ci0gIEBDYWxsZWRCeU5hdGl2ZQotICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUZhY3Rv
cnlGb3JUZXN0cygpIHsKLSAgICBDb250ZXh0IGN0eCA9IENvbnRleHRVdGlscy5nZXRBcHBsaWNh
dGlvbkNvbnRleHQoKTsKLSAgICBJbml0aWFsaXphdGlvbk9wdGlvbnMgb3B0aW9ucyA9IEluaXRp
YWxpemF0aW9uT3B0aW9ucy5idWlsZGVyKGN0eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuc2V0TmF0aXZlTGlicmFyeUxvYWRlcihuZXcgTW9ja0xvYWRlcigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJbml0aWFsaXph
dGlvbk9wdGlvbnMoKTsKLQotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplKG9w
dGlvbnMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL3BlZXJjb25uZWN0aW9u
L0RFUFMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9uYXRpdmVfdW5pdHRlc3RzL3BlZXJjb25uZWN0aW9uL0RFUFMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVkNzdlYjVkNmRjYjMzMTBlNzVmMmFkZDQyMDY4OGU3YjAyMDMyYTEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0
ZXN0cy9wZWVyY29ubmVjdGlvbi9ERVBTCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1p
bmNsdWRlX3J1bGVzID0gWwotICAiK2xvZ2dpbmcvcnRjX2V2ZW50X2xvZy9ydGNfZXZlbnRfbG9n
X2ZhY3RvcnkuaCIsCi0gICIrbWVkaWEvYmFzZSIsCi0gICIrbWVkaWEvZW5naW5lIiwKLSAgIitt
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9hdWRpb19wcm9jZXNzaW5nLmgiLAotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9wZWVyY29ubmVjdGlvbi9wZWVyX2Nvbm5lY3Rpb25f
ZmFjdG9yeV91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvcGVlcmNvbm5lY3Rpb24vcGVlcl9j
b25uZWN0aW9uX2ZhY3RvcnlfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU0NjEzZjlmNTcyZWU3NjMxOTViMzkzOWJiNjNiZDEyYTc2ODc0ZTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9wZWVyY29u
bmVjdGlvbi9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeV91bml0dGVzdC5jYworKysgL2Rldi9udWxs
CkBAIC0xLDExMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotI2luY2x1ZGUgInNkay9hbmRy
b2lkL25hdGl2ZV9hcGkvcGVlcmNvbm5lY3Rpb24vcGVlcl9jb25uZWN0aW9uX2ZhY3RvcnkuaCIK
LQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImFwaS9ydGNfZXZlbnRfbG9nL3J0Y19l
dmVudF9sb2dfZmFjdG9yeS5oIgotI2luY2x1ZGUgImFwaS90YXNrX3F1ZXVlL2RlZmF1bHRfdGFz
a19xdWV1ZV9mYWN0b3J5LmgiCi0jaW5jbHVkZSAibWVkaWEvYmFzZS9tZWRpYV9lbmdpbmUuaCIK
LSNpbmNsdWRlICJtZWRpYS9lbmdpbmUvaW50ZXJuYWxfZGVjb2Rlcl9mYWN0b3J5LmgiCi0jaW5j
bHVkZSAibWVkaWEvZW5naW5lL2ludGVybmFsX2VuY29kZXJfZmFjdG9yeS5oIgotI2luY2x1ZGUg
Im1lZGlhL2VuZ2luZS93ZWJydGNfbWVkaWFfZW5naW5lLmgiCi0jaW5jbHVkZSAibWVkaWEvZW5n
aW5lL3dlYnJ0Y19tZWRpYV9lbmdpbmVfZGVmYXVsdHMuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9s
b2dnaW5nLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX25hdGl2ZV91bml0dGVz
dHNfam5pL1BlZXJDb25uZWN0aW9uRmFjdG9yeUluaXRpYWxpemF0aW9uSGVscGVyX2puaS5oIgot
I2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvYXVkaW9fZGV2aWNlX21vZHVsZS9hdWRp
b19kZXZpY2VfYW5kcm9pZC5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5p
L2p2bS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvYXBwbGljYXRp
b25fY29udGV4dF9wcm92aWRlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5p
X2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMg
ewotbmFtZXNwYWNlIHRlc3QgewotbmFtZXNwYWNlIHsKLQotLy8gQ3JlYXRlIG5hdGl2ZSBwZWVy
IGNvbm5lY3Rpb24gZmFjdG9yeSwgdGhhdCB3aWxsIGJlIHdyYXBwZWQgYnkgamF2YSBvbmUKLXJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4g
Q3JlYXRlVGVzdFBDRigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBydGM6OlRocmVhZCogbmV0d29y
a190aHJlYWQsCi0gICAgcnRjOjpUaHJlYWQqIHdvcmtlcl90aHJlYWQsCi0gICAgcnRjOjpUaHJl
YWQqIHNpZ25hbGluZ190aHJlYWQpIHsKLSAgLy8gdGFsay8gYXNzdW1lcyBwcmV0dHkgd2lkZWx5
IHRoYXQgdGhlIGN1cnJlbnQgVGhyZWFkIGlzIFRocmVhZE1hbmFnZXInZCwgYnV0Ci0gIC8vIFRo
cmVhZE1hbmFnZXIgb25seSBXcmFwQ3VycmVudFRocmVhZCgpcyB0aGUgdGhyZWFkIHdoZXJlIGl0
IGlzIGZpcnN0Ci0gIC8vIGNyZWF0ZWQuICBTaW5jZSB0aGUgc2VtYW50aWNzIGFyb3VuZCB3aGVu
IGF1dG8td3JhcHBpbmcgaGFwcGVucyBpbgotICAvLyB3ZWJydGMvcnRjX2Jhc2UvIGFyZSBjb252
b2x1dGVkLCB3ZSBzaW1wbHkgd3JhcCBoZXJlIHRvIGF2b2lkIGhhdmluZyB0bwotICAvLyB0aGlu
ayBhYm91dCByYW1pZmljYXRpb25zIG9mIGF1dG8td3JhcHBpbmcgdGhlcmUuCi0gIHJ0Yzo6VGhy
ZWFkTWFuYWdlcjo6SW5zdGFuY2UoKS0+V3JhcEN1cnJlbnRUaHJlYWQoKTsKLQotICBQZWVyQ29u
bmVjdGlvbkZhY3RvcnlEZXBlbmRlbmNpZXMgcGNmX2RlcHM7Ci0gIHBjZl9kZXBzLm5ldHdvcmtf
dGhyZWFkID0gbmV0d29ya190aHJlYWQ7Ci0gIHBjZl9kZXBzLndvcmtlcl90aHJlYWQgPSB3b3Jr
ZXJfdGhyZWFkOwotICBwY2ZfZGVwcy5zaWduYWxpbmdfdGhyZWFkID0gc2lnbmFsaW5nX3RocmVh
ZDsKLSAgcGNmX2RlcHMudGFza19xdWV1ZV9mYWN0b3J5ID0gQ3JlYXRlRGVmYXVsdFRhc2tRdWV1
ZUZhY3RvcnkoKTsKLSAgcGNmX2RlcHMuY2FsbF9mYWN0b3J5ID0gQ3JlYXRlQ2FsbEZhY3Rvcnko
KTsKLSAgcGNmX2RlcHMuZXZlbnRfbG9nX2ZhY3RvcnkgPQotICAgICAgc3RkOjptYWtlX3VuaXF1
ZTxSdGNFdmVudExvZ0ZhY3Rvcnk+KHBjZl9kZXBzLnRhc2tfcXVldWVfZmFjdG9yeS5nZXQoKSk7
Ci0KLSAgY3JpY2tldDo6TWVkaWFFbmdpbmVEZXBlbmRlbmNpZXMgbWVkaWFfZGVwczsKLSAgbWVk
aWFfZGVwcy50YXNrX3F1ZXVlX2ZhY3RvcnkgPSBwY2ZfZGVwcy50YXNrX3F1ZXVlX2ZhY3Rvcnku
Z2V0KCk7Ci0gIG1lZGlhX2RlcHMuYWRtID0KLSAgICAgIENyZWF0ZUphdmFBdWRpb0RldmljZU1v
ZHVsZShqbmksIEdldEFwcENvbnRleHRGb3JUZXN0KGpuaSkub2JqKCkpOwotICBtZWRpYV9kZXBz
LnZpZGVvX2VuY29kZXJfZmFjdG9yeSA9Ci0gICAgICBzdGQ6Om1ha2VfdW5pcXVlPHdlYnJ0Yzo6
SW50ZXJuYWxFbmNvZGVyRmFjdG9yeT4oKTsKLSAgbWVkaWFfZGVwcy52aWRlb19kZWNvZGVyX2Zh
Y3RvcnkgPQotICAgICAgc3RkOjptYWtlX3VuaXF1ZTx3ZWJydGM6OkludGVybmFsRGVjb2RlckZh
Y3Rvcnk+KCk7Ci0gIFNldE1lZGlhRW5naW5lRGVmYXVsdHMoJm1lZGlhX2RlcHMpOwotICBwY2Zf
ZGVwcy5tZWRpYV9lbmdpbmUgPSBjcmlja2V0OjpDcmVhdGVNZWRpYUVuZ2luZShzdGQ6Om1vdmUo
bWVkaWFfZGVwcykpOwotICBSVENfTE9HKExTX0lORk8pIDw8ICJNZWRpYSBlbmdpbmUgY3JlYXRl
ZDogIiA8PCBwY2ZfZGVwcy5tZWRpYV9lbmdpbmUuZ2V0KCk7Ci0KLSAgYXV0byBmYWN0b3J5ID0g
Q3JlYXRlTW9kdWxhclBlZXJDb25uZWN0aW9uRmFjdG9yeShzdGQ6Om1vdmUocGNmX2RlcHMpKTsK
LSAgUlRDX0xPRyhMU19JTkZPKSA8PCAiUGVlckNvbm5lY3Rpb25GYWN0b3J5IGNyZWF0ZWQ6ICIg
PDwgZmFjdG9yeTsKLSAgUlRDX0NIRUNLKGZhY3RvcnkpIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHRo
ZSBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeTsgIgotICAgICAgICAgICAgICAgICAgICAgICAgIldl
YlJUQy9saWJqaW5nbGUgaW5pdCBsaWtlbHkgZmFpbGVkIG9uIHRoaXMgZGV2aWNlIjsKLQotICBy
ZXR1cm4gZmFjdG9yeTsKLX0KLQotVEVTVChQZWVyQ29ubmVjdGlvbkZhY3RvcnlUZXN0LCBOYXRp
dmVUb0phdmFQZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hD
dXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLQotICBSVENfTE9HKElORk8pIDw8ICJJbml0aWFsaXpp
bmcgamF2YSBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeS4iOwotICBqbmk6OkphdmFfUGVlckNvbm5l
Y3Rpb25GYWN0b3J5SW5pdGlhbGl6YXRpb25IZWxwZXJfaW5pdGlhbGl6ZUZhY3RvcnlGb3JUZXN0
cygKLSAgICAgIGpuaSk7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkphdmEgcGVlciBjb25uZWN0aW9u
IGZhY3RvcnkgaW5pdGlhbGl6ZWQuIjsKLQotICAvLyBDcmVhdGUgdGhyZWFkcy4KLSAgc3RkOjp1
bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiBuZXR3b3JrX3RocmVhZCA9Ci0gICAgICBydGM6OlRocmVh
ZDo6Q3JlYXRlV2l0aFNvY2tldFNlcnZlcigpOwotICBuZXR3b3JrX3RocmVhZC0+U2V0TmFtZSgi
bmV0d29ya190aHJlYWQiLCBudWxscHRyKTsKLSAgUlRDX0NIRUNLKG5ldHdvcmtfdGhyZWFkLT5T
dGFydCgpKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IHRocmVhZCI7Ci0KLSAgc3RkOjp1bmlxdWVfcHRy
PHJ0Yzo6VGhyZWFkPiB3b3JrZXJfdGhyZWFkID0gcnRjOjpUaHJlYWQ6OkNyZWF0ZSgpOwotICB3
b3JrZXJfdGhyZWFkLT5TZXROYW1lKCJ3b3JrZXJfdGhyZWFkIiwgbnVsbHB0cik7Ci0gIFJUQ19D
SEVDSyh3b3JrZXJfdGhyZWFkLT5TdGFydCgpKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IHRocmVhZCI7
Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiBzaWduYWxpbmdfdGhyZWFkID0gcnRj
OjpUaHJlYWQ6OkNyZWF0ZSgpOwotICBzaWduYWxpbmdfdGhyZWFkLT5TZXROYW1lKCJzaWduYWxp
bmdfdGhyZWFkIiwgTlVMTCk7Ci0gIFJUQ19DSEVDSyhzaWduYWxpbmdfdGhyZWFkLT5TdGFydCgp
KSA8PCAiRmFpbGVkIHRvIHN0YXJ0IHRocmVhZCI7Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5ID0KLSAgICAgIENy
ZWF0ZVRlc3RQQ0Yoam5pLCBuZXR3b3JrX3RocmVhZC5nZXQoKSwgd29ya2VyX3RocmVhZC5nZXQo
KSwKLSAgICAgICAgICAgICAgICAgICAgc2lnbmFsaW5nX3RocmVhZC5nZXQoKSk7Ci0KLSAgam9i
amVjdCBqYXZhX2ZhY3RvcnkgPSBOYXRpdmVUb0phdmFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoCi0g
ICAgICBqbmksIGZhY3RvcnksIHN0ZDo6bW92ZShuZXR3b3JrX3RocmVhZCksIHN0ZDo6bW92ZSh3
b3JrZXJfdGhyZWFkKSwKLSAgICAgIHN0ZDo6bW92ZShzaWduYWxpbmdfdGhyZWFkKSwgbnVsbHB0
ciAvKiBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSAqLyk7Ci0KLSAgUlRDX0xPRyhJTkZPKSA8PCBq
YXZhX2ZhY3Rvcnk7Ci0KLSAgRVhQRUNUX05FKGphdmFfZmFjdG9yeSwgbnVsbHB0cik7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3
ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL25hdGl2ZV91bml0dGVzdHMvc3RhY2t0cmFjZS9zdGFja3RyYWNlX3Vu
aXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9zdGFja3RyYWNlL3N0YWNrdHJhY2VfdW5pdHRlc3Qu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYjVlNzhjZGQ2MTZiYTE4MGUyYmQ2
ZGYwNTJhNzY4MWRmYzUyMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy9zdGFja3RyYWNlL3N0YWNrdHJhY2VfdW5pdHRlc3QuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOSBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lu
Y2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvc3RhY2t0cmFjZS9zdGFja3RyYWNlLmgiCi0K
LSNpbmNsdWRlIDxkbGZjbi5oPgotCi0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPG1lbW9y
eT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9jcml0aWNhbF9zZWN0
aW9uLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvZXZlbnQuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9s
b2dnaW5nLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvcGxhdGZvcm1fdGhyZWFkLmgiCi0jaW5jbHVk
ZSAicnRjX2Jhc2Uvc3RyaW5nX3V0aWxzLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2Uvc3RyaW5ncy9z
dHJpbmdfYnVpbGRlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3N5c3RlbS9pbmxpbmUuaCIKLSNp
bmNsdWRlICJzeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9zbGVlcC5oIgotI2luY2x1ZGUgInRlc3Qv
Z3Rlc3QuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLS8vIEEgc2ltcGxlIGF0b21pYyBzcGluIGV2ZW50LiBJbXBsZW1lbnRlZCB3aXRo
IHN0ZDo6YXRvbWljX2ZsYWcsIHNpbmNlIHRoZSBDKysKLS8vIHN0YW5kYXJkIGd1YXJhbnRlZXMg
dGhhdCB0aGF0IHR5cGUgaXMgaW1wbGVtZW50ZWQgd2l0aCBhY3R1YWwgYXRvbWljCi0vLyBpbnN0
cnVjdGlvbnMgKGFzIG9wcG9zZWQgdG8gZS5nLiB3aXRoIGEgbXV0ZXgpLiBVc2VzIHNlcXVlbnRp
YWxseSBjb25zaXN0ZW50Ci0vLyBtZW1vcnkgb3JkZXIgc2luY2UgdGhpcyBpcyBhIHRlc3QsIHdo
ZXJlIHNpbXBsaWNpdHkgdHJ1bXBzIHBlcmZvcm1hbmNlLgotY2xhc3MgU2ltcGxlU3BpbkV2ZW50
IHsKLSBwdWJsaWM6Ci0gIC8vIEluaXRpYWxpemUgdGhlIGV2ZW50IHRvIGl0cyBibG9ja2VkIHN0
YXRlLgotICBTaW1wbGVTcGluRXZlbnQoKSB7Ci0gICAgc3RhdGljX2Nhc3Q8dm9pZD4oYmxvY2tl
ZF8udGVzdF9hbmRfc2V0KHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpKTsKLSAgfQotCi0gIC8v
IEJ1c3ktd2FpdCBmb3IgdGhlIGV2ZW50IHRvIGJlY29tZSB1bmJsb2NrZWQsIGFuZCBibG9jayBp
dCBiZWhpbmQgdXMgYXMgd2UKLSAgLy8gbGVhdmUuCi0gIHZvaWQgV2FpdCgpIHsKLSAgICBib29s
IHdhc19ibG9ja2VkOwotICAgIGRvIHsKLSAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCB3YXMg
YmxvY2tlZCwgYW5kIHNldCBpdCB0byBibG9ja2VkLgotICAgICAgd2FzX2Jsb2NrZWQgPSBibG9j
a2VkXy50ZXN0X2FuZF9zZXQoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci0gICAgfSB3aGls
ZSAod2FzX2Jsb2NrZWQpOwotICB9Ci0KLSAgLy8gVW5ibG9jayB0aGUgZXZlbnQuCi0gIHZvaWQg
U2V0KCkgeyBibG9ja2VkXy5jbGVhcihzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQotCi0g
cHJpdmF0ZToKLSAgc3RkOjphdG9taWNfZmxhZyBibG9ja2VkXzsKLX07Ci0KLS8vIFJldHVybnMg
dGhlIGV4ZWN1dGlvbiBhZGRyZXNzIHJlbGF0aXZlIHRvIHRoZSAuc28gYmFzZSBhZGRyZXNzLiBU
aGlzIG1hdGNoZXMKLS8vIHRoZSBhZGRyZXNzZXMgd2UgZ2V0IGZyb20gR2V0U3RhY2t0cmFjZSgp
LgotUlRDX05PX0lOTElORSB1aW50MzJfdCBHZXRDdXJyZW50UmVsYXRpdmVFeGVjdXRpb25BZGRy
ZXNzKCkgewotICB2b2lkKiBwYyA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKLSAgRGxf
aW5mbyBkbF9pbmZvID0ge307Ci0gIGNvbnN0IGJvb2wgc3VjY2VzcyA9IGRsYWRkcihwYywgJmRs
X2luZm8pOwotICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQzMl90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGMpIC0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGxfaW5mby5kbGlf
ZmJhc2UpKTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgc3RhY2sgdHJhY2Ug
ZWxlbWVudCBpcyBpbnNpZGUgdGhlIHNwZWNpZmllZAotLy8gcmVnaW9uLgotYm9vbCBTdGFja1Ry
YWNlQ29udGFpbnNSYW5nZShjb25zdCBzdGQ6OnZlY3RvcjxTdGFja1RyYWNlRWxlbWVudD4mIHN0
YWNrX3RyYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgcGNfbG93
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgcGNfaGlnaCkgewotICBm
b3IgKGNvbnN0IFN0YWNrVHJhY2VFbGVtZW50JiBzdGFja190cmFjZV9lbGVtZW50IDogc3RhY2tf
dHJhY2UpIHsKLSAgICBpZiAocGNfbG93IDw9IHN0YWNrX3RyYWNlX2VsZW1lbnQucmVsYXRpdmVf
YWRkcmVzcyAmJgotICAgICAgICBwY19oaWdoID49IHN0YWNrX3RyYWNlX2VsZW1lbnQucmVsYXRp
dmVfYWRkcmVzcykgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotY2xhc3MgRGVhZGxvY2tJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgdmlydHVh
bCB+RGVhZGxvY2tJbnRlcmZhY2UoKSB7fQotCi0gIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGRl
YWRsb2NrIHVudGlsIFJlbGVhc2UoKSBpcyBjYWxsZWQuCi0gIHZpcnR1YWwgdm9pZCBEZWFkbG9j
aygpID0gMDsKLQotICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZWxlYXNlIHRoZSB0aHJlYWQg
c3R1Y2sgaW4gRGVhZGxvY2soKS4KLSAgdmlydHVhbCB2b2lkIFJlbGVhc2UoKSA9IDA7Ci19Owot
Ci1zdHJ1Y3QgVGhyZWFkUGFyYW1zIHsKLSAgdm9sYXRpbGUgaW50IHRpZDsKLSAgLy8gU2lnbmFs
ZWQgd2hlbiB0aGUgZGVhZGxvY2sgcmVnaW9uIGlzIGVudGVyZWQuCi0gIFNpbXBsZVNwaW5FdmVu
dCBkZWFkbG9ja19zdGFydF9ldmVudDsKLSAgRGVhZGxvY2tJbnRlcmZhY2UqIHZvbGF0aWxlIGRl
YWRsb2NrX2ltcGw7Ci0gIC8vIERlZmluZXMgYW4gYWRkcmVzcyByYW5nZSB3aXRoaW4gdGhlIGRl
YWRsb2NrIHdpbGwgb2NjdXIuCi0gIHZvbGF0aWxlIHVpbnQzMl90IGRlYWRsb2NrX3JlZ2lvbl9z
dGFydF9hZGRyZXNzOwotICB2b2xhdGlsZSB1aW50MzJfdCBkZWFkbG9ja19yZWdpb25fZW5kX2Fk
ZHJlc3M7Ci0gIC8vIFNpZ25hbGVkIHdoZW4gdGhlIGRlYWRsb2NrIGlzIGRvbmUuCi0gIHJ0Yzo6
RXZlbnQgZGVhZGxvY2tfZG9uZV9ldmVudDsKLX07Ci0KLWNsYXNzIFJ0Y0V2ZW50RGVhZGxvY2sg
OiBwdWJsaWMgRGVhZGxvY2tJbnRlcmZhY2UgewotIHByaXZhdGU6Ci0gIHZvaWQgRGVhZGxvY2so
KSBvdmVycmlkZSB7IGV2ZW50LldhaXQocnRjOjpFdmVudDo6a0ZvcmV2ZXIpOyB9Ci0gIHZvaWQg
UmVsZWFzZSgpIG92ZXJyaWRlIHsgZXZlbnQuU2V0KCk7IH0KLQotICBydGM6OkV2ZW50IGV2ZW50
OwotfTsKLQotY2xhc3MgUnRjQ3JpdGljYWxTZWN0aW9uRGVhZGxvY2sgOiBwdWJsaWMgRGVhZGxv
Y2tJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgUnRjQ3JpdGljYWxTZWN0aW9uRGVhZGxvY2soKQot
ICAgICAgOiBjcml0c2NvcGVfKHN0ZDo6bWFrZV91bmlxdWU8cnRjOjpDcml0U2NvcGU+KCZjcml0
XykpIHt9Ci0KLSBwcml2YXRlOgotICB2b2lkIERlYWRsb2NrKCkgb3ZlcnJpZGUgeyBydGM6OkNy
aXRTY29wZSBsb2NrKCZjcml0Xyk7IH0KLQotICB2b2lkIFJlbGVhc2UoKSBvdmVycmlkZSB7IGNy
aXRzY29wZV8ucmVzZXQoKTsgfQotCi0gIHJ0Yzo6Q3JpdGljYWxTZWN0aW9uIGNyaXRfOwotICBz
dGQ6OnVuaXF1ZV9wdHI8cnRjOjpDcml0U2NvcGU+IGNyaXRzY29wZV87Ci19OwotCi1jbGFzcyBT
cGluRGVhZGxvY2sgOiBwdWJsaWMgRGVhZGxvY2tJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgU3Bp
bkRlYWRsb2NrKCkgOiBpc19kZWFkbG9ja2VkXyh0cnVlKSB7fQotCi0gcHJpdmF0ZToKLSAgdm9p
ZCBEZWFkbG9jaygpIG92ZXJyaWRlIHsKLSAgICB3aGlsZSAoaXNfZGVhZGxvY2tlZF8pIHsKLSAg
ICB9Ci0gIH0KLQotICB2b2lkIFJlbGVhc2UoKSBvdmVycmlkZSB7IGlzX2RlYWRsb2NrZWRfID0g
ZmFsc2U7IH0KLQotICBzdGQ6OmF0b21pYzxib29sPiBpc19kZWFkbG9ja2VkXzsKLX07Ci0KLWNs
YXNzIFNsZWVwRGVhZGxvY2sgOiBwdWJsaWMgRGVhZGxvY2tJbnRlcmZhY2UgewotIHByaXZhdGU6
Ci0gIHZvaWQgRGVhZGxvY2soKSBvdmVycmlkZSB7IHNsZWVwKDEwMDAwMDApOyB9Ci0KLSAgdm9p
ZCBSZWxlYXNlKCkgb3ZlcnJpZGUgewotICAgIC8vIFRoZSBpbnRlcnJ1cHQgaXRzZWxmIHdpbGwg
YnJlYWsgZnJlZSBmcm9tIHRoZSBzbGVlcC4KLSAgfQotfTsKLQotLy8gVGhpcyBpcyB0aGUgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdHVlZCBieSB0aGUgdGhyZWFkIHRoYXQgd2lsbCBkZWFkbG9jayBh
bmQKLS8vIGhhdmUgaXRzIHN0YWNrdHJhY2UgY2FwdHVyZWQuCi12b2lkIFRocmVhZEZ1bmN0aW9u
KHZvaWQqIHZvaWRfcGFyYW1zKSB7Ci0gIFRocmVhZFBhcmFtcyogcGFyYW1zID0gc3RhdGljX2Nh
c3Q8VGhyZWFkUGFyYW1zKj4odm9pZF9wYXJhbXMpOwotICBwYXJhbXMtPnRpZCA9IGdldHRpZCgp
OwotCi0gIHBhcmFtcy0+ZGVhZGxvY2tfcmVnaW9uX3N0YXJ0X2FkZHJlc3MgPSBHZXRDdXJyZW50
UmVsYXRpdmVFeGVjdXRpb25BZGRyZXNzKCk7Ci0gIHBhcmFtcy0+ZGVhZGxvY2tfc3RhcnRfZXZl
bnQuU2V0KCk7Ci0gIHBhcmFtcy0+ZGVhZGxvY2tfaW1wbC0+RGVhZGxvY2soKTsKLSAgcGFyYW1z
LT5kZWFkbG9ja19yZWdpb25fZW5kX2FkZHJlc3MgPSBHZXRDdXJyZW50UmVsYXRpdmVFeGVjdXRp
b25BZGRyZXNzKCk7Ci0KLSAgcGFyYW1zLT5kZWFkbG9ja19kb25lX2V2ZW50LlNldCgpOwotfQot
Ci12b2lkIFRlc3RTdGFja3RyYWNlKHN0ZDo6dW5pcXVlX3B0cjxEZWFkbG9ja0ludGVyZmFjZT4g
ZGVhZGxvY2tfaW1wbCkgewotICAvLyBTZXQgcGFyYW1zIHRoYXQgd2lsbCBiZSBzZW50IHRvIG90
aGVyIHRocmVhZC4KLSAgVGhyZWFkUGFyYW1zIHBhcmFtczsKLSAgcGFyYW1zLmRlYWRsb2NrX2lt
cGwgPSBkZWFkbG9ja19pbXBsLmdldCgpOwotCi0gIC8vIFNwYXduIHRocmVhZC4KLSAgcnRjOjpQ
bGF0Zm9ybVRocmVhZCB0aHJlYWQoJlRocmVhZEZ1bmN0aW9uLCAmcGFyYW1zLCAiU3RhY2t0cmFj
ZVRlc3QiKTsKLSAgdGhyZWFkLlN0YXJ0KCk7Ci0KLSAgLy8gV2FpdCB1bnRpbCB0aGUgdGhyZWFk
IGhhcyBlbnRlcmVkIHRoZSBkZWFkbG9jayByZWdpb24sIGFuZCB0YWtlIGEgdmVyeQotICAvLyBi
cmllZiBuYXAgdG8gZ2l2ZSBpdCB0aW1lIHRvIHJlYWNoIHRoZSBhY3R1YWwgZGVhZGxvY2suCi0g
IHBhcmFtcy5kZWFkbG9ja19zdGFydF9ldmVudC5XYWl0KCk7Ci0gIFNsZWVwTXMoMSk7Ci0KLSAg
Ly8gQWNxdWlyZSB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHRocmVhZCB3aGljaCBzaG91bGQgbm93
IGJlIGRlYWRsb2NraW5nLgotICBzdGQ6OnZlY3RvcjxTdGFja1RyYWNlRWxlbWVudD4gc3RhY2tf
dHJhY2UgPSBHZXRTdGFja1RyYWNlKHBhcmFtcy50aWQpOwotCi0gIC8vIFJlbGVhc2UgdGhlIGRl
YWRsb2NrIHNvIHRoYXQgdGhlIHRocmVhZCBjYW4gY29udGludWUuCi0gIGRlYWRsb2NrX2ltcGwt
PlJlbGVhc2UoKTsKLQotICAvLyBXYWl0IHVudGlsIHRoZSB0aHJlYWQgaGFzIGxlZnQgdGhlIGRl
YWRsb2NrLgotICBwYXJhbXMuZGVhZGxvY2tfZG9uZV9ldmVudC5XYWl0KHJ0Yzo6RXZlbnQ6OmtG
b3JldmVyKTsKLQotICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhY2sgdHJhY2UgY29udGFpbnMgdGhl
IGRlYWRsb2NrIHJlZ2lvbi4KLSAgRVhQRUNUX1RSVUUoU3RhY2tUcmFjZUNvbnRhaW5zUmFuZ2Uo
c3RhY2tfdHJhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5kZWFkbG9ja19yZWdpb25fc3RhcnRfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zLmRlYWRsb2NrX3JlZ2lvbl9lbmRfYWRkcmVzcykpCi0gICAg
ICA8PCAiRGVhZGxvY2sgcmVnaW9uOiBbIgotICAgICAgPDwgcnRjOjpUb0hleChwYXJhbXMuZGVh
ZGxvY2tfcmVnaW9uX3N0YXJ0X2FkZHJlc3MpIDw8ICIsICIKLSAgICAgIDw8IHJ0Yzo6VG9IZXgo
cGFyYW1zLmRlYWRsb2NrX3JlZ2lvbl9lbmRfYWRkcmVzcykKLSAgICAgIDw8ICJdIG5vdCBjb250
YWluZWQgaW46ICIgPDwgU3RhY2tUcmFjZVRvU3RyaW5nKHN0YWNrX3RyYWNlKTsKLQotICB0aHJl
YWQuU3RvcCgpOwotfQotCi1jbGFzcyBMb29rb3V0TG9nU2luayBmaW5hbCA6IHB1YmxpYyBydGM6
OkxvZ1NpbmsgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTG9va291dExvZ1Npbmsoc3RkOjpzdHJp
bmcgbG9va19mb3IpCi0gICAgICA6IGxvb2tfZm9yXyhzdGQ6Om1vdmUobG9va19mb3IpKSB7fQot
ICB2b2lkIE9uTG9nTWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUg
ewotICAgIGlmIChtZXNzYWdlLmZpbmQobG9va19mb3JfKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykg
ewotICAgICAgd2hlbl9mb3VuZF8uU2V0KCk7Ci0gICAgfQotICB9Ci0gIHJ0Yzo6RXZlbnQmIFdo
ZW5Gb3VuZCgpIHsgcmV0dXJuIHdoZW5fZm91bmRfOyB9Ci0KLSBwcml2YXRlOgotICBjb25zdCBz
dGQ6OnN0cmluZyBsb29rX2Zvcl87Ci0gIHJ0Yzo6RXZlbnQgd2hlbl9mb3VuZF87Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UKLQotVEVTVChTdGFja3RyYWNlLCBUZXN0Q3VycmVudFRocmVhZCkgewot
ICBjb25zdCB1aW50MzJfdCBzdGFydF9hZGRyID0gR2V0Q3VycmVudFJlbGF0aXZlRXhlY3V0aW9u
QWRkcmVzcygpOwotICBjb25zdCBzdGQ6OnZlY3RvcjxTdGFja1RyYWNlRWxlbWVudD4gc3RhY2tf
dHJhY2UgPSBHZXRTdGFja1RyYWNlKCk7Ci0gIGNvbnN0IHVpbnQzMl90IGVuZF9hZGRyID0gR2V0
Q3VycmVudFJlbGF0aXZlRXhlY3V0aW9uQWRkcmVzcygpOwotICBFWFBFQ1RfVFJVRShTdGFja1Ry
YWNlQ29udGFpbnNSYW5nZShzdGFja190cmFjZSwgc3RhcnRfYWRkciwgZW5kX2FkZHIpKQotICAg
ICAgPDwgIkNhbGxlciByZWdpb246IFsiIDw8IHJ0Yzo6VG9IZXgoc3RhcnRfYWRkcikgPDwgIiwg
IgotICAgICAgPDwgcnRjOjpUb0hleChlbmRfYWRkcikKLSAgICAgIDw8ICJdIG5vdCBjb250YWlu
ZWQgaW46ICIgPDwgU3RhY2tUcmFjZVRvU3RyaW5nKHN0YWNrX3RyYWNlKTsKLX0KLQotVEVTVChT
dGFja3RyYWNlLCBUZXN0U3BpbkxvY2spIHsKLSAgVGVzdFN0YWNrdHJhY2Uoc3RkOjptYWtlX3Vu
aXF1ZTxTcGluRGVhZGxvY2s+KCkpOwotfQotCi1URVNUKFN0YWNrdHJhY2UsIFRlc3RTbGVlcCkg
ewotICBUZXN0U3RhY2t0cmFjZShzdGQ6Om1ha2VfdW5pcXVlPFNsZWVwRGVhZGxvY2s+KCkpOwot
fQotCi0vLyBTdGFjayB0cmFjZXMgb3JpZ2luYXRpbmcgZnJvbSBrZXJuZWwgc3BhY2UgZG9lcyBu
b3QgaW5jbHVkZSB1c2VyIHNwYWNlIHN0YWNrCi0vLyB0cmFjZXMgZm9yIEFSTSAzMi4KLSNpZmRl
ZiBXRUJSVENfQVJDSF9BUk02NAotCi1URVNUKFN0YWNrdHJhY2UsIFRlc3RSdGNFdmVudCkgewot
ICBUZXN0U3RhY2t0cmFjZShzdGQ6Om1ha2VfdW5pcXVlPFJ0Y0V2ZW50RGVhZGxvY2s+KCkpOwot
fQotCi1URVNUKFN0YWNrdHJhY2UsIFRlc3RSdGNDcml0aWNhbFNlY3Rpb24pIHsKLSAgVGVzdFN0
YWNrdHJhY2Uoc3RkOjptYWtlX3VuaXF1ZTxSdGNDcml0aWNhbFNlY3Rpb25EZWFkbG9jaz4oKSk7
Ci19Ci0KLSNlbmRpZgotCi1URVNUKFN0YWNrdHJhY2UsIFRlc3RSdGNFdmVudERlYWRsb2NrRGV0
ZWN0aW9uKSB7Ci0gIC8vIFN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBleHBlY3RlZCBsb2cgb3V0cHV0
LgotICBMb29rb3V0TG9nU2luayBzaW5rKC8qbG9va19mb3I9Ki8iUHJvYmFibGUgZGVhZGxvY2si
KTsKLSAgcnRjOjpMb2dNZXNzYWdlOjpBZGRMb2dUb1N0cmVhbSgmc2luaywgcnRjOjpMU19XQVJO
SU5HKTsKLQotICAvLyBTdGFydCBhIHRocmVhZCB0aGF0IHdhaXRzIGZvciBhbiBldmVudC4KLSAg
cnRjOjpFdmVudCBldjsKLSAgcnRjOjpQbGF0Zm9ybVRocmVhZCB0aHJlYWQoCi0gICAgICBbXSh2
b2lkKiBhcmcpIHsKLSAgICAgICAgYXV0byogZXYgPSBzdGF0aWNfY2FzdDxydGM6OkV2ZW50Kj4o
YXJnKTsKLSAgICAgICAgZXYtPldhaXQocnRjOjpFdmVudDo6a0ZvcmV2ZXIpOwotICAgICAgfSwK
LSAgICAgICZldiwgIlRlc3RSdGNFdmVudERlYWRsb2NrRGV0ZWN0aW9uIik7Ci0gIHRocmVhZC5T
dGFydCgpOwotCi0gIC8vIFRoZSBtZXNzYWdlIHNob3VsZCBhcHBlYXIgYWZ0ZXIgMyBzZWMuIFdl
J2xsIHdhaXQgdXAgdG8gMTAgc2VjIGluIGFuCi0gIC8vIGF0dGVtcHQgdG8gbm90IGJlIGZsYWt5
LgotICBFWFBFQ1RfVFJVRShzaW5rLldoZW5Gb3VuZCgpLldhaXQoMTAwMDApKTsKLQotICAvLyBV
bmJsb2NrIHRoZSB0aHJlYWQgYW5kIHNodXQgaXQgZG93bi4KLSAgZXYuU2V0KCk7Ci0gIHRocmVh
ZC5TdG9wKCk7Ci0gIHJ0Yzo6TG9nTWVzc2FnZTo6UmVtb3ZlTG9nVG9TdHJlYW0oJnNpbmspOwot
fQotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvbmF0aXZlX3VuaXR0ZXN0cy90ZXN0X2puaV9vbmxvYWQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL3Rl
c3Rfam5pX29ubG9hZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFmZTQ5YzQ3
NDNkNDU2NTcxMjAxZTkzMDcyNGY0NWQ4M2ZmZWNiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL3Rlc3Rfam5pX29ubG9hZC5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE4
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aW5jbHVkZSA8am5pLmg+Ci0jdW5kZWYgSk5JRVhQT1JUCi0jZGVmaW5lIEpOSUVYUE9SVCBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotCi0jaW5jbHVkZSAicnRjX2Jhc2Uv
Y2hlY2tzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9iYXNlL2luaXQuaCIK
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0KLS8v
IFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBWTSB3aGVuIHRoZSBzaGFyZWQgbGlicmFyeSBpcyBmaXJz
dCBsb2FkZWQuCi1KTklFWFBPUlQgamludCBKTklfT25Mb2FkKEphdmFWTSogdm0sIHZvaWQqIHJl
c2VydmVkKSB7Ci0gIHdlYnJ0Yzo6SW5pdEFuZHJvaWQodm0pOwotICByZXR1cm4gSk5JX1ZFUlNJ
T05fMV80OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvbmF0aXZlX3VuaXR0ZXN0cy92aWRlby92aWRlb19zb3VyY2Vf
dW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9uYXRpdmVfdW5pdHRlc3RzL3ZpZGVvL3ZpZGVvX3NvdXJjZV91bml0dGVzdC5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M0ZWVkMWZjMzJkNTU3OGU0NTk4M2Jm
MGU4OGQ3MmJiMDRhY2UzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9uYXRpdmVfdW5pdHRlc3RzL3ZpZGVvL3ZpZGVvX3NvdXJjZV91bml0dGVzdC5jYworKysg
L2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYXBpL3ZpZGVvL3ZpZGVvX3NpbmtfaW50ZXJmYWNlLmgi
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX25hdGl2ZV91bml0dGVzdHNfam5pL0ph
dmFWaWRlb1NvdXJjZVRlc3RIZWxwZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS92aWRlby92aWRlb19zb3VyY2UuaCIKLSNpbmNsdWRlICJ0ZXN0L2d0ZXN0LmgiCi0K
LW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRlc3QgewotCi1uYW1lc3BhY2UgewotY2xh
c3MgVGVzdFZpZGVvU2luayA6IHB1YmxpYyBydGM6OlZpZGVvU2lua0ludGVyZmFjZTxWaWRlb0Zy
YW1lPiB7Ci0gcHVibGljOgotICB2b2lkIE9uRnJhbWUoY29uc3QgVmlkZW9GcmFtZSYgZnJhbWUp
IHsgZnJhbWVzXy5wdXNoX2JhY2soZnJhbWUpOyB9Ci0KLSAgc3RkOjp2ZWN0b3I8VmlkZW9GcmFt
ZT4gR2V0RnJhbWVzKCkgewotICAgIHN0ZDo6dmVjdG9yPFZpZGVvRnJhbWU+IHRlbXAgPSBmcmFt
ZXNfOwotICAgIGZyYW1lc18uY2xlYXIoKTsKLSAgICByZXR1cm4gdGVtcDsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgc3RkOjp2ZWN0b3I8VmlkZW9GcmFtZT4gZnJhbWVzXzsKLX07Ci19ICAvLyBuYW1l
c3BhY2UKLQotVEVTVChKYXZhVmlkZW9Tb3VyY2VUZXN0LCBDcmVhdGVKYXZhVmlkZW9Tb3VyY2Up
IHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgLy8g
V3JhcCB0ZXN0IHRocmVhZCBzbyBpdCBjYW4gYmUgdXNlZCBhcyB0aGUgc2lnbmFsaW5nIHRocmVh
ZC4KLSAgcnRjOjpUaHJlYWRNYW5hZ2VyOjpJbnN0YW5jZSgpLT5XcmFwQ3VycmVudFRocmVhZCgp
OwotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxKYXZhVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZT4g
dmlkZW9fdHJhY2tfc291cmNlID0KLSAgICAgIENyZWF0ZUphdmFWaWRlb1NvdXJjZSgKLSAgICAg
ICAgICBlbnYsIHJ0Yzo6VGhyZWFkTWFuYWdlcjo6SW5zdGFuY2UoKS0+Q3VycmVudFRocmVhZCgp
LAotICAgICAgICAgIGZhbHNlIC8qIGlzX3NjcmVlbmNhc3QgKi8sIHRydWUgLyogYWxpZ25fdGlt
ZXN0YW1wcyAqLyk7Ci0KLSAgQVNTRVJUX05FKG51bGxwdHIsIHZpZGVvX3RyYWNrX3NvdXJjZSk7
Ci0gIEVYUEVDVF9ORShudWxscHRyLAotICAgICAgICAgICAgdmlkZW9fdHJhY2tfc291cmNlLT5H
ZXRKYXZhVmlkZW9DYXB0dXJlck9ic2VydmVyKGVudikub2JqKCkpOwotfQotCi1URVNUKEphdmFW
aWRlb1NvdXJjZVRlc3QsIE9uRnJhbWVDYXB0dXJlZEZyYW1lSXNEZWxpdmVyZWRUb1NpbmspIHsK
LSAgVGVzdFZpZGVvU2luayB0ZXN0X3ZpZGVvX3Npbms7Ci0KLSAgSk5JRW52KiBlbnYgPSBBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgLy8gV3JhcCB0ZXN0IHRocmVhZCBzbyBpdCBj
YW4gYmUgdXNlZCBhcyB0aGUgc2lnbmFsaW5nIHRocmVhZC4KLSAgcnRjOjpUaHJlYWRNYW5hZ2Vy
OjpJbnN0YW5jZSgpLT5XcmFwQ3VycmVudFRocmVhZCgpOwotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0
cjxKYXZhVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZT4gdmlkZW9fdHJhY2tfc291cmNlID0KLSAg
ICAgIENyZWF0ZUphdmFWaWRlb1NvdXJjZSgKLSAgICAgICAgICBlbnYsIHJ0Yzo6VGhyZWFkTWFu
YWdlcjo6SW5zdGFuY2UoKS0+Q3VycmVudFRocmVhZCgpLAotICAgICAgICAgIGZhbHNlIC8qIGlz
X3NjcmVlbmNhc3QgKi8sIHRydWUgLyogYWxpZ25fdGltZXN0YW1wcyAqLyk7Ci0gIHZpZGVvX3Ry
YWNrX3NvdXJjZS0+QWRkT3JVcGRhdGVTaW5rKCZ0ZXN0X3ZpZGVvX3NpbmssIHJ0Yzo6VmlkZW9T
aW5rV2FudHMoKSk7Ci0KLSAgam5pOjpKYXZhX0phdmFWaWRlb1NvdXJjZVRlc3RIZWxwZXJfc3Rh
cnRDYXB0dXJlKAotICAgICAgZW52LCB2aWRlb190cmFja19zb3VyY2UtPkdldEphdmFWaWRlb0Nh
cHR1cmVyT2JzZXJ2ZXIoZW52KSwKLSAgICAgIHRydWUgLyogc3VjY2VzcyAqLyk7Ci0gIGNvbnN0
IGludCB3aWR0aCA9IDIwOwotICBjb25zdCBpbnQgaGVpZ2h0ID0gMzI7Ci0gIGNvbnN0IGludCBy
b3RhdGlvbiA9IDE4MDsKLSAgY29uc3QgaW50NjRfdCB0aW1lc3RhbXAgPSA5ODc2NTQzMjE7Ci0g
IGpuaTo6SmF2YV9KYXZhVmlkZW9Tb3VyY2VUZXN0SGVscGVyX2RlbGl2ZXJGcmFtZSgKLSAgICAg
IGVudiwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24sIHRpbWVzdGFtcCwKLSAgICAgIHZpZGVvX3Ry
YWNrX3NvdXJjZS0+R2V0SmF2YVZpZGVvQ2FwdHVyZXJPYnNlcnZlcihlbnYpKTsKLQotICBzdGQ6
OnZlY3RvcjxWaWRlb0ZyYW1lPiBmcmFtZXMgPSB0ZXN0X3ZpZGVvX3NpbmsuR2V0RnJhbWVzKCk7
Ci0gIEFTU0VSVF9FUSgxdSwgZnJhbWVzLnNpemUoKSk7Ci0gIHdlYnJ0Yzo6VmlkZW9GcmFtZSBm
cmFtZSA9IGZyYW1lc1swXTsKLSAgRVhQRUNUX0VRKHdpZHRoLCBmcmFtZS53aWR0aCgpKTsKLSAg
RVhQRUNUX0VRKGhlaWdodCwgZnJhbWUuaGVpZ2h0KCkpOwotICBFWFBFQ1RfRVEocm90YXRpb24s
IGZyYW1lLnJvdGF0aW9uKCkpOwotfQotCi1URVNUKEphdmFWaWRlb1NvdXJjZVRlc3QsCi0gICAg
IE9uRnJhbWVDYXB0dXJlZEZyYW1lSXNEZWxpdmVyZWRUb1NpbmtXaXRoUHJlc2VydmVkVGltZXN0
YW1wKSB7Ci0gIFRlc3RWaWRlb1NpbmsgdGVzdF92aWRlb19zaW5rOwotCi0gIEpOSUVudiogZW52
ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIC8vIFdyYXAgdGVzdCB0aHJlYWQg
c28gaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHNpZ25hbGluZyB0aHJlYWQuCi0gIHJ0Yzo6VGhyZWFk
TWFuYWdlcjo6SW5zdGFuY2UoKS0+V3JhcEN1cnJlbnRUaHJlYWQoKTsKLQotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8SmF2YVZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2U+IHZpZGVvX3RyYWNrX3NvdXJj
ZSA9Ci0gICAgICBDcmVhdGVKYXZhVmlkZW9Tb3VyY2UoCi0gICAgICAgICAgZW52LCBydGM6OlRo
cmVhZE1hbmFnZXI6Okluc3RhbmNlKCktPkN1cnJlbnRUaHJlYWQoKSwKLSAgICAgICAgICBmYWxz
ZSAvKiBpc19zY3JlZW5jYXN0ICovLCBmYWxzZSAvKiBhbGlnbl90aW1lc3RhbXBzICovKTsKLSAg
dmlkZW9fdHJhY2tfc291cmNlLT5BZGRPclVwZGF0ZVNpbmsoJnRlc3RfdmlkZW9fc2luaywgcnRj
OjpWaWRlb1NpbmtXYW50cygpKTsKLQotICBqbmk6OkphdmFfSmF2YVZpZGVvU291cmNlVGVzdEhl
bHBlcl9zdGFydENhcHR1cmUoCi0gICAgICBlbnYsIHZpZGVvX3RyYWNrX3NvdXJjZS0+R2V0SmF2
YVZpZGVvQ2FwdHVyZXJPYnNlcnZlcihlbnYpLAotICAgICAgdHJ1ZSAvKiBzdWNjZXNzICovKTsK
LSAgY29uc3QgaW50IHdpZHRoID0gMjA7Ci0gIGNvbnN0IGludCBoZWlnaHQgPSAzMjsKLSAgY29u
c3QgaW50IHJvdGF0aW9uID0gMTgwOwotICBjb25zdCBpbnQ2NF90IHRpbWVzdGFtcCA9IDk4NzY1
NDMyMTsKLSAgam5pOjpKYXZhX0phdmFWaWRlb1NvdXJjZVRlc3RIZWxwZXJfZGVsaXZlckZyYW1l
KAotICAgICAgZW52LCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbiwgOTg3NjU0MzIxLAotICAgICAg
dmlkZW9fdHJhY2tfc291cmNlLT5HZXRKYXZhVmlkZW9DYXB0dXJlck9ic2VydmVyKGVudikpOwot
Ci0gIHN0ZDo6dmVjdG9yPFZpZGVvRnJhbWU+IGZyYW1lcyA9IHRlc3RfdmlkZW9fc2luay5HZXRG
cmFtZXMoKTsKLSAgQVNTRVJUX0VRKDF1LCBmcmFtZXMuc2l6ZSgpKTsKLSAgd2VicnRjOjpWaWRl
b0ZyYW1lIGZyYW1lID0gZnJhbWVzWzBdOwotICBFWFBFQ1RfRVEod2lkdGgsIGZyYW1lLndpZHRo
KCkpOwotICBFWFBFQ1RfRVEoaGVpZ2h0LCBmcmFtZS5oZWlnaHQoKSk7Ci0gIEVYUEVDVF9FUShy
b3RhdGlvbiwgZnJhbWUucm90YXRpb24oKSk7Ci0gIEVYUEVDVF9FUSh0aW1lc3RhbXAgLyAxMDAw
LCBmcmFtZS50aW1lc3RhbXBfdXMoKSk7Ci19Ci0KLVRFU1QoSmF2YVZpZGVvU291cmNlVGVzdCwg
Q2FwdHVyZXJTdGFydGVkU3VjY2Vzc1N0YXRlQmVjb21lc0xpdmUpIHsKLSAgSk5JRW52KiBlbnYg
PSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgLy8gV3JhcCB0ZXN0IHRocmVhZCBz
byBpdCBjYW4gYmUgdXNlZCBhcyB0aGUgc2lnbmFsaW5nIHRocmVhZC4KLSAgcnRjOjpUaHJlYWRN
YW5hZ2VyOjpJbnN0YW5jZSgpLT5XcmFwQ3VycmVudFRocmVhZCgpOwotCi0gIHJ0Yzo6c2NvcGVk
X3JlZnB0cjxKYXZhVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZT4gdmlkZW9fdHJhY2tfc291cmNl
ID0KLSAgICAgIENyZWF0ZUphdmFWaWRlb1NvdXJjZSgKLSAgICAgICAgICBlbnYsIHJ0Yzo6VGhy
ZWFkTWFuYWdlcjo6SW5zdGFuY2UoKS0+Q3VycmVudFRocmVhZCgpLAotICAgICAgICAgIGZhbHNl
IC8qIGlzX3NjcmVlbmNhc3QgKi8sIHRydWUgLyogYWxpZ25fdGltZXN0YW1wcyAqLyk7Ci0KLSAg
am5pOjpKYXZhX0phdmFWaWRlb1NvdXJjZVRlc3RIZWxwZXJfc3RhcnRDYXB0dXJlKAotICAgICAg
ZW52LCB2aWRlb190cmFja19zb3VyY2UtPkdldEphdmFWaWRlb0NhcHR1cmVyT2JzZXJ2ZXIoZW52
KSwKLSAgICAgIHRydWUgLyogc3VjY2VzcyAqLyk7Ci0KLSAgRVhQRUNUX0VRKFZpZGVvVHJhY2tT
b3VyY2VJbnRlcmZhY2U6OlNvdXJjZVN0YXRlOjprTGl2ZSwKLSAgICAgICAgICAgIHZpZGVvX3Ry
YWNrX3NvdXJjZS0+c3RhdGUoKSk7Ci19Ci0KLVRFU1QoSmF2YVZpZGVvU291cmNlVGVzdCwgQ2Fw
dHVyZXJTdGFydGVkRmFpbHVyZVN0YXRlQmVjb21lc0VuZGVkKSB7Ci0gIEpOSUVudiogZW52ID0g
QXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIC8vIFdyYXAgdGVzdCB0aHJlYWQgc28g
aXQgY2FuIGJlIHVzZWQgYXMgdGhlIHNpZ25hbGluZyB0aHJlYWQuCi0gIHJ0Yzo6VGhyZWFkTWFu
YWdlcjo6SW5zdGFuY2UoKS0+V3JhcEN1cnJlbnRUaHJlYWQoKTsKLQotICBydGM6OnNjb3BlZF9y
ZWZwdHI8SmF2YVZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2U+IHZpZGVvX3RyYWNrX3NvdXJjZSA9
Ci0gICAgICBDcmVhdGVKYXZhVmlkZW9Tb3VyY2UoCi0gICAgICAgICAgZW52LCBydGM6OlRocmVh
ZE1hbmFnZXI6Okluc3RhbmNlKCktPkN1cnJlbnRUaHJlYWQoKSwKLSAgICAgICAgICBmYWxzZSAv
KiBpc19zY3JlZW5jYXN0ICovLCB0cnVlIC8qIGFsaWduX3RpbWVzdGFtcHMgKi8pOwotCi0gIGpu
aTo6SmF2YV9KYXZhVmlkZW9Tb3VyY2VUZXN0SGVscGVyX3N0YXJ0Q2FwdHVyZSgKLSAgICAgIGVu
diwgdmlkZW9fdHJhY2tfc291cmNlLT5HZXRKYXZhVmlkZW9DYXB0dXJlck9ic2VydmVyKGVudiks
Ci0gICAgICBmYWxzZSAvKiBzdWNjZXNzICovKTsKLQotICBFWFBFQ1RfRVEoVmlkZW9UcmFja1Nv
dXJjZUludGVyZmFjZTo6U291cmNlU3RhdGU6OmtFbmRlZCwKLSAgICAgICAgICAgIHZpZGVvX3Ry
YWNrX3NvdXJjZS0+c3RhdGUoKSk7Ci19Ci0KLVRFU1QoSmF2YVZpZGVvU291cmNlVGVzdCwgQ2Fw
dHVyZXJTdG9wcGVkU3RhdGVCZWNvbWVzRW5kZWQpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hD
dXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgLy8gV3JhcCB0ZXN0IHRocmVhZCBzbyBpdCBjYW4g
YmUgdXNlZCBhcyB0aGUgc2lnbmFsaW5nIHRocmVhZC4KLSAgcnRjOjpUaHJlYWRNYW5hZ2VyOjpJ
bnN0YW5jZSgpLT5XcmFwQ3VycmVudFRocmVhZCgpOwotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxK
YXZhVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZT4gdmlkZW9fdHJhY2tfc291cmNlID0KLSAgICAg
IENyZWF0ZUphdmFWaWRlb1NvdXJjZSgKLSAgICAgICAgICBlbnYsIHJ0Yzo6VGhyZWFkTWFuYWdl
cjo6SW5zdGFuY2UoKS0+Q3VycmVudFRocmVhZCgpLAotICAgICAgICAgIGZhbHNlIC8qIGlzX3Nj
cmVlbmNhc3QgKi8sIHRydWUgLyogYWxpZ25fdGltZXN0YW1wcyAqLyk7Ci0KLSAgam5pOjpKYXZh
X0phdmFWaWRlb1NvdXJjZVRlc3RIZWxwZXJfc3RhcnRDYXB0dXJlKAotICAgICAgZW52LCB2aWRl
b190cmFja19zb3VyY2UtPkdldEphdmFWaWRlb0NhcHR1cmVyT2JzZXJ2ZXIoZW52KSwKLSAgICAg
IHRydWUgLyogc3VjY2VzcyAqLyk7Ci0gIGpuaTo6SmF2YV9KYXZhVmlkZW9Tb3VyY2VUZXN0SGVs
cGVyX3N0b3BDYXB0dXJlKAotICAgICAgZW52LCB2aWRlb190cmFja19zb3VyY2UtPkdldEphdmFW
aWRlb0NhcHR1cmVyT2JzZXJ2ZXIoZW52KSk7Ci0KLSAgRVhQRUNUX0VRKFZpZGVvVHJhY2tTb3Vy
Y2VJbnRlcmZhY2U6OlNvdXJjZVN0YXRlOjprRW5kZWQsCi0gICAgICAgICAgICB2aWRlb190cmFj
a19zb3VyY2UtPnN0YXRlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9BbmRyb2lkVmlkZW9E
ZWNvZGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0FuZHJvaWRWaWRlb0RlY29kZXIuamF2YQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5N2UyNTIxZWQ4MjA3NTMwMmFjNzA2MTUz
NGNlY2UwMjAzYTk5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvamF2YS9vcmcvd2VicnRjL0FuZHJvaWRWaWRlb0RlY29kZXIuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDY4NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWM7Ci1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5NZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxpdGllczsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLk1lZGlhRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBv
cnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC52
aWV3LlN1cmZhY2U7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5p
by5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkJsb2NraW5nRGVxdWU7
Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdEZXF1ZTsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2VicnRjLlRocmVh
ZFV0aWxzLlRocmVhZENoZWNrZXI7Ci0KLS8qKgotICogQW5kcm9pZCBoYXJkd2FyZSB2aWRlbyBk
ZWNvZGVyLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotLy8gQ2Fubm90
IHN1cHBvcnQgQVBJIDE2IHdpdGhvdXQgdXNpbmcgZGVwcmVjYXRlZCBtZXRob2RzLgotLy8gVE9E
TyhzYWthbCk6IFJlbmFtZSB0byBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIG9uY2UgdGhlIGRlcHJl
Y2F0ZWQgaW1wbGVtZW50YXRpb24gaXMgcmVtb3ZlZC4KLWNsYXNzIEFuZHJvaWRWaWRlb0RlY29k
ZXIgaW1wbGVtZW50cyBWaWRlb0RlY29kZXIsIFZpZGVvU2luayB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBUQUcgPSAiQW5kcm9pZFZpZGVvRGVjb2RlciI7Ci0KLSAgLy8gVE9ETyht
YWdqZWQpOiBVc2UgTWVkaWFGb3JtYXQuS0VZXyogY29uc3RhbnRzIHdoZW4gcGFydCBvZiB0aGUg
cHVibGljIEFQSS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FRElBX0ZPUk1BVF9L
RVlfU1RSSURFID0gInN0cmlkZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJ
QV9GT1JNQVRfS0VZX1NMSUNFX0hFSUdIVCA9ICJzbGljZS1oZWlnaHQiOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgTUVESUFfRk9STUFUX0tFWV9DUk9QX0xFRlQgPSAiY3JvcC1sZWZ0
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FRElBX0ZPUk1BVF9LRVlfQ1JPUF9S
SUdIVCA9ICJjcm9wLXJpZ2h0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FRElB
X0ZPUk1BVF9LRVlfQ1JPUF9UT1AgPSAiY3JvcC10b3AiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgTUVESUFfRk9STUFUX0tFWV9DUk9QX0JPVFRPTSA9ICJjcm9wLWJvdHRvbSI7Ci0K
LSAgLy8gTWVkaWFDb2RlYy5yZWxlYXNlKCkgb2NjYXNpb25hbGx5IGhhbmdzLiAgUmVsZWFzZSBz
dG9wcyB3YWl0aW5nIGFuZCByZXBvcnRzIGZhaWx1cmUgYWZ0ZXIKLSAgLy8gdGhpcyB0aW1lb3V0
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VU
X01TID0gNTAwMDsKLQotICAvLyBXZWJSVEMgcXVldWVzIGlucHV0IGZyYW1lcyBxdWlja2x5IGlu
IHRoZSBiZWdpbm5pbmcgb24gdGhlIGNhbGwuIFdhaXQgZm9yIGlucHV0IGJ1ZmZlcnMgd2l0aCBh
Ci0gIC8vIGxvbmcgdGltZW91dCAoNTAwIG1zKSB0byBwcmV2ZW50IHRoaXMgZnJvbSBjYXVzaW5n
IHRoZSBjb2RlYyB0byByZXR1cm4gYW4gZXJyb3IuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBERVFVRVVFX0lOUFVUX1RJTUVPVVRfVVMgPSA1MDAwMDA7Ci0KLSAgLy8gRGVxdWV1aW5nIGFu
IG91dHB1dCBidWZmZXIgd2lsbCBibG9jayB1bnRpbCBhIGJ1ZmZlciBpcyBhdmFpbGFibGUgKHVw
IHRvIDEwMCBtaWxsaXNlY29uZHMpLgotICAvLyBJZiB0aGlzIHRpbWVvdXQgaXMgZXhjZWVkZWQs
IHRoZSBvdXRwdXQgdGhyZWFkIHdpbGwgdW5ibG9jayBhbmQgY2hlY2sgaWYgdGhlIGRlY29kZXIg
aXMgc3RpbGwKLSAgLy8gcnVubmluZy4gIElmIGl0IGlzLCBpdCB3aWxsIGJsb2NrIG9uIGRlcXVl
dWUgYWdhaW4uICBPdGhlcndpc2UsIGl0IHdpbGwgc3RvcCBhbmQgcmVsZWFzZSB0aGUKLSAgLy8g
TWVkaWFDb2RlYy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFUVVFVUVfT1VUUFVUX0JV
RkZFUl9USU1FT1VUX1VTID0gMTAwMDAwOwotCi0gIHByaXZhdGUgZmluYWwgTWVkaWFDb2RlY1dy
YXBwZXJGYWN0b3J5IG1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeTsKLSAgcHJpdmF0ZSBmaW5hbCBT
dHJpbmcgY29kZWNOYW1lOwotICBwcml2YXRlIGZpbmFsIFZpZGVvQ29kZWNNaW1lVHlwZSBjb2Rl
Y1R5cGU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRnJhbWVJbmZvIHsKLSAgICBmaW5hbCBs
b25nIGRlY29kZVN0YXJ0VGltZU1zOwotICAgIGZpbmFsIGludCByb3RhdGlvbjsKLQotICAgIEZy
YW1lSW5mbyhsb25nIGRlY29kZVN0YXJ0VGltZU1zLCBpbnQgcm90YXRpb24pIHsKLSAgICAgIHRo
aXMuZGVjb2RlU3RhcnRUaW1lTXMgPSBkZWNvZGVTdGFydFRpbWVNczsKLSAgICAgIHRoaXMucm90
YXRpb24gPSByb3RhdGlvbjsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIEJsb2NraW5n
RGVxdWU8RnJhbWVJbmZvPiBmcmFtZUluZm9zOwotICBwcml2YXRlIGludCBjb2xvckZvcm1hdDsK
LQotICAvLyBPdXRwdXQgdGhyZWFkIHJ1bnMgYSBsb29wIHdoaWNoIHBvbGxzIE1lZGlhQ29kZWMg
Zm9yIGRlY29kZWQgb3V0cHV0IGJ1ZmZlcnMuICBJdCByZWZvcm1hdHMKLSAgLy8gdGhvc2UgYnVm
ZmVycyBpbnRvIFZpZGVvRnJhbWVzIGFuZCBkZWxpdmVycyB0aGVtIHRvIHRoZSBjYWxsYmFjay4g
IFZhcmlhYmxlIGlzIHNldCBvbiBkZWNvZGVyCi0gIC8vIHRocmVhZCBhbmQgaXMgaW1tdXRhYmxl
IHdoaWxlIHRoZSBjb2RlYyBpcyBydW5uaW5nLgotICBATnVsbGFibGUgcHJpdmF0ZSBUaHJlYWQg
b3V0cHV0VGhyZWFkOwotCi0gIC8vIENoZWNrZXIgdGhhdCBlbnN1cmVzIHdvcmsgaXMgcnVuIG9u
IHRoZSBvdXRwdXQgdGhyZWFkLgotICBwcml2YXRlIFRocmVhZENoZWNrZXIgb3V0cHV0VGhyZWFk
Q2hlY2tlcjsKLQotICAvLyBDaGVja2VyIHRoYXQgZW5zdXJlcyB3b3JrIGlzIHJ1biBvbiB0aGUg
ZGVjb2RlciB0aHJlYWQuICBUaGUgZGVjb2RlciB0aHJlYWQgaXMgb3duZWQgYnkgdGhlCi0gIC8v
IGNhbGxlciBhbmQgbXVzdCBiZSB1c2VkIHRvIGNhbGwgaW5pdERlY29kZSwgZGVjb2RlLCBhbmQg
cmVsZWFzZS4KLSAgcHJpdmF0ZSBUaHJlYWRDaGVja2VyIGRlY29kZXJUaHJlYWRDaGVja2VyOwot
Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBydW5uaW5nOwotICBATnVsbGFibGUgcHJpdmF0
ZSB2b2xhdGlsZSBFeGNlcHRpb24gc2h1dGRvd25FeGNlcHRpb247Ci0KLSAgLy8gRGltZW5zaW9u
cyAod2lkdGgsIGhlaWdodCwgc3RyaWRlLCBhbmQgc2xpY2VIZWlnaHQpIG1heSBiZSBhY2Nlc3Nl
ZCBieSBlaXRoZXIgdGhlIGRlY29kZSB0aHJlYWQKLSAgLy8gb3IgdGhlIG91dHB1dCB0aHJlYWQu
ICBBY2Nlc3NlcyBzaG91bGQgYmUgcHJvdGVjdGVkIHdpdGggdGhpcyBsb2NrLgotICBwcml2YXRl
IGZpbmFsIE9iamVjdCBkaW1lbnNpb25Mb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGlu
dCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBwcml2YXRlIGludCBzdHJpZGU7Ci0g
IHByaXZhdGUgaW50IHNsaWNlSGVpZ2h0OwotCi0gIC8vIFdoZXRoZXIgdGhlIGRlY29kZXIgaGFz
IGZpbmlzaGVkIHRoZSBmaXJzdCBmcmFtZS4gIFRoZSBjb2RlYyBtYXkgbm90IGNoYW5nZSBvdXRw
dXQgZGltZW5zaW9ucwotICAvLyBhZnRlciBkZWxpdmVyaW5nIHRoZSBmaXJzdCBmcmFtZS4gIE9u
bHkgYWNjZXNzZWQgb24gdGhlIG91dHB1dCB0aHJlYWQgd2hpbGUgdGhlIGRlY29kZXIgaXMKLSAg
Ly8gcnVubmluZy4KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0RlY29kZWRGaXJzdEZyYW1lOwotICAv
LyBXaGV0aGVyIHRoZSBkZWNvZGVyIGhhcyBzZWVuIGEga2V5IGZyYW1lLiAgVGhlIGZpcnN0IGZy
YW1lIG11c3QgYmUgYSBrZXkgZnJhbWUuICBPbmx5IGFjY2Vzc2VkCi0gIC8vIG9uIHRoZSBkZWNv
ZGVyIHRocmVhZC4KLSAgcHJpdmF0ZSBib29sZWFuIGtleUZyYW1lUmVxdWlyZWQ7Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBATnVsbGFibGUgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQ7Ci0gIC8v
IFZhbGlkIGFuZCBpbW11dGFibGUgd2hpbGUgdGhlIGRlY29kZXIgaXMgcnVubmluZy4KLSAgQE51
bGxhYmxlIHByaXZhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7
Ci0gIEBOdWxsYWJsZSBwcml2YXRlIFN1cmZhY2Ugc3VyZmFjZTsKLQotICBwcml2YXRlIHN0YXRp
YyBjbGFzcyBEZWNvZGVkVGV4dHVyZU1ldGFkYXRhIHsKLSAgICBmaW5hbCBsb25nIHByZXNlbnRh
dGlvblRpbWVzdGFtcFVzOwotICAgIGZpbmFsIEludGVnZXIgZGVjb2RlVGltZU1zOwotCi0gICAg
RGVjb2RlZFRleHR1cmVNZXRhZGF0YShsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzLCBJbnRl
Z2VyIGRlY29kZVRpbWVNcykgewotICAgICAgdGhpcy5wcmVzZW50YXRpb25UaW1lc3RhbXBVcyA9
IHByZXNlbnRhdGlvblRpbWVzdGFtcFVzOwotICAgICAgdGhpcy5kZWNvZGVUaW1lTXMgPSBkZWNv
ZGVUaW1lTXM7Ci0gICAgfQotICB9Ci0KLSAgLy8gTWV0YWRhdGEgZm9yIHRoZSBsYXN0IGZyYW1l
IHJlbmRlcmVkIHRvIHRoZSB0ZXh0dXJlLgotICBwcml2YXRlIGZpbmFsIE9iamVjdCByZW5kZXJl
ZFRleHR1cmVNZXRhZGF0YUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIEBOdWxsYWJsZSBwcml2YXRl
IERlY29kZWRUZXh0dXJlTWV0YWRhdGEgcmVuZGVyZWRUZXh0dXJlTWV0YWRhdGE7Ci0KLSAgLy8g
RGVjb2RpbmcgcHJvY2VlZHMgYXN5bmNocm9ub3VzbHkuICBUaGlzIGNhbGxiYWNrIHJldHVybnMg
ZGVjb2RlZCBmcmFtZXMgdG8gdGhlIGNhbGxlci4gIFZhbGlkCi0gIC8vIGFuZCBpbW11dGFibGUg
d2hpbGUgdGhlIGRlY29kZXIgaXMgcnVubmluZy4KLSAgQE51bGxhYmxlIHByaXZhdGUgQ2FsbGJh
Y2sgY2FsbGJhY2s7Ci0KLSAgLy8gVmFsaWQgYW5kIGltbXV0YWJsZSB3aGlsZSB0aGUgZGVjb2Rl
ciBpcyBydW5uaW5nLgotICBATnVsbGFibGUgcHJpdmF0ZSBNZWRpYUNvZGVjV3JhcHBlciBjb2Rl
YzsKLQotICBBbmRyb2lkVmlkZW9EZWNvZGVyKE1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeSBtZWRp
YUNvZGVjV3JhcHBlckZhY3RvcnksIFN0cmluZyBjb2RlY05hbWUsCi0gICAgICBWaWRlb0NvZGVj
TWltZVR5cGUgY29kZWNUeXBlLCBpbnQgY29sb3JGb3JtYXQsIEBOdWxsYWJsZSBFZ2xCYXNlLkNv
bnRleHQgc2hhcmVkQ29udGV4dCkgewotICAgIGlmICghaXNTdXBwb3J0ZWRDb2xvckZvcm1hdChj
b2xvckZvcm1hdCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
IlVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiArIGNvbG9yRm9ybWF0KTsKLSAgICB9Ci0gICAg
TG9nZ2luZy5kKFRBRywKLSAgICAgICAgImN0b3IgbmFtZTogIiArIGNvZGVjTmFtZSArICIgdHlw
ZTogIiArIGNvZGVjVHlwZSArICIgY29sb3IgZm9ybWF0OiAiICsgY29sb3JGb3JtYXQKLSAgICAg
ICAgICAgICsgIiBjb250ZXh0OiAiICsgc2hhcmVkQ29udGV4dCk7Ci0gICAgdGhpcy5tZWRpYUNv
ZGVjV3JhcHBlckZhY3RvcnkgPSBtZWRpYUNvZGVjV3JhcHBlckZhY3Rvcnk7Ci0gICAgdGhpcy5j
b2RlY05hbWUgPSBjb2RlY05hbWU7Ci0gICAgdGhpcy5jb2RlY1R5cGUgPSBjb2RlY1R5cGU7Ci0g
ICAgdGhpcy5jb2xvckZvcm1hdCA9IGNvbG9yRm9ybWF0OwotICAgIHRoaXMuc2hhcmVkQ29udGV4
dCA9IHNoYXJlZENvbnRleHQ7Ci0gICAgdGhpcy5mcmFtZUluZm9zID0gbmV3IExpbmtlZEJsb2Nr
aW5nRGVxdWU8PigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWRlb0NvZGVjU3Rh
dHVzIGluaXREZWNvZGUoU2V0dGluZ3Mgc2V0dGluZ3MsIENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0g
ICAgdGhpcy5kZWNvZGVyVGhyZWFkQ2hlY2tlciA9IG5ldyBUaHJlYWRDaGVja2VyKCk7Ci0KLSAg
ICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgaWYgKHNoYXJlZENvbnRleHQgIT0gbnVs
bCkgewotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBjcmVhdGVTdXJmYWNlVGV4dHVyZUhl
bHBlcigpOwotICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVy
LmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRM
aXN0ZW5pbmcodGhpcyk7Ci0gICAgfQotICAgIHJldHVybiBpbml0RGVjb2RlSW50ZXJuYWwoc2V0
dGluZ3Mud2lkdGgsIHNldHRpbmdzLmhlaWdodCk7Ci0gIH0KLQotICAvLyBJbnRlcm5hbCB2YXJp
YW50IGlzIHVzZWQgd2hlbiByZXN0YXJ0aW5nIHRoZSBjb2RlYyBkdWUgdG8gcmVjb25maWd1cmF0
aW9uLgotICBwcml2YXRlIFZpZGVvQ29kZWNTdGF0dXMgaW5pdERlY29kZUludGVybmFsKGludCB3
aWR0aCwgaW50IGhlaWdodCkgewotICAgIGRlY29kZXJUaHJlYWRDaGVja2VyLmNoZWNrSXNPblZh
bGlkVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywKLSAgICAgICAgImluaXREZWNvZGVJbnRl
cm5hbCBuYW1lOiAiICsgY29kZWNOYW1lICsgIiB0eXBlOiAiICsgY29kZWNUeXBlICsgIiB3aWR0
aDogIiArIHdpZHRoCi0gICAgICAgICAgICArICIgaGVpZ2h0OiAiICsgaGVpZ2h0KTsKLSAgICBp
ZiAob3V0cHV0VGhyZWFkICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJpbml0RGVj
b2RlSW50ZXJuYWwgY2FsbGVkIHdoaWxlIHRoZSBjb2RlYyBpcyBhbHJlYWR5IHJ1bm5pbmciKTsK
LSAgICAgIHJldHVybiBWaWRlb0NvZGVjU3RhdHVzLkZBTExCQUNLX1NPRlRXQVJFOwotICAgIH0K
LQotICAgIC8vIE5vdGU6ICBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgZGltZW5z
aW9ucyB1bmRlciB0aGUgbG9jaywgc2luY2UgdGhlIG91dHB1dCB0aHJlYWQKLSAgICAvLyBpcyBu
b3QgcnVubmluZy4KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBo
ZWlnaHQ7Ci0KLSAgICBzdHJpZGUgPSB3aWR0aDsKLSAgICBzbGljZUhlaWdodCA9IGhlaWdodDsK
LSAgICBoYXNEZWNvZGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgIGtleUZyYW1lUmVxdWlyZWQg
PSB0cnVlOwotCi0gICAgdHJ5IHsKLSAgICAgIGNvZGVjID0gbWVkaWFDb2RlY1dyYXBwZXJGYWN0
b3J5LmNyZWF0ZUJ5Q29kZWNOYW1lKGNvZGVjTmFtZSk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gfCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
IkNhbm5vdCBjcmVhdGUgbWVkaWEgZGVjb2RlciAiICsgY29kZWNOYW1lKTsKLSAgICAgIHJldHVy
biBWaWRlb0NvZGVjU3RhdHVzLkZBTExCQUNLX1NPRlRXQVJFOwotICAgIH0KLSAgICB0cnkgewot
ICAgICAgTWVkaWFGb3JtYXQgZm9ybWF0ID0gTWVkaWFGb3JtYXQuY3JlYXRlVmlkZW9Gb3JtYXQo
Y29kZWNUeXBlLm1pbWVUeXBlKCksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgaWYgKHNoYXJlZENv
bnRleHQgPT0gbnVsbCkgewotICAgICAgICBmb3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5L
RVlfQ09MT1JfRk9STUFULCBjb2xvckZvcm1hdCk7Ci0gICAgICB9Ci0gICAgICBjb2RlYy5jb25m
aWd1cmUoZm9ybWF0LCBzdXJmYWNlLCBudWxsLCAwKTsKLSAgICAgIGNvZGVjLnN0YXJ0KCk7Ci0g
ICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJpbml0RGVjb2RlIGZhaWxlZCIsIGUpOwotICAgICAgcmVsZWFzZSgpOwotICAgICAgcmV0
dXJuIFZpZGVvQ29kZWNTdGF0dXMuRkFMTEJBQ0tfU09GVFdBUkU7Ci0gICAgfQotICAgIHJ1bm5p
bmcgPSB0cnVlOwotICAgIG91dHB1dFRocmVhZCA9IGNyZWF0ZU91dHB1dFRocmVhZCgpOwotICAg
IG91dHB1dFRocmVhZC5zdGFydCgpOwotCi0gICAgTG9nZ2luZy5kKFRBRywgImluaXREZWNvZGVJ
bnRlcm5hbCBkb25lIik7Ci0gICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMuT0s7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZGVvQ29kZWNTdGF0dXMgZGVjb2RlKEVuY29kZWRJbWFn
ZSBmcmFtZSwgRGVjb2RlSW5mbyBpbmZvKSB7Ci0gICAgZGVjb2RlclRocmVhZENoZWNrZXIuY2hl
Y2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBpZiAoY29kZWMgPT0gbnVsbCB8fCBjYWxsYmFjayA9
PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiZGVjb2RlIHVuaW5pdGFsaXplZCwgY29k
ZWM6ICIgKyAoY29kZWMgIT0gbnVsbCkgKyAiLCBjYWxsYmFjazogIiArIGNhbGxiYWNrKTsKLSAg
ICAgIHJldHVybiBWaWRlb0NvZGVjU3RhdHVzLlVOSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAg
aWYgKGZyYW1lLmJ1ZmZlciA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVjb2Rl
KCkgLSBubyBpbnB1dCBkYXRhIik7Ci0gICAgICByZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5FUlJf
UEFSQU1FVEVSOwotICAgIH0KLQotICAgIGludCBzaXplID0gZnJhbWUuYnVmZmVyLnJlbWFpbmlu
ZygpOwotICAgIGlmIChzaXplID09IDApIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZWNvZGUo
KSAtIGlucHV0IGJ1ZmZlciBlbXB0eSIpOwotICAgICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMu
RVJSX1BBUkFNRVRFUjsKLSAgICB9Ci0KLSAgICAvLyBMb2FkIGRpbWVuc2lvbnMgZnJvbSBzaGFy
ZWQgbWVtb3J5IHVuZGVyIHRoZSBkaW1lbnNpb24gbG9jay4KLSAgICBmaW5hbCBpbnQgd2lkdGg7
Ci0gICAgZmluYWwgaW50IGhlaWdodDsKLSAgICBzeW5jaHJvbml6ZWQgKGRpbWVuc2lvbkxvY2sp
IHsKLSAgICAgIHdpZHRoID0gdGhpcy53aWR0aDsKLSAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0
OwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZSByZXNvbHV0aW9uIGNoYW5nZWQgYW5kIHJl
c2V0IHRoZSBjb2RlYyBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKGZyYW1lLmVuY29kZWRXaWR0aCAq
IGZyYW1lLmVuY29kZWRIZWlnaHQgPiAwCi0gICAgICAgICYmIChmcmFtZS5lbmNvZGVkV2lkdGgg
IT0gd2lkdGggfHwgZnJhbWUuZW5jb2RlZEhlaWdodCAhPSBoZWlnaHQpKSB7Ci0gICAgICBWaWRl
b0NvZGVjU3RhdHVzIHN0YXR1cyA9IHJlaW5pdERlY29kZShmcmFtZS5lbmNvZGVkV2lkdGgsIGZy
YW1lLmVuY29kZWRIZWlnaHQpOwotICAgICAgaWYgKHN0YXR1cyAhPSBWaWRlb0NvZGVjU3RhdHVz
Lk9LKSB7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGtleUZyYW1lUmVxdWlyZWQpIHsKLSAgICAgIC8vIE5lZWQgdG8gcHJvY2VzcyBhIGtleSBmcmFt
ZSBmaXJzdC4KLSAgICAgIGlmIChmcmFtZS5mcmFtZVR5cGUgIT0gRW5jb2RlZEltYWdlLkZyYW1l
VHlwZS5WaWRlb0ZyYW1lS2V5KSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJkZWNvZGUoKSAt
IGtleSBmcmFtZSByZXF1aXJlZCBmaXJzdCIpOwotICAgICAgICByZXR1cm4gVmlkZW9Db2RlY1N0
YXR1cy5OT19PVVRQVVQ7Ci0gICAgICB9Ci0gICAgICBpZiAoIWZyYW1lLmNvbXBsZXRlRnJhbWUp
IHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgImRlY29kZSgpIC0gY29tcGxldGUgZnJhbWUgcmVx
dWlyZWQgZmlyc3QiKTsKLSAgICAgICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMuTk9fT1VUUFVU
OwotICAgICAgfQotICAgIH0KLQotICAgIGludCBpbmRleDsKLSAgICB0cnkgewotICAgICAgaW5k
ZXggPSBjb2RlYy5kZXF1ZXVlSW5wdXRCdWZmZXIoREVRVUVVRV9JTlBVVF9USU1FT1VUX1VTKTsK
LSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgImRlcXVldWVJbnB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBWaWRl
b0NvZGVjU3RhdHVzLkVSUk9SOwotICAgIH0KLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAv
LyBEZWNvZGVyIGlzIGZhbGxpbmcgYmVoaW5kLiAgTm8gaW5wdXQgYnVmZmVycyBhdmFpbGFibGUu
Ci0gICAgICAvLyBUaGUgZGVjb2RlciBjYW4ndCBzaW1wbHkgZHJvcCBmcmFtZXM7IGl0IG1pZ2h0
IGxvc2UgYSBrZXkgZnJhbWUuCi0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVjb2RlKCkgLSBubyBI
VyBidWZmZXJzIGF2YWlsYWJsZTsgZGVjb2RlciBmYWxsaW5nIGJlaGluZCIpOwotICAgICAgcmV0
dXJuIFZpZGVvQ29kZWNTdGF0dXMuRVJST1I7Ci0gICAgfQotCi0gICAgQnl0ZUJ1ZmZlciBidWZm
ZXI7Ci0gICAgdHJ5IHsKLSAgICAgIGJ1ZmZlciA9IGNvZGVjLmdldElucHV0QnVmZmVycygpW2lu
ZGV4XTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgImdldElucHV0QnVmZmVycyBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBW
aWRlb0NvZGVjU3RhdHVzLkVSUk9SOwotICAgIH0KLQotICAgIGlmIChidWZmZXIuY2FwYWNpdHko
KSA8IHNpemUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZWNvZGUoKSAtIEhXIGJ1ZmZlciB0
b28gc21hbGwiKTsKLSAgICAgIHJldHVybiBWaWRlb0NvZGVjU3RhdHVzLkVSUk9SOwotICAgIH0K
LSAgICBidWZmZXIucHV0KGZyYW1lLmJ1ZmZlcik7Ci0KLSAgICBmcmFtZUluZm9zLm9mZmVyKG5l
dyBGcmFtZUluZm8oU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCksIGZyYW1lLnJvdGF0aW9u
KSk7Ci0gICAgdHJ5IHsKLSAgICAgIGNvZGVjLnF1ZXVlSW5wdXRCdWZmZXIoaW5kZXgsIDAgLyog
b2Zmc2V0ICovLCBzaXplLAotICAgICAgICAgIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWljcm9z
KGZyYW1lLmNhcHR1cmVUaW1lTnMpLCAwIC8qIGZsYWdzICovKTsKLSAgICB9IGNhdGNoIChJbGxl
Z2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInF1ZXVlSW5wdXRC
dWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICBmcmFtZUluZm9zLnBvbGxMYXN0KCk7Ci0gICAgICBy
ZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5FUlJPUjsKLSAgICB9Ci0gICAgaWYgKGtleUZyYW1lUmVx
dWlyZWQpIHsKLSAgICAgIGtleUZyYW1lUmVxdWlyZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIFZpZGVvQ29kZWNTdGF0dXMuT0s7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gZ2V0UHJlZmVyc0xhdGVEZWNvZGluZygpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nIGdldEltcGxlbWVudGF0aW9uTmFtZSgpIHsK
LSAgICByZXR1cm4gY29kZWNOYW1lOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWRl
b0NvZGVjU3RhdHVzIHJlbGVhc2UoKSB7Ci0gICAgLy8gVE9ETyhzYWthbCk6IFRoaXMgaXMgbm90
IGNhbGxlZCBvbiB0aGUgY29ycmVjdCB0aHJlYWQgYnV0IGlzIHN0aWxsIGNhbGxlZCBzeW5jaHJv
bm91c2x5LgotICAgIC8vIFJlLWVuYWJsZSB0aGUgY2hlY2sgb25jZSB0aGlzIGlzIGNhbGxlZCBv
biB0aGUgY29ycmVjdCB0aHJlYWQuCi0gICAgLy8gZGVjb2RlclRocmVhZENoZWNrZXIuY2hlY2tJ
c09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAicmVsZWFzZSIpOwotICAgIFZp
ZGVvQ29kZWNTdGF0dXMgc3RhdHVzID0gcmVsZWFzZUludGVybmFsKCk7Ci0gICAgaWYgKHN1cmZh
Y2UgIT0gbnVsbCkgewotICAgICAgcmVsZWFzZVN1cmZhY2UoKTsKLSAgICAgIHN1cmZhY2UgPSBu
dWxsOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAgICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIgPSBudWxsOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKHJlbmRlcmVkVGV4dHVyZU1ldGFk
YXRhTG9jaykgewotICAgICAgcmVuZGVyZWRUZXh0dXJlTWV0YWRhdGEgPSBudWxsOwotICAgIH0K
LSAgICBjYWxsYmFjayA9IG51bGw7Ci0gICAgZnJhbWVJbmZvcy5jbGVhcigpOwotICAgIHJldHVy
biBzdGF0dXM7Ci0gIH0KLQotICAvLyBJbnRlcm5hbCB2YXJpYW50IGlzIHVzZWQgd2hlbiByZXN0
YXJ0aW5nIHRoZSBjb2RlYyBkdWUgdG8gcmVjb25maWd1cmF0aW9uLgotICBwcml2YXRlIFZpZGVv
Q29kZWNTdGF0dXMgcmVsZWFzZUludGVybmFsKCkgewotICAgIGlmICghcnVubmluZykgewotICAg
ICAgTG9nZ2luZy5kKFRBRywgInJlbGVhc2U6IERlY29kZXIgaXMgbm90IHJ1bm5pbmcuIik7Ci0g
ICAgICByZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5PSzsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAg
IC8vIFRoZSBvdXRwdXRUaHJlYWQgYWN0dWFsbHkgc3RvcHMgYW5kIHJlbGVhc2VzIHRoZSBjb2Rl
YyBvbmNlIHJ1bm5pbmcgaXMgZmFsc2UuCi0gICAgICBydW5uaW5nID0gZmFsc2U7Ci0gICAgICBp
ZiAoIVRocmVhZFV0aWxzLmpvaW5VbmludGVycnVwdGlibHkob3V0cHV0VGhyZWFkLCBNRURJQV9D
T0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMpKSB7Ci0gICAgICAgIC8vIExvZyBhbiBleGNlcHRpb24g
dG8gY2FwdHVyZSB0aGUgc3RhY2sgdHJhY2UgYW5kIHR1cm4gaXQgaW50byBhIFRJTUVPVVQgZXJy
b3IuCi0gICAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRpYSBkZWNvZGVyIHJlbGVhc2UgdGltZW91
dCIsIG5ldyBSdW50aW1lRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4gVmlkZW9Db2RlY1N0
YXR1cy5USU1FT1VUOwotICAgICAgfQotICAgICAgaWYgKHNodXRkb3duRXhjZXB0aW9uICE9IG51
bGwpIHsKLSAgICAgICAgLy8gTG9nIHRoZSBleGNlcHRpb24gYW5kIHR1cm4gaXQgaW50byBhbiBl
cnJvci4gIFdyYXAgdGhlIGV4Y2VwdGlvbiBpbiBhIG5ldyBleGNlcHRpb24gdG8KLSAgICAgICAg
Ly8gY2FwdHVyZSBib3RoIHRoZSBvdXRwdXQgdGhyZWFkJ3Mgc3RhY2sgdHJhY2UgYW5kIHRoaXMg
dGhyZWFkJ3Mgc3RhY2sgdHJhY2UuCi0gICAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRpYSBkZWNv
ZGVyIHJlbGVhc2UgZXJyb3IiLCBuZXcgUnVudGltZUV4Y2VwdGlvbihzaHV0ZG93bkV4Y2VwdGlv
bikpOwotICAgICAgICBzaHV0ZG93bkV4Y2VwdGlvbiA9IG51bGw7Ci0gICAgICAgIHJldHVybiBW
aWRlb0NvZGVjU3RhdHVzLkVSUk9SOwotICAgICAgfQotICAgIH0gZmluYWxseSB7Ci0gICAgICBj
b2RlYyA9IG51bGw7Ci0gICAgICBvdXRwdXRUaHJlYWQgPSBudWxsOwotICAgIH0KLSAgICByZXR1
cm4gVmlkZW9Db2RlY1N0YXR1cy5PSzsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9Db2RlY1N0YXR1
cyByZWluaXREZWNvZGUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KSB7Ci0gICAgZGVjb2Rl
clRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBWaWRlb0NvZGVjU3Rh
dHVzIHN0YXR1cyA9IHJlbGVhc2VJbnRlcm5hbCgpOwotICAgIGlmIChzdGF0dXMgIT0gVmlkZW9D
b2RlY1N0YXR1cy5PSykgewotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgcmV0dXJu
IGluaXREZWNvZGVJbnRlcm5hbChuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLSAgfQotCi0gIHByaXZh
dGUgVGhyZWFkIGNyZWF0ZU91dHB1dFRocmVhZCgpIHsKLSAgICByZXR1cm4gbmV3IFRocmVhZCgi
QW5kcm9pZFZpZGVvRGVjb2Rlci5vdXRwdXRUaHJlYWQiKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgb3V0cHV0VGhyZWFkQ2hlY2tlciA9IG5l
dyBUaHJlYWRDaGVja2VyKCk7Ci0gICAgICAgIHdoaWxlIChydW5uaW5nKSB7Ci0gICAgICAgICAg
ZGVsaXZlckRlY29kZWRGcmFtZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbGVhc2VDb2RlY09u
T3V0cHV0VGhyZWFkKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8vIFZpc2libGUgZm9y
IHRlc3RpbmcuCi0gIHByb3RlY3RlZCB2b2lkIGRlbGl2ZXJEZWNvZGVkRnJhbWUoKSB7Ci0gICAg
b3V0cHV0VGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIHRyeSB7Ci0g
ICAgICBNZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9IG5ldyBNZWRpYUNvZGVjLkJ1ZmZlcklu
Zm8oKTsKLSAgICAgIC8vIEJsb2NrIHVudGlsIGFuIG91dHB1dCBidWZmZXIgaXMgYXZhaWxhYmxl
ICh1cCB0byAxMDAgbWlsbGlzZWNvbmRzKS4gIElmIHRoZSB0aW1lb3V0IGlzCi0gICAgICAvLyBl
eGNlZWRlZCwgZGVsaXZlckRlY29kZWRGcmFtZSgpIHdpbGwgYmUgY2FsbGVkIGFnYWluIG9uIHRo
ZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgb3V0cHV0Ci0gICAgICAvLyB0aHJlYWQncyBsb29wLiAg
QmxvY2tpbmcgaGVyZSBwcmV2ZW50cyB0aGUgb3V0cHV0IHRocmVhZCBmcm9tIGJ1c3ktd2FpdGlu
ZyB3aGlsZSB0aGUgY29kZWMKLSAgICAgIC8vIGlzIGlkbGUuCi0gICAgICBpbnQgcmVzdWx0ID0g
Y29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZlcihpbmZvLCBERVFVRVVFX09VVFBVVF9CVUZGRVJfVElN
RU9VVF9VUyk7Ci0gICAgICBpZiAocmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfRk9S
TUFUX0NIQU5HRUQpIHsKLSAgICAgICAgcmVmb3JtYXQoY29kZWMuZ2V0T3V0cHV0Rm9ybWF0KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0g
ICAgICAgIExvZ2dpbmcudihUQUcsICJkZXF1ZXVlT3V0cHV0QnVmZmVyIHJldHVybmVkICIgKyBy
ZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIEZyYW1lSW5mbyBmcmFt
ZUluZm8gPSBmcmFtZUluZm9zLnBvbGwoKTsKLSAgICAgIEludGVnZXIgZGVjb2RlVGltZU1zID0g
bnVsbDsKLSAgICAgIGludCByb3RhdGlvbiA9IDA7Ci0gICAgICBpZiAoZnJhbWVJbmZvICE9IG51
bGwpIHsKLSAgICAgICAgZGVjb2RlVGltZU1zID0gKGludCkgKFN5c3RlbUNsb2NrLmVsYXBzZWRS
ZWFsdGltZSgpIC0gZnJhbWVJbmZvLmRlY29kZVN0YXJ0VGltZU1zKTsKLSAgICAgICAgcm90YXRp
b24gPSBmcmFtZUluZm8ucm90YXRpb247Ci0gICAgICB9Ci0KLSAgICAgIGhhc0RlY29kZWRGaXJz
dEZyYW1lID0gdHJ1ZTsKLQotICAgICAgaWYgKHN1cmZhY2VUZXh0dXJlSGVscGVyICE9IG51bGwp
IHsKLSAgICAgICAgZGVsaXZlclRleHR1cmVGcmFtZShyZXN1bHQsIGluZm8sIHJvdGF0aW9uLCBk
ZWNvZGVUaW1lTXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVsaXZlckJ5dGVGcmFtZShy
ZXN1bHQsIGluZm8sIHJvdGF0aW9uLCBkZWNvZGVUaW1lTXMpOwotICAgICAgfQotCi0gICAgfSBj
YXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJk
ZWxpdmVyRGVjb2RlZEZyYW1lIGZhaWxlZCIsIGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBkZWxpdmVyVGV4dHVyZUZyYW1lKGZpbmFsIGludCBpbmRleCwgZmluYWwgTWVkaWFDb2Rl
Yy5CdWZmZXJJbmZvIGluZm8sCi0gICAgICBmaW5hbCBpbnQgcm90YXRpb24sIGZpbmFsIEludGVn
ZXIgZGVjb2RlVGltZU1zKSB7Ci0gICAgLy8gTG9hZCBkaW1lbnNpb25zIGZyb20gc2hhcmVkIG1l
bW9yeSB1bmRlciB0aGUgZGltZW5zaW9uIGxvY2suCi0gICAgZmluYWwgaW50IHdpZHRoOwotICAg
IGZpbmFsIGludCBoZWlnaHQ7Ci0gICAgc3luY2hyb25pemVkIChkaW1lbnNpb25Mb2NrKSB7Ci0g
ICAgICB3aWR0aCA9IHRoaXMud2lkdGg7Ci0gICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDsKLSAg
ICB9Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHJlbmRlcmVkVGV4dHVyZU1ldGFkYXRhTG9jaykgewot
ICAgICAgaWYgKHJlbmRlcmVkVGV4dHVyZU1ldGFkYXRhICE9IG51bGwpIHsKLSAgICAgICAgY29k
ZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmRleCwgZmFsc2UpOwotICAgICAgICByZXR1cm47IC8v
IFdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciB0ZXh0dXJlIGZvciB0aGUgcHJldmlvdXMgZnJhbWUs
IGRyb3AgdGhpcyBvbmUuCi0gICAgICB9Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zZXRU
ZXh0dXJlU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnNl
dEZyYW1lUm90YXRpb24ocm90YXRpb24pOwotICAgICAgcmVuZGVyZWRUZXh0dXJlTWV0YWRhdGEg
PSBuZXcgRGVjb2RlZFRleHR1cmVNZXRhZGF0YShpbmZvLnByZXNlbnRhdGlvblRpbWVVcywgZGVj
b2RlVGltZU1zKTsKLSAgICAgIGNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgsIC8qIHJl
bmRlcj0gKi8gdHJ1ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uRnJhbWUoVmlkZW9GcmFtZSBmcmFtZSkgewotICAgIGZpbmFsIFZpZGVvRnJhbWUgbmV3RnJh
bWU7Ci0gICAgZmluYWwgSW50ZWdlciBkZWNvZGVUaW1lTXM7Ci0gICAgZmluYWwgbG9uZyB0aW1l
c3RhbXBOczsKLSAgICBzeW5jaHJvbml6ZWQgKHJlbmRlcmVkVGV4dHVyZU1ldGFkYXRhTG9jaykg
ewotICAgICAgaWYgKHJlbmRlcmVkVGV4dHVyZU1ldGFkYXRhID09IG51bGwpIHsKLSAgICAgICAg
dGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJSZW5kZXJlZCB0
ZXh0dXJlIG1ldGFkYXRhIHdhcyBudWxsIGluIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlLiIpOwot
ICAgICAgfQotICAgICAgdGltZXN0YW1wTnMgPSByZW5kZXJlZFRleHR1cmVNZXRhZGF0YS5wcmVz
ZW50YXRpb25UaW1lc3RhbXBVcyAqIDEwMDA7Ci0gICAgICBkZWNvZGVUaW1lTXMgPSByZW5kZXJl
ZFRleHR1cmVNZXRhZGF0YS5kZWNvZGVUaW1lTXM7Ci0gICAgICByZW5kZXJlZFRleHR1cmVNZXRh
ZGF0YSA9IG51bGw7Ci0gICAgfQotICAgIC8vIENoYW5nZSB0aW1lc3RhbXAgb2YgZnJhbWUuCi0g
ICAgZmluYWwgVmlkZW9GcmFtZSBmcmFtZVdpdGhNb2RpZmllZFRpbWVTdGFtcCA9Ci0gICAgICAg
IG5ldyBWaWRlb0ZyYW1lKGZyYW1lLmdldEJ1ZmZlcigpLCBmcmFtZS5nZXRSb3RhdGlvbigpLCB0
aW1lc3RhbXBOcyk7Ci0gICAgY2FsbGJhY2sub25EZWNvZGVkRnJhbWUoZnJhbWVXaXRoTW9kaWZp
ZWRUaW1lU3RhbXAsIGRlY29kZVRpbWVNcywgbnVsbCAvKiBxcCAqLyk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgZGVsaXZlckJ5dGVGcmFtZSgKLSAgICAgIGludCByZXN1bHQsIE1lZGlhQ29kZWMu
QnVmZmVySW5mbyBpbmZvLCBpbnQgcm90YXRpb24sIEludGVnZXIgZGVjb2RlVGltZU1zKSB7Ci0g
ICAgLy8gTG9hZCBkaW1lbnNpb25zIGZyb20gc2hhcmVkIG1lbW9yeSB1bmRlciB0aGUgZGltZW5z
aW9uIGxvY2suCi0gICAgaW50IHdpZHRoOwotICAgIGludCBoZWlnaHQ7Ci0gICAgaW50IHN0cmlk
ZTsKLSAgICBpbnQgc2xpY2VIZWlnaHQ7Ci0gICAgc3luY2hyb25pemVkIChkaW1lbnNpb25Mb2Nr
KSB7Ci0gICAgICB3aWR0aCA9IHRoaXMud2lkdGg7Ci0gICAgICBoZWlnaHQgPSB0aGlzLmhlaWdo
dDsKLSAgICAgIHN0cmlkZSA9IHRoaXMuc3RyaWRlOwotICAgICAgc2xpY2VIZWlnaHQgPSB0aGlz
LnNsaWNlSGVpZ2h0OwotICAgIH0KLQotICAgIC8vIE91dHB1dCBtdXN0IGJlIGF0IGxlYXN0IHdp
ZHRoICogaGVpZ2h0IGJ5dGVzIGZvciBZIGNoYW5uZWwsIHBsdXMgKHdpZHRoIC8gMikgKiAoaGVp
Z2h0IC8gMikKLSAgICAvLyBieXRlcyBmb3IgZWFjaCBvZiB0aGUgVSBhbmQgViBjaGFubmVscy4K
LSAgICBpZiAoaW5mby5zaXplIDwgd2lkdGggKiBoZWlnaHQgKiAzIC8gMikgewotICAgICAgTG9n
Z2luZy5lKFRBRywgIkluc3VmZmljaWVudCBvdXRwdXQgYnVmZmVyIHNpemU6ICIgKyBpbmZvLnNp
emUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbmZvLnNpemUgPCBzdHJpZGUg
KiBoZWlnaHQgKiAzIC8gMiAmJiBzbGljZUhlaWdodCA9PSBoZWlnaHQgJiYgc3RyaWRlID4gd2lk
dGgpIHsKLSAgICAgIC8vIFNvbWUgY29kZWNzIChFeHlub3MpIHJlcG9ydCBhbiBpbmNvcnJlY3Qg
c3RyaWRlLiAgQ29ycmVjdCBpdCBoZXJlLgotICAgICAgLy8gRXhwZWN0ZWQgc2l6ZSA9PSBzdHJp
ZGUgKiBoZWlnaHQgKiAzIC8gMi4gIEEgYml0IG9mIGFsZ2VicmEgZ2l2ZXMgdGhlIGNvcnJlY3Qg
c3RyaWRlIGFzCi0gICAgICAvLyAyICogc2l6ZSAvICgzICogaGVpZ2h0KS4KLSAgICAgIHN0cmlk
ZSA9IGluZm8uc2l6ZSAqIDIgLyAoaGVpZ2h0ICogMyk7Ci0gICAgfQotCi0gICAgQnl0ZUJ1ZmZl
ciBidWZmZXIgPSBjb2RlYy5nZXRPdXRwdXRCdWZmZXJzKClbcmVzdWx0XTsKLSAgICBidWZmZXIu
cG9zaXRpb24oaW5mby5vZmZzZXQpOwotICAgIGJ1ZmZlci5saW1pdChpbmZvLm9mZnNldCArIGlu
Zm8uc2l6ZSk7Ci0gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKCk7Ci0KLSAgICBmaW5hbCBWaWRl
b0ZyYW1lLkJ1ZmZlciBmcmFtZUJ1ZmZlcjsKLSAgICBpZiAoY29sb3JGb3JtYXQgPT0gQ29kZWND
YXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyKSB7Ci0gICAgICBmcmFtZUJ1ZmZl
ciA9IGNvcHlJNDIwQnVmZmVyKGJ1ZmZlciwgc3RyaWRlLCBzbGljZUhlaWdodCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEFsbCBvdGhlciBzdXBwb3J0ZWQgY29sb3Ig
Zm9ybWF0cyBhcmUgTlYxMi4KLSAgICAgIGZyYW1lQnVmZmVyID0gY29weU5WMTJUb0k0MjBCdWZm
ZXIoYnVmZmVyLCBzdHJpZGUsIHNsaWNlSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0g
ICAgY29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihyZXN1bHQsIC8qIHJlbmRlcj0gKi8gZmFsc2Up
OwotCi0gICAgbG9uZyBwcmVzZW50YXRpb25UaW1lTnMgPSBpbmZvLnByZXNlbnRhdGlvblRpbWVV
cyAqIDEwMDA7Ci0gICAgVmlkZW9GcmFtZSBmcmFtZSA9IG5ldyBWaWRlb0ZyYW1lKGZyYW1lQnVm
ZmVyLCByb3RhdGlvbiwgcHJlc2VudGF0aW9uVGltZU5zKTsKLQotICAgIC8vIE5vdGUgdGhhdCBx
cCBpcyBwYXJzZWQgb24gdGhlIEMrKyBzaWRlLgotICAgIGNhbGxiYWNrLm9uRGVjb2RlZEZyYW1l
KGZyYW1lLCBkZWNvZGVUaW1lTXMsIG51bGwgLyogcXAgKi8pOwotICAgIGZyYW1lLnJlbGVhc2Uo
KTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9GcmFtZS5CdWZmZXIgY29weU5WMTJUb0k0MjBCdWZm
ZXIoCi0gICAgICBCeXRlQnVmZmVyIGJ1ZmZlciwgaW50IHN0cmlkZSwgaW50IHNsaWNlSGVpZ2h0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAvLyB0b0k0MjAgY29waWVzIHRoZSBidWZm
ZXIuCi0gICAgcmV0dXJuIG5ldyBOVjEyQnVmZmVyKHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgc2xp
Y2VIZWlnaHQsIGJ1ZmZlciwgbnVsbCAvKiByZWxlYXNlQ2FsbGJhY2sgKi8pCi0gICAgICAgIC50
b0k0MjAoKTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9GcmFtZS5CdWZmZXIgY29weUk0MjBCdWZm
ZXIoCi0gICAgICBCeXRlQnVmZmVyIGJ1ZmZlciwgaW50IHN0cmlkZSwgaW50IHNsaWNlSGVpZ2h0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBpZiAoc3RyaWRlICUgMiAhPSAwKSB7Ci0g
ICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlN0cmlkZSBpcyBub3QgZGl2aXNpYmxlIGJ5
IHR3bzogIiArIHN0cmlkZSk7Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBjYXNlIHdp
dGggb2RkIHxzbGljZUhlaWdodHwgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5LgotICAgIC8v
IFRoZSBjaHJvbWEgaGVpZ2h0IGNvbnRhaW5lZCBpbiB0aGUgcGF5bG9hZCBpcyByb3VuZGVkIGRv
d24gaW5zdGVhZCBvZgotICAgIC8vIHVwLCBtYWtpbmcgaXQgb25lIHJvdyBsZXNzIHRoYW4gd2hh
dCB3ZSBleHBlY3QgaW4gV2ViUlRDLiBUaGVyZWZvcmUsIHdlCi0gICAgLy8gaGF2ZSB0byBkdXBs
aWNhdGUgdGhlIGxhc3QgY2hyb21hIHJvd3MgZm9yIHRoaXMgY2FzZS4gQWxzbywgdGhlIG9mZnNl
dAotICAgIC8vIGJldHdlZW4gdGhlIFkgcGxhbmUgYW5kIHRoZSBVIHBsYW5lIGlzIHVuaW50dWl0
aXZlIGZvciB0aGlzIGNhc2UuIFNlZQotICAgIC8vIGh0dHA6Ly9idWdzLndlYnJ0Yy5vcmcvNjY1
MSBmb3IgbW9yZSBpbmZvLgotICAgIGZpbmFsIGludCBjaHJvbWFXaWR0aCA9ICh3aWR0aCArIDEp
IC8gMjsKLSAgICBmaW5hbCBpbnQgY2hyb21hSGVpZ2h0ID0gKHNsaWNlSGVpZ2h0ICUgMiA9PSAw
KSA/IChoZWlnaHQgKyAxKSAvIDIgOiBoZWlnaHQgLyAyOwotCi0gICAgZmluYWwgaW50IHV2U3Ry
aWRlID0gc3RyaWRlIC8gMjsKLQotICAgIGZpbmFsIGludCB5UG9zID0gMDsKLSAgICBmaW5hbCBp
bnQgeUVuZCA9IHlQb3MgKyBzdHJpZGUgKiBoZWlnaHQ7Ci0gICAgZmluYWwgaW50IHVQb3MgPSB5
UG9zICsgc3RyaWRlICogc2xpY2VIZWlnaHQ7Ci0gICAgZmluYWwgaW50IHVFbmQgPSB1UG9zICsg
dXZTdHJpZGUgKiBjaHJvbWFIZWlnaHQ7Ci0gICAgZmluYWwgaW50IHZQb3MgPSB1UG9zICsgdXZT
dHJpZGUgKiBzbGljZUhlaWdodCAvIDI7Ci0gICAgZmluYWwgaW50IHZFbmQgPSB2UG9zICsgdXZT
dHJpZGUgKiBjaHJvbWFIZWlnaHQ7Ci0KLSAgICBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgZnJhbWVC
dWZmZXIgPSBhbGxvY2F0ZUk0MjBCdWZmZXIod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBidWZmZXIu
bGltaXQoeUVuZCk7Ci0gICAgYnVmZmVyLnBvc2l0aW9uKHlQb3MpOwotICAgIGNvcHlQbGFuZSgK
LSAgICAgICAgYnVmZmVyLnNsaWNlKCksIHN0cmlkZSwgZnJhbWVCdWZmZXIuZ2V0RGF0YVkoKSwg
ZnJhbWVCdWZmZXIuZ2V0U3RyaWRlWSgpLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGJ1ZmZlci5s
aW1pdCh1RW5kKTsKLSAgICBidWZmZXIucG9zaXRpb24odVBvcyk7Ci0gICAgY29weVBsYW5lKGJ1
ZmZlci5zbGljZSgpLCB1dlN0cmlkZSwgZnJhbWVCdWZmZXIuZ2V0RGF0YVUoKSwgZnJhbWVCdWZm
ZXIuZ2V0U3RyaWRlVSgpLAotICAgICAgICBjaHJvbWFXaWR0aCwgY2hyb21hSGVpZ2h0KTsKLSAg
ICBpZiAoc2xpY2VIZWlnaHQgJSAyID09IDEpIHsKLSAgICAgIGJ1ZmZlci5wb3NpdGlvbih1UG9z
ICsgdXZTdHJpZGUgKiAoY2hyb21hSGVpZ2h0IC0gMSkpOyAvLyBTZWVrIHRvIGJlZ2lubmluZyBv
ZiBsYXN0IGZ1bGwgcm93LgotCi0gICAgICBCeXRlQnVmZmVyIGRhdGFVID0gZnJhbWVCdWZmZXIu
Z2V0RGF0YVUoKTsKLSAgICAgIGRhdGFVLnBvc2l0aW9uKGZyYW1lQnVmZmVyLmdldFN0cmlkZVUo
KSAqIGNocm9tYUhlaWdodCk7IC8vIFNlZWsgdG8gYmVnaW5uaW5nIG9mIGxhc3Qgcm93LgotICAg
ICAgZGF0YVUucHV0KGJ1ZmZlcik7IC8vIENvcHkgdGhlIGxhc3Qgcm93LgotICAgIH0KLQotICAg
IGJ1ZmZlci5saW1pdCh2RW5kKTsKLSAgICBidWZmZXIucG9zaXRpb24odlBvcyk7Ci0gICAgY29w
eVBsYW5lKGJ1ZmZlci5zbGljZSgpLCB1dlN0cmlkZSwgZnJhbWVCdWZmZXIuZ2V0RGF0YVYoKSwg
ZnJhbWVCdWZmZXIuZ2V0U3RyaWRlVigpLAotICAgICAgICBjaHJvbWFXaWR0aCwgY2hyb21hSGVp
Z2h0KTsKLSAgICBpZiAoc2xpY2VIZWlnaHQgJSAyID09IDEpIHsKLSAgICAgIGJ1ZmZlci5wb3Np
dGlvbih2UG9zICsgdXZTdHJpZGUgKiAoY2hyb21hSGVpZ2h0IC0gMSkpOyAvLyBTZWVrIHRvIGJl
Z2lubmluZyBvZiBsYXN0IGZ1bGwgcm93LgotCi0gICAgICBCeXRlQnVmZmVyIGRhdGFWID0gZnJh
bWVCdWZmZXIuZ2V0RGF0YVYoKTsKLSAgICAgIGRhdGFWLnBvc2l0aW9uKGZyYW1lQnVmZmVyLmdl
dFN0cmlkZVYoKSAqIGNocm9tYUhlaWdodCk7IC8vIFNlZWsgdG8gYmVnaW5uaW5nIG9mIGxhc3Qg
cm93LgotICAgICAgZGF0YVYucHV0KGJ1ZmZlcik7IC8vIENvcHkgdGhlIGxhc3Qgcm93LgotICAg
IH0KLQotICAgIHJldHVybiBmcmFtZUJ1ZmZlcjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWZv
cm1hdChNZWRpYUZvcm1hdCBmb3JtYXQpIHsKLSAgICBvdXRwdXRUaHJlYWRDaGVja2VyLmNoZWNr
SXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkRlY29kZXIgZm9ybWF0IGNo
YW5nZWQ6ICIgKyBmb3JtYXQudG9TdHJpbmcoKSk7Ci0gICAgZmluYWwgaW50IG5ld1dpZHRoOwot
ICAgIGZpbmFsIGludCBuZXdIZWlnaHQ7Ci0gICAgaWYgKGZvcm1hdC5jb250YWluc0tleShNRURJ
QV9GT1JNQVRfS0VZX0NST1BfTEVGVCkKLSAgICAgICAgJiYgZm9ybWF0LmNvbnRhaW5zS2V5KE1F
RElBX0ZPUk1BVF9LRVlfQ1JPUF9SSUdIVCkKLSAgICAgICAgJiYgZm9ybWF0LmNvbnRhaW5zS2V5
KE1FRElBX0ZPUk1BVF9LRVlfQ1JPUF9CT1RUT00pCi0gICAgICAgICYmIGZvcm1hdC5jb250YWlu
c0tleShNRURJQV9GT1JNQVRfS0VZX0NST1BfVE9QKSkgewotICAgICAgbmV3V2lkdGggPSAxICsg
Zm9ybWF0LmdldEludGVnZXIoTUVESUFfRk9STUFUX0tFWV9DUk9QX1JJR0hUKQotICAgICAgICAg
IC0gZm9ybWF0LmdldEludGVnZXIoTUVESUFfRk9STUFUX0tFWV9DUk9QX0xFRlQpOwotICAgICAg
bmV3SGVpZ2h0ID0gMSArIGZvcm1hdC5nZXRJbnRlZ2VyKE1FRElBX0ZPUk1BVF9LRVlfQ1JPUF9C
T1RUT00pCi0gICAgICAgICAgLSBmb3JtYXQuZ2V0SW50ZWdlcihNRURJQV9GT1JNQVRfS0VZX0NS
T1BfVE9QKTsKLSAgICB9IGVsc2UgewotICAgICAgbmV3V2lkdGggPSBmb3JtYXQuZ2V0SW50ZWdl
cihNZWRpYUZvcm1hdC5LRVlfV0lEVEgpOwotICAgICAgbmV3SGVpZ2h0ID0gZm9ybWF0LmdldElu
dGVnZXIoTWVkaWFGb3JtYXQuS0VZX0hFSUdIVCk7Ci0gICAgfQotICAgIC8vIENvbXBhcmUgdG8g
ZXhpc3Rpbmcgd2lkdGgsIGhlaWdodCwgYW5kIHNhdmUgdmFsdWVzIHVuZGVyIHRoZSBkaW1lbnNp
b24gbG9jay4KLSAgICBzeW5jaHJvbml6ZWQgKGRpbWVuc2lvbkxvY2spIHsKLSAgICAgIGlmICho
YXNEZWNvZGVkRmlyc3RGcmFtZSAmJiAod2lkdGggIT0gbmV3V2lkdGggfHwgaGVpZ2h0ICE9IG5l
d0hlaWdodCkpIHsKLSAgICAgICAgc3RvcE9uT3V0cHV0VGhyZWFkKG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJVbmV4cGVjdGVkIHNpemUgY2hhbmdlLiBDb25maWd1cmVkICIgKyB3aWR0aCArICIqIgot
ICAgICAgICAgICAgKyBoZWlnaHQgKyAiLiBOZXcgIiArIG5ld1dpZHRoICsgIioiICsgbmV3SGVp
Z2h0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHdpZHRoID0gbmV3V2lkdGg7
Ci0gICAgICBoZWlnaHQgPSBuZXdIZWlnaHQ7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogIHRleHR1
cmUgbW9kZSBpZ25vcmVzIGNvbG9yRm9ybWF0LiAgSGVuY2UsIGlmIHRoZSB0ZXh0dXJlIGhlbHBl
ciBpcyBub24tbnVsbCwgc2tpcAotICAgIC8vIGNvbG9yIGZvcm1hdCB1cGRhdGVzLgotICAgIGlm
IChzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsICYmIGZvcm1hdC5jb250YWluc0tleShNZWRp
YUZvcm1hdC5LRVlfQ09MT1JfRk9STUFUKSkgewotICAgICAgY29sb3JGb3JtYXQgPSBmb3JtYXQu
Z2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFUKTsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhjb2xvckZvcm1hdCkpOwot
ICAgICAgaWYgKCFpc1N1cHBvcnRlZENvbG9yRm9ybWF0KGNvbG9yRm9ybWF0KSkgewotICAgICAg
ICBzdG9wT25PdXRwdXRUaHJlYWQobmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5zdXBwb3J0
ZWQgY29sb3IgZm9ybWF0OiAiICsgY29sb3JGb3JtYXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFNhdmUgc3RyaWRlIGFuZCBzbGljZUhlaWdodCB1bmRlciB0
aGUgZGltZW5zaW9uIGxvY2suCi0gICAgc3luY2hyb25pemVkIChkaW1lbnNpb25Mb2NrKSB7Ci0g
ICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KE1FRElBX0ZPUk1BVF9LRVlfU1RSSURFKSkgewot
ICAgICAgICBzdHJpZGUgPSBmb3JtYXQuZ2V0SW50ZWdlcihNRURJQV9GT1JNQVRfS0VZX1NUUklE
RSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KE1FRElBX0ZPUk1BVF9L
RVlfU0xJQ0VfSEVJR0hUKSkgewotICAgICAgICBzbGljZUhlaWdodCA9IGZvcm1hdC5nZXRJbnRl
Z2VyKE1FRElBX0ZPUk1BVF9LRVlfU0xJQ0VfSEVJR0hUKTsKLSAgICAgIH0KLSAgICAgIExvZ2dp
bmcuZChUQUcsICJGcmFtZSBzdHJpZGUgYW5kIHNsaWNlIGhlaWdodDogIiArIHN0cmlkZSArICIg
eCAiICsgc2xpY2VIZWlnaHQpOwotICAgICAgc3RyaWRlID0gTWF0aC5tYXgod2lkdGgsIHN0cmlk
ZSk7Ci0gICAgICBzbGljZUhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgc2xpY2VIZWlnaHQpOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWxlYXNlQ29kZWNPbk91dHB1dFRocmVhZCgp
IHsKLSAgICBvdXRwdXRUaHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIlJlbGVhc2luZyBNZWRpYUNvZGVjIG9uIG91dHB1dCB0aHJlYWQiKTsK
LSAgICB0cnkgewotICAgICAgY29kZWMuc3RvcCgpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZGVjb2RlciBzdG9wIGZhaWxlZCIsIGUp
OwotICAgIH0KLSAgICB0cnkgewotICAgICAgY29kZWMucmVsZWFzZSgpOwotICAgIH0gY2F0Y2gg
KEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZGVjb2RlciByZWxl
YXNlIGZhaWxlZCIsIGUpOwotICAgICAgLy8gUHJvcGFnYXRlIGV4Y2VwdGlvbnMgY2F1Z2h0IGR1
cmluZyByZWxlYXNlIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkLgotICAgICAgc2h1dGRvd25FeGNl
cHRpb24gPSBlOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiUmVsZWFzZSBvbiBvdXRwdXQg
dGhyZWFkIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9wT25PdXRwdXRUaHJlYWQo
RXhjZXB0aW9uIGUpIHsKLSAgICBvdXRwdXRUaHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhy
ZWFkKCk7Ci0gICAgcnVubmluZyA9IGZhbHNlOwotICAgIHNodXRkb3duRXhjZXB0aW9uID0gZTsK
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1N1cHBvcnRlZENvbG9yRm9ybWF0KGludCBjb2xv
ckZvcm1hdCkgewotICAgIGZvciAoaW50IHN1cHBvcnRlZCA6IE1lZGlhQ29kZWNVdGlscy5ERUNP
REVSX0NPTE9SX0ZPUk1BVFMpIHsKLSAgICAgIGlmIChzdXBwb3J0ZWQgPT0gY29sb3JGb3JtYXQp
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIC8vIFZpc2libGUgZm9yIHRlc3RpbmcuCi0gIHByb3RlY3RlZCBTdXJmYWNl
VGV4dHVyZUhlbHBlciBjcmVhdGVTdXJmYWNlVGV4dHVyZUhlbHBlcigpIHsKLSAgICByZXR1cm4g
U3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJkZWNvZGVyLXRleHR1cmUtdGhyZWFkIiwgc2hh
cmVkQ29udGV4dCk7Ci0gIH0KLQotICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nLgotICAvLyBUT0RP
KHNha2FsKTogUmVtb3ZlIG9uY2UgUm9ib2xlY3RyaWMgY29tbWl0IGZhOTkxYTAgaGFzIGJlZW4g
cm9sbGVkIHRvIFdlYlJUQy4KLSAgcHJvdGVjdGVkIHZvaWQgcmVsZWFzZVN1cmZhY2UoKSB7Ci0g
ICAgc3VyZmFjZS5yZWxlYXNlKCk7Ci0gIH0KLQotICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nLgot
ICBwcm90ZWN0ZWQgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIGFsbG9jYXRlSTQyMEJ1ZmZlcihpbnQg
d2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICByZXR1cm4gSmF2YUk0MjBCdWZmZXIuYWxsb2NhdGUo
d2lkdGgsIGhlaWdodCk7Ci0gIH0KLQotICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nLgotICBwcm90
ZWN0ZWQgdm9pZCBjb3B5UGxhbmUoCi0gICAgICBCeXRlQnVmZmVyIHNyYywgaW50IHNyY1N0cmlk
ZSwgQnl0ZUJ1ZmZlciBkc3QsIGludCBkc3RTdHJpZGUsIGludCB3aWR0aCwgaW50IGhlaWdodCkg
ewotICAgIFl1dkhlbHBlci5jb3B5UGxhbmUoc3JjLCBzcmNTdHJpZGUsIGRzdCwgZHN0U3RyaWRl
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9C
YXNlQml0cmF0ZUFkanVzdGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0Jhc2VCaXRyYXRlQWRq
dXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc1NDczNGY4YmRkNzlj
ZmZjNDdkZDIxZjQwNWExYTIxODNiYjZiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0Jhc2VCaXRyYXRlQWRqdXN0ZXIuamF2
YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEJpdHJhdGVBZGp1c3RlciB0aGF0IHRyYWNrcyBiaXRy
YXRlIGFuZCBmcmFtZXJhdGUgYnV0IGRvZXMgbm90IGFkanVzdCB0aGVtLiAqLwotY2xhc3MgQmFz
ZUJpdHJhdGVBZGp1c3RlciBpbXBsZW1lbnRzIEJpdHJhdGVBZGp1c3RlciB7Ci0gIHByb3RlY3Rl
ZCBpbnQgdGFyZ2V0Qml0cmF0ZUJwczsKLSAgcHJvdGVjdGVkIGludCB0YXJnZXRGcHM7Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldFRhcmdldHMoaW50IHRhcmdldEJpdHJhdGVCcHMs
IGludCB0YXJnZXRGcHMpIHsKLSAgICB0aGlzLnRhcmdldEJpdHJhdGVCcHMgPSB0YXJnZXRCaXRy
YXRlQnBzOwotICAgIHRoaXMudGFyZ2V0RnBzID0gdGFyZ2V0RnBzOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHJlcG9ydEVuY29kZWRGcmFtZShpbnQgc2l6ZSkgewotICAgIC8v
IE5vIG9wLgotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0QWRqdXN0ZWRCaXRy
YXRlQnBzKCkgewotICAgIHJldHVybiB0YXJnZXRCaXRyYXRlQnBzOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBpbnQgZ2V0Q29kZWNDb25maWdGcmFtZXJhdGUoKSB7Ci0gICAgcmV0dXJu
IHRhcmdldEZwczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9CaXRyYXRl
QWRqdXN0ZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvQml0cmF0ZUFkanVzdGVyLmphdmEKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NmVkMjE4ZWYzZDhhZjhhOGI4NGNmYTY1ODk5
NzlmMTA3OGNjMjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2phdmEvb3JnL3dlYnJ0Yy9CaXRyYXRlQWRqdXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotLyoqIE9iamVjdCB0aGF0IGFkanVzdHMgdGhlIGJpdHJhdGUgb2YgYSBoYXJkd2FyZSBjb2Rl
Yy4gKi8KLWludGVyZmFjZSBCaXRyYXRlQWRqdXN0ZXIgewotICAvKioKLSAgICogU2V0cyB0aGUg
dGFyZ2V0IGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kIGFuZCBmcmFtZXJhdGUgaW4gZnJhbWVz
IHBlciBzZWNvbmQuCi0gICAqLwotICB2b2lkIHNldFRhcmdldHMoaW50IHRhcmdldEJpdHJhdGVC
cHMsIGludCB0YXJnZXRGcHMpOwotCi0gIC8qKgotICAgKiBTaG91bGQgYmUgdXNlZCB0byByZXBv
cnQgdGhlIHNpemUgb2YgYW4gZW5jb2RlZCBmcmFtZSB0byB0aGUgYml0cmF0ZSBhZGp1c3Rlci4g
VXNlCi0gICAqIGdldEFkanVzdGVkQml0cmF0ZUJwcyB0byBnZXQgdGhlIHVwZGF0ZWQgYml0cmF0
ZSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLgotICAgKi8KLSAgdm9pZCByZXBvcnRFbmNvZGVk
RnJhbWUoaW50IHNpemUpOwotCi0gIC8qKiBHZXRzIHRoZSBjdXJyZW50IGJpdHJhdGUuICovCi0g
IGludCBnZXRBZGp1c3RlZEJpdHJhdGVCcHMoKTsKLQotICAvKiogR2V0cyB0aGUgZnJhbWVyYXRl
IGZvciBpbml0aWFsIGNvZGVjIGNvbmZpZ3VyYXRpb24uICovCi0gIGludCBnZXRDb2RlY0NvbmZp
Z0ZyYW1lcmF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9DYWxsZWRCeU5h
dGl2ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9DYWxsZWRCeU5hdGl2ZS5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjQxMGNlYWVmYjQ5YTdmYWNlNTQ1N2FkZmNiMDExOGY1
Nzg1MjY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
YXZhL29yZy93ZWJydGMvQ2FsbGVkQnlOYXRpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlOwotaW1wb3J0IGphdmEubGFuZy5h
bm5vdGF0aW9uLlJldGVudGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRp
b25Qb2xpY3k7Ci1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OwotCi0vKioKLSAq
IEBDYWxsZWRCeU5hdGl2ZSBpcyB1c2VkIGJ5IHRoZSBKTkkgZ2VuZXJhdG9yIHRvIGNyZWF0ZSB0
aGUgbmVjZXNzYXJ5IEpOSQotICogYmluZGluZ3MgYW5kIGV4cG9zZSB0aGlzIG1ldGhvZCB0byBu
YXRpdmUgY29kZS4KLSAqLwotQFRhcmdldCh7RWxlbWVudFR5cGUuQ09OU1RSVUNUT1IsIEVsZW1l
bnRUeXBlLk1FVEhPRH0pCi1AUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5DTEFTUykKLXB1Ymxp
YyBAaW50ZXJmYWNlIENhbGxlZEJ5TmF0aXZlIHsKLSAgLyoKLSAgICogIElmIHByZXNlbnQsIHRl
bGxzIHdoaWNoIGlubmVyIGNsYXNzIHRoZSBtZXRob2QgYmVsb25ncyB0by4KLSAgICovCi0gIHB1
YmxpYyBTdHJpbmcgdmFsdWUoKSBkZWZhdWx0ICIiOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3Jn
L3dlYnJ0Yy9DYWxsZWRCeU5hdGl2ZVVuY2hlY2tlZC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9D
YWxsZWRCeU5hdGl2ZVVuY2hlY2tlZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4YTAwYTdmYWRiODgwZTZjMzQ2ZjAyNjI5YWEyMTkwMTA5YzRlNDVkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvQ2FsbGVk
QnlOYXRpdmVVbmNoZWNrZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEubGFu
Zy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJl
dGVudGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7Ci1p
bXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OwotCi0vKioKLSAqICBAQ2FsbGVkQnlO
YXRpdmVVbmNoZWNrZWQgaXMgdXNlZCB0byBnZW5lcmF0ZSBKTkkgYmluZGluZ3MgdGhhdCBkbyBu
b3QgY2hlY2sgZm9yIGV4Y2VwdGlvbnMuCi0gKiAgSXQgb25seSBtYWtlcyBzZW5zZSB0byB1c2Ug
dGhpcyBhbm5vdGF0aW9uIG9uIG1ldGhvZHMgdGhhdCBkZWNsYXJlIGEgdGhyb3dzLi4uIHNwZWMu
Ci0gKiAgSG93ZXZlciwgbm90ZSB0aGF0IHRoZSBleGNlcHRpb24gcmVjZWl2ZWQgbmF0aXZlIHNp
ZGUgbWF5YmUgYW4gJ3VuY2hlY2tlZCcgKFJ1bnRpbWVFeHBjZXB0aW9uKQotICogIHN1Y2ggYXMg
TnVsbFBvaW50ZXJFeGNlcHRpb24sIHNvIHRoZSBuYXRpdmUgY29kZSBzaG91bGQgZGlmZmVyZW50
aWF0ZSB0aGVzZSBjYXNlcy4KLSAqICBVc2FnZSBvZiB0aGlzIHNob3VsZCBiZSB2ZXJ5IHJhcmU7
IHdoZXJlIHBvc3NpYmxlIGhhbmRsZSBleGNlcHRpb25zIGluIHRoZSBKYXZhIHNpZGUgYW5kIHVz
ZSBhCi0gKiAgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIHN1Y2Nlc3MgLyBmYWlsdXJlLgotICov
Ci1AVGFyZ2V0KEVsZW1lbnRUeXBlLk1FVEhPRCkKLUBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5
LkNMQVNTKQotcHVibGljIEBpbnRlcmZhY2UgQ2FsbGVkQnlOYXRpdmVVbmNoZWNrZWQgewotICAv
KgotICAgKiAgSWYgcHJlc2VudCwgdGVsbHMgd2hpY2ggaW5uZXIgY2xhc3MgdGhlIG1ldGhvZCBi
ZWxvbmdzIHRvLgotICAgKi8KLSAgcHVibGljIFN0cmluZyB2YWx1ZSgpIGRlZmF1bHQgIiI7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2
YS9vcmcvd2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJkODIxYzJmZjA4OWFjNzRkZTllZDkzZjNjNTNjNGZmZDYwYjM3ZTQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9D
YW1lcmExU2Vzc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29u
dGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lk
Lm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2
YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0
aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRp
b24iKQotY2xhc3MgQ2FtZXJhMVNlc3Npb24gaW1wbGVtZW50cyBDYW1lcmFTZXNzaW9uIHsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmExU2Vzc2lvbiI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfQ0FQVFVSRV9CVUZGRVJTID0gMzsKLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9n
cmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5BbmRyb2lkLkNhbWVy
YTEuU3RhcnRUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBI
aXN0b2dyYW0gY2FtZXJhMVN0b3BUaW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNy
ZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQuQ2FtZXJhMS5TdG9wVGltZU1zIiwgMSwgMTAwMDAs
IDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTFSZXNvbHV0aW9u
SGlzdG9ncmFtID0gSGlzdG9ncmFtLmNyZWF0ZUVudW1lcmF0aW9uKAotICAgICAgIldlYlJUQy5B
bmRyb2lkLkNhbWVyYTEuUmVzb2x1dGlvbiIsIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DT01N
T05fUkVTT0xVVElPTlMuc2l6ZSgpKTsKLQotICBwcml2YXRlIHN0YXRpYyBlbnVtIFNlc3Npb25T
dGF0ZSB7IFJVTk5JTkcsIFNUT1BQRUQgfQotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlciBjYW1l
cmFUaHJlYWRIYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEV2ZW50cyBldmVudHM7Ci0gIHByaXZh
dGUgZmluYWwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlOwotICBwcml2YXRlIGZpbmFsIENvbnRl
eHQgYXBwbGljYXRpb25Db250ZXh0OwotICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVs
cGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICBwcml2YXRlIGZpbmFsIGludCBjYW1lcmFJZDsK
LSAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmE7Ci0gIHByaXZh
dGUgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvOwotICBwcml2
YXRlIGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsKLSAgLy8gVXNlZCBvbmx5IGZv
ciBzdGF0cy4gT25seSB1c2VkIG9uIHRoZSBjYW1lcmEgdGhyZWFkLgotICBwcml2YXRlIGZpbmFs
IGxvbmcgY29uc3RydWN0aW9uVGltZU5zOyAvLyBDb25zdHJ1Y3Rpb24gdGltZSBvZiB0aGlzIGNs
YXNzLgotCi0gIHByaXZhdGUgU2Vzc2lvblN0YXRlIHN0YXRlOwotICBwcml2YXRlIGJvb2xlYW4g
Zmlyc3RGcmFtZVJlcG9ydGVkOwotCi0gIC8vIFRPRE8odGl0b3ZhcnRlbSkgbWFrZSBjb3JyZWN0
IGZpeCBkdXJpbmcgd2VicnRjOjkxNzUKLSAgQFN1cHByZXNzV2FybmluZ3MoIkJ5dGVCdWZmZXJC
YWNraW5nQXJyYXkiKQotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlKGZpbmFsIENyZWF0ZVNl
c3Npb25DYWxsYmFjayBjYWxsYmFjaywgZmluYWwgRXZlbnRzIGV2ZW50cywKLSAgICAgIGZpbmFs
IGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSwgZmluYWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRl
eHQsCi0gICAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBl
ciwgZmluYWwgaW50IGNhbWVyYUlkLCBmaW5hbCBpbnQgd2lkdGgsCi0gICAgICBmaW5hbCBpbnQg
aGVpZ2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgZmluYWwgbG9uZyBjb25zdHJ1Y3Rp
b25UaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbiBj
YW1lcmEgIiArIGNhbWVyYUlkKTsKLSAgICBldmVudHMub25DYW1lcmFPcGVuaW5nKCk7Ci0KLSAg
ICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmE7Ci0gICAgdHJ5IHsKLSAgICAg
IGNhbWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oY2FtZXJhSWQpOwotICAgIH0g
Y2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgY2FsbGJhY2sub25GYWlsdXJlKEZh
aWx1cmVUeXBlLkVSUk9SLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKGNhbWVyYSA9PSBudWxsKSB7Ci0gICAgICBjYWxsYmFjay5vbkZhaWx1cmUoRmFp
bHVyZVR5cGUuRVJST1IsCi0gICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4g
cmV0dXJuZWQgbnVsbCBmb3IgY2FtZXJhIGlkID0gIiArIGNhbWVyYUlkKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgY2FtZXJhLnNldFByZXZpZXdUZXh0dXJlKHN1
cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIH0gY2F0Y2ggKElP
RXhjZXB0aW9uIHwgUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBjYW1lcmEucmVsZWFzZSgp
OwotICAgICAgY2FsbGJhY2sub25GYWlsdXJlKEZhaWx1cmVUeXBlLkVSUk9SLCBlLmdldE1lc3Nh
Z2UoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNh
bWVyYUluZm8oKTsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRDYW1lcmFJbmZvKGNh
bWVyYUlkLCBpbmZvKTsKLQotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsK
LSAgICB0cnkgewotICAgICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzID0gY2FtZXJhLmdldFBhcmFtZXRlcnMoKTsKLSAgICAgIGNhcHR1cmVGb3Jt
YXQgPSBmaW5kQ2xvc2VzdENhcHR1cmVGb3JtYXQocGFyYW1ldGVycywgd2lkdGgsIGhlaWdodCwg
ZnJhbWVyYXRlKTsKLSAgICAgIGZpbmFsIFNpemUgcGljdHVyZVNpemUgPSBmaW5kQ2xvc2VzdFBp
Y3R1cmVTaXplKHBhcmFtZXRlcnMsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgdXBkYXRlQ2FtZXJh
UGFyYW1ldGVycyhjYW1lcmEsIHBhcmFtZXRlcnMsIGNhcHR1cmVGb3JtYXQsIHBpY3R1cmVTaXpl
LCBjYXB0dXJlVG9UZXh0dXJlKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsK
LSAgICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgICBjYWxsYmFjay5vbkZhaWx1cmUoRmFpbHVy
ZVR5cGUuRVJST1IsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIWNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICAgIGZpbmFsIGludCBmcmFtZVNpemUgPSBj
YXB0dXJlRm9ybWF0LmZyYW1lU2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1C
RVJfT0ZfQ0FQVFVSRV9CVUZGRVJTOyArK2kpIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBi
dWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGZyYW1lU2l6ZSk7Ci0gICAgICAgIGNh
bWVyYS5hZGRDYWxsYmFja0J1ZmZlcihidWZmZXIuYXJyYXkoKSk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gQ2FsY3VsYXRlIG9yaWVudGF0aW9uIG1hbnVhbGx5IGFuZCBzZW5kIGl0IGFzIENW
TyBpbnN0ZWQuCi0gICAgY2FtZXJhLnNldERpc3BsYXlPcmllbnRhdGlvbigwIC8qIGRlZ3JlZXMg
Ki8pOwotCi0gICAgY2FsbGJhY2sub25Eb25lKG5ldyBDYW1lcmExU2Vzc2lvbihldmVudHMsIGNh
cHR1cmVUb1RleHR1cmUsIGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIsIGNhbWVyYUlkLCBjYW1lcmEsIGluZm8sIGNhcHR1cmVGb3JtYXQsIGNvbnN0cnVj
dGlvblRpbWVOcykpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRhdGVDYW1lcmFQ
YXJhbWV0ZXJzKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSwKLSAgICAgIGFuZHJvaWQu
aGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycywgQ2FwdHVyZUZvcm1hdCBjYXB0
dXJlRm9ybWF0LCBTaXplIHBpY3R1cmVTaXplLAotICAgICAgYm9vbGVhbiBjYXB0dXJlVG9UZXh0
dXJlKSB7Ci0gICAgZmluYWwgTGlzdDxTdHJpbmc+IGZvY3VzTW9kZXMgPSBwYXJhbWV0ZXJzLmdl
dFN1cHBvcnRlZEZvY3VzTW9kZXMoKTsKLQotICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld0Zwc1Jh
bmdlKGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1pbiwgY2FwdHVyZUZvcm1hdC5mcmFtZXJhdGUu
bWF4KTsKLSAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdTaXplKGNhcHR1cmVGb3JtYXQud2lkdGgs
IGNhcHR1cmVGb3JtYXQuaGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLnNldFBpY3R1cmVTaXplKHBp
Y3R1cmVTaXplLndpZHRoLCBwaWN0dXJlU2l6ZS5oZWlnaHQpOwotICAgIGlmICghY2FwdHVyZVRv
VGV4dHVyZSkgewotICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3Rm9ybWF0KGNhcHR1cmVGb3Jt
YXQuaW1hZ2VGb3JtYXQpOwotICAgIH0KLQotICAgIGlmIChwYXJhbWV0ZXJzLmlzVmlkZW9TdGFi
aWxpemF0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0VmlkZW9TdGFiaWxp
emF0aW9uKHRydWUpOwotICAgIH0KLSAgICBpZiAoZm9jdXNNb2Rlcy5jb250YWlucyhhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09OVElOVU9VU19WSURFTykp
IHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0Rm9jdXNNb2RlKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKTsKLSAgICB9Ci0gICAgY2Ft
ZXJhLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBD
YXB0dXJlRm9ybWF0IGZpbmRDbG9zZXN0Q2FwdHVyZUZvcm1hdCgKLSAgICAgIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgLy8gRmluZCBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQg
Zm9yIHx3aWR0aHwgeCB8aGVpZ2h0fCBAIHxmcmFtZXJhdGV8LgotICAgIGZpbmFsIExpc3Q8Q2Fw
dHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVyYXRlcyA9Ci0gICAgICAg
IENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRGcmFtZXJhdGVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9y
dGVkUHJldmlld0Zwc1JhbmdlKCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdmFpbGFibGUgZnBz
IHJhbmdlczogIiArIHN1cHBvcnRlZEZyYW1lcmF0ZXMpOwotCi0gICAgZmluYWwgQ2FwdHVyZUZv
cm1hdC5GcmFtZXJhdGVSYW5nZSBmcHNSYW5nZSA9Ci0gICAgICAgIENhbWVyYUVudW1lcmF0aW9u
QW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2Uoc3VwcG9ydGVkRnJhbWVy
YXRlcywgZnJhbWVyYXRlKTsKLQotICAgIGZpbmFsIFNpemUgcHJldmlld1NpemUgPSBDYW1lcmFF
bnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICAgIENhbWVy
YTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFByZXZpZXdT
aXplcygpKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLnJl
cG9ydENhbWVyYVJlc29sdXRpb24oY2FtZXJhMVJlc29sdXRpb25IaXN0b2dyYW0sIHByZXZpZXdT
aXplKTsKLQotICAgIHJldHVybiBuZXcgQ2FwdHVyZUZvcm1hdChwcmV2aWV3U2l6ZS53aWR0aCwg
cHJldmlld1NpemUuaGVpZ2h0LCBmcHNSYW5nZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBT
aXplIGZpbmRDbG9zZXN0UGljdHVyZVNpemUoCi0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIHJl
dHVybiBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0g
ICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdldFN1cHBv
cnRlZFBpY3R1cmVTaXplcygpKSwgd2lkdGgsIGhlaWdodCk7Ci0gIH0KLQotICBwcml2YXRlIENh
bWVyYTFTZXNzaW9uKEV2ZW50cyBldmVudHMsIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSwgQ29u
dGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlVGV4dHVyZUhlbHBlciwgaW50IGNhbWVyYUlkLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBj
YW1lcmEsCi0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8sIENh
cHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdCwKLSAgICAgIGxvbmcgY29uc3RydWN0aW9uVGltZU5z
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0ZSBuZXcgY2FtZXJhMSBzZXNzaW9uIG9uIGNh
bWVyYSAiICsgY2FtZXJhSWQpOwotCi0gICAgdGhpcy5jYW1lcmFUaHJlYWRIYW5kbGVyID0gbmV3
IEhhbmRsZXIoKTsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgICB0aGlzLmNhcHR1cmVU
b1RleHR1cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0
ID0gYXBwbGljYXRpb25Db250ZXh0OwotICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBz
dXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYUlkID0gY2FtZXJhSWQ7Ci0gICAg
dGhpcy5jYW1lcmEgPSBjYW1lcmE7Ci0gICAgdGhpcy5pbmZvID0gaW5mbzsKLSAgICB0aGlzLmNh
cHR1cmVGb3JtYXQgPSBjYXB0dXJlRm9ybWF0OwotICAgIHRoaXMuY29uc3RydWN0aW9uVGltZU5z
ID0gY29uc3RydWN0aW9uVGltZU5zOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc2V0VGV4
dHVyZVNpemUoY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQpOwotCi0g
ICAgc3RhcnRDYXB0dXJpbmcoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBz
dG9wKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhbWVyYTEgc2Vzc2lvbiBvbiBjYW1l
cmEgIiArIGNhbWVyYUlkKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAo
c3RhdGUgIT0gU2Vzc2lvblN0YXRlLlNUT1BQRUQpIHsKLSAgICAgIGZpbmFsIGxvbmcgc3RvcFN0
YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAg
ICBmaW5hbCBpbnQgc3RvcFRpbWVNcyA9IChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWls
bGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RvcFN0YXJ0VGltZSk7Ci0gICAgICBjYW1lcmExU3Rv
cFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRpbWVNcyk7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHN0YXJ0Q2FwdHVyaW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJTdGFy
dCBjYXB0dXJpbmciKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgIHN0YXRl
ID0gU2Vzc2lvblN0YXRlLlJVTk5JTkc7Ci0KLSAgICBjYW1lcmEuc2V0RXJyb3JDYWxsYmFjayhu
ZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuRXJyb3JDYWxsYmFjaygpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgb25FcnJvcihpbnQgZXJyb3IsIGFuZHJvaWQuaGFyZHdh
cmUuQ2FtZXJhIGNhbWVyYSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgICAg
ICBpZiAoZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VSUk9SX1NFUlZF
Ul9ESUVEKSB7Ci0gICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBzZXJ2ZXIgZGllZCEi
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJDYW1lcmEgZXJy
b3I6ICIgKyBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmUoVEFHLCBlcnJvck1l
c3NhZ2UpOwotICAgICAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGVycm9yID09IGFu
ZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNBTUVSQV9FUlJPUl9FVklDVEVEKSB7Ci0gICAgICAgICAg
ZXZlbnRzLm9uQ2FtZXJhRGlzY29ubmVjdGVkKENhbWVyYTFTZXNzaW9uLnRoaXMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKENhbWVyYTFTZXNzaW9u
LnRoaXMsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQotICAg
IGlmIChjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgICBsaXN0ZW5Gb3JUZXh0dXJlRnJhbWVzKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxpc3RlbkZvckJ5dGVidWZmZXJGcmFtZXMoKTsKLSAgICB9
Ci0gICAgdHJ5IHsKLSAgICAgIGNhbWVyYS5zdGFydFByZXZpZXcoKTsKLSAgICB9IGNhdGNoIChS
dW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgZXZlbnRz
Lm9uQ2FtZXJhRXJyb3IodGhpcywgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBzdG9wSW50ZXJuYWwoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgaW50
ZXJuYWwiKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoc3RhdGUgPT0g
U2Vzc2lvblN0YXRlLlNUT1BQRUQpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgaXMg
YWxyZWFkeSBzdG9wcGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGUgPSBT
ZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVu
aW5nKCk7Ci0gICAgLy8gTm90ZTogc3RvcFByZXZpZXcgb3Igb3RoZXIgZHJpdmVyIGNvZGUgbWln
aHQgZGVhZGxvY2suIERlYWRsb2NrIGluCi0gICAgLy8gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
X3N0b3BQcmV2aWV3KE5hdGl2ZSBNZXRob2QpIGhhcyBiZWVuIG9ic2VydmVkIG9uCi0gICAgLy8g
TmV4dXMgNSAoaGFtbWVyaGVhZCksIE9TIHZlcnNpb24gTE1ZNDhJLgotICAgIGNhbWVyYS5zdG9w
UHJldmlldygpOwotICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgZXZlbnRzLm9uQ2FtZXJhQ2xv
c2VkKHRoaXMpOwotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGRvbmUiKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBsaXN0ZW5Gb3JUZXh0dXJlRnJhbWVzKCkgewotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLnN0YXJ0TGlzdGVuaW5nKChWaWRlb0ZyYW1lIGZyYW1lKSAtPiB7Ci0gICAgICBjaGVj
a0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5S
VU5OSU5HKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJUZXh0dXJlIGZyYW1lIGNhcHR1cmVk
IGJ1dCBjYW1lcmEgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLQotICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAgICAgZmluYWwg
aW50IHN0YXJ0VGltZU1zID0KLSAgICAgICAgICAgIChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRT
LnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gY29uc3RydWN0aW9uVGltZU5zKTsKLSAgICAg
ICAgY2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0g
ICAgICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFVu
ZG8gdGhlIG1pcnJvciB0aGF0IHRoZSBPUyAiaGVscHMiIHVzIHdpdGguCi0gICAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVy
YS5odG1sI3NldERpc3BsYXlPcmllbnRhdGlvbihpbnQpCi0gICAgICBmaW5hbCBWaWRlb0ZyYW1l
IG1vZGlmaWVkRnJhbWUgPSBuZXcgVmlkZW9GcmFtZSgKLSAgICAgICAgICBDYW1lcmFTZXNzaW9u
LmNyZWF0ZVRleHR1cmVCdWZmZXJXaXRoTW9kaWZpZWRUcmFuc2Zvcm1NYXRyaXgoCi0gICAgICAg
ICAgICAgIChUZXh0dXJlQnVmZmVySW1wbCkgZnJhbWUuZ2V0QnVmZmVyKCksCi0gICAgICAgICAg
ICAgIC8qIG1pcnJvcj0gKi8gaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Q2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZST05ULAotICAgICAgICAgICAgICAvKiByb3RhdGlv
bj0gKi8gMCksCi0gICAgICAgICAgLyogcm90YXRpb249ICovIGdldEZyYW1lT3JpZW50YXRpb24o
KSwgZnJhbWUuZ2V0VGltZXN0YW1wTnMoKSk7Ci0gICAgICBldmVudHMub25GcmFtZUNhcHR1cmVk
KENhbWVyYTFTZXNzaW9uLnRoaXMsIG1vZGlmaWVkRnJhbWUpOwotICAgICAgbW9kaWZpZWRGcmFt
ZS5yZWxlYXNlKCk7Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbGlzdGVuRm9yQnl0
ZWJ1ZmZlckZyYW1lcygpIHsKLSAgICBjYW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZl
cihuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUHJldmlld0NhbGxiYWNrKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblByZXZpZXdGcmFtZShmaW5hbCBieXRlW10g
ZGF0YSwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FsbGJhY2tDYW1lcmEpIHsKLSAgICAgICAg
Y2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgICAgaWYgKGNhbGxiYWNrQ2FtZXJhICE9
IGNhbWVyYSkgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJDYWxsYmFjayBmcm9tIGEgZGlm
ZmVyZW50IGNhbWVyYS4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuUlVO
TklORykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJCeXRlYnVmZmVyIGZyYW1lIGNhcHR1
cmVkIGJ1dCBjYW1lcmEgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgbG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVu
aXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwot
Ci0gICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICAgICAgZmluYWwgaW50
IHN0YXJ0VGltZU1zID0KLSAgICAgICAgICAgICAgKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMu
dG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBjb25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAg
ICAgIGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMpOwot
ICAgICAgICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBWaWRlb0ZyYW1lLkJ1ZmZlciBmcmFtZUJ1ZmZlciA9IG5ldyBOVjIxQnVmZmVyKAotICAgICAg
ICAgICAgZGF0YSwgY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQsICgp
IC0+IGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdCgoKSAtPiB7Ci0gICAgICAgICAgICAgIGlmIChz
dGF0ZSA9PSBTZXNzaW9uU3RhdGUuUlVOTklORykgewotICAgICAgICAgICAgICAgIGNhbWVyYS5h
ZGRDYWxsYmFja0J1ZmZlcihkYXRhKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSkp
OwotICAgICAgICBmaW5hbCBWaWRlb0ZyYW1lIGZyYW1lID0gbmV3IFZpZGVvRnJhbWUoZnJhbWVC
dWZmZXIsIGdldEZyYW1lT3JpZW50YXRpb24oKSwgY2FwdHVyZVRpbWVOcyk7Ci0gICAgICAgIGV2
ZW50cy5vbkZyYW1lQ2FwdHVyZWQoQ2FtZXJhMVNlc3Npb24udGhpcywgZnJhbWUpOwotICAgICAg
ICBmcmFtZS5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGlu
dCBnZXRGcmFtZU9yaWVudGF0aW9uKCkgewotICAgIGludCByb3RhdGlvbiA9IENhbWVyYVNlc3Np
b24uZ2V0RGV2aWNlT3JpZW50YXRpb24oYXBwbGljYXRpb25Db250ZXh0KTsKLSAgICBpZiAoaW5m
by5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFD
SU5HX0JBQ0spIHsKLSAgICAgIHJvdGF0aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAgfQotICAg
IHJldHVybiAoaW5mby5vcmllbnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBjaGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVhZC5jdXJy
ZW50VGhyZWFkKCkgIT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQo
KSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhyZWFk
Iik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYTJT
ZXNzaW9uLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYTJTZXNzaW9uLmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiN2MwOWQ5YTkxMTBhNzViYWMwYzg2ZTMxNTc3Y2M2
NThiYTQ3N2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2phdmEvb3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
NDIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vz
c0V4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2FwdHVy
ZVNlc3Npb247Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUNoYXJhY3Rl
cmlzdGljczsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlOwot
aW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFu
ZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YTsKLWltcG9ydCBhbmRyb2lkLmhh
cmR3YXJlLmNhbWVyYTIuQ2FwdHVyZUZhaWx1cmU7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5j
YW1lcmEyLkNhcHR1cmVSZXF1ZXN0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9y
dCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnV0
aWwuUmFuZ2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgamF2YS51dGls
LkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3Vy
cmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9p
ZC5DYXB0dXJlRm9ybWF0OwotCi1AVGFyZ2V0QXBpKDIxKQotY2xhc3MgQ2FtZXJhMlNlc3Npb24g
aW1wbGVtZW50cyBDYW1lcmFTZXNzaW9uIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJDYW1lcmEyU2Vzc2lvbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9n
cmFtIGNhbWVyYTJTdGFydFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRl
Q291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmEyLlN0YXJ0VGltZU1zIiwgMSwgMTAwMDAsIDUw
KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTJTdG9wVGltZU1zSGlz
dG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5BbmRyb2lkLkNh
bWVyYTIuU3RvcFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IEhpc3RvZ3JhbSBjYW1lcmEyUmVzb2x1dGlvbkhpc3RvZ3JhbSA9IEhpc3RvZ3JhbS5jcmVhdGVF
bnVtZXJhdGlvbigKLSAgICAgICJXZWJSVEMuQW5kcm9pZC5DYW1lcmEyLlJlc29sdXRpb24iLCBD
YW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ09NTU9OX1JFU09MVVRJT05TLnNpemUoKSk7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgZW51bSBTZXNzaW9uU3RhdGUgeyBSVU5OSU5HLCBTVE9QUEVEIH0KLQot
ICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgY2FtZXJhVGhyZWFkSGFuZGxlcjsKLSAgcHJpdmF0ZSBm
aW5hbCBDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2FsbGJhY2s7Ci0gIHByaXZhdGUgZmluYWwgRXZl
bnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsK
LSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXI7Ci0gIHByaXZhdGUg
ZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gIHByaXZh
dGUgZmluYWwgU3RyaW5nIGNhbWVyYUlkOwotICBwcml2YXRlIGZpbmFsIGludCB3aWR0aDsKLSAg
cHJpdmF0ZSBmaW5hbCBpbnQgaGVpZ2h0OwotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZXJhdGU7
Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgYXQgc3RhcnQKLSAgcHJpdmF0ZSBDYW1lcmFDaGFyYWN0ZXJp
c3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwotICBwcml2YXRlIGludCBjYW1lcmFPcmllbnRh
dGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2FtZXJhRnJvbnRGYWNpbmc7Ci0gIHByaXZhdGUg
aW50IGZwc1VuaXRGYWN0b3I7Ci0gIHByaXZhdGUgQ2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9ybWF0
OwotCi0gIC8vIEluaXRpYWxpemVkIHdoZW4gY2FtZXJhIG9wZW5zCi0gIEBOdWxsYWJsZSBwcml2
YXRlIENhbWVyYURldmljZSBjYW1lcmFEZXZpY2U7Ci0gIEBOdWxsYWJsZSBwcml2YXRlIFN1cmZh
Y2Ugc3VyZmFjZTsKLQotICAvLyBJbml0aWFsaXplZCB3aGVuIGNhcHR1cmUgc2Vzc2lvbiBpcyBj
cmVhdGVkCi0gIEBOdWxsYWJsZSBwcml2YXRlIENhbWVyYUNhcHR1cmVTZXNzaW9uIGNhcHR1cmVT
ZXNzaW9uOwotCi0gIC8vIFN0YXRlCi0gIHByaXZhdGUgU2Vzc2lvblN0YXRlIHN0YXRlID0gU2Vz
c2lvblN0YXRlLlJVTk5JTkc7Ci0gIHByaXZhdGUgYm9vbGVhbiBmaXJzdEZyYW1lUmVwb3J0ZWQ7
Ci0KLSAgLy8gVXNlZCBvbmx5IGZvciBzdGF0cy4gT25seSB1c2VkIG9uIHRoZSBjYW1lcmEgdGhy
ZWFkLgotICBwcml2YXRlIGZpbmFsIGxvbmcgY29uc3RydWN0aW9uVGltZU5zOyAvLyBDb25zdHJ1
Y3Rpb24gdGltZSBvZiB0aGlzIGNsYXNzLgotCi0gIHByaXZhdGUgY2xhc3MgQ2FtZXJhU3RhdGVD
YWxsYmFjayBleHRlbmRzIENhbWVyYURldmljZS5TdGF0ZUNhbGxiYWNrIHsKLSAgICBwcml2YXRl
IFN0cmluZyBnZXRFcnJvckRlc2NyaXB0aW9uKGludCBlcnJvckNvZGUpIHsKLSAgICAgIHN3aXRj
aCAoZXJyb3JDb2RlKSB7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2su
RVJST1JfQ0FNRVJBX0RFVklDRToKLSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBkZXZpY2UgaGFz
IGVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3IuIjsKLSAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2Uu
U3RhdGVDYWxsYmFjay5FUlJPUl9DQU1FUkFfRElTQUJMRUQ6Ci0gICAgICAgICAgcmV0dXJuICJD
YW1lcmEgZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgZHVlIHRvIGEgZGV2aWNlIHBvbGljeS4i
OwotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX0NBTUVSQV9J
Tl9VU0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNlIGlzIGluIHVzZSBhbHJlYWR5
LiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2suRVJST1JfQ0FNRVJB
X1NFUlZJQ0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgc2VydmljZSBoYXMgZW5jb3VudGVy
ZWQgYSBmYXRhbCBlcnJvci4iOwotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNhbGxi
YWNrLkVSUk9SX01BWF9DQU1FUkFTX0lOX1VTRToKLSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBk
ZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCBiZWNhdXNlIgotICAgICAgICAgICAgICArICIgdGhl
cmUgYXJlIHRvbyBtYW55IG90aGVyIG9wZW4gY2FtZXJhIGRldmljZXMuIjsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICByZXR1cm4gIlVua25vd24gY2FtZXJhIGVycm9yOiAiICsgZXJyb3JD
b2RlOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
RGlzY29ubmVjdGVkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVy
YVRocmVhZCgpOwotICAgICAgZmluYWwgYm9vbGVhbiBzdGFydEZhaWx1cmUgPSAoY2FwdHVyZVNl
c3Npb24gPT0gbnVsbCkgJiYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5TVE9QUEVEKTsKLSAgICAg
IHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBzdG9wSW50ZXJuYWwoKTsKLSAg
ICAgIGlmIChzdGFydEZhaWx1cmUpIHsKLSAgICAgICAgY2FsbGJhY2sub25GYWlsdXJlKEZhaWx1
cmVUeXBlLkRJU0NPTk5FQ1RFRCwgIkNhbWVyYSBkaXNjb25uZWN0ZWQgLyBldmljdGVkLiIpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgZXZlbnRzLm9uQ2FtZXJhRGlzY29ubmVjdGVkKENhbWVy
YTJTZXNzaW9uLnRoaXMpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIG9uRXJyb3IoQ2FtZXJhRGV2aWNlIGNhbWVyYSwgaW50IGVycm9yQ29kZSkgewot
ICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICByZXBvcnRFcnJvcihnZXRFcnJv
ckRlc2NyaXB0aW9uKGVycm9yQ29kZSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIG9uT3BlbmVkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAgICAgIGNoZWNrSXNP
bkNhbWVyYVRocmVhZCgpOwotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIG9wZW5lZC4i
KTsKLSAgICAgIGNhbWVyYURldmljZSA9IGNhbWVyYTsKLQotICAgICAgc3VyZmFjZVRleHR1cmVI
ZWxwZXIuc2V0VGV4dHVyZVNpemUoY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5o
ZWlnaHQpOwotICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVy
LmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2FtZXJhLmNyZWF0
ZUNhcHR1cmVTZXNzaW9uKAotICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChzdXJmYWNlKSwgbmV3
IENhcHR1cmVTZXNzaW9uQ2FsbGJhY2soKSwgY2FtZXJhVGhyZWFkSGFuZGxlcik7Ci0gICAgICB9
IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigi
RmFpbGVkIHRvIGNyZWF0ZSBjYXB0dXJlIHNlc3Npb24uICIgKyBlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xv
c2VkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgp
OwotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIGRldmljZSBjbG9zZWQuIik7Ci0gICAg
ICBldmVudHMub25DYW1lcmFDbG9zZWQoQ2FtZXJhMlNlc3Npb24udGhpcyk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDYXB0dXJlU2Vzc2lvbkNhbGxiYWNrIGV4dGVuZHMgQ2FtZXJh
Q2FwdHVyZVNlc3Npb24uU3RhdGVDYWxsYmFjayB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25Db25maWd1cmVGYWlsZWQoQ2FtZXJhQ2FwdHVyZVNlc3Npb24gc2Vzc2lvbikgewot
ICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzZXNzaW9uLmNsb3NlKCk7Ci0g
ICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBjYXB0dXJlIHNlc3Npb24uIik7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25maWd1cmVkKENh
bWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVh
ZCgpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBjYXB0dXJlIHNlc3Npb24gY29uZmln
dXJlZC4iKTsKLSAgICAgIGNhcHR1cmVTZXNzaW9uID0gc2Vzc2lvbjsKLSAgICAgIHRyeSB7Ci0g
ICAgICAgIC8qCi0gICAgICAgICAqIFRoZSB2aWFibGUgb3B0aW9ucyBmb3IgdmlkZW8gY2FwdHVy
ZSByZXF1ZXN0cyBhcmU6Ci0gICAgICAgICAqIFRFTVBMQVRFX1BSRVZJRVc6IEhpZ2ggZnJhbWUg
cmF0ZSBpcyBnaXZlbiBwcmlvcml0eSBvdmVyIHRoZSBoaWdoZXN0LXF1YWxpdHkKLSAgICAgICAg
ICogICBwb3N0LXByb2Nlc3NpbmcuCi0gICAgICAgICAqIFRFTVBMQVRFX1JFQ09SRDogU3RhYmxl
IGZyYW1lIHJhdGUgaXMgdXNlZCwgYW5kIHBvc3QtcHJvY2Vzc2luZyBpcyBzZXQgZm9yIHJlY29y
ZGluZwotICAgICAgICAgKiAgIHF1YWxpdHkuCi0gICAgICAgICAqLwotICAgICAgICBmaW5hbCBD
YXB0dXJlUmVxdWVzdC5CdWlsZGVyIGNhcHR1cmVSZXF1ZXN0QnVpbGRlciA9Ci0gICAgICAgICAg
ICBjYW1lcmFEZXZpY2UuY3JlYXRlQ2FwdHVyZVJlcXVlc3QoQ2FtZXJhRGV2aWNlLlRFTVBMQVRF
X1JFQ09SRCk7Ci0gICAgICAgIC8vIFNldCBhdXRvIGV4cG9zdXJlIGZwcyByYW5nZS4KLSAgICAg
ICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FFX1RB
UkdFVF9GUFNfUkFOR0UsCi0gICAgICAgICAgICBuZXcgUmFuZ2U8SW50ZWdlcj4oY2FwdHVyZUZv
cm1hdC5mcmFtZXJhdGUubWluIC8gZnBzVW5pdEZhY3RvciwKLSAgICAgICAgICAgICAgICBjYXB0
dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXggLyBmcHNVbml0RmFjdG9yKSk7Ci0gICAgICAgIGNhcHR1
cmVSZXF1ZXN0QnVpbGRlci5zZXQoCi0gICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5DT05UUk9M
X0FFX01PREUsIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUVfTU9ERV9PTik7Ci0gICAgICAgIGNh
cHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRV9MT0NLLCBm
YWxzZSk7Ci0gICAgICAgIGNob29zZVN0YWJpbGl6YXRpb25Nb2RlKGNhcHR1cmVSZXF1ZXN0QnVp
bGRlcik7Ci0gICAgICAgIGNob29zZUZvY3VzTW9kZShjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpOwot
Ci0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5hZGRUYXJnZXQoc3VyZmFjZSk7Ci0gICAg
ICAgIHNlc3Npb24uc2V0UmVwZWF0aW5nUmVxdWVzdCgKLSAgICAgICAgICAgIGNhcHR1cmVSZXF1
ZXN0QnVpbGRlci5idWlsZCgpLCBuZXcgQ2FtZXJhQ2FwdHVyZUNhbGxiYWNrKCksIGNhbWVyYVRo
cmVhZEhhbmRsZXIpOwotICAgICAgfSBjYXRjaCAoQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBzdGFydCBjYXB0dXJlIHJlcXVlc3QuICIg
KyBlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBzdXJmYWNlVGV4dHVyZUhl
bHBlci5zdGFydExpc3RlbmluZygoVmlkZW9GcmFtZSBmcmFtZSkgLT4gewotICAgICAgICBjaGVj
a0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgICBpZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRl
LlJVTk5JTkcpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVGV4dHVyZSBmcmFtZSBjYXB0
dXJlZCBidXQgY2FtZXJhIGlzIG5vIGxvbmdlciBydW5uaW5nLiIpOwotICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAg
ICAgICAgZmlyc3RGcmFtZVJlcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICBmaW5hbCBpbnQgc3Rh
cnRUaW1lTXMgPQotICAgICAgICAgICAgICAoaW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01p
bGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIGNvbnN0cnVjdGlvblRpbWVOcyk7Ci0gICAgICAgICAg
Y2FtZXJhMlN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBVbmRvIHRoZSBtaXJyb3IgdGhhdCB0aGUgT1MgImhlbHBzIiB1
cyB3aXRoLgotICAgICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5j
ZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI3NldERpc3BsYXlPcmllbnRhdGlvbihpbnQp
Ci0gICAgICAgIC8vIEFsc28sIHVuZG8gY2FtZXJhIG9yaWVudGF0aW9uLCB3ZSByZXBvcnQgaXQg
YXMgcm90YXRpb24gaW5zdGVhZC4KLSAgICAgICAgZmluYWwgVmlkZW9GcmFtZSBtb2RpZmllZEZy
YW1lID0KLSAgICAgICAgICAgIG5ldyBWaWRlb0ZyYW1lKENhbWVyYVNlc3Npb24uY3JlYXRlVGV4
dHVyZUJ1ZmZlcldpdGhNb2RpZmllZFRyYW5zZm9ybU1hdHJpeCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoVGV4dHVyZUJ1ZmZlckltcGwpIGZyYW1lLmdldEJ1ZmZlcigpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pcnJvcj0gKi8gaXNDYW1lcmFGcm9udEZh
Y2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByb3RhdGlvbj0gKi8gLWNh
bWVyYU9yaWVudGF0aW9uKSwKLSAgICAgICAgICAgICAgICAvKiByb3RhdGlvbj0gKi8gZ2V0RnJh
bWVPcmllbnRhdGlvbigpLCBmcmFtZS5nZXRUaW1lc3RhbXBOcygpKTsKLSAgICAgICAgZXZlbnRz
Lm9uRnJhbWVDYXB0dXJlZChDYW1lcmEyU2Vzc2lvbi50aGlzLCBtb2RpZmllZEZyYW1lKTsKLSAg
ICAgICAgbW9kaWZpZWRGcmFtZS5yZWxlYXNlKCk7Ci0gICAgICB9KTsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJDYW1lcmEgZGV2aWNlIHN1Y2Nlc3NmdWxseSBzdGFydGVkLiIpOwotICAgICAgY2Fs
bGJhY2sub25Eb25lKENhbWVyYTJTZXNzaW9uLnRoaXMpOwotICAgIH0KLQotICAgIC8vIFByZWZl
cnMgb3B0aWNhbCBzdGFiaWxpemF0aW9uIG92ZXIgc29mdHdhcmUgc3RhYmlsaXphdGlvbiBpZiBh
dmFpbGFibGUuIE9ubHkgZW5hYmxlcyBvbmUgb2YKLSAgICAvLyB0aGUgc3RhYmlsaXphdGlvbiBt
b2RlcyBhdCBhIHRpbWUgYmVjYXVzZSBoYXZpbmcgYm90aCBlbmFibGVkIGNhbiBjYXVzZSBzdHJh
bmdlIHJlc3VsdHMuCi0gICAgcHJpdmF0ZSB2b2lkIGNob29zZVN0YWJpbGl6YXRpb25Nb2RlKENh
cHR1cmVSZXF1ZXN0LkJ1aWxkZXIgY2FwdHVyZVJlcXVlc3RCdWlsZGVyKSB7Ci0gICAgICBmaW5h
bCBpbnRbXSBhdmFpbGFibGVPcHRpY2FsU3RhYmlsaXphdGlvbiA9IGNhbWVyYUNoYXJhY3Rlcmlz
dGljcy5nZXQoCi0gICAgICAgICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfSU5GT19BVkFJ
TEFCTEVfT1BUSUNBTF9TVEFCSUxJWkFUSU9OKTsKLSAgICAgIGlmIChhdmFpbGFibGVPcHRpY2Fs
U3RhYmlsaXphdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgIGZvciAoaW50IG1vZGUgOiBhdmFpbGFi
bGVPcHRpY2FsU3RhYmlsaXphdGlvbikgewotICAgICAgICAgIGlmIChtb2RlID09IENhcHR1cmVS
ZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT04pIHsKLSAgICAgICAgICAg
IGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuTEVOU19PUFRJQ0FMX1NU
QUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5MRU5TX09Q
VElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OKTsKLSAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0
QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01P
REUsCi0gICAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJ
WkFUSU9OX01PREVfT0ZGKTsKLSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJVc2luZyBvcHRp
Y2FsIHN0YWJpbGl6YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiBubyBvcHRpY2FsIG1vZGUgaXMgYXZhaWxh
YmxlLCB0cnkgc29mdHdhcmUuCi0gICAgICBmaW5hbCBpbnRbXSBhdmFpbGFibGVWaWRlb1N0YWJp
bGl6YXRpb24gPSBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KAotICAgICAgICAgIENhbWVyYUNo
YXJhY3RlcmlzdGljcy5DT05UUk9MX0FWQUlMQUJMRV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVT
KTsKLSAgICAgIGZvciAoaW50IG1vZGUgOiBhdmFpbGFibGVWaWRlb1N0YWJpbGl6YXRpb24pIHsK
LSAgICAgICAgaWYgKG1vZGUgPT0gQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJ
WkFUSU9OX01PREVfT04pIHsKLSAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENh
cHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFLAotICAgICAgICAg
ICAgICBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERV9PTik7
Ci0gICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5MRU5T
X09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFLAotICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVz
dC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09GRik7Ci0gICAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgIlVzaW5nIHZpZGVvIHN0YWJpbGl6YXRpb24uIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiU3RhYmlsaXphdGlv
biBub3QgYXZhaWxhYmxlLiIpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaG9vc2VGb2N1
c01vZGUoQ2FwdHVyZVJlcXVlc3QuQnVpbGRlciBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpIHsKLSAg
ICAgIGZpbmFsIGludFtdIGF2YWlsYWJsZUZvY3VzTW9kZXMgPQotICAgICAgICAgIGNhbWVyYUNo
YXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkNPTlRST0xfQUZfQVZBSUxB
QkxFX01PREVTKTsKLSAgICAgIGZvciAoaW50IG1vZGUgOiBhdmFpbGFibGVGb2N1c01vZGVzKSB7
Ci0gICAgICAgIGlmIChtb2RlID09IENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUZfTU9ERV9DT05U
SU5VT1VTX1ZJREVPKSB7Ci0gICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldCgKLSAg
ICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRl9NT0RFLCBDYXB0dXJlUmVxdWVz
dC5DT05UUk9MX0FGX01PREVfQ09OVElOVU9VU19WSURFTyk7Ci0gICAgICAgICAgTG9nZ2luZy5k
KFRBRywgIlVzaW5nIGNvbnRpbnVvdXMgdmlkZW8gYXV0by1mb2N1cy4iKTsKLSAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJBdXRvLWZv
Y3VzIGlzIG5vdCBhdmFpbGFibGUuIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
Y2xhc3MgQ2FtZXJhQ2FwdHVyZUNhbGxiYWNrIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZVNlc3Npb24u
Q2FwdHVyZUNhbGxiYWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1
cmVGYWlsZWQoCi0gICAgICAgIENhbWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24sIENhcHR1cmVS
ZXF1ZXN0IHJlcXVlc3QsIENhcHR1cmVGYWlsdXJlIGZhaWx1cmUpIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJDYXB0dXJlIGZhaWxlZDogIiArIGZhaWx1cmUpOwotICAgIH0KLSAgfQotCi0gIHB1
YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGUoQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNhbGxiYWNrLCBF
dmVudHMgZXZlbnRzLAotICAgICAgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsIENhbWVyYU1h
bmFnZXIgY2FtZXJhTWFuYWdlciwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLCBTdHJpbmcgY2FtZXJhSWQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAg
ICAgIGludCBmcmFtZXJhdGUpIHsKLSAgICBuZXcgQ2FtZXJhMlNlc3Npb24oY2FsbGJhY2ssIGV2
ZW50cywgYXBwbGljYXRpb25Db250ZXh0LCBjYW1lcmFNYW5hZ2VyLCBzdXJmYWNlVGV4dHVyZUhl
bHBlciwKLSAgICAgICAgY2FtZXJhSWQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gIH0K
LQotICBwcml2YXRlIENhbWVyYTJTZXNzaW9uKENyZWF0ZVNlc3Npb25DYWxsYmFjayBjYWxsYmFj
aywgRXZlbnRzIGV2ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYW1l
cmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXIsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0
dXJlSGVscGVyLCBTdHJpbmcgY2FtZXJhSWQsCi0gICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBmcmFtZXJhdGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRlIG5ldyBjYW1lcmEy
IHNlc3Npb24gb24gY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0KLSAgICBjb25zdHJ1Y3Rpb25UaW1l
TnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLQotICAgIHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9
IG5ldyBIYW5kbGVyKCk7Ci0gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIHRoaXMu
ZXZlbnRzID0gZXZlbnRzOwotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRp
b25Db250ZXh0OwotICAgIHRoaXMuY2FtZXJhTWFuYWdlciA9IGNhbWVyYU1hbmFnZXI7Ci0gICAg
dGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgIHRo
aXMuY2FtZXJhSWQgPSBjYW1lcmFJZDsKLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhp
cy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAg
ICBzdGFydCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0KCkgewotICAgIGNoZWNrSXNP
bkNhbWVyYVRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydCIpOwotCi0gICAgdHJ5
IHsKLSAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJh
Q2hhcmFjdGVyaXN0aWNzKGNhbWVyYUlkKTsKLSAgICB9IGNhdGNoIChmaW5hbCBDYW1lcmFBY2Nl
c3NFeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoImdldENhbWVyYUNoYXJhY3Rlcmlz
dGljcygpOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YW1lcmFPcmllbnRhdGlvbiA9IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFj
dGVyaXN0aWNzLlNFTlNPUl9PUklFTlRBVElPTik7Ci0gICAgaXNDYW1lcmFGcm9udEZhY2luZyA9
IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFD
SU5HKQotICAgICAgICA9PSBDYW1lcmFNZXRhZGF0YS5MRU5TX0ZBQ0lOR19GUk9OVDsKLQotICAg
IGZpbmRDYXB0dXJlRm9ybWF0KCk7Ci0gICAgb3BlbkNhbWVyYSgpOwotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIGZpbmRDYXB0dXJlRm9ybWF0KCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgp
OwotCi0gICAgUmFuZ2U8SW50ZWdlcj5bXSBmcHNSYW5nZXMgPQotICAgICAgICBjYW1lcmFDaGFy
YWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FFX0FWQUlMQUJM
RV9UQVJHRVRfRlBTX1JBTkdFUyk7Ci0gICAgZnBzVW5pdEZhY3RvciA9IENhbWVyYTJFbnVtZXJh
dG9yLmdldEZwc1VuaXRGYWN0b3IoZnBzUmFuZ2VzKTsKLSAgICBMaXN0PENhcHR1cmVGb3JtYXQu
RnJhbWVyYXRlUmFuZ2U+IGZyYW1lcmF0ZVJhbmdlcyA9Ci0gICAgICAgIENhbWVyYTJFbnVtZXJh
dG9yLmNvbnZlcnRGcmFtZXJhdGVzKGZwc1JhbmdlcywgZnBzVW5pdEZhY3Rvcik7Ci0gICAgTGlz
dDxTaXplPiBzaXplcyA9IENhbWVyYTJFbnVtZXJhdG9yLmdldFN1cHBvcnRlZFNpemVzKGNhbWVy
YUNoYXJhY3RlcmlzdGljcyk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2YWlsYWJsZSBwcmV2aWV3
IHNpemVzOiAiICsgc2l6ZXMpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdmFpbGFibGUgZnBzIHJh
bmdlczogIiArIGZyYW1lcmF0ZVJhbmdlcyk7Ci0KLSAgICBpZiAoZnJhbWVyYXRlUmFuZ2VzLmlz
RW1wdHkoKSB8fCBzaXplcy5pc0VtcHR5KCkpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJObyBzdXBw
b3J0ZWQgY2FwdHVyZSBmb3JtYXRzLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZp
bmFsIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgYmVzdEZwc1JhbmdlID0KLSAgICAgICAg
Q2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5n
ZShmcmFtZXJhdGVSYW5nZXMsIGZyYW1lcmF0ZSk7Ci0KLSAgICBmaW5hbCBTaXplIGJlc3RTaXpl
ID0gQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKHNpemVz
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQucmVwb3J0Q2Ft
ZXJhUmVzb2x1dGlvbihjYW1lcmEyUmVzb2x1dGlvbkhpc3RvZ3JhbSwgYmVzdFNpemUpOwotCi0g
ICAgY2FwdHVyZUZvcm1hdCA9IG5ldyBDYXB0dXJlRm9ybWF0KGJlc3RTaXplLndpZHRoLCBiZXN0
U2l6ZS5oZWlnaHQsIGJlc3RGcHNSYW5nZSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIGNh
cHR1cmUgZm9ybWF0OiAiICsgY2FwdHVyZUZvcm1hdCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
b3BlbkNhbWVyYSgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgIExvZ2dp
bmcuZChUQUcsICJPcGVuaW5nIGNhbWVyYSAiICsgY2FtZXJhSWQpOwotICAgIGV2ZW50cy5vbkNh
bWVyYU9wZW5pbmcoKTsKLQotICAgIHRyeSB7Ci0gICAgICBjYW1lcmFNYW5hZ2VyLm9wZW5DYW1l
cmEoY2FtZXJhSWQsIG5ldyBDYW1lcmFTdGF0ZUNhbGxiYWNrKCksIGNhbWVyYVRocmVhZEhhbmRs
ZXIpOwotICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBv
cnRFcnJvcigiRmFpbGVkIHRvIG9wZW4gY2FtZXJhOiAiICsgZSk7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIlN0b3AgY2FtZXJhMiBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJhSWQp
OwotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9u
U3RhdGUuU1RPUFBFRCkgewotICAgICAgZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lzdGVt
Lm5hbm9UaW1lKCk7Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAgICAg
c3RvcEludGVybmFsKCk7Ci0gICAgICBmaW5hbCBpbnQgc3RvcFRpbWVNcyA9IChpbnQpIFRpbWVV
bml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RvcFN0YXJ0VGlt
ZSk7Ci0gICAgICBjYW1lcmEyU3RvcFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRpbWVN
cyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0b3BJbnRlcm5hbCgpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiU3RvcCBpbnRlcm5hbCIpOwotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVh
ZCgpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotCi0gICAg
aWYgKGNhcHR1cmVTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgIGNhcHR1cmVTZXNzaW9uLmNsb3Nl
KCk7Ci0gICAgICBjYXB0dXJlU2Vzc2lvbiA9IG51bGw7Ci0gICAgfQotICAgIGlmIChzdXJmYWNl
ICE9IG51bGwpIHsKLSAgICAgIHN1cmZhY2UucmVsZWFzZSgpOwotICAgICAgc3VyZmFjZSA9IG51
bGw7Ci0gICAgfQotICAgIGlmIChjYW1lcmFEZXZpY2UgIT0gbnVsbCkgewotICAgICAgY2FtZXJh
RGV2aWNlLmNsb3NlKCk7Ci0gICAgICBjYW1lcmFEZXZpY2UgPSBudWxsOwotICAgIH0KLQotICAg
IExvZ2dpbmcuZChUQUcsICJTdG9wIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBv
cnRFcnJvcihTdHJpbmcgZXJyb3IpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAg
ICBMb2dnaW5nLmUoVEFHLCAiRXJyb3I6ICIgKyBlcnJvcik7Ci0KLSAgICBmaW5hbCBib29sZWFu
IHN0YXJ0RmFpbHVyZSA9IChjYXB0dXJlU2Vzc2lvbiA9PSBudWxsKSAmJiAoc3RhdGUgIT0gU2Vz
c2lvblN0YXRlLlNUT1BQRUQpOwotICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0g
ICAgc3RvcEludGVybmFsKCk7Ci0gICAgaWYgKHN0YXJ0RmFpbHVyZSkgewotICAgICAgY2FsbGJh
Y2sub25GYWlsdXJlKEZhaWx1cmVUeXBlLkVSUk9SLCBlcnJvcik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKHRoaXMsIGVycm9yKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIGludCBnZXRGcmFtZU9yaWVudGF0aW9uKCkgewotICAgIGludCByb3RhdGlvbiA9IENh
bWVyYVNlc3Npb24uZ2V0RGV2aWNlT3JpZW50YXRpb24oYXBwbGljYXRpb25Db250ZXh0KTsKLSAg
ICBpZiAoIWlzQ2FtZXJhRnJvbnRGYWNpbmcpIHsKLSAgICAgIHJvdGF0aW9uID0gMzYwIC0gcm90
YXRpb247Ci0gICAgfQotICAgIHJldHVybiAoY2FtZXJhT3JpZW50YXRpb24gKyByb3RhdGlvbikg
JSAzNjA7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewot
ICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0
TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNl
cHRpb24oIldyb25nIHRocmVhZCIpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEv
b3JnL3dlYnJ0Yy9DYW1lcmFDYXB0dXJlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9DYW1lcmFD
YXB0dXJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzUxOWQ3NjVmZGM0
MGI3MDU4MjM3ZTNmYmJlNmQ4YmYzNDA3ODc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVyZXIuamF2YQor
KysgL2Rldi9udWxsCkBAIC0xLDQ1OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9y
dCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQg
YW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkFy
cmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJl
Y2F0aW9uIikKLWFic3RyYWN0IGNsYXNzIENhbWVyYUNhcHR1cmVyIGltcGxlbWVudHMgQ2FtZXJh
VmlkZW9DYXB0dXJlciB7Ci0gIGVudW0gU3dpdGNoU3RhdGUgewotICAgIElETEUsIC8vIE5vIHN3
aXRjaCByZXF1ZXN0ZWQuCi0gICAgUEVORElORywgLy8gV2FpdGluZyBmb3IgcHJldmlvdXMgY2Fw
dHVyZSBzZXNzaW9uIHRvIG9wZW4uCi0gICAgSU5fUFJPR1JFU1MsIC8vIFdhaXRpbmcgZm9yIG5l
dyBzd2l0Y2hlZCBjYXB0dXJlIHNlc3Npb24gdG8gc3RhcnQuCi0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYUNhcHR1cmVyIjsKLSAgcHJpdmF0ZSBmaW5h
bCBzdGF0aWMgaW50IE1BWF9PUEVOX0NBTUVSQV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgZmlu
YWwgc3RhdGljIGludCBPUEVOX0NBTUVSQV9ERUxBWV9NUyA9IDUwMDsKLSAgcHJpdmF0ZSBmaW5h
bCBzdGF0aWMgaW50IE9QRU5fQ0FNRVJBX1RJTUVPVVQgPSAxMDAwMDsKLQotICBwcml2YXRlIGZp
bmFsIENhbWVyYUVudW1lcmF0b3IgY2FtZXJhRW51bWVyYXRvcjsKLSAgcHJpdmF0ZSBmaW5hbCBD
YW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxl
ciB1aVRocmVhZEhhbmRsZXI7Ci0KLSAgQE51bGxhYmxlCi0gIHByaXZhdGUgZmluYWwgQ2FtZXJh
U2Vzc2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrID0KLSAg
ICAgIG5ldyBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjaygpIHsKLSAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRG9uZShDYW1lcmFTZXNzaW9uIHNlc3Np
b24pIHsKLSAgICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiQ3JlYXRlIHNlc3Npb24gZG9uZS4gU3dpdGNoIHN0YXRlOiAiICsgc3dpdGNo
U3RhdGUpOwotICAgICAgICAgIHVpVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3Mob3BlbkNh
bWVyYVRpbWVvdXRSdW5uYWJsZSk7Ci0gICAgICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2sp
IHsKLSAgICAgICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQodHJ1ZSAv
KiBzdWNjZXNzICovKTsKLSAgICAgICAgICAgIHNlc3Npb25PcGVuaW5nID0gZmFsc2U7Ci0gICAg
ICAgICAgICBjdXJyZW50U2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICAgICAgICBjYW1lcmFTdGF0
aXN0aWNzID0gbmV3IENhbWVyYVN0YXRpc3RpY3Moc3VyZmFjZUhlbHBlciwgZXZlbnRzSGFuZGxl
cik7Ci0gICAgICAgICAgICBmaXJzdEZyYW1lT2JzZXJ2ZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IHN0YXRlTG9jay5ub3RpZnlBbGwoKTsKLQotICAgICAgICAgICAgaWYgKHN3aXRjaFN0YXRlID09
IFN3aXRjaFN0YXRlLklOX1BST0dSRVNTKSB7Ci0gICAgICAgICAgICAgIHN3aXRjaFN0YXRlID0g
U3dpdGNoU3RhdGUuSURMRTsKLSAgICAgICAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIg
IT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFT
d2l0Y2hEb25lKGNhbWVyYUVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhjYW1lcmFOYW1lKSk7Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlciA9IG51bGw7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3dpdGNoU3RhdGUgPT0gU3dpdGNoU3RhdGUuUEVO
RElORykgewotICAgICAgICAgICAgICBTdHJpbmcgc2VsZWN0ZWRDYW1lcmFOYW1lID0gcGVuZGlu
Z0NhbWVyYU5hbWU7Ci0gICAgICAgICAgICAgIHBlbmRpbmdDYW1lcmFOYW1lID0gbnVsbDsKLSAg
ICAgICAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JRExFOwotICAgICAgICAgICAg
ICBzd2l0Y2hDYW1lcmFJbnRlcm5hbChzd2l0Y2hFdmVudHNIYW5kbGVyLCBzZWxlY3RlZENhbWVy
YU5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkZhaWx1cmUoQ2FtZXJhU2Vzc2lvbi5G
YWlsdXJlVHlwZSBmYWlsdXJlVHlwZSwgU3RyaW5nIGVycm9yKSB7Ci0gICAgICAgICAgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICAgICAgdWlUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxi
YWNrcyhvcGVuQ2FtZXJhVGltZW91dFJ1bm5hYmxlKTsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQg
KHN0YXRlTG9jaykgewotICAgICAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3Rh
cnRlZChmYWxzZSAvKiBzdWNjZXNzICovKTsKLSAgICAgICAgICAgIG9wZW5BdHRlbXB0c1JlbWFp
bmluZy0tOwotCi0gICAgICAgICAgICBpZiAob3BlbkF0dGVtcHRzUmVtYWluaW5nIDw9IDApIHsK
LSAgICAgICAgICAgICAgTG9nZ2luZy53KFRBRywgIk9wZW5pbmcgY2FtZXJhIGZhaWxlZCwgcGFz
c2luZzogIiArIGVycm9yKTsKLSAgICAgICAgICAgICAgc2Vzc2lvbk9wZW5pbmcgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgc3RhdGVMb2NrLm5vdGlmeUFsbCgpOwotCi0gICAgICAgICAgICAgIGlm
IChzd2l0Y2hTdGF0ZSAhPSBTd2l0Y2hTdGF0ZS5JRExFKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgc3dpdGNo
RXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAg
ICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLklETEU7Ci0gICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICBpZiAoZmFpbHVyZVR5cGUgPT0gQ2FtZXJhU2Vzc2lvbi5GYWls
dXJlVHlwZS5ESVNDT05ORUNURUQpIHsKLSAgICAgICAgICAgICAgICBldmVudHNIYW5kbGVyLm9u
Q2FtZXJhRGlzY29ubmVjdGVkKCk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgTG9nZ2luZy53KFRBRywgIk9w
ZW5pbmcgY2FtZXJhIGZhaWxlZCwgcmV0cnk6ICIgKyBlcnJvcik7Ci0gICAgICAgICAgICAgIGNy
ZWF0ZVNlc3Npb25JbnRlcm5hbChPUEVOX0NBTUVSQV9ERUxBWV9NUyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9OwotCi0gIEBOdWxsYWJsZQotICBwcml2
YXRlIGZpbmFsIENhbWVyYVNlc3Npb24uRXZlbnRzIGNhbWVyYVNlc3Npb25FdmVudHNIYW5kbGVy
ID0gbmV3IENhbWVyYVNlc3Npb24uRXZlbnRzKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uQ2FtZXJhT3BlbmluZygpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgp
OwotICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKGN1cnJlbnRT
ZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25DYW1lcmFPcGVu
aW5nIHdoaWxlIHNlc3Npb24gd2FzIG9wZW4uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFPcGVuaW5nKGNhbWVyYU5hbWUpOwot
ICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJh
RXJyb3IoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgZXJyb3IpIHsKLSAgICAgIGNoZWNr
SXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAg
ICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24pIHsKLSAgICAgICAgICBMb2dnaW5n
LncoVEFHLCAib25DYW1lcmFFcnJvciBmcm9tIGFub3RoZXIgc2Vzc2lvbjogIiArIGVycm9yKTsK
LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNh
bWVyYUVycm9yKGVycm9yKTsKLSAgICAgICAgc3RvcENhcHR1cmUoKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZChD
YW1lcmFTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwot
ICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0g
Y3VycmVudFNlc3Npb24pIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25DYW1lcmFEaXNj
b25uZWN0ZWQgZnJvbSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFEaXNjb25uZWN0ZWQoKTsKLSAg
ICAgICAgc3RvcENhcHR1cmUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgdm9pZCBvbkNhbWVyYUNsb3NlZChDYW1lcmFTZXNzaW9uIHNlc3Npb24pIHsKLSAg
ICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxv
Y2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNl
c3Npb24gIT0gbnVsbCkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJvbkNhbWVyYUNsb3Nl
ZCBmcm9tIGFub3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUNsb3NlZCgpOwotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRnJhbWVDYXB0dXJlZChDYW1lcmFT
ZXNzaW9uIHNlc3Npb24sIFZpZGVvRnJhbWUgZnJhbWUpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVy
YVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYg
KHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24pIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAi
b25GcmFtZUNhcHR1cmVkIGZyb20gYW5vdGhlciBzZXNzaW9uLiIpOwotICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZpcnN0RnJhbWVPYnNlcnZlZCkgewotICAgICAg
ICAgIGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAgICAgICAgZmly
c3RGcmFtZU9ic2VydmVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjYW1lcmFTdGF0aXN0
aWNzLmFkZEZyYW1lKCk7Ci0gICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25GcmFtZUNhcHR1cmVk
KGZyYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJs
ZSBvcGVuQ2FtZXJhVGltZW91dFJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1l
cmFFcnJvcigiQ2FtZXJhIGZhaWxlZCB0byBzdGFydCB3aXRoaW4gdGltZW91dC4iKTsKLSAgICB9
Ci0gIH07Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgb24gaW5pdGlhbGl6ZQotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gIHByaXZhdGUgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwot
ICBwcml2YXRlIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICBwcml2YXRlIG9yZy53ZWJy
dGMuQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyOwotICBwcml2YXRlIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VIZWxwZXI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qgc3Rh
dGVMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGJvb2xlYW4gc2Vzc2lvbk9wZW5pbmc7
IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIEBOdWxsYWJsZSBwcml2YXRlIENhbWVyYVNl
c3Npb24gY3VycmVudFNlc3Npb247IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZh
dGUgU3RyaW5nIGNhbWVyYU5hbWU7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZh
dGUgU3RyaW5nIHBlbmRpbmdDYW1lcmFOYW1lOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwot
ICBwcml2YXRlIGludCB3aWR0aDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0
ZSBpbnQgaGVpZ2h0OyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIGludCBm
cmFtZXJhdGU7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgaW50IG9wZW5B
dHRlbXB0c1JlbWFpbmluZzsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBT
d2l0Y2hTdGF0ZSBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLklETEU7IC8qIGd1YXJkZWQgYnkg
c3RhdGVMb2NrICovCi0gIEBOdWxsYWJsZSBwcml2YXRlIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dp
dGNoRXZlbnRzSGFuZGxlcjsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgLy8gVmFsaWQg
ZnJvbSBvbkRvbmUgY2FsbCB1bnRpbCBzdG9wQ2FwdHVyZSwgb3RoZXJ3aXNlIG51bGwuCi0gIEBO
dWxsYWJsZSBwcml2YXRlIENhbWVyYVN0YXRpc3RpY3MgY2FtZXJhU3RhdGlzdGljczsgLyogZ3Vh
cmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVPYnNlcnZl
ZDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLQotICBwdWJsaWMgQ2FtZXJhQ2FwdHVyZXIo
U3RyaW5nIGNhbWVyYU5hbWUsIEBOdWxsYWJsZSBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hh
bmRsZXIsCi0gICAgICBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3IpIHsKLSAgICBp
ZiAoZXZlbnRzSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVyID0gbmV3IENh
bWVyYUV2ZW50c0hhbmRsZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMg
dm9pZCBvbkNhbWVyYUVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7fQotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoKSB7fQot
ICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFGcmVlemVkKFN0
cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7fQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVi
bGljIHZvaWQgb25DYW1lcmFPcGVuaW5nKFN0cmluZyBjYW1lcmFOYW1lKSB7fQotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCkge30K
LSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhQ2xvc2VkKCkg
e30KLSAgICAgIH07Ci0gICAgfQotCi0gICAgdGhpcy5ldmVudHNIYW5kbGVyID0gZXZlbnRzSGFu
ZGxlcjsKLSAgICB0aGlzLmNhbWVyYUVudW1lcmF0b3IgPSBjYW1lcmFFbnVtZXJhdG9yOwotICAg
IHRoaXMuY2FtZXJhTmFtZSA9IGNhbWVyYU5hbWU7Ci0gICAgTGlzdDxTdHJpbmc+IGRldmljZU5h
bWVzID0gQXJyYXlzLmFzTGlzdChjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCkpOwot
ICAgIHVpVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkp
OwotCi0gICAgaWYgKGRldmljZU5hbWVzLmlzRW1wdHkoKSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIk5vIGNhbWVyYXMgYXR0YWNoZWQuIik7Ci0gICAgfQotICAgIGlmICgh
ZGV2aWNlTmFtZXMuY29udGFpbnModGhpcy5jYW1lcmFOYW1lKSkgewotICAgICAgdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAiQ2FtZXJhIG5hbWUgIiArIHRo
aXMuY2FtZXJhTmFtZSArICIgZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGNhbWVyYSBkZXZpY2Uu
Iik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUo
U3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGlj
YXRpb25Db250ZXh0LAotICAgICAgb3JnLndlYnJ0Yy5DYXB0dXJlck9ic2VydmVyIGNhcHR1cmVy
T2JzZXJ2ZXIpIHsKLSAgICB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29u
dGV4dDsKLSAgICB0aGlzLmNhcHR1cmVyT2JzZXJ2ZXIgPSBjYXB0dXJlck9ic2VydmVyOwotICAg
IHRoaXMuc3VyZmFjZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgIHRoaXMuY2Ft
ZXJhVGhyZWFkSGFuZGxlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdGFydENhcHR1cmUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0Q2Fw
dHVyZTogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLSAgICBp
ZiAoYXBwbGljYXRpb25Db250ZXh0ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKCJDYW1lcmFDYXB0dXJlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxs
aW5nIHN0YXJ0Q2FwdHVyZS4iKTsKLSAgICB9Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9j
aykgewotICAgICAgaWYgKHNlc3Npb25PcGVuaW5nIHx8IGN1cnJlbnRTZXNzaW9uICE9IG51bGwp
IHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIlNlc3Npb24gYWxyZWFkeSBvcGVuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAg
dGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsK
LQotICAgICAgc2Vzc2lvbk9wZW5pbmcgPSB0cnVlOwotICAgICAgb3BlbkF0dGVtcHRzUmVtYWlu
aW5nID0gTUFYX09QRU5fQ0FNRVJBX0FUVEVNUFRTOwotICAgICAgY3JlYXRlU2Vzc2lvbkludGVy
bmFsKDApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVTZXNzaW9uSW50ZXJu
YWwoaW50IGRlbGF5TXMpIHsKLSAgICB1aVRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQob3BlbkNh
bWVyYVRpbWVvdXRSdW5uYWJsZSwgZGVsYXlNcyArIE9QRU5fQ0FNRVJBX1RJTUVPVVQpOwotICAg
IGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNyZWF0ZUNhbWVy
YVNlc3Npb24oY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBjYW1lcmFTZXNzaW9uRXZlbnRzSGFuZGxl
ciwgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgICAgICAgc3VyZmFjZUhlbHBlciwgY2FtZXJh
TmFtZSwgd2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9LCBkZWxheU1z
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlIik7Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHN0
YXRlTG9jaykgewotICAgICAgd2hpbGUgKHNlc3Npb25PcGVuaW5nKSB7Ci0gICAgICAgIExvZ2dp
bmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IFdhaXRpbmcgZm9yIHNlc3Npb24gdG8gb3BlbiIpOwot
ICAgICAgICB0cnkgewotICAgICAgICAgIHN0YXRlTG9jay53YWl0KCk7Ci0gICAgICAgIH0gY2F0
Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAi
U3RvcCBjYXB0dXJlIGludGVycnVwdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBzZXNzaW9uIHRv
IG9wZW4uIik7Ci0gICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5pbnRlcnJ1cHQoKTsK
LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGN1cnJl
bnRTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgY2FwdHVy
ZTogTnVsbGluZyBzZXNzaW9uIik7Ci0gICAgICAgIGNhbWVyYVN0YXRpc3RpY3MucmVsZWFzZSgp
OwotICAgICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbnVsbDsKLSAgICAgICAgZmluYWwgQ2FtZXJh
U2Vzc2lvbiBvbGRTZXNzaW9uID0gY3VycmVudFNlc3Npb247Ci0gICAgICAgIGNhbWVyYVRocmVh
ZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgb2xkU2Vzc2lvbi5zdG9wKCk7
Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgY3VycmVudFNlc3Npb24gPSBudWxs
OwotICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2FwdHVyZXJTdG9wcGVkKCk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlOiBObyBzZXNzaW9u
IG9wZW4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0
dXJlIGRvbmUiKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjaGFuZ2VDYXB0
dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIExv
Z2dpbmcuZChUQUcsICJjaGFuZ2VDYXB0dXJlRm9ybWF0OiAiICsgd2lkdGggKyAieCIgKyBoZWln
aHQgKyAiQCIgKyBmcmFtZXJhdGUpOwotICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0g
ICAgICBzdG9wQ2FwdHVyZSgpOwotICAgICAgc3RhcnRDYXB0dXJlKHdpZHRoLCBoZWlnaHQsIGZy
YW1lcmF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bv
c2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImRpc3Bvc2UiKTsKLSAgICBzdG9wQ2FwdHVyZSgp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3aXRjaENhbWVyYShmaW5hbCBD
YW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIpIHsKLSAgICBMb2dnaW5nLmQo
VEFHLCAic3dpdGNoQ2FtZXJhIik7Ci0gICAgY2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBMaXN0PFN0cmluZz4gZGV2aWNlTmFtZXMgPSBBcnJheXMuYXNMaXN0KGNhbWVyYUVu
dW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKSk7Ci0KLSAgICAgICAgaWYgKGRldmljZU5hbWVzLnNp
emUoKSA8IDIpIHsKLSAgICAgICAgICByZXBvcnRDYW1lcmFTd2l0Y2hFcnJvcigiTm8gY2FtZXJh
IHRvIHN3aXRjaCB0by4iLCBzd2l0Y2hFdmVudHNIYW5kbGVyKTsKLSAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgY2FtZXJhTmFtZUluZGV4ID0gZGV2aWNlTmFtZXMu
aW5kZXhPZihjYW1lcmFOYW1lKTsKLSAgICAgICAgU3RyaW5nIGNhbWVyYU5hbWUgPSBkZXZpY2VO
YW1lcy5nZXQoKGNhbWVyYU5hbWVJbmRleCArIDEpICUgZGV2aWNlTmFtZXMuc2l6ZSgpKTsKLSAg
ICAgICAgc3dpdGNoQ2FtZXJhSW50ZXJuYWwoc3dpdGNoRXZlbnRzSGFuZGxlciwgY2FtZXJhTmFt
ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
c3dpdGNoQ2FtZXJhKGZpbmFsIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxl
ciwgZmluYWwgU3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNo
Q2FtZXJhIik7Ci0gICAgY2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzd2l0
Y2hDYW1lcmFJbnRlcm5hbChzd2l0Y2hFdmVudHNIYW5kbGVyLCBjYW1lcmFOYW1lKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc1NjcmVl
bmNhc3QoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcHJpbnRT
dGFja1RyYWNlKCkgewotICAgIFRocmVhZCBjYW1lcmFUaHJlYWQgPSBudWxsOwotICAgIGlmIChj
YW1lcmFUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYVRocmVhZCA9IGNhbWVy
YVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCk7Ci0gICAgfQotICAgIGlmIChj
YW1lcmFUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBjYW1lcmFT
dGFja1RyYWNlID0gY2FtZXJhVGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChjYW1l
cmFTdGFja1RyYWNlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVy
YUNhcHR1cmVyIHN0YWNrIHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50
IHRyYWNlRWxlbSA6IGNhbWVyYVN0YWNrVHJhY2UpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFH
LCB0cmFjZUVsZW0udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgcmVwb3J0Q2FtZXJhU3dpdGNoRXJyb3IoCi0gICAgICBTdHJpbmcg
ZXJyb3IsIEBOdWxsYWJsZSBDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIp
IHsKLSAgICBMb2dnaW5nLmUoVEFHLCBlcnJvcik7Ci0gICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVy
cm9yKGVycm9yKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3dpdGNoQ2FtZXJhSW50
ZXJuYWwoCi0gICAgICBATnVsbGFibGUgZmluYWwgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hF
dmVudHNIYW5kbGVyLCBmaW5hbCBTdHJpbmcgc2VsZWN0ZWRDYW1lcmFOYW1lKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBpbnRlcm5hbCIpOwotICAgIExpc3Q8U3RyaW5nPiBk
ZXZpY2VOYW1lcyA9IEFycmF5cy5hc0xpc3QoY2FtZXJhRW51bWVyYXRvci5nZXREZXZpY2VOYW1l
cygpKTsKLQotICAgIGlmICghZGV2aWNlTmFtZXMuY29udGFpbnMoc2VsZWN0ZWRDYW1lcmFOYW1l
KSkgewotICAgICAgcmVwb3J0Q2FtZXJhU3dpdGNoRXJyb3IoIkF0dGVtcHRlZCB0byBzd2l0Y2gg
dG8gdW5rbm93biBjYW1lcmEgZGV2aWNlICIgKyBzZWxlY3RlZENhbWVyYU5hbWUsCi0gICAgICAg
ICAgc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3lu
Y2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgIGlmIChzd2l0Y2hTdGF0ZSAhPSBTd2l0Y2hT
dGF0ZS5JRExFKSB7Ci0gICAgICAgIHJlcG9ydENhbWVyYVN3aXRjaEVycm9yKCJDYW1lcmEgc3dp
dGNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIiwgc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICghc2Vzc2lvbk9wZW5pbmcgJiYgY3VycmVudFNl
c3Npb24gPT0gbnVsbCkgewotICAgICAgICByZXBvcnRDYW1lcmFTd2l0Y2hFcnJvcigic3dpdGNo
Q2FtZXJhOiBjYW1lcmEgaXMgbm90IHJ1bm5pbmcuIiwgc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdGhpcy5zd2l0Y2hFdmVudHNIYW5kbGVy
ID0gc3dpdGNoRXZlbnRzSGFuZGxlcjsKLSAgICAgIGlmIChzZXNzaW9uT3BlbmluZykgewotICAg
ICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLlBFTkRJTkc7Ci0gICAgICAgIHBlbmRpbmdD
YW1lcmFOYW1lID0gc2VsZWN0ZWRDYW1lcmFOYW1lOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLklOX1BST0dSRVNTOwot
ICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhOiBTdG9wcGluZyBz
ZXNzaW9uIik7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzLnJlbGVhc2UoKTsKLSAgICAgIGNhbWVy
YVN0YXRpc3RpY3MgPSBudWxsOwotICAgICAgZmluYWwgQ2FtZXJhU2Vzc2lvbiBvbGRTZXNzaW9u
ID0gY3VycmVudFNlc3Npb247Ci0gICAgICBjYW1lcmFUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICAgIG9sZFNlc3Npb24uc3RvcCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICAgIGN1cnJlbnRTZXNzaW9uID0gbnVsbDsKLQotICAgICAgY2FtZXJhTmFtZSA9IHNlbGVjdGVk
Q2FtZXJhTmFtZTsKLQotICAgICAgc2Vzc2lvbk9wZW5pbmcgPSB0cnVlOwotICAgICAgb3BlbkF0
dGVtcHRzUmVtYWluaW5nID0gMTsKLSAgICAgIGNyZWF0ZVNlc3Npb25JbnRlcm5hbCgwKTsKLSAg
ICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBkb25lIik7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAgIGlmIChUaHJlYWQuY3Vy
cmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFk
KCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDaGVjayBpcyBvbiBjYW1lcmEgdGhyZWFkIGZh
aWxlZC4iKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3Qgb24gY2FtZXJh
IHRocmVhZC4iKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldENhbWVyYU5h
bWUoKSB7Ci0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgIHJldHVybiBjYW1l
cmFOYW1lOwotICAgIH0KLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIGNyZWF0ZUNh
bWVyYVNlc3Npb24oCi0gICAgICBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjayBj
cmVhdGVTZXNzaW9uQ2FsbGJhY2ssIENhbWVyYVNlc3Npb24uRXZlbnRzIGV2ZW50cywKLSAgICAg
IENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
VGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYU5hbWUsCi0gICAgICBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCBmcmFtZXJhdGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9D
YW1lcmFTZXNzaW9uLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYVNlc3Npb24uamF2YQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxMzc4NTRkODJhMzc2ODQyZWUzMjQ5OTg0
ZDU5NTU5ZTNlZjQ2ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvamF2YS9vcmcvd2VicnRjL0NhbWVyYVNlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDcyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhp
Y3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFu
ZHJvaWQudmlldy5TdXJmYWNlOwotCi1pbnRlcmZhY2UgQ2FtZXJhU2Vzc2lvbiB7Ci0gIGVudW0g
RmFpbHVyZVR5cGUgeyBFUlJPUiwgRElTQ09OTkVDVEVEIH0KLQotICAvLyBDYWxsYmFja3MgYXJl
IGZpcmVkIG9uIHRoZSBjYW1lcmEgdGhyZWFkLgotICBpbnRlcmZhY2UgQ3JlYXRlU2Vzc2lvbkNh
bGxiYWNrIHsKLSAgICB2b2lkIG9uRG9uZShDYW1lcmFTZXNzaW9uIHNlc3Npb24pOwotICAgIHZv
aWQgb25GYWlsdXJlKEZhaWx1cmVUeXBlIGZhaWx1cmVUeXBlLCBTdHJpbmcgZXJyb3IpOwotICB9
Ci0KLSAgLy8gRXZlbnRzIGFyZSBmaXJlZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAgaW50ZXJm
YWNlIEV2ZW50cyB7Ci0gICAgdm9pZCBvbkNhbWVyYU9wZW5pbmcoKTsKLSAgICB2b2lkIG9uQ2Ft
ZXJhRXJyb3IoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgZXJyb3IpOwotICAgIHZvaWQg
b25DYW1lcmFEaXNjb25uZWN0ZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKTsKLSAgICB2b2lkIG9u
Q2FtZXJhQ2xvc2VkKENhbWVyYVNlc3Npb24gc2Vzc2lvbik7Ci0gICAgdm9pZCBvbkZyYW1lQ2Fw
dHVyZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBWaWRlb0ZyYW1lIGZyYW1lKTsKLSAgfQotCi0g
IC8qKgotICAgKiBTdG9wcyB0aGUgY2FwdHVyZS4gV2FpdHMgdW50aWwgbm8gbW9yZSBjYWxscyB0
byBjYXB0dXJlIG9ic2VydmVyIHdpbGwgYmUgbWFkZS4KLSAgICogSWYgd2FpdENhbWVyYVN0b3Ag
aXMgdHJ1ZSwgYWxzbyB3YWl0cyBmb3IgdGhlIGNhbWVyYSB0byBzdG9wLgotICAgKi8KLSAgdm9p
ZCBzdG9wKCk7Ci0KLSAgc3RhdGljIGludCBnZXREZXZpY2VPcmllbnRhdGlvbihDb250ZXh0IGNv
bnRleHQpIHsKLSAgICBmaW5hbCBXaW5kb3dNYW5hZ2VyIHdtID0gKFdpbmRvd01hbmFnZXIpIGNv
bnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICBzd2l0
Y2ggKHdtLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0Um90YXRpb24oKSkgewotICAgICAgY2FzZSBT
dXJmYWNlLlJPVEFUSU9OXzkwOgotICAgICAgICByZXR1cm4gOTA7Ci0gICAgICBjYXNlIFN1cmZh
Y2UuUk9UQVRJT05fMTgwOgotICAgICAgICByZXR1cm4gMTgwOwotICAgICAgY2FzZSBTdXJmYWNl
LlJPVEFUSU9OXzI3MDoKLSAgICAgICAgcmV0dXJuIDI3MDsKLSAgICAgIGNhc2UgU3VyZmFjZS5S
T1RBVElPTl8wOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9
Ci0KLSAgc3RhdGljIFZpZGVvRnJhbWUuVGV4dHVyZUJ1ZmZlciBjcmVhdGVUZXh0dXJlQnVmZmVy
V2l0aE1vZGlmaWVkVHJhbnNmb3JtTWF0cml4KAotICAgICAgVGV4dHVyZUJ1ZmZlckltcGwgYnVm
ZmVyLCBib29sZWFuIG1pcnJvciwgaW50IHJvdGF0aW9uKSB7Ci0gICAgZmluYWwgTWF0cml4IHRy
YW5zZm9ybU1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKLSAgICAvLyBQZXJmb3JtIG1pcnJvciBhbmQg
cm90YXRpb24gYXJvdW5kICgwLjUsIDAuNSkgc2luY2UgdGhhdCBpcyB0aGUgY2VudGVyIG9mIHRo
ZSB0ZXh0dXJlLgotICAgIHRyYW5zZm9ybU1hdHJpeC5wcmVUcmFuc2xhdGUoLyogZHg9ICovIDAu
NWYsIC8qIGR5PSAqLyAwLjVmKTsKLSAgICBpZiAobWlycm9yKSB7Ci0gICAgICB0cmFuc2Zvcm1N
YXRyaXgucHJlU2NhbGUoLyogc3g9ICovIC0xZiwgLyogc3k9ICovIDFmKTsKLSAgICB9Ci0gICAg
dHJhbnNmb3JtTWF0cml4LnByZVJvdGF0ZShyb3RhdGlvbik7Ci0gICAgdHJhbnNmb3JtTWF0cml4
LnByZVRyYW5zbGF0ZSgvKiBkeD0gKi8gLTAuNWYsIC8qIGR5PSAqLyAtMC41Zik7Ci0KLSAgICAv
LyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgbm90IGFmZmVjdGVkIGJ5IHJvdGF0aW9uIHNpbmNl
IENhbWVyYTJTZXNzaW9uIGhhcyBzZXQgdGhlbSB0byB0aGUKLSAgICAvLyB2YWx1ZSB0aGV5IHNo
b3VsZCBiZSBhZnRlciB1bmRvaW5nIHRoZSByb3RhdGlvbi4KLSAgICByZXR1cm4gYnVmZmVyLmFw
cGx5VHJhbnNmb3JtTWF0cml4KHRyYW5zZm9ybU1hdHJpeCwgYnVmZmVyLmdldFdpZHRoKCksIGJ1
ZmZlci5nZXRIZWlnaHQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMv
RHluYW1pY0JpdHJhdGVBZGp1c3Rlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9EeW5hbWljQml0
cmF0ZUFkanVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjNlNjY2
NDgxMGE5NDhlNjVjYjk3NjllNzJiYTkzNmZiNzU2N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9EeW5hbWljQml0cmF0ZUFk
anVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogQml0cmF0ZUFkanVzdGVyIHRo
YXQgdHJhY2tzIHRoZSBiYW5kd2lkdGggcHJvZHVjZWQgYnkgYW4gZW5jb2RlciBhbmQgZHluYW1p
Y2FsbHkgYWRqdXN0cyB0aGUKLSAqIGJpdHJhdGUuICBVc2VkIGZvciBoYXJkd2FyZSBjb2RlY3Mg
dGhhdCBwYXkgYXR0ZW50aW9uIHRvIGZyYW1lcmF0ZSBidXQgc3RpbGwgZGV2aWF0ZSBmcm9tIHRo
ZQotICogdGFyZ2V0IGJpdHJhdGUgYnkgdW5hY2NlcHRhYmxlIG1hcmdpbnMuCi0gKi8KLWNsYXNz
IER5bmFtaWNCaXRyYXRlQWRqdXN0ZXIgZXh0ZW5kcyBCYXNlQml0cmF0ZUFkanVzdGVyIHsKLSAg
Ly8gQ2hhbmdlIHRoZSBiaXRyYXRlIGF0IG1vc3Qgb25jZSBldmVyeSB0aHJlZSBzZWNvbmRzLgot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgQklUUkFURV9BREpVU1RNRU5UX1NFQyA9IDMu
MDsKLSAgLy8gTWF4aW11bSBiaXRyYXRlIGFkanVzdG1lbnQgc2NhbGUgLSBubyBtb3JlIHRoYW4g
NCB0aW1lcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFJBVEVfQURKVVNUTUVO
VF9NQVhfU0NBTEUgPSA0OwotICAvLyBBbW91bnQgb2YgYWRqdXN0bWVudCBzdGVwcyB0byByZWFj
aCBtYXhpbXVtIHNjYWxlLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUUkFURV9BREpV
U1RNRU5UX1NURVBTID0gMjA7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFNf
UEVSX0JZVEUgPSA4LjA7Ci0KLSAgLy8gSG93IGZhciB0aGUgY29kZWMgaGFzIGRldmlhdGVkIGFi
b3ZlIChvciBiZWxvdykgdGhlIHRhcmdldCBiaXRyYXRlICh0cmFja2VkIGluIGJ5dGVzKS4KLSAg
cHJpdmF0ZSBkb3VibGUgZGV2aWF0aW9uQnl0ZXM7Ci0gIHByaXZhdGUgZG91YmxlIHRpbWVTaW5j
ZUxhc3RBZGp1c3RtZW50TXM7Ci0gIHByaXZhdGUgaW50IGJpdHJhdGVBZGp1c3RtZW50U2NhbGVF
eHA7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldFRhcmdldHMoaW50IHRhcmdldEJp
dHJhdGVCcHMsIGludCB0YXJnZXRGcHMpIHsKLSAgICBpZiAodGhpcy50YXJnZXRCaXRyYXRlQnBz
ID4gMCAmJiB0YXJnZXRCaXRyYXRlQnBzIDwgdGhpcy50YXJnZXRCaXRyYXRlQnBzKSB7Ci0gICAg
ICAvLyBSZXNjYWxlIHRoZSBhY2N1bXVsYXRvciBsZXZlbCBpZiB0aGUgYWNjdW11bGF0b3IgbWF4
IGRlY3JlYXNlcwotICAgICAgZGV2aWF0aW9uQnl0ZXMgPSBkZXZpYXRpb25CeXRlcyAqIHRhcmdl
dEJpdHJhdGVCcHMgLyB0aGlzLnRhcmdldEJpdHJhdGVCcHM7Ci0gICAgfQotICAgIHN1cGVyLnNl
dFRhcmdldHModGFyZ2V0Qml0cmF0ZUJwcywgdGFyZ2V0RnBzKTsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCByZXBvcnRFbmNvZGVkRnJhbWUoaW50IHNpemUpIHsKLSAgICBpZiAo
dGFyZ2V0RnBzID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBY2N1bXVs
YXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWN0dWFsIGFuZCBleHBlY3RlZCBmcmFtZSBzaXpl
cy4KLSAgICBkb3VibGUgZXhwZWN0ZWRCeXRlc1BlckZyYW1lID0gKHRhcmdldEJpdHJhdGVCcHMg
LyBCSVRTX1BFUl9CWVRFKSAvIHRhcmdldEZwczsKLSAgICBkZXZpYXRpb25CeXRlcyArPSAoc2l6
ZSAtIGV4cGVjdGVkQnl0ZXNQZXJGcmFtZSk7Ci0gICAgdGltZVNpbmNlTGFzdEFkanVzdG1lbnRN
cyArPSAxMDAwLjAgLyB0YXJnZXRGcHM7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIGJpdHJhdGUgd2hl
biB0aGUgZW5jb2RlciBhY2N1bXVsYXRlcyBvbmUgc2Vjb25kJ3Mgd29ydGggb2YgZGF0YSBpbiBl
eGNlc3Mgb3IKLSAgICAvLyBzaG9ydGZhbGwgb2YgdGhlIHRhcmdldC4KLSAgICBkb3VibGUgZGV2
aWF0aW9uVGhyZXNob2xkQnl0ZXMgPSB0YXJnZXRCaXRyYXRlQnBzIC8gQklUU19QRVJfQllURTsK
LQotICAgIC8vIENhcCB0aGUgZGV2aWF0aW9uLCBpLmUuLCBkb24ndCBsZXQgaXQgZ3JvdyBiZXlv
bmQgc29tZSBsZXZlbCB0byBhdm9pZCB1c2luZyB0b28gb2xkIGRhdGEgZm9yCi0gICAgLy8gYml0
cmF0ZSBhZGp1c3RtZW50LiAgVGhpcyBhbHNvIHByZXZlbnRzIHRha2luZyBtb3JlIHRoYW4gMyAi
c3RlcHMiIGluIGEgZ2l2ZW4gMy1zZWNvbmQgY3ljbGUuCi0gICAgZG91YmxlIGRldmlhdGlvbkNh
cCA9IEJJVFJBVEVfQURKVVNUTUVOVF9TRUMgKiBkZXZpYXRpb25UaHJlc2hvbGRCeXRlczsKLSAg
ICBkZXZpYXRpb25CeXRlcyA9IE1hdGgubWluKGRldmlhdGlvbkJ5dGVzLCBkZXZpYXRpb25DYXAp
OwotICAgIGRldmlhdGlvbkJ5dGVzID0gTWF0aC5tYXgoZGV2aWF0aW9uQnl0ZXMsIC1kZXZpYXRp
b25DYXApOwotCi0gICAgLy8gRG8gYml0cmF0ZSBhZGp1c3RtZW50IGV2ZXJ5IDMgc2Vjb25kcyBp
ZiBhY3R1YWwgZW5jb2RlciBiaXRyYXRlIGRldmlhdGVzIHRvbyBtdWNoCi0gICAgLy8gZnJvbSB0
aGUgdGFyZ2V0IHZhbHVlLgotICAgIGlmICh0aW1lU2luY2VMYXN0QWRqdXN0bWVudE1zIDw9IDEw
MDAgKiBCSVRSQVRFX0FESlVTVE1FTlRfU0VDKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGRldmlhdGlvbkJ5dGVzID4gZGV2aWF0aW9uVGhyZXNob2xkQnl0ZXMpIHsKLSAgICAg
IC8vIEVuY29kZXIgZ2VuZXJhdGVzIHRvbyBoaWdoIGJpdHJhdGUgLSBuZWVkIHRvIHJlZHVjZSB0
aGUgc2NhbGUuCi0gICAgICBpbnQgYml0cmF0ZUFkanVzdG1lbnRJbmMgPSAoaW50KSAoZGV2aWF0
aW9uQnl0ZXMgLyBkZXZpYXRpb25UaHJlc2hvbGRCeXRlcyArIDAuNSk7Ci0gICAgICBiaXRyYXRl
QWRqdXN0bWVudFNjYWxlRXhwIC09IGJpdHJhdGVBZGp1c3RtZW50SW5jOwotICAgICAgLy8gRG9u
J3QgbGV0IHRoZSBhZGp1c3RtZW50IHNjYWxlIGRyb3AgYmVsb3cgLUJJVFJBVEVfQURKVVNUTUVO
VF9TVEVQUy4KLSAgICAgIC8vIFRoaXMgc2V0cyBhIG1pbmltdW0gZXhwb25lbnQgb2YgLTEgKGJp
dHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgLyBCSVRSQVRFX0FESlVTVE1FTlRfU1RFUFMpLgotICAg
ICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCA9IE1hdGgubWF4KGJpdHJhdGVBZGp1c3RtZW50
U2NhbGVFeHAsIC1CSVRSQVRFX0FESlVTVE1FTlRfU1RFUFMpOwotICAgICAgZGV2aWF0aW9uQnl0
ZXMgPSBkZXZpYXRpb25UaHJlc2hvbGRCeXRlczsKLSAgICB9IGVsc2UgaWYgKGRldmlhdGlvbkJ5
dGVzIDwgLWRldmlhdGlvblRocmVzaG9sZEJ5dGVzKSB7Ci0gICAgICAvLyBFbmNvZGVyIGdlbmVy
YXRlcyB0b28gbG93IGJpdHJhdGUgLSBuZWVkIHRvIGluY3JlYXNlIHRoZSBzY2FsZS4KLSAgICAg
IGludCBiaXRyYXRlQWRqdXN0bWVudEluYyA9IChpbnQpICgtZGV2aWF0aW9uQnl0ZXMgLyBkZXZp
YXRpb25UaHJlc2hvbGRCeXRlcyArIDAuNSk7Ci0gICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxl
RXhwICs9IGJpdHJhdGVBZGp1c3RtZW50SW5jOwotICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBhZGp1
c3RtZW50IHNjYWxlIGV4Y2VlZCBCSVRSQVRFX0FESlVTVE1FTlRfU1RFUFMuCi0gICAgICAvLyBU
aGlzIHNldHMgYSBtYXhpbXVtIGV4cG9uZW50IG9mIDEgKGJpdHJhdGVBZGp1c3RtZW50U2NhbGVF
eHAgLyBCSVRSQVRFX0FESlVTVE1FTlRfU1RFUFMpLgotICAgICAgYml0cmF0ZUFkanVzdG1lbnRT
Y2FsZUV4cCA9IE1hdGgubWluKGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAsIEJJVFJBVEVfQURK
VVNUTUVOVF9TVEVQUyk7Ci0gICAgICBkZXZpYXRpb25CeXRlcyA9IC1kZXZpYXRpb25UaHJlc2hv
bGRCeXRlczsKLSAgICB9Ci0gICAgdGltZVNpbmNlTGFzdEFkanVzdG1lbnRNcyA9IDA7Ci0gIH0K
LQotICBwcml2YXRlIGRvdWJsZSBnZXRCaXRyYXRlQWRqdXN0bWVudFNjYWxlKCkgewotICAgIHJl
dHVybiBNYXRoLnBvdyhCSVRSQVRFX0FESlVTVE1FTlRfTUFYX1NDQUxFLAotICAgICAgICAoZG91
YmxlKSBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwIC8gQklUUkFURV9BREpVU1RNRU5UX1NURVBT
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldEFkanVzdGVkQml0cmF0ZUJw
cygpIHsKLSAgICByZXR1cm4gKGludCkgKHRhcmdldEJpdHJhdGVCcHMgKiBnZXRCaXRyYXRlQWRq
dXN0bWVudFNjYWxlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0Vn
bEJhc2UxMEltcGwuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvRWdsQmFzZTEwSW1wbC5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWUzOGYwZTc4NDYxNjljZDgwOGVhZjlhODBk
NzZhYTg4MGFlYzQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3NyYy9qYXZhL29yZy93ZWJydGMvRWdsQmFzZTEwSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsMzMyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhp
Y3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0
IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudmll
dy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGph
dmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMDsKLWltcG9ydCBqYXZheC5taWNyb2Vk
aXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5r
aHJvbm9zLmVnbC5FR0xDb250ZXh0OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9z
LmVnbC5FR0xEaXNwbGF5OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5F
R0xTdXJmYWNlOwotCi0vKioKLSAqIEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBtZXRob2Rz
IGZvciBoYW5kbGluZyBhbiBlZ2wgMS4wIEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXksCi0gKiBh
bmQgYW4gRUdMU3VyZmFjZS4KLSAqLwotY2xhc3MgRWdsQmFzZTEwSW1wbCBpbXBsZW1lbnRzIEVn
bEJhc2UxMCB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRWdsQmFzZTEw
SW1wbCI7Ci0gIC8vIFRoaXMgY29uc3RhbnQgaXMgdGFrZW4gZnJvbSBFR0wxNC5FR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTi4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTF9DT05URVhU
X0NMSUVOVF9WRVJTSU9OID0gMHgzMDk4OwotCi0gIHByaXZhdGUgZmluYWwgRUdMMTAgZWdsOwot
ICBwcml2YXRlIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLSAgQE51bGxhYmxlIHByaXZhdGUgRUdM
Q29uZmlnIGVnbENvbmZpZzsKLSAgcHJpdmF0ZSBFR0xEaXNwbGF5IGVnbERpc3BsYXk7Ci0gIHBy
aXZhdGUgRUdMU3VyZmFjZSBlZ2xTdXJmYWNlID0gRUdMMTAuRUdMX05PX1NVUkZBQ0U7Ci0KLSAg
Ly8gRUdMIHdyYXBwZXIgZm9yIGFuIGFjdHVhbCBFR0xDb250ZXh0LgotICBwcml2YXRlIHN0YXRp
YyBjbGFzcyBDb250ZXh0IGltcGxlbWVudHMgRWdsQmFzZTEwLkNvbnRleHQgewotICAgIHByaXZh
dGUgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIEVHTENvbnRleHQgZ2V0UmF3Q29udGV4dCgpIHsKLSAgICAgIHJldHVybiBlZ2xDb250ZXh0
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBsb25nIGdldE5hdGl2ZUVnbENv
bnRleHQoKSB7Ci0gICAgICAvLyBUT0RPKG1hZ2plZCk6IEltcGxlbWVudC4gVGhlcmUgaXMgbm8g
ZWFzeSB3YXkgb2YgZ2V0dGluZyB0aGUgbmF0aXZlIGNvbnRleHQgZm9yIEVHTCAxLjAuIFdlCi0g
ICAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0byBoYXZlIGFuIEVnbFN1cmZhY2UsIHRoZW4gbWFr
ZSB0aGUgY29udGV4dCBjdXJyZW50IHVzaW5nIHRoYXQgc3VyZmFjZSwKLSAgICAgIC8vIGFuZCB0
aGVuIGNhbGwgaW50byBKTkkgYW5kIGNhbGwgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIGVnbEdldEN1
cnJlbnRDb250ZXh0LiBUaGVuIHdlIG5lZWQgdG8KLSAgICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRl
IGFuZCByZXR1cm4gdGhlIG5hdGl2ZSBjb250ZXh0LgotICAgICAgcmV0dXJuIDAgLyogRUdMX05P
X0NPTlRFWFQgKi87Ci0gICAgfQotCi0gICAgcHVibGljIENvbnRleHQoRUdMQ29udGV4dCBlZ2xD
b250ZXh0KSB7Ci0gICAgICB0aGlzLmVnbENvbnRleHQgPSBlZ2xDb250ZXh0OwotICAgIH0KLSAg
fQotCi0gIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcg
dHlwZSwgc2hhcmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4dC4KLSAgcHVibGljIEVnbEJhc2Ux
MEltcGwoRUdMQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7
Ci0gICAgdGhpcy5lZ2wgPSAoRUdMMTApIEVHTENvbnRleHQuZ2V0RUdMKCk7Ci0gICAgZWdsRGlz
cGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAgICBlZ2xDb25maWcgPSBnZXRFZ2xDb25maWcoZWds
RGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgZmluYWwgaW50IG9wZW5HbGVzVmVyc2lv
biA9IEVnbEJhc2UuZ2V0T3BlbkdsZXNWZXJzaW9uRnJvbUNvbmZpZyhjb25maWdBdHRyaWJ1dGVz
KTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcgT3BlbkdMIEVTIHZlcnNpb24gIiArIG9wZW5H
bGVzVmVyc2lvbik7Ci0gICAgZWdsQ29udGV4dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29u
dGV4dCwgZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBvcGVuR2xlc1ZlcnNpb24pOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB7
Ci0gICAgLyoqCi0gICAgICogV2UgaGF2ZSB0byB3cmFwIFN1cmZhY2UgaW4gYSBTdXJmYWNlSG9s
ZGVyIGJlY2F1c2UgZm9yIHNvbWUgcmVhc29uIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UKLSAgICAg
KiBjb3VsZG4ndCBhY3R1YWxseSB0YWtlIGEgU3VyZmFjZSBvYmplY3QgdW50aWwgQVBJIDE3LiBP
bGRlciB2ZXJzaW9ucyBmb3J0dW5hdGVseSBqdXN0IGNhbGwKLSAgICAgKiBTdXJmYWNlSG9sZGVy
LmdldFN1cmZhY2UoKSwgc28gd2UnbGwgZG8gdGhhdC4gTm8gb3RoZXIgbWV0aG9kcyBhcmUgcmVs
ZXZhbnQuCi0gICAgICovCi0gICAgY2xhc3MgRmFrZVN1cmZhY2VIb2xkZXIgaW1wbGVtZW50cyBT
dXJmYWNlSG9sZGVyIHsKLSAgICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZSBzdXJmYWNlOwotCi0g
ICAgICBGYWtlU3VyZmFjZUhvbGRlcihTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICAgICAgdGhpcy5z
dXJmYWNlID0gc3VyZmFjZTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBhZGRDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykge30KLQotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCByZW1vdmVDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykg
e30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0aW5nKCkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIEBEZXByZWNhdGVkCi0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoaW50IGkpIHt9Ci0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0Rml4ZWRTaXplKGludCBpLCBpbnQg
aTIpIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0U2l6ZUZyb21M
YXlvdXQoKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEZvcm1h
dChpbnQgaSkge30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRLZWVw
U2NyZWVuT24oYm9vbGVhbiBiKSB7fQotCi0gICAgICBATnVsbGFibGUKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIENhbnZhcyBsb2NrQ2FudmFzKCkgewotICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgIH0KLQotICAgICAgQE51bGxhYmxlCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyBDYW52YXMgbG9ja0NhbnZhcyhSZWN0IHJlY3QpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgdW5sb2NrQ2Fu
dmFzQW5kUG9zdChDYW52YXMgY2FudmFzKSB7fQotCi0gICAgICBATnVsbGFibGUKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIFJlY3QgZ2V0U3VyZmFjZUZyYW1lKCkgewotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3Vy
ZmFjZSBnZXRTdXJmYWNlKCkgewotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwobmV3IEZha2VTdXJmYWNlSG9sZGVyKHN1
cmZhY2UpKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFuZHJvaWQg
U3VyZmFjZVRleHR1cmUuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVTdXJmYWNl
KFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgY3JlYXRlU3VyZmFjZUludGVy
bmFsKHN1cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20g
ZWl0aGVyIGEgU3VyZmFjZUhvbGRlciBvciBhIFN1cmZhY2VUZXh0dXJlLgotICBwcml2YXRlIHZv
aWQgY3JlYXRlU3VyZmFjZUludGVybmFsKE9iamVjdCBuYXRpdmVXaW5kb3cpIHsKLSAgICBpZiAo
IShuYXRpdmVXaW5kb3cgaW5zdGFuY2VvZiBTdXJmYWNlSG9sZGVyKSAmJiAhKG5hdGl2ZVdpbmRv
dyBpbnN0YW5jZW9mIFN1cmZhY2VUZXh0dXJlKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiSW5wdXQgbXVzdCBiZSBlaXRoZXIgYSBTdXJmYWNlSG9sZGVyIG9yIFN1
cmZhY2VUZXh0dXJlIik7Ci0gICAgfQotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlm
IChlZ2xTdXJmYWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiQWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwotICAgIH0KLSAg
ICBpbnRbXSBzdXJmYWNlQXR0cmlicyA9IHtFR0wxMC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFj
ZSA9IGVnbC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZpZywgbmF0
aXZlV2luZG93LCBzdXJmYWNlQXR0cmlicyk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAu
RUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAg
ICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdyBzdXJmYWNlOiAweCIgKyBJbnRlZ2VyLnRv
SGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ3JlYXRl
IGR1bW15IDF4MSBwaXhlbCBidWZmZXIgc3VyZmFjZSBzbyB0aGUgY29udGV4dCBjYW4gYmUgbWFk
ZSBjdXJyZW50LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlRHVtbXlQYnVmZmVy
U3VyZmFjZSgpIHsKLSAgICBjcmVhdGVQYnVmZmVyU3VyZmFjZSgxLCAxKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVQYnVmZmVyU3VyZmFjZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFj
ZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50W10gc3Vy
ZmFjZUF0dHJpYnMgPSB7RUdMMTAuRUdMX1dJRFRILCB3aWR0aCwgRUdMMTAuRUdMX0hFSUdIVCwg
aGVpZ2h0LCBFR0wxMC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFjZSA9IGVnbC5lZ2xDcmVhdGVQ
YnVmZmVyU3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJzKTsKLSAg
ICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVyIHN1cmZh
Y2Ugd2l0aCBzaXplICIgKyB3aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsgIjogMHgi
ICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgb3JnLndlYnJ0Yy5FZ2xCYXNlLkNvbnRleHQgZ2V0RWds
QmFzZUNvbnRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBDb250ZXh0KGVnbENvbnRleHQpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGhhc1N1cmZhY2UoKSB7Ci0gICAgcmV0
dXJuIGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0U7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIGludCBzdXJmYWNlV2lkdGgoKSB7Ci0gICAgZmluYWwgaW50IHdpZHRoQXJy
YXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgZWdsLmVnbFF1ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBl
Z2xTdXJmYWNlLCBFR0wxMC5FR0xfV0lEVEgsIHdpZHRoQXJyYXkpOwotICAgIHJldHVybiB3aWR0
aEFycmF5WzBdOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZUhlaWdo
dCgpIHsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0QXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgZWds
LmVnbFF1ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxMC5FR0xfSEVJR0hU
LCBoZWlnaHRBcnJheSk7Ci0gICAgcmV0dXJuIGhlaWdodEFycmF5WzBdOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2VTdXJmYWNlKCkgewotICAgIGlmIChlZ2xTdXJm
YWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICBlZ2wuZWdsRGVzdHJveVN1cmZh
Y2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAgICBlZ2xTdXJmYWNlID0gRUdMMTAuRUdM
X05PX1NVUkZBQ0U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNOb3RSZWxl
YXNlZCgpIHsKLSAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0wxMC5FR0xfTk9fRElTUExBWSB8fCBl
Z2xDb250ZXh0ID09IEVHTDEwLkVHTF9OT19DT05URVhUCi0gICAgICAgIHx8IGVnbENvbmZpZyA9
PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyBvYmplY3Qg
aGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgcmVsZWFzZSgpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICByZWxlYXNl
U3VyZmFjZSgpOwotICAgIGRldGFjaEN1cnJlbnQoKTsKLSAgICBlZ2wuZWdsRGVzdHJveUNvbnRl
eHQoZWdsRGlzcGxheSwgZWdsQ29udGV4dCk7Ci0gICAgZWdsLmVnbFRlcm1pbmF0ZShlZ2xEaXNw
bGF5KTsKLSAgICBlZ2xDb250ZXh0ID0gRUdMMTAuRUdMX05PX0NPTlRFWFQ7Ci0gICAgZWdsRGlz
cGxheSA9IEVHTDEwLkVHTF9OT19ESVNQTEFZOwotICAgIGVnbENvbmZpZyA9IG51bGw7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgbWFrZUN1cnJlbnQoKSB7Ci0gICAgY2hlY2tJ
c05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05PX1NVUkZB
Q0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBFR0xTdXJmYWNlIC0g
Y2FuJ3QgbWFrZSBjdXJyZW50Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5s
b2NrKSB7Ci0gICAgICBpZiAoIWVnbC5lZ2xNYWtlQ3VycmVudChlZ2xEaXNwbGF5LCBlZ2xTdXJm
YWNlLCBlZ2xTdXJmYWNlLCBlZ2xDb250ZXh0KSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCBmYWlsZWQ6IDB4IiArIElu
dGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICAvLyBEZXRhY2ggdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQsIHNvIHRoYXQgaXQgY2Fu
IGJlIG1hZGUgY3VycmVudCBvbiBhbm90aGVyIHRocmVhZC4KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIGRldGFjaEN1cnJlbnQoKSB7Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2sp
IHsKLSAgICAgIGlmICghZWdsLmVnbE1ha2VDdXJyZW50KAotICAgICAgICAgICAgICBlZ2xEaXNw
bGF5LCBFR0wxMC5FR0xfTk9fU1VSRkFDRSwgRUdMMTAuRUdMX05PX1NVUkZBQ0UsIEVHTDEwLkVH
TF9OT19DT05URVhUKSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAg
ICAgICAgICAgICJlZ2xEZXRhY2hDdXJyZW50IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0
cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBzd2FwQnVmZmVycygpIHsKLSAgICBjaGVja0lzTm90UmVsZWFz
ZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBzd2Fw
IGJ1ZmZlcnMiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAg
ICAgIGVnbC5lZ2xTd2FwQnVmZmVycyhlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICB9Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dhcEJ1ZmZlcnMobG9uZyB0aW1lU3Rh
bXBOcykgewotICAgIC8vIFNldHRpbmcgcHJlc2VudGF0aW9uIHRpbWUgaXMgbm90IHN1cHBvcnRl
ZCBmb3IgRUdMIDEuMC4KLSAgICBzd2FwQnVmZmVycygpOwotICB9Ci0KLSAgLy8gUmV0dXJuIGFu
IEVHTERpc3BsYXksIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgRUdMRGlzcGxheSBnZXRFZ2xE
aXNwbGF5KCkgewotICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IGVnbC5lZ2xHZXREaXNwbGF5
KEVHTDEwLkVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDEw
LkVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAg
ICAgICAgICAiVW5hYmxlIHRvIGdldCBFR0wxMCBkaXNwbGF5OiAweCIgKyBJbnRlZ2VyLnRvSGV4
U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIGludFtdIHZlcnNpb24gPSBu
ZXcgaW50WzJdOwotICAgIGlmICghZWdsLmVnbEluaXRpYWxpemUoZWdsRGlzcGxheSwgdmVyc2lv
bikpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJVbmFi
bGUgdG8gaW5pdGlhbGl6ZSBFR0wxMDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWds
R2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZWdsRGlzcGxheTsKLSAgfQotCi0gIC8v
IFJldHVybiBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgRUdMQ29uZmln
IGdldEVnbENvbmZpZyhFR0xEaXNwbGF5IGVnbERpc3BsYXksIGludFtdIGNvbmZpZ0F0dHJpYnV0
ZXMpIHsKLSAgICBFR0xDb25maWdbXSBjb25maWdzID0gbmV3IEVHTENvbmZpZ1sxXTsKLSAgICBp
bnRbXSBudW1Db25maWdzID0gbmV3IGludFsxXTsKLSAgICBpZiAoIWVnbC5lZ2xDaG9vc2VDb25m
aWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcywgY29uZmlncywgY29uZmlncy5sZW5ndGgs
IG51bUNvbmZpZ3MpKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAg
ICAgICAiZWdsQ2hvb3NlQ29uZmlnIGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhl
Z2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpZiAobnVtQ29uZmlnc1swXSA8PSAwKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGZpbmQgYW55IG1h
dGNoaW5nIEVHTCBjb25maWciKTsKLSAgICB9Ci0gICAgZmluYWwgRUdMQ29uZmlnIGVnbENvbmZp
ZyA9IGNvbmZpZ3NbMF07Ci0gICAgaWYgKGVnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ2hvb3NlQ29uZmlnIHJldHVybmVkIG51bGwiKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbmZpZzsKLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xD
b25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgRUdMQ29udGV4dCBjcmVhdGVFZ2xDb250
ZXh0KEBOdWxsYWJsZSBFR0xDb250ZXh0IHNoYXJlZENvbnRleHQsIEVHTERpc3BsYXkgZWdsRGlz
cGxheSwKLSAgICAgIEVHTENvbmZpZyBlZ2xDb25maWcsIGludCBvcGVuR2xlc1ZlcnNpb24pIHsK
LSAgICBpZiAoc2hhcmVkQ29udGV4dCAhPSBudWxsICYmIHNoYXJlZENvbnRleHQgPT0gRUdMMTAu
RUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZh
bGlkIHNoYXJlZENvbnRleHQiKTsKLSAgICB9Ci0gICAgaW50W10gY29udGV4dEF0dHJpYnV0ZXMg
PSB7RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIG9wZW5HbGVzVmVyc2lvbiwgRUdMMTAuRUdM
X05PTkV9OwotICAgIEVHTENvbnRleHQgcm9vdENvbnRleHQgPSBzaGFyZWRDb250ZXh0ID09IG51
bGwgPyBFR0wxMC5FR0xfTk9fQ09OVEVYVCA6IHNoYXJlZENvbnRleHQ7Ci0gICAgZmluYWwgRUdM
Q29udGV4dCBlZ2xDb250ZXh0OwotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0g
ICAgICBlZ2xDb250ZXh0ID0gZWdsLmVnbENyZWF0ZUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29u
ZmlnLCByb290Q29udGV4dCwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIH0KLSAgICBpZiAoZWds
Q29udGV4dCA9PSBFR0wxMC5FR0xfTk9fQ09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oCi0gICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgRUdMIGNvbnRleHQ6IDB4
IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGVnbENvbnRleHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMv
RWdsQmFzZTE0SW1wbC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTRJbXBsLmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNTE5ZmZkZTVmYzAxN2Q5YzM5NTJiMTE5
MzdlYzZhYTIyYTI4MmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApA
QCAtMSwyODQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lk
LmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTDE0Owot
aW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTENvbmZpZzsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5F
R0xDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTERpc3BsYXk7Ci1pbXBvcnQgYW5k
cm9pZC5vcGVuZ2wuRUdMRXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTFN1cmZhY2U7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlv
bi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBvcmcud2Vi
cnRjLkVnbEJhc2U7Ci0KLS8qKgotICogSG9sZHMgRUdMIHN0YXRlIGFuZCB1dGlsaXR5IG1ldGhv
ZHMgZm9yIGhhbmRsaW5nIGFuIEVHTDE0IEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXksCi0gKiBh
bmQgYW4gRUdMU3VyZmFjZS4KLSAqLwotQFN1cHByZXNzV2FybmluZ3MoIlJlZmVyZW5jZUVxdWFs
aXR5IikgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRvIEVHTDE0IGNvbnN0YW50cy4KLUBUYXJnZXRB
cGkoMTgpCi1jbGFzcyBFZ2xCYXNlMTRJbXBsIGltcGxlbWVudHMgRWdsQmFzZTE0IHsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJFZ2xCYXNlMTRJbXBsIjsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IEVHTEV4dF9TREtfVkVSU0lPTiA9IEJ1aWxkLlZFUlNJT05fQ09E
RVMuSkVMTFlfQkVBTl9NUjI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1NE
S19WRVJTSU9OID0gQnVpbGQuVkVSU0lPTi5TREtfSU5UOwotICBwcml2YXRlIEVHTENvbnRleHQg
ZWdsQ29udGV4dDsKLSAgQE51bGxhYmxlIHByaXZhdGUgRUdMQ29uZmlnIGVnbENvbmZpZzsKLSAg
cHJpdmF0ZSBFR0xEaXNwbGF5IGVnbERpc3BsYXk7Ci0gIHByaXZhdGUgRUdMU3VyZmFjZSBlZ2xT
dXJmYWNlID0gRUdMMTQuRUdMX05PX1NVUkZBQ0U7Ci0KLSAgLy8gRUdMIDEuNCBpcyBzdXBwb3J0
ZWQgZnJvbSBBUEkgMTcuIEJ1dCBFR0xFeHQgdGhhdCBpcyB1c2VkIGZvciBzZXR0aW5nIHByZXNl
bnRhdGlvbgotICAvLyB0aW1lIHN0YW1wIG9uIGEgc3VyZmFjZSBpcyBzdXBwb3J0ZWQgZnJvbSAx
OCBzbyB3ZSByZXF1aXJlIDE4LgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFR0wxNFN1cHBv
cnRlZCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLAotICAgICAgICAiU0RLIHZlcnNpb246ICIgKyBD
VVJSRU5UX1NES19WRVJTSU9OCi0gICAgICAgICAgICArICIuIGlzRUdMMTRTdXBwb3J0ZWQ6ICIg
KyAoQ1VSUkVOVF9TREtfVkVSU0lPTiA+PSBFR0xFeHRfU0RLX1ZFUlNJT04pKTsKLSAgICByZXR1
cm4gKENVUlJFTlRfU0RLX1ZFUlNJT04gPj0gRUdMRXh0X1NES19WRVJTSU9OKTsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udGV4dCBpbXBsZW1lbnRzIEVnbEJhc2UxNC5Db250ZXh0
IHsKLSAgICBwcml2YXRlIGZpbmFsIEVHTENvbnRleHQgZWdsMTRDb250ZXh0OwotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIEVHTENvbnRleHQgZ2V0UmF3Q29udGV4dCgpIHsKLSAgICAgIHJl
dHVybiBlZ2wxNENvbnRleHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgQFN1cHByZXNz
V2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBAVGFyZ2V0QXBpKEJ1aWxkLlZFUlNJT05fQ09E
RVMuTE9MTElQT1ApCi0gICAgcHVibGljIGxvbmcgZ2V0TmF0aXZlRWdsQ29udGV4dCgpIHsKLSAg
ICAgIHJldHVybiBDVVJSRU5UX1NES19WRVJTSU9OID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9M
TElQT1AgPyBlZ2wxNENvbnRleHQuZ2V0TmF0aXZlSGFuZGxlKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlZ2wxNENv
bnRleHQuZ2V0SGFuZGxlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnRleHQoYW5kcm9pZC5v
cGVuZ2wuRUdMQ29udGV4dCBlZ2xDb250ZXh0KSB7Ci0gICAgICB0aGlzLmVnbDE0Q29udGV4dCA9
IGVnbENvbnRleHQ7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgbmV3IGNvbnRleHQgd2l0
aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyB0eXBlLCBzaGFyaW5nIGRhdGEgd2l0aCBzaGFyZWRDb250
ZXh0LgotICAvLyB8c2hhcmVkQ29udGV4dHwgbWF5IGJlIG51bGwuCi0gIHB1YmxpYyBFZ2xCYXNl
MTRJbXBsKEVHTENvbnRleHQgc2hhcmVkQ29udGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRlcykg
ewotICAgIGVnbERpc3BsYXkgPSBnZXRFZ2xEaXNwbGF5KCk7Ci0gICAgZWdsQ29uZmlnID0gZ2V0
RWdsQ29uZmlnKGVnbERpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICAgIGZpbmFsIGludCBv
cGVuR2xlc1ZlcnNpb24gPSBFZ2xCYXNlLmdldE9wZW5HbGVzVmVyc2lvbkZyb21Db25maWcoY29u
ZmlnQXR0cmlidXRlcyk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIE9wZW5HTCBFUyB2ZXJz
aW9uICIgKyBvcGVuR2xlc1ZlcnNpb24pOwotICAgIGVnbENvbnRleHQgPSBjcmVhdGVFZ2xDb250
ZXh0KHNoYXJlZENvbnRleHQsIGVnbERpc3BsYXksIGVnbENvbmZpZywgb3BlbkdsZXNWZXJzaW9u
KTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFuZHJvaWQgU3VyZmFj
ZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJm
YWNlKSB7Ci0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKHN1cmZhY2UpOwotICB9Ci0KLSAgLy8g
Q3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNlVGV4dHVyZS4KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZVRleHR1cmUgc3VyZmFj
ZVRleHR1cmUpIHsKLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoc3VyZmFjZVRleHR1cmUpOwot
ICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSBlaXRoZXIgU3VyZmFjZSBvciBTdXJm
YWNlVGV4dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChPYmplY3Qg
c3VyZmFjZSkgewotICAgIGlmICghKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlKSAmJiAhKHN1
cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVyIGEgU3VyZmFjZSBvciBTdXJm
YWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsKLSAgICB9Ci0gICAg
aW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTQuRUdMX05PTkV9OwotICAgIGVnbFN1cmZhY2Ug
PSBFR0wxNC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZpZywgc3Vy
ZmFjZSwgc3VyZmFjZUF0dHJpYnMsIDApOwotICAgIGlmIChlZ2xTdXJmYWNlID09IEVHTDE0LkVH
TF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAg
ICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3VyZmFjZTogMHgiICsgSW50ZWdlci50b0hl
eFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKSB7Ci0gICAgY3JlYXRl
UGJ1ZmZlclN1cmZhY2UoMSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
Y3JlYXRlUGJ1ZmZlclN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgY2hlY2tJ
c05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTQuRUdMX05PX1NVUkZB
Q0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbHJlYWR5IGhhcyBhbiBF
R0xTdXJmYWNlIik7Ci0gICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRyaWJzID0ge0VHTDE0LkVH
TF9XSURUSCwgd2lkdGgsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodCwgRUdMMTQuRUdMX05PTkV9
OwotICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZShlZ2xEaXNw
bGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJzLCAwKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9
PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugd2l0aCBzaXplICIgKyB3
aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsgIjogMHgiICsgSW50ZWdlci50b0hleFN0
cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJldHVybiBuZXcgQ29u
dGV4dChlZ2xDb250ZXh0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBo
YXNTdXJmYWNlKCkgewotICAgIHJldHVybiBlZ2xTdXJmYWNlICE9IEVHTDE0LkVHTF9OT19TVVJG
QUNFOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZVdpZHRoKCkgewot
ICAgIGZpbmFsIGludCB3aWR0aEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEVHTDE0LmVnbFF1
ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxNC5FR0xfV0lEVEgsIHdpZHRo
QXJyYXksIDApOwotICAgIHJldHVybiB3aWR0aEFycmF5WzBdOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBpbnQgc3VyZmFjZUhlaWdodCgpIHsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0QXJy
YXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgRUdMMTQuZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXks
IGVnbFN1cmZhY2UsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodEFycmF5LCAwKTsKLSAgICByZXR1
cm4gaGVpZ2h0QXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVs
ZWFzZVN1cmZhY2UoKSB7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTQuRUdMX05PX1NVUkZB
Q0UpIHsKLSAgICAgIEVHTDE0LmVnbERlc3Ryb3lTdXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZh
Y2UpOwotICAgICAgZWdsU3VyZmFjZSA9IEVHTDE0LkVHTF9OT19TVVJGQUNFOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBjaGVja0lzTm90UmVsZWFzZWQoKSB7Ci0gICAgaWYgKGVnbERp
c3BsYXkgPT0gRUdMMTQuRUdMX05PX0RJU1BMQVkgfHwgZWdsQ29udGV4dCA9PSBFR0wxNC5FR0xf
Tk9fQ09OVEVYVAotICAgICAgICB8fCBlZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgb2JqZWN0IGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0g
ICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAg
Y2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgcmVsZWFzZVN1cmZhY2UoKTsKLSAgICBkZXRhY2hD
dXJyZW50KCk7Ci0gICAgRUdMMTQuZWdsRGVzdHJveUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29u
dGV4dCk7Ci0gICAgRUdMMTQuZWdsUmVsZWFzZVRocmVhZCgpOwotICAgIEVHTDE0LmVnbFRlcm1p
bmF0ZShlZ2xEaXNwbGF5KTsKLSAgICBlZ2xDb250ZXh0ID0gRUdMMTQuRUdMX05PX0NPTlRFWFQ7
Ci0gICAgZWdsRGlzcGxheSA9IEVHTDE0LkVHTF9OT19ESVNQTEFZOwotICAgIGVnbENvbmZpZyA9
IG51bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgbWFrZUN1cnJlbnQoKSB7
Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTQu
RUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBF
R0xTdXJmYWNlIC0gY2FuJ3QgbWFrZSBjdXJyZW50Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXpl
ZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIUVHTDE0LmVnbE1ha2VDdXJyZW50KGVnbERp
c3BsYXksIGVnbFN1cmZhY2UsIGVnbFN1cmZhY2UsIGVnbENvbnRleHQpKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbE1ha2VDdXJyZW50IGZh
aWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gRGV0YWNoIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0
LCBzbyB0aGF0IGl0IGNhbiBiZSBtYWRlIGN1cnJlbnQgb24gYW5vdGhlciB0aHJlYWQuCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBkZXRhY2hDdXJyZW50KCkgewotICAgIHN5bmNocm9uaXpl
ZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIUVHTDE0LmVnbE1ha2VDdXJyZW50KAotICAg
ICAgICAgICAgICBlZ2xEaXNwbGF5LCBFR0wxNC5FR0xfTk9fU1VSRkFDRSwgRUdMMTQuRUdMX05P
X1NVUkZBQ0UsIEVHTDE0LkVHTF9OT19DT05URVhUKSkgewotICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJlZ2xEZXRhY2hDdXJyZW50IGZhaWxlZDogMHgi
ICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3YXBCdWZmZXJzKCkgewot
ICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09IEVHTDE0LkVH
TF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gRUdM
U3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQg
KEVnbEJhc2UubG9jaykgewotICAgICAgRUdMMTQuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwg
ZWdsU3VyZmFjZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3
YXBCdWZmZXJzKGxvbmcgdGltZVN0YW1wTnMpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsK
LSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBzd2FwIGJ1ZmZl
cnMiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIC8v
IFNlZQotICAgICAgLy8gaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0v
ZnJhbWV3b3Jrcy9uYXRpdmUvKy90b29sc19yMjIuMi9vcGVuZ2wvc3BlY3MvRUdMX0FORFJPSURf
cHJlc2VudGF0aW9uX3RpbWUudHh0Ci0gICAgICBFR0xFeHQuZWdsUHJlc2VudGF0aW9uVGltZUFO
RFJPSUQoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwgdGltZVN0YW1wTnMpOwotICAgICAgRUdMMTQu
ZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gUmV0dXJuIGFuIEVHTERpc3BsYXksIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGlj
IEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxheSgpIHsKLSAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkg
PSBFR0wxNC5lZ2xHZXREaXNwbGF5KEVHTDE0LkVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAgIGlm
IChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGdldCBFR0wxNCBkaXNwbGF5
OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9
Ci0gICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07Ci0gICAgaWYgKCFFR0wxNC5lZ2xJbml0
aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24sIDAsIHZlcnNpb24sIDEpKSB7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGluaXRpYWxpemUg
RUdMMTQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJyb3IoKSkpOwot
ICAgIH0KLSAgICByZXR1cm4gZWdsRGlzcGxheTsKLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xD
b25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGljIEVHTENvbmZpZyBnZXRFZ2xD
b25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0g
ICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0gICAgaW50W10gbnVt
Q29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFFR0wxNC5lZ2xDaG9vc2VDb25maWcoCi0g
ICAgICAgICAgICBlZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAwLCBjb25maWdzLCAwLCBj
b25maWdzLmxlbmd0aCwgbnVtQ29uZmlncywgMCkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKAotICAgICAgICAgICJlZ2xDaG9vc2VDb25maWcgZmFpbGVkOiAweCIgKyBJbnRl
Z2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgaWYgKG51
bUNvbmZpZ3NbMF0gPD0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVu
YWJsZSB0byBmaW5kIGFueSBtYXRjaGluZyBFR0wgY29uZmlnIik7Ci0gICAgfQotICAgIGZpbmFs
IEVHTENvbmZpZyBlZ2xDb25maWcgPSBjb25maWdzWzBdOwotICAgIGlmIChlZ2xDb25maWcgPT0g
bnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENob29zZUNvbmZp
ZyByZXR1cm5lZCBudWxsIik7Ci0gICAgfQotICAgIHJldHVybiBlZ2xDb25maWc7Ci0gIH0KLQot
ICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIHN0YXRp
YyBFR0xDb250ZXh0IGNyZWF0ZUVnbENvbnRleHQoQE51bGxhYmxlIEVHTENvbnRleHQgc2hhcmVk
Q29udGV4dCwKLSAgICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSwgRUdMQ29uZmlnIGVnbENvbmZp
ZywgaW50IG9wZW5HbGVzVmVyc2lvbikgewotICAgIGlmIChzaGFyZWRDb250ZXh0ICE9IG51bGwg
JiYgc2hhcmVkQ29udGV4dCA9PSBFR0wxNC5FR0xfTk9fQ09OVEVYVCkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgc2hhcmVkQ29udGV4dCIpOwotICAgIH0KLSAg
ICBpbnRbXSBjb250ZXh0QXR0cmlidXRlcyA9IHtFR0wxNC5FR0xfQ09OVEVYVF9DTElFTlRfVkVS
U0lPTiwgb3BlbkdsZXNWZXJzaW9uLCBFR0wxNC5FR0xfTk9ORX07Ci0gICAgRUdMQ29udGV4dCBy
b290Q29udGV4dCA9IHNoYXJlZENvbnRleHQgPT0gbnVsbCA/IEVHTDE0LkVHTF9OT19DT05URVhU
IDogc2hhcmVkQ29udGV4dDsKLSAgICBmaW5hbCBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gICAg
c3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIGVnbENvbnRleHQgPSBFR0wxNC5l
Z2xDcmVhdGVDb250ZXh0KGVnbERpc3BsYXksIGVnbENvbmZpZywgcm9vdENvbnRleHQsIGNvbnRl
eHRBdHRyaWJ1dGVzLCAwKTsKLSAgICB9Ci0gICAgaWYgKGVnbENvbnRleHQgPT0gRUdMMTQuRUdM
X05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAg
ICAgICJGYWlsZWQgdG8gY3JlYXRlIEVHTCBjb250ZXh0OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3Ry
aW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbnRleHQ7
Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvRW1wdHkuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZh
L29yZy93ZWJydGMvRW1wdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5
NDgxZTE4MmQ1N2QyNzdjZjBiNTdhNDgxYTZiZmJmMDY4NDM3NC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0VtcHR5LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogRW1wdHkgY2xhc3MgZm9yIHVzZSBpbiBsaWJqaW5n
bGVfcGVlcmNvbm5lY3Rpb25famF2YSBiZWNhdXNlIGFsbCB0YXJnZXRzIHJlcXVpcmUgYXQgbGVh
c3Qgb25lCi0gKiBKYXZhIGZpbGUuCi0gKi8KLWNsYXNzIEVtcHR5IHt9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
amF2YS9vcmcvd2VicnRjL0ZyYW1lcmF0ZUJpdHJhdGVBZGp1c3Rlci5qYXZhIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3Jn
L3dlYnJ0Yy9GcmFtZXJhdGVCaXRyYXRlQWRqdXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjlkMWFmNjZjMDJkYzMzMmJjZWI4MTVkMGFlMDZiNGRlNDEzODRkMy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2Vi
cnRjL0ZyYW1lcmF0ZUJpdHJhdGVBZGp1c3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioK
LSAqIEJpdHJhdGVBZGp1c3RlciB0aGF0IGFkanVzdHMgdGhlIGJpdHJhdGUgdG8gY29tcGVuc2F0
ZSBmb3IgY2hhbmdlcyBpbiB0aGUgZnJhbWVyYXRlLiAgVXNlZCB3aXRoCi0gKiBoYXJkd2FyZSBj
b2RlY3MgdGhhdCBhc3N1bWUgdGhlIGZyYW1lcmF0ZSBuZXZlciBjaGFuZ2VzLgotICovCi1jbGFz
cyBGcmFtZXJhdGVCaXRyYXRlQWRqdXN0ZXIgZXh0ZW5kcyBCYXNlQml0cmF0ZUFkanVzdGVyIHsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxfRlBTID0gMzA7Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHNldFRhcmdldHMoaW50IHRhcmdldEJpdHJhdGVCcHMsIGludCB0
YXJnZXRGcHMpIHsKLSAgICBpZiAodGhpcy50YXJnZXRGcHMgPT0gMCkgewotICAgICAgLy8gRnJh
bWVyYXRlLWJhc2VkIGJpdHJhdGUgYWRqdXN0bWVudCBhbHdheXMgaW5pdGlhbGl6ZXMgdG8gdGhl
IHNhbWUgZnJhbWVyYXRlLgotICAgICAgdGFyZ2V0RnBzID0gSU5JVElBTF9GUFM7Ci0gICAgfQot
ICAgIHN1cGVyLnNldFRhcmdldHModGFyZ2V0Qml0cmF0ZUJwcywgdGFyZ2V0RnBzKTsKLQotICAg
IHRoaXMudGFyZ2V0Qml0cmF0ZUJwcyA9IHRoaXMudGFyZ2V0Qml0cmF0ZUJwcyAqIElOSVRJQUxf
RlBTIC8gdGhpcy50YXJnZXRGcHM7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBn
ZXRDb2RlY0NvbmZpZ0ZyYW1lcmF0ZSgpIHsKLSAgICByZXR1cm4gSU5JVElBTF9GUFM7Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvR2xHZW5lcmljRHJhd2VyLmphdmEgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
amF2YS9vcmcvd2VicnRjL0dsR2VuZXJpY0RyYXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5MmI0MjQ1NDk5NWYwYTQ0MzgzZjJlMDMwM2FlYTBmZDM1ZTFjZTQ2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJy
dGMvR2xHZW5lcmljRHJhd2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9y
dCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLm5pby5G
bG9hdEJ1ZmZlcjsKLWltcG9ydCBvcmcud2VicnRjLkdsU2hhZGVyOwotaW1wb3J0IG9yZy53ZWJy
dGMuR2xVdGlsOwotaW1wb3J0IG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb247Ci0KLS8qKgotICog
SGVscGVyIGNsYXNzIHRvIGltcGxlbWVudCBhbiBpbnN0YW5jZSBvZiBSZW5kZXJlckNvbW1vbi5H
bERyYXdlciB0aGF0IGNhbiBhY2NlcHQgbXVsdGlwbGUgaW5wdXQKLSAqIHNvdXJjZXMgKE9FUywg
UkdCLCBvciBZVVYpIHVzaW5nIGEgZ2VuZXJpYyBmcmFnbWVudCBzaGFkZXIgYXMgaW5wdXQuIFRo
ZSBnZW5lcmljIGZyYWdtZW50IHNoYWRlcgotICogc2hvdWxkIHNhbXBsZSBwaXhlbCB2YWx1ZXMg
ZnJvbSB0aGUgZnVuY3Rpb24gInNhbXBsZSIgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRoaXMg
Y2xhc3MgYW5kCi0gKiBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBmb3IgdGhlIGlucHV0IHNvdXJj
ZSB0eXBlIChPRVMsIFJHQiwgb3IgWVVWKS4gVGhlIHRleHR1cmUgY29vcmRpbmF0ZQotICogdmFy
aWFibGUgbmFtZSB3aWxsIGJlICJ0YyIgYW5kIHRoZSB0ZXh0dXJlIG1hdHJpeCBpbiB0aGUgdmVy
dGV4IHNoYWRlciB3aWxsIGJlICJ0ZXhfbWF0Ii4gVGhlCi0gKiBzaW1wbGVzdCBwb3NzaWJsZSBn
ZW5lcmljIHNoYWRlciB0aGF0IGp1c3QgZHJhd3MgcGl4ZWwgZnJvbSB0aGUgZnJhbWUgdW5tb2Rp
ZmllZCBsb29rcyBsaWtlOgotICogdm9pZCBtYWluKCkgewotICogICBnbF9GcmFnQ29sb3IgPSBz
YW1wbGUodGMpOwotICogfQotICogVGhpcyBjbGFzcyBjb3ZlcnMgdGhlIGNhc2VzIGZvciBtb3N0
IHNpbXBsZSBzaGFkZXJzIGFuZCBnZW5lcmF0ZXMgdGhlIG5lY2Vzc2FyeSBib2lsZXIgcGxhdGUu
Ci0gKiBBZHZhbmNlZCBzaGFkZXJzIGNhbiBhbHdheXMgaW1wbGVtZW50IFJlbmRlcmVyQ29tbW9u
LkdsRHJhd2VyIGRpcmVjdGx5LgotICovCi1jbGFzcyBHbEdlbmVyaWNEcmF3ZXIgaW1wbGVtZW50
cyBSZW5kZXJlckNvbW1vbi5HbERyYXdlciB7Ci0gIC8qKgotICAgKiBUaGUgZGlmZmVyZW50IHNo
YWRlciB0eXBlcyByZXByZXNlbnRpbmcgZGlmZmVyZW50IGlucHV0IHNvdXJjZXMuIFlVViBoZXJl
IHJlcHJlc2VudHMgdGhyZWUKLSAgICogc2VwYXJhdGUgWSwgVSwgViB0ZXh0dXJlcy4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgZW51bSBTaGFkZXJUeXBlIHsgT0VTLCBSR0IsIFlVViB9Ci0KLSAg
LyoqCi0gICAqIFRoZSBzaGFkZXIgY2FsbGJhY2tzIGlzIHVzZWQgdG8gY3VzdG9taXplIGJlaGF2
aW9yIGZvciBhIEdsRHJhd2VyLiBJdCBwcm92aWRlcyBhIGhvb2sgdG8gc2V0Ci0gICAqIHVuaWZv
cm0gdmFyaWFibGVzIGluIHRoZSBzaGFkZXIgYmVmb3JlIGEgZnJhbWUgaXMgZHJhd24uCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBTaGFkZXJDYWxsYmFja3MgewotICAgIC8qKgot
ICAgICAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gYSBuZXcgc2hhZGVyIGhhcyBiZWVu
IGNvbXBpbGVkIGFuZCBjcmVhdGVkLiBJdCB3aWxsIGJlIGNhbGxlZAotICAgICAqIGZvciB0aGUg
Zmlyc3QgZnJhbWUgYXMgd2VsbCBhcyB3aGVuIHRoZSBzaGFkZXIgdHlwZSBpcyBjaGFuZ2VkLiBU
aGlzIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvCi0gICAgICogZG8gY3VzdG9tIGluaXRpYWxpemF0
aW9uIG9mIHRoZSBzaGFkZXIgdGhhdCBvbmx5IG5lZWRzIHRvIGhhcHBlbiBvbmNlLgotICAgICAq
LwotICAgIHZvaWQgb25OZXdTaGFkZXIoR2xTaGFkZXIgc2hhZGVyKTsKLQotICAgIC8qKgotICAg
ICAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSByZW5kZXJpbmcgYSBmcmFtZS4gSXQg
Y2FuIGJlIHVzZWQgdG8gZG8gY3VzdG9tIHByZXBhcmF0aW9uIG9mCi0gICAgICogdGhlIHNoYWRl
ciB0aGF0IG5lZWRzIHRvIGhhcHBlbiBldmVyeSBmcmFtZS4KLSAgICAgKi8KLSAgICB2b2lkIG9u
UHJlcGFyZVNoYWRlcihHbFNoYWRlciBzaGFkZXIsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJh
bWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgICBpbnQgdmlld3BvcnRXaWR0aCwgaW50
IHZpZXdwb3J0SGVpZ2h0KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJ
TlBVVF9WRVJURVhfQ09PUkRJTkFURV9OQU1FID0gImluX3BvcyI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBJTlBVVF9URVhUVVJFX0NPT1JESU5BVEVfTkFNRSA9ICJpbl90YyI7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUVVJFX01BVFJJWF9OQU1FID0gInRleF9t
YXQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9WRVJURVhfU0hBREVS
X1NUUklORyA9ICJ2YXJ5aW5nIHZlYzIgdGM7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBp
bl9wb3M7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl90YztcbiIKLSAgICAgICsgInVu
aWZvcm0gbWF0NCB0ZXhfbWF0O1xuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAg
KyAiICBnbF9Qb3NpdGlvbiA9IGluX3BvcztcbiIKLSAgICAgICsgIiAgdGMgPSAodGV4X21hdCAq
IGluX3RjKS54eTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAgLy8gVmVydGV4IGNvb3JkaW5hdGVz
IGluIE5vcm1hbGl6ZWQgRGV2aWNlIENvb3JkaW5hdGVzLCBpLmUuICgtMSwgLTEpIGlzIGJvdHRv
bS1sZWZ0IGFuZCAoMSwgMSkKLSAgLy8gaXMgdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBGbG9hdEJ1ZmZlciBGVUxMX1JFQ1RBTkdMRV9CVUZGRVIgPSBHbFV0aWwuY3JlYXRlRmxv
YXRCdWZmZXIobmV3IGZsb2F0W10gewotICAgICAgLTEuMGYsIC0xLjBmLCAvLyBCb3R0b20gbGVm
dC4KLSAgICAgIDEuMGYsIC0xLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0gICAgICAtMS4wZiwgMS4w
ZiwgLy8gVG9wIGxlZnQuCi0gICAgICAxLjBmLCAxLjBmLCAvLyBUb3AgcmlnaHQuCi0gIH0pOwot
Ci0gIC8vIFRleHR1cmUgY29vcmRpbmF0ZXMgLSAoMCwgMCkgaXMgYm90dG9tLWxlZnQgYW5kICgx
LCAxKSBpcyB0b3AtcmlnaHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIEZV
TExfUkVDVEFOR0xFX1RFWFRVUkVfQlVGRkVSID0KLSAgICAgIEdsVXRpbC5jcmVhdGVGbG9hdEJ1
ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAgICAgMC4wZiwgMC4wZiwgLy8gQm90dG9tIGxlZnQu
Ci0gICAgICAgICAgMS4wZiwgMC4wZiwgLy8gQm90dG9tIHJpZ2h0LgotICAgICAgICAgIDAuMGYs
IDEuMGYsIC8vIFRvcCBsZWZ0LgotICAgICAgICAgIDEuMGYsIDEuMGYsIC8vIFRvcCByaWdodC4K
LSAgICAgIH0pOwotCi0gIHN0YXRpYyBTdHJpbmcgY3JlYXRlRnJhZ21lbnRTaGFkZXJTdHJpbmco
U3RyaW5nIGdlbmVyaWNGcmFnbWVudFNvdXJjZSwgU2hhZGVyVHlwZSBzaGFkZXJUeXBlKSB7Ci0g
ICAgZmluYWwgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIo
KTsKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBTaGFkZXJUeXBlLk9FUykgewotICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiNleHRlbnNpb24gR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA6IHJl
cXVpcmVcbiIpOwotICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgicHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7XG4iKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidmFyeWluZyB2ZWMy
IHRjO1xuIik7Ci0KLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBTaGFkZXJUeXBlLllVVikgewotICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInVuaWZvcm0gc2FtcGxlcjJEIHlfdGV4O1xuIik7Ci0g
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXg7XG4iKTsK
LSAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ1bmlmb3JtIHNhbXBsZXIyRCB2X3RleDtcbiIp
OwotCi0gICAgICAvLyBBZGQgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIHNhbXBsaW5nIHRleHR1cmUu
Ci0gICAgICAvLyB5dXZfdG9fcmdiX21hdCBpcyBpbnZlcnNlIG9mIHRoZSBtYXRyaXggZGVmaW5l
ZCBpbiBZdXZDb252ZXJ0ZXIuCi0gICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidmVjNCBzYW1w
bGUodmVjMiBwKSB7XG4iKTsKLSAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIGZsb2F0IHkg
PSB0ZXh0dXJlMkQoeV90ZXgsIHApLnIgKiAxLjE2NDM4O1xuIik7Ci0gICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiICBmbG9hdCB1ID0gdGV4dHVyZTJEKHVfdGV4LCBwKS5yO1xuIik7Ci0gICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICBmbG9hdCB2ID0gdGV4dHVyZTJEKHZfdGV4LCBwKS5y
O1xuIik7Ci0gICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICByZXR1cm4gdmVjNCh5ICsgMS41
OTYwMyAqIHYgLSAwLjg3NDIwMixcbiIpOwotICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICB5IC0gMC4zOTE3NjIgKiB1IC0gMC44MTI5NjggKiB2ICsgMC41MzE2NjgsXG4iKTsKLSAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgeSArIDIuMDE3MjMgKiB1IC0gMS4wODU2MywgMSk7
XG4iKTsKLSAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGdlbmVyaWNGcmFnbWVudFNvdXJjZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGZpbmFsIFN0cmluZyBzYW1wbGVyTmFtZSA9IHNoYWRlclR5cGUgPT0gU2hhZGVyVHlwZS5PRVMg
PyAic2FtcGxlckV4dGVybmFsT0VTIiA6ICJzYW1wbGVyMkQiOwotICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoInVuaWZvcm0gIikuYXBwZW5kKHNhbXBsZXJOYW1lKS5hcHBlbmQoIiB0ZXg7XG4i
KTsKLQotICAgICAgLy8gVXBkYXRlIHRoZSBzYW1wbGluZyBmdW5jdGlvbiBpbi1wbGFjZS4KLSAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGdlbmVyaWNGcmFnbWVudFNvdXJjZS5yZXBsYWNlKCJz
YW1wbGUoIiwgInRleHR1cmUyRCh0ZXgsICIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2VuZXJp
Y0ZyYWdtZW50U291cmNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7Ci0g
IHByaXZhdGUgZmluYWwgU2hhZGVyQ2FsbGJhY2tzIHNoYWRlckNhbGxiYWNrczsKLSAgQE51bGxh
YmxlIHByaXZhdGUgU2hhZGVyVHlwZSBjdXJyZW50U2hhZGVyVHlwZTsKLSAgQE51bGxhYmxlIHBy
aXZhdGUgR2xTaGFkZXIgY3VycmVudFNoYWRlcjsKLSAgcHJpdmF0ZSBpbnQgaW5Qb3NMb2NhdGlv
bjsKLSAgcHJpdmF0ZSBpbnQgaW5UY0xvY2F0aW9uOwotICBwcml2YXRlIGludCB0ZXhNYXRyaXhM
b2NhdGlvbjsKLQotICBwdWJsaWMgR2xHZW5lcmljRHJhd2VyKFN0cmluZyBnZW5lcmljRnJhZ21l
bnRTb3VyY2UsIFNoYWRlckNhbGxiYWNrcyBzaGFkZXJDYWxsYmFja3MpIHsKLSAgICB0aGlzKERF
RkFVTFRfVkVSVEVYX1NIQURFUl9TVFJJTkcsIGdlbmVyaWNGcmFnbWVudFNvdXJjZSwgc2hhZGVy
Q2FsbGJhY2tzKTsKLSAgfQotCi0gIHB1YmxpYyBHbEdlbmVyaWNEcmF3ZXIoCi0gICAgICBTdHJp
bmcgdmVydGV4U2hhZGVyLCBTdHJpbmcgZ2VuZXJpY0ZyYWdtZW50U291cmNlLCBTaGFkZXJDYWxs
YmFja3Mgc2hhZGVyQ2FsbGJhY2tzKSB7Ci0gICAgdGhpcy52ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhT
aGFkZXI7Ci0gICAgdGhpcy5nZW5lcmljRnJhZ21lbnRTb3VyY2UgPSBnZW5lcmljRnJhZ21lbnRT
b3VyY2U7Ci0gICAgdGhpcy5zaGFkZXJDYWxsYmFja3MgPSBzaGFkZXJDYWxsYmFja3M7Ci0gIH0K
LQotICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nLgotICBHbFNoYWRlciBjcmVhdGVTaGFkZXIoU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlKSB7Ci0gICAgcmV0dXJuIG5ldyBHbFNoYWRlcigKLSAgICAgICAg
dmVydGV4U2hhZGVyLCBjcmVhdGVGcmFnbWVudFNoYWRlclN0cmluZyhnZW5lcmljRnJhZ21lbnRT
b3VyY2UsIHNoYWRlclR5cGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiBEcmF3IGFuIE9FUyB0ZXh0
dXJlIGZyYW1lIHdpdGggc3BlY2lmaWVkIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBS
ZXF1aXJlZCByZXNvdXJjZXMgYXJlCi0gICAqIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3QgY2FsbCB0
byB0aGlzIGZ1bmN0aW9uLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRyYXdP
ZXMoaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBp
bnQgZnJhbWVIZWlnaHQsCi0gICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQg
dmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNoYWRlcigK
LSAgICAgICAgU2hhZGVyVHlwZS5PRVMsIHRleE1hdHJpeCwgZnJhbWVXaWR0aCwgZnJhbWVIZWln
aHQsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKLSAgICAvLyBCaW5kIHRoZSB0ZXh0
dXJlLgotICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAg
ICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMs
IG9lc1RleHR1cmVJZCk7Ci0gICAgLy8gRHJhdyB0aGUgdGV4dHVyZS4KLSAgICBHTEVTMjAuZ2xW
aWV3cG9ydCh2aWV3cG9ydFgsIHZpZXdwb3J0WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWln
aHQpOwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQLCAw
LCA0KTsKLSAgICAvLyBVbmJpbmQgdGhlIHRleHR1cmUgYXMgYSBwcmVjYXV0aW9uLgotICAgIEdM
RVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUywgMCk7
Ci0gIH0KLQotICAvKioKLSAgICogRHJhdyBhIFJHQihBKSB0ZXh0dXJlIGZyYW1lIHdpdGggc3Bl
Y2lmaWVkIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBSZXF1aXJlZCByZXNvdXJjZXMK
LSAgICogYXJlIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgot
ICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRyYXdSZ2IoaW50IHRleHR1cmVJZCwg
ZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAg
ICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZp
ZXdwb3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNoYWRlcigKLSAgICAgICAgU2hhZGVyVHlwZS5S
R0IsIHRleE1hdHJpeCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHZpZXdwb3J0V2lkdGgsIHZp
ZXdwb3J0SGVpZ2h0KTsKLSAgICAvLyBCaW5kIHRoZSB0ZXh0dXJlLgotICAgIEdMRVMyMC5nbEFj
dGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVy
ZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICAvLyBEcmF3IHRoZSB0ZXh0
dXJlLgotICAgIEdMRVMyMC5nbFZpZXdwb3J0KHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2aWV3cG9y
dFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAu
R0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotICAgIC8vIFVuYmluZCB0aGUgdGV4dHVyZSBhcyBh
IHByZWNhdXRpb24uCi0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVf
MkQsIDApOwotICB9Ci0KLSAgLyoqCi0gICAqIERyYXcgYSBZVVYgZnJhbWUgd2l0aCBzcGVjaWZp
ZWQgdGV4dHVyZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFJlcXVpcmVkIHJlc291cmNlcyBhcmUg
YWxsb2NhdGVkCi0gICAqIGF0IHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCi0gICAq
LwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZHJhd1l1dihpbnRbXSB5dXZUZXh0dXJlcywg
ZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAg
ICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZp
ZXdwb3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNoYWRlcigKLSAgICAgICAgU2hhZGVyVHlwZS5Z
VVYsIHRleE1hdHJpeCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHZpZXdwb3J0V2lkdGgsIHZp
ZXdwb3J0SGVpZ2h0KTsKLSAgICAvLyBCaW5kIHRoZSB0ZXh0dXJlcy4KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9U
RVhUVVJFXzJELCB5dXZUZXh0dXJlc1tpXSk7Ci0gICAgfQotICAgIC8vIERyYXcgdGhlIHRleHR1
cmVzLgotICAgIEdMRVMyMC5nbFZpZXdwb3J0KHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2aWV3cG9y
dFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAu
R0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotICAgIC8vIFVuYmluZCB0aGUgdGV4dHVyZXMgYXMg
YSBwcmVjYXV0aW9uLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICBH
TEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCArIGkpOwotICAgICAgR0xF
UzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBwcmVwYXJlU2hhZGVyKFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgZmxv
YXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLAotICAgICAgaW50IGZyYW1lSGVpZ2h0LCBp
bnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgZmluYWwgR2xTaGFk
ZXIgc2hhZGVyOwotICAgIGlmIChzaGFkZXJUeXBlLmVxdWFscyhjdXJyZW50U2hhZGVyVHlwZSkp
IHsKLSAgICAgIC8vIFNhbWUgc2hhZGVyIHR5cGUgYXMgYmVmb3JlLCByZXVzZSBleGlzaW5nIHNo
YWRlci4KLSAgICAgIHNoYWRlciA9IGN1cnJlbnRTaGFkZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IC8vIEFsbG9jYXRlIG5ldyBzaGFkZXIuCi0gICAgICBjdXJyZW50U2hhZGVyVHlwZSA9IHNoYWRl
clR5cGU7Ci0gICAgICBpZiAoY3VycmVudFNoYWRlciAhPSBudWxsKSB7Ci0gICAgICAgIGN1cnJl
bnRTaGFkZXIucmVsZWFzZSgpOwotICAgICAgfQotICAgICAgc2hhZGVyID0gY3JlYXRlU2hhZGVy
KHNoYWRlclR5cGUpOwotICAgICAgY3VycmVudFNoYWRlciA9IHNoYWRlcjsKLQotICAgICAgc2hh
ZGVyLnVzZVByb2dyYW0oKTsKLSAgICAgIC8vIFNldCBpbnB1dCB0ZXh0dXJlIHVuaXRzLgotICAg
ICAgaWYgKHNoYWRlclR5cGUgPT0gU2hhZGVyVHlwZS5ZVVYpIHsKLSAgICAgICAgR0xFUzIwLmds
VW5pZm9ybTFpKHNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInlfdGV4IiksIDApOwotICAgICAg
ICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigidV90ZXgiKSwg
MSk7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9u
KCJ2X3RleCIpLCAyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0x
aShzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ0ZXgiKSwgMCk7Ci0gICAgICB9Ci0KLSAgICAg
IEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiQ3JlYXRlIHNoYWRlciIpOwotICAgICAgc2hhZGVy
Q2FsbGJhY2tzLm9uTmV3U2hhZGVyKHNoYWRlcik7Ci0gICAgICB0ZXhNYXRyaXhMb2NhdGlvbiA9
IHNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oVEVYVFVSRV9NQVRSSVhfTkFNRSk7Ci0gICAgICBp
blBvc0xvY2F0aW9uID0gc2hhZGVyLmdldEF0dHJpYkxvY2F0aW9uKElOUFVUX1ZFUlRFWF9DT09S
RElOQVRFX05BTUUpOwotICAgICAgaW5UY0xvY2F0aW9uID0gc2hhZGVyLmdldEF0dHJpYkxvY2F0
aW9uKElOUFVUX1RFWFRVUkVfQ09PUkRJTkFURV9OQU1FKTsKLSAgICB9Ci0KLSAgICBzaGFkZXIu
dXNlUHJvZ3JhbSgpOwotCi0gICAgLy8gVXBsb2FkIHRoZSB2ZXJ0ZXggY29vcmRpbmF0ZXMuCi0g
ICAgR0xFUzIwLmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5Qb3NMb2NhdGlvbik7Ci0gICAg
R0xFUzIwLmdsVmVydGV4QXR0cmliUG9pbnRlcihpblBvc0xvY2F0aW9uLCAvKiBzaXplPSAqLyAy
LAotICAgICAgICAvKiB0eXBlPSAqLyBHTEVTMjAuR0xfRkxPQVQsIC8qIG5vcm1hbGl6ZWQ9ICov
IGZhbHNlLCAvKiBzdHJpZGU9ICovIDAsCi0gICAgICAgIEZVTExfUkVDVEFOR0xFX0JVRkZFUik7
Ci0KLSAgICAvLyBVcGxvYWQgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgR0xFUzIwLmds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5UY0xvY2F0aW9uKTsKLSAgICBHTEVTMjAuZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKGluVGNMb2NhdGlvbiwgLyogc2l6ZT0gKi8gMiwKLSAgICAgICAgLyog
dHlwZT0gKi8gR0xFUzIwLkdMX0ZMT0FULCAvKiBub3JtYWxpemVkPSAqLyBmYWxzZSwgLyogc3Ry
aWRlPSAqLyAwLAotICAgICAgICBGVUxMX1JFQ1RBTkdMRV9URVhUVVJFX0JVRkZFUik7Ci0KLSAg
ICAvLyBVcGxvYWQgdGhlIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LgotICAgIEdMRVMy
MC5nbFVuaWZvcm1NYXRyaXg0ZnYoCi0gICAgICAgIHRleE1hdHJpeExvY2F0aW9uLCAxIC8qIGNv
dW50PSAqLywgZmFsc2UgLyogdHJhbnNwb3NlPSAqLywgdGV4TWF0cml4LCAwIC8qIG9mZnNldD0g
Ki8pOwotCi0gICAgLy8gRG8gY3VzdG9tIHBlci1mcmFtZSBzaGFkZXIgcHJlcGFyYXRpb24uCi0g
ICAgc2hhZGVyQ2FsbGJhY2tzLm9uUHJlcGFyZVNoYWRlcigKLSAgICAgICAgc2hhZGVyLCB0ZXhN
YXRyaXgsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhl
aWdodCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJQcmVwYXJlIHNoYWRlciIpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgYWxsIEdMRVMgcmVzb3VyY2VzLiBUaGlzIG5lZWRz
IHRvIGJlIGRvbmUgbWFudWFsbHksIG90aGVyd2lzZSB0aGUgcmVzb3VyY2VzIGFyZSBsZWFrZWQu
Ci0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBpZiAo
Y3VycmVudFNoYWRlciAhPSBudWxsKSB7Ci0gICAgICBjdXJyZW50U2hhZGVyLnJlbGVhc2UoKTsK
LSAgICAgIGN1cnJlbnRTaGFkZXIgPSBudWxsOwotICAgICAgY3VycmVudFNoYWRlclR5cGUgPSBu
dWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9IMjY0VXRp
bHMuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvSDI2NFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFiYjc5YzY1ODI1NmJhYzUzZWM3NjY3NjVlZjNkMWMxZDllNzE1ZTEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3Jn
L3dlYnJ0Yy9IMjY0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRp
bC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLS8qKiBDb250YWluZXIgZm9yIHN0
YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZGVhbGluZyB3aXRoIEgyNjQgY29kZWNz
LiAqLwotY2xhc3MgSDI2NFV0aWxzIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSDI2
NF9GTVRQX1BST0ZJTEVfTEVWRUxfSUQgPSAicHJvZmlsZS1sZXZlbC1pZCI7Ci0gIHB1YmxpYyBz
dGF0aWMgZmluYWwgU3RyaW5nIEgyNjRfRk1UUF9MRVZFTF9BU1lNTUVUUllfQUxMT1dFRCA9ICJs
ZXZlbC1hc3ltbWV0cnktYWxsb3dlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEgy
NjRfRk1UUF9QQUNLRVRJWkFUSU9OX01PREUgPSAicGFja2V0aXphdGlvbi1tb2RlIjsKLQotICBw
dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X1BST0ZJTEVfQ09OU1RSQUlORURfQkFTRUxJ
TkUgPSAiNDJlMCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEgyNjRfUFJPRklMRV9D
T05TVFJBSU5FRF9ISUdIID0gIjY0MGMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBI
MjY0X0xFVkVMXzNfMSA9ICIxZiI7IC8vIDMxIGluIGhleC4KLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBTdHJpbmcgSDI2NF9DT05TVFJBSU5FRF9ISUdIXzNfMSA9Ci0gICAgICBIMjY0X1BST0ZJTEVf
Q09OU1RSQUlORURfSElHSCArIEgyNjRfTEVWRUxfM18xOwotICBwdWJsaWMgc3RhdGljIGZpbmFs
IFN0cmluZyBIMjY0X0NPTlNUUkFJTkVEX0JBU0VMSU5FXzNfMSA9Ci0gICAgICBIMjY0X1BST0ZJ
TEVfQ09OU1RSQUlORURfQkFTRUxJTkUgKyBIMjY0X0xFVkVMXzNfMTsKLQotICBwdWJsaWMgc3Rh
dGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0RGVmYXVsdEgyNjRQYXJhbXMoYm9vbGVhbiBpc0hp
Z2hQcm9maWxlKSB7Ci0gICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMgPSBuZXcg
SGFzaE1hcDw+KCk7Ci0gICAgcGFyYW1zLnB1dChWaWRlb0NvZGVjSW5mby5IMjY0X0ZNVFBfTEVW
RUxfQVNZTU1FVFJZX0FMTE9XRUQsICIxIik7Ci0gICAgcGFyYW1zLnB1dChWaWRlb0NvZGVjSW5m
by5IMjY0X0ZNVFBfUEFDS0VUSVpBVElPTl9NT0RFLCAiMSIpOwotICAgIHBhcmFtcy5wdXQoVmlk
ZW9Db2RlY0luZm8uSDI2NF9GTVRQX1BST0ZJTEVfTEVWRUxfSUQsCi0gICAgICAgIGlzSGlnaFBy
b2ZpbGUgPyBWaWRlb0NvZGVjSW5mby5IMjY0X0NPTlNUUkFJTkVEX0hJR0hfM18xCi0gICAgICAg
ICAgICAgICAgICAgICAgOiBWaWRlb0NvZGVjSW5mby5IMjY0X0NPTlNUUkFJTkVEX0JBU0VMSU5F
XzNfMSk7Ci0gICAgcmV0dXJuIHBhcmFtczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9D
b2RlY0luZm8gREVGQVVMVF9IMjY0X0JBU0VMSU5FX1BST0ZJTEVfQ09ERUMgPQotICAgICAgbmV3
IFZpZGVvQ29kZWNJbmZvKCJIMjY0IiwgZ2V0RGVmYXVsdEgyNjRQYXJhbXMoLyogaXNIaWdoUHJv
ZmlsZT0gKi8gZmFsc2UpKTsKLSAgcHVibGljIHN0YXRpYyBWaWRlb0NvZGVjSW5mbyBERUZBVUxU
X0gyNjRfSElHSF9QUk9GSUxFX0NPREVDID0KLSAgICAgIG5ldyBWaWRlb0NvZGVjSW5mbygiSDI2
NCIsIGdldERlZmF1bHRIMjY0UGFyYW1zKC8qIGlzSGlnaFByb2ZpbGU9ICovIHRydWUpKTsKLQot
ICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTYW1lSDI2NFByb2ZpbGUoCi0gICAgICBNYXA8U3Ry
aW5nLCBTdHJpbmc+IHBhcmFtczEsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zMikgewotICAg
IHJldHVybiBuYXRpdmVJc1NhbWVIMjY0UHJvZmlsZShwYXJhbXMxLCBwYXJhbXMyKTsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUlzU2FtZUgyNjRQcm9maWxl
KAotICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMxLCBNYXA8U3RyaW5nLCBTdHJpbmc+
IHBhcmFtczIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9IYXJkd2FyZVZpZGVv
RW5jb2Rlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9IYXJkd2FyZVZpZGVvRW5jb2Rlci5qYXZh
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjgwMGFlZjEwMzdjZTI5ZGU1YzIyMmRl
ODQ2NWNkMTlmYmRkYzQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qYXZhL29yZy93ZWJydGMvSGFyZHdhcmVWaWRlb0VuY29kZXIuamF2YQorKysgL2Rl
di9udWxsCkBAIC0xLDY5MiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0
IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlYzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29k
ZWNJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9p
ZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJv
aWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJm
YWNlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1
ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50
LkJsb2NraW5nRGVxdWU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tp
bmdEZXF1ZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBv
cmcud2VicnRjLlRocmVhZFV0aWxzLlRocmVhZENoZWNrZXI7Ci0KLS8qKgotICogQW5kcm9pZCBo
YXJkd2FyZSB2aWRlbyBlbmNvZGVyLgotICoKLSAqIEBub3RlIFRoaXMgY2xhc3MgaXMgb25seSBz
dXBwb3J0ZWQgb24gQW5kcm9pZCBLaXRrYXQgYW5kIGFib3ZlLgotICovCi1AVGFyZ2V0QXBpKDE5
KQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikgLy8gQ2Fubm90IHN1cHBvcnQgQVBJ
IGxldmVsIDE5IHdpdGhvdXQgdXNpbmcgZGVwcmVjYXRlZCBtZXRob2RzLgotY2xhc3MgSGFyZHdh
cmVWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBWaWRlb0VuY29kZXIgewotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmcgVEFHID0gIkhhcmR3YXJlVmlkZW9FbmNvZGVyIjsKLQotICAvLyBCaXRy
YXRlIG1vZGVzIC0gc2hvdWxkIGJlIGluIHN5bmMgd2l0aCBPTVhfVklERU9fQ09OVFJPTFJBVEVU
WVBFIGRlZmluZWQKLSAgLy8gaW4gT01YX1ZpZGVvLmgKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IFZJREVPX0NvbnRyb2xSYXRlQ29uc3RhbnQgPSAyOwotICAvLyBLZXkgYXNzb2NpYXRlZCB3
aXRoIHRoZSBiaXRyYXRlIGNvbnRyb2wgbW9kZSB2YWx1ZSAoYWJvdmUpLiBOb3QgcHJlc2VudCBh
cyBhIE1lZGlhRm9ybWF0Ci0gIC8vIGNvbnN0YW50IHVudGlsIEFQSSBsZXZlbCAyMS4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9CSVRSQVRFX01PREUgPSAiYml0cmF0ZS1tb2Rl
IjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklERU9fQVZDX1BST0ZJTEVfSElHSCA9
IDg7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSURFT19BVkNfTEVWRUxfMyA9IDB4MTAw
OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVklERU9fRlJBTUVSQVRFID0gMzA7
Ci0KLSAgLy8gU2VlIE1BWF9FTkNPREVSX1FfU0laRSBpbiBhbmRyb2lkbWVkaWFlbmNvZGVyLmNj
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0VOQ09ERVJfUV9TSVpFID0gMjsKLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01T
ID0gNTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFUVVFVUVfT1VUUFVUX0JVRkZF
Ul9USU1FT1VUX1VTID0gMTAwMDAwOwotCi0gIC8qKgotICAgKiBLZWVwcyB0cmFjayBvZiB0aGUg
bnVtYmVyIG9mIG91dHB1dCBidWZmZXJzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCBkb3duIHRoZSBw
aXBlbGluZSBhbmQgbm90IHlldAotICAgKiByZWxlYXNlZC4gV2UgbmVlZCB0byB3YWl0IGZvciB0
aGlzIHRvIGdvIGRvd24gdG8gemVybyBiZWZvcmUgb3BlcmF0aW9ucyBpbnZhbGlkYXRpbmcgdGhl
IG91dHB1dAotICAgKiBidWZmZXJzLCBpLmUuLCBzdG9wKCkgYW5kIGdldE91dHB1dEJ1ZmZlcnMo
KS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEJ1c3lDb3VudCB7Ci0gICAgcHJpdmF0
ZSBmaW5hbCBPYmplY3QgY291bnRMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZhdGUgaW50
IGNvdW50OwotCi0gICAgcHVibGljIHZvaWQgaW5jcmVtZW50KCkgewotICAgICAgc3luY2hyb25p
emVkIChjb3VudExvY2spIHsKLSAgICAgICAgY291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIG9uIGFuIGFyYml0cmFyeSB0aHJlYWQuCi0g
ICAgcHVibGljIHZvaWQgZGVjcmVtZW50KCkgewotICAgICAgc3luY2hyb25pemVkIChjb3VudExv
Y2spIHsKLSAgICAgICAgY291bnQtLTsKLSAgICAgICAgaWYgKGNvdW50ID09IDApIHsKLSAgICAg
ICAgICBjb3VudExvY2subm90aWZ5QWxsKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBUaGUgaW5jcmVtZW50IGFuZCB3YWl0Rm9yWmVybyBtZXRob2RzIGFyZSBjYWxsZWQg
b24gdGhlIHNhbWUgdGhyZWFkIChkZWxpdmVyRW5jb2RlZEltYWdlLAotICAgIC8vIHJ1bm5pbmcg
b24gdGhlIG91dHB1dCB0aHJlYWQpLiBIZW5jZSwgYWZ0ZXIgd2FpdEZvclplcm8gcmV0dXJucywg
dGhlIGNvdW50IHdpbGwgc3RheSB6ZXJvCi0gICAgLy8gdW50aWwgdGhlIHNhbWUgdGhyZWFkIGNh
bGxzIGluY3JlbWVudC4KLSAgICBwdWJsaWMgdm9pZCB3YWl0Rm9yWmVybygpIHsKLSAgICAgIGJv
b2xlYW4gd2FzSW50ZXJydXB0ZWQgPSBmYWxzZTsKLSAgICAgIHN5bmNocm9uaXplZCAoY291bnRM
b2NrKSB7Ci0gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHsKLSAgICAgICAgICB0cnkgewotICAg
ICAgICAgICAgY291bnRMb2NrLndhaXQoKTsKLSAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW50ZXJydXB0ZWQg
d2hpbGUgd2FpdGluZyBvbiBidXN5IGNvdW50IiwgZSk7Ci0gICAgICAgICAgICB3YXNJbnRlcnJ1
cHRlZCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlm
ICh3YXNJbnRlcnJ1cHRlZCkgewotICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVy
cnVwdCgpOwotICAgICAgfQotICAgIH0KLSAgfQotICAvLyAtLS0gSW5pdGlhbGl6ZWQgb24gY29u
c3RydWN0aW9uLgotICBwcml2YXRlIGZpbmFsIE1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeSBtZWRp
YUNvZGVjV3JhcHBlckZhY3Rvcnk7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGNvZGVjTmFtZTsK
LSAgcHJpdmF0ZSBmaW5hbCBWaWRlb0NvZGVjTWltZVR5cGUgY29kZWNUeXBlOwotICBwcml2YXRl
IGZpbmFsIEludGVnZXIgc3VyZmFjZUNvbG9yRm9ybWF0OwotICBwcml2YXRlIGZpbmFsIEludGVn
ZXIgeXV2Q29sb3JGb3JtYXQ7Ci0gIHByaXZhdGUgZmluYWwgWXV2Rm9ybWF0IHl1dkZvcm1hdDsK
LSAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtczsKLSAgcHJpdmF0ZSBm
aW5hbCBpbnQga2V5RnJhbWVJbnRlcnZhbFNlYzsgLy8gQmFzZSBpbnRlcnZhbCBmb3IgZ2VuZXJh
dGluZyBrZXkgZnJhbWVzLgotICAvLyBJbnRlcnZhbCBhdCB3aGljaCB0byBmb3JjZSBhIGtleSBm
cmFtZS4gVXNlZCB0byByZWR1Y2UgY29sb3IgZGlzdG9ydGlvbnMgY2F1c2VkIGJ5IHNvbWUKLSAg
Ly8gUXVhbGNvbW0gdmlkZW8gZW5jb2RlcnMuCi0gIHByaXZhdGUgZmluYWwgbG9uZyBmb3JjZWRL
ZXlGcmFtZU5zOwotICBwcml2YXRlIGZpbmFsIEJpdHJhdGVBZGp1c3RlciBiaXRyYXRlQWRqdXN0
ZXI7Ci0gIC8vIEVHTCBjb250ZXh0IHNoYXJlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbi4gIFVzZWQg
dG8gYWNjZXNzIHRleHR1cmUgaW5wdXRzLgotICBwcml2YXRlIGZpbmFsIEVnbEJhc2UxNC5Db250
ZXh0IHNoYXJlZENvbnRleHQ7Ci0KLSAgLy8gRHJhd2VyIHVzZWQgdG8gZHJhdyBpbnB1dCB0ZXh0
dXJlcyBvbnRvIHRoZSBjb2RlYydzIGlucHV0IHN1cmZhY2UuCi0gIHByaXZhdGUgZmluYWwgR2xS
ZWN0RHJhd2VyIHRleHR1cmVEcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gIHByaXZhdGUg
ZmluYWwgVmlkZW9GcmFtZURyYXdlciB2aWRlb0ZyYW1lRHJhd2VyID0gbmV3IFZpZGVvRnJhbWVE
cmF3ZXIoKTsKLSAgLy8gQSBxdWV1ZSBvZiBFbmNvZGVkSW1hZ2UuQnVpbGRlcnMgdGhhdCBjb3Jy
ZXNwb25kIHRvIGZyYW1lcyBpbiB0aGUgY29kZWMuICBUaGVzZSBidWlsZGVycyBhcmUKLSAgLy8g
cHJlLXBvcHVsYXRlZCB3aXRoIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCBjYW4ndCBiZSBzZW50
IHRocm91Z2ggTWVkaWFDb2RlYy4KLSAgcHJpdmF0ZSBmaW5hbCBCbG9ja2luZ0RlcXVlPEVuY29k
ZWRJbWFnZS5CdWlsZGVyPiBvdXRwdXRCdWlsZGVycyA9IG5ldyBMaW5rZWRCbG9ja2luZ0RlcXVl
PD4oKTsKLQotICBwcml2YXRlIGZpbmFsIFRocmVhZENoZWNrZXIgZW5jb2RlVGhyZWFkQ2hlY2tl
ciA9IG5ldyBUaHJlYWRDaGVja2VyKCk7Ci0gIHByaXZhdGUgZmluYWwgVGhyZWFkQ2hlY2tlciBv
dXRwdXRUaHJlYWRDaGVja2VyID0gbmV3IFRocmVhZENoZWNrZXIoKTsKLSAgcHJpdmF0ZSBmaW5h
bCBCdXN5Q291bnQgb3V0cHV0QnVmZmVyc0J1c3lDb3VudCA9IG5ldyBCdXN5Q291bnQoKTsKLQot
ICAvLyAtLS0gU2V0IG9uIGluaXRpYWxpemUgYW5kIGltbXV0YWJsZSB1bnRpbCByZWxlYXNlLgot
ICBwcml2YXRlIENhbGxiYWNrIGNhbGxiYWNrOwotICBwcml2YXRlIGJvb2xlYW4gYXV0b21hdGlj
UmVzaXplT247Ci0KLSAgLy8gLS0tIFZhbGlkIGFuZCBpbW11dGFibGUgd2hpbGUgYW4gZW5jb2Rp
bmcgc2Vzc2lvbiBpcyBydW5uaW5nLgotICBATnVsbGFibGUgcHJpdmF0ZSBNZWRpYUNvZGVjV3Jh
cHBlciBjb2RlYzsKLSAgQE51bGxhYmxlIHByaXZhdGUgQnl0ZUJ1ZmZlcltdIG91dHB1dEJ1ZmZl
cnM7Ci0gIC8vIFRocmVhZCB0aGF0IGRlbGl2ZXJzIGVuY29kZWQgZnJhbWVzIHRvIHRoZSB1c2Vy
IGNhbGxiYWNrLgotICBATnVsbGFibGUgcHJpdmF0ZSBUaHJlYWQgb3V0cHV0VGhyZWFkOwotCi0g
IC8vIEVHTCBiYXNlIHdyYXBwaW5nIHRoZSBzaGFyZWQgdGV4dHVyZSBjb250ZXh0LiAgSG9sZHMg
aG9va3MgdG8gYm90aCB0aGUgc2hhcmVkIGNvbnRleHQgYW5kIHRoZQotICAvLyBpbnB1dCBzdXJm
YWNlLiAgTWFraW5nIHRoaXMgYmFzZSBjdXJyZW50IGFsbG93cyB0ZXh0dXJlcyBmcm9tIHRoZSBj
b250ZXh0IHRvIGJlIGRyYXduIG9udG8gdGhlCi0gIC8vIHN1cmZhY2UuCi0gIEBOdWxsYWJsZSBw
cml2YXRlIEVnbEJhc2UxNCB0ZXh0dXJlRWdsQmFzZTsKLSAgLy8gSW5wdXQgc3VyZmFjZSBmb3Ig
dGhlIGNvZGVjLiAgVGhlIGVuY29kZXIgd2lsbCBkcmF3IGlucHV0IHRleHR1cmVzIG9udG8gdGhp
cyBzdXJmYWNlLgotICBATnVsbGFibGUgcHJpdmF0ZSBTdXJmYWNlIHRleHR1cmVJbnB1dFN1cmZh
Y2U7Ci0KLSAgcHJpdmF0ZSBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgcHJp
dmF0ZSBib29sZWFuIHVzZVN1cmZhY2VNb2RlOwotCi0gIC8vIC0tLSBPbmx5IGFjY2Vzc2VkIGZy
b20gdGhlIGVuY29kaW5nIHRocmVhZC4KLSAgLy8gUHJlc2VudGF0aW9uIHRpbWVzdGFtcCBvZiB0
aGUgbGFzdCByZXF1ZXN0ZWQgKG9yIGZvcmNlZCkga2V5IGZyYW1lLgotICBwcml2YXRlIGxvbmcg
bGFzdEtleUZyYW1lTnM7Ci0KLSAgLy8gLS0tIE9ubHkgYWNjZXNzZWQgb24gdGhlIG91dHB1dCB0
aHJlYWQuCi0gIC8vIENvbnRlbnRzIG9mIHRoZSBsYXN0IG9ic2VydmVkIGNvbmZpZyBmcmFtZSBv
dXRwdXQgYnkgdGhlIE1lZGlhQ29kZWMuIFVzZWQgYnkgSC4yNjQuCi0gIEBOdWxsYWJsZSBwcml2
YXRlIEJ5dGVCdWZmZXIgY29uZmlnQnVmZmVyOwotICBwcml2YXRlIGludCBhZGp1c3RlZEJpdHJh
dGU7Ci0KLSAgLy8gV2hldGhlciB0aGUgZW5jb2RlciBpcyBydW5uaW5nLiAgVm9sYXRpbGUgc28g
dGhhdCB0aGUgb3V0cHV0IHRocmVhZCBjYW4gd2F0Y2ggdGhpcyB2YWx1ZSBhbmQKLSAgLy8gZXhp
dCB3aGVuIHRoZSBlbmNvZGVyIHN0b3BzLgotICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gcnVu
bmluZzsKLSAgLy8gQW55IGV4Y2VwdGlvbiB0aHJvd24gZHVyaW5nIHNodXRkb3duLiAgVGhlIG91
dHB1dCB0aHJlYWQgcmVsZWFzZXMgdGhlIE1lZGlhQ29kZWMgYW5kIHVzZXMgdGhpcwotICAvLyB2
YWx1ZSB0byBzZW5kIGV4Y2VwdGlvbnMgdGhyb3duIGR1cmluZyByZWxlYXNlIGJhY2sgdG8gdGhl
IGVuY29kZXIgdGhyZWFkLgotICBATnVsbGFibGUgcHJpdmF0ZSB2b2xhdGlsZSBFeGNlcHRpb24g
c2h1dGRvd25FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgSGFyZHdhcmVW
aWRlb0VuY29kZXIgd2l0aCB0aGUgZ2l2ZW4gY29kZWNOYW1lLCBjb2RlY1R5cGUsIGNvbG9yRm9y
bWF0LCBrZXkgZnJhbWUKLSAgICogaW50ZXJ2YWxzLCBhbmQgYml0cmF0ZUFkanVzdGVyLgotICAg
KgotICAgKiBAcGFyYW0gY29kZWNOYW1lIHRoZSBoYXJkd2FyZSBjb2RlYyBpbXBsZW1lbnRhdGlv
biB0byB1c2UKLSAgICogQHBhcmFtIGNvZGVjVHlwZSB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gdmlk
ZW8gY29kZWMgKGVnLiBWUDgsIFZQOSwgb3IgSDI2NCkKLSAgICogQHBhcmFtIHN1cmZhY2VDb2xv
ckZvcm1hdCBjb2xvciBmb3JtYXQgZm9yIHN1cmZhY2UgbW9kZSBvciBudWxsIGlmIG5vdCBhdmFp
bGFibGUKLSAgICogQHBhcmFtIHl1dkNvbG9yRm9ybWF0IGNvbG9yIGZvcm1hdCBmb3IgYnl0ZWJ1
ZmZlciBtb2RlCi0gICAqIEBwYXJhbSBrZXlGcmFtZUludGVydmFsU2VjIGludGVydmFsIGluIHNl
Y29uZHMgYmV0d2VlbiBrZXkgZnJhbWVzOyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGNvZGVjCi0g
ICAqIEBwYXJhbSBmb3JjZUtleUZyYW1lSW50ZXJ2YWxNcyBpbnRlcnZhbCBhdCB3aGljaCB0byBm
b3JjZSBhIGtleSBmcmFtZSBpZiBvbmUgaXMgbm90IHJlcXVlc3RlZDsKLSAgICogICAgIHVzZWQg
dG8gcmVkdWNlIGRpc3RvcnRpb24gY2F1c2VkIGJ5IHNvbWUgY29kZWMgaW1wbGVtZW50YXRpb25z
Ci0gICAqIEBwYXJhbSBiaXRyYXRlQWRqdXN0ZXIgYWxnb3JpdGhtIHVzZWQgdG8gY29ycmVjdCBj
b2RlYyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgcHJvZHVjZSB0aGUKLSAgICogICAgIGRl
c2lyZWQgYml0cmF0ZXMKLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYg
Y29sb3JGb3JtYXQgaXMgdW5zdXBwb3J0ZWQKLSAgICovCi0gIHB1YmxpYyBIYXJkd2FyZVZpZGVv
RW5jb2RlcihNZWRpYUNvZGVjV3JhcHBlckZhY3RvcnkgbWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5
LCBTdHJpbmcgY29kZWNOYW1lLAotICAgICAgVmlkZW9Db2RlY01pbWVUeXBlIGNvZGVjVHlwZSwg
SW50ZWdlciBzdXJmYWNlQ29sb3JGb3JtYXQsIEludGVnZXIgeXV2Q29sb3JGb3JtYXQsCi0gICAg
ICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcywgaW50IGtleUZyYW1lSW50ZXJ2YWxTZWMsIGlu
dCBmb3JjZUtleUZyYW1lSW50ZXJ2YWxNcywKLSAgICAgIEJpdHJhdGVBZGp1c3RlciBiaXRyYXRl
QWRqdXN0ZXIsIEVnbEJhc2UxNC5Db250ZXh0IHNoYXJlZENvbnRleHQpIHsKLSAgICB0aGlzLm1l
ZGlhQ29kZWNXcmFwcGVyRmFjdG9yeSA9IG1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeTsKLSAgICB0
aGlzLmNvZGVjTmFtZSA9IGNvZGVjTmFtZTsKLSAgICB0aGlzLmNvZGVjVHlwZSA9IGNvZGVjVHlw
ZTsKLSAgICB0aGlzLnN1cmZhY2VDb2xvckZvcm1hdCA9IHN1cmZhY2VDb2xvckZvcm1hdDsKLSAg
ICB0aGlzLnl1dkNvbG9yRm9ybWF0ID0geXV2Q29sb3JGb3JtYXQ7Ci0gICAgdGhpcy55dXZGb3Jt
YXQgPSBZdXZGb3JtYXQudmFsdWVPZih5dXZDb2xvckZvcm1hdCk7Ci0gICAgdGhpcy5wYXJhbXMg
PSBwYXJhbXM7Ci0gICAgdGhpcy5rZXlGcmFtZUludGVydmFsU2VjID0ga2V5RnJhbWVJbnRlcnZh
bFNlYzsKLSAgICB0aGlzLmZvcmNlZEtleUZyYW1lTnMgPSBUaW1lVW5pdC5NSUxMSVNFQ09ORFMu
dG9OYW5vcyhmb3JjZUtleUZyYW1lSW50ZXJ2YWxNcyk7Ci0gICAgdGhpcy5iaXRyYXRlQWRqdXN0
ZXIgPSBiaXRyYXRlQWRqdXN0ZXI7Ci0gICAgdGhpcy5zaGFyZWRDb250ZXh0ID0gc2hhcmVkQ29u
dGV4dDsKLQotICAgIC8vIEFsbG93IGNvbnN0cnVjdGlvbiBvbiBhIGRpZmZlcmVudCB0aHJlYWQu
Ci0gICAgZW5jb2RlVGhyZWFkQ2hlY2tlci5kZXRhY2hUaHJlYWQoKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgVmlkZW9Db2RlY1N0YXR1cyBpbml0RW5jb2RlKFNldHRpbmdzIHNldHRp
bmdzLCBDYWxsYmFjayBjYWxsYmFjaykgewotICAgIGVuY29kZVRocmVhZENoZWNrZXIuY2hlY2tJ
c09uVmFsaWRUaHJlYWQoKTsKLQotICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICBh
dXRvbWF0aWNSZXNpemVPbiA9IHNldHRpbmdzLmF1dG9tYXRpY1Jlc2l6ZU9uOwotICAgIHRoaXMu
d2lkdGggPSBzZXR0aW5ncy53aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IHNldHRpbmdzLmhlaWdo
dDsKLSAgICB1c2VTdXJmYWNlTW9kZSA9IGNhblVzZVN1cmZhY2UoKTsKLQotICAgIGlmIChzZXR0
aW5ncy5zdGFydEJpdHJhdGUgIT0gMCAmJiBzZXR0aW5ncy5tYXhGcmFtZXJhdGUgIT0gMCkgewot
ICAgICAgYml0cmF0ZUFkanVzdGVyLnNldFRhcmdldHMoc2V0dGluZ3Muc3RhcnRCaXRyYXRlICog
MTAwMCwgc2V0dGluZ3MubWF4RnJhbWVyYXRlKTsKLSAgICB9Ci0gICAgYWRqdXN0ZWRCaXRyYXRl
ID0gYml0cmF0ZUFkanVzdGVyLmdldEFkanVzdGVkQml0cmF0ZUJwcygpOwotCi0gICAgTG9nZ2lu
Zy5kKFRBRywKLSAgICAgICAgImluaXRFbmNvZGU6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0
ICsgIi4gQCAiICsgc2V0dGluZ3Muc3RhcnRCaXRyYXRlCi0gICAgICAgICAgICArICJrYnBzLiBG
cHM6ICIgKyBzZXR0aW5ncy5tYXhGcmFtZXJhdGUgKyAiIFVzZSBzdXJmYWNlIG1vZGU6ICIgKyB1
c2VTdXJmYWNlTW9kZSk7Ci0gICAgcmV0dXJuIGluaXRFbmNvZGVJbnRlcm5hbCgpOwotICB9Ci0K
LSAgcHJpdmF0ZSBWaWRlb0NvZGVjU3RhdHVzIGluaXRFbmNvZGVJbnRlcm5hbCgpIHsKLSAgICBl
bmNvZGVUaHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0KLSAgICBsYXN0S2V5
RnJhbWVOcyA9IC0xOwotCi0gICAgdHJ5IHsKLSAgICAgIGNvZGVjID0gbWVkaWFDb2RlY1dyYXBw
ZXJGYWN0b3J5LmNyZWF0ZUJ5Q29kZWNOYW1lKGNvZGVjTmFtZSk7Ci0gICAgfSBjYXRjaCAoSU9F
eGNlcHRpb24gfCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgIkNhbm5vdCBjcmVhdGUgbWVkaWEgZW5jb2RlciAiICsgY29kZWNOYW1lKTsKLSAgICAg
IHJldHVybiBWaWRlb0NvZGVjU3RhdHVzLkZBTExCQUNLX1NPRlRXQVJFOwotICAgIH0KLQotICAg
IGZpbmFsIGludCBjb2xvckZvcm1hdCA9IHVzZVN1cmZhY2VNb2RlID8gc3VyZmFjZUNvbG9yRm9y
bWF0IDogeXV2Q29sb3JGb3JtYXQ7Ci0gICAgdHJ5IHsKLSAgICAgIE1lZGlhRm9ybWF0IGZvcm1h
dCA9IE1lZGlhRm9ybWF0LmNyZWF0ZVZpZGVvRm9ybWF0KGNvZGVjVHlwZS5taW1lVHlwZSgpLCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9C
SVRfUkFURSwgYWRqdXN0ZWRCaXRyYXRlKTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKEtFWV9C
SVRSQVRFX01PREUsIFZJREVPX0NvbnRyb2xSYXRlQ29uc3RhbnQpOwotICAgICAgZm9ybWF0LnNl
dEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCwgY29sb3JGb3JtYXQpOwotICAg
ICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0ZSQU1FX1JBVEUsIGJpdHJhdGVB
ZGp1c3Rlci5nZXRDb2RlY0NvbmZpZ0ZyYW1lcmF0ZSgpKTsKLSAgICAgIGZvcm1hdC5zZXRJbnRl
Z2VyKE1lZGlhRm9ybWF0LktFWV9JX0ZSQU1FX0lOVEVSVkFMLCBrZXlGcmFtZUludGVydmFsU2Vj
KTsKLSAgICAgIGlmIChjb2RlY1R5cGUgPT0gVmlkZW9Db2RlY01pbWVUeXBlLkgyNjQpIHsKLSAg
ICAgICAgU3RyaW5nIHByb2ZpbGVMZXZlbElkID0gcGFyYW1zLmdldChWaWRlb0NvZGVjSW5mby5I
MjY0X0ZNVFBfUFJPRklMRV9MRVZFTF9JRCk7Ci0gICAgICAgIGlmIChwcm9maWxlTGV2ZWxJZCA9
PSBudWxsKSB7Ci0gICAgICAgICAgcHJvZmlsZUxldmVsSWQgPSBWaWRlb0NvZGVjSW5mby5IMjY0
X0NPTlNUUkFJTkVEX0JBU0VMSU5FXzNfMTsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKHBy
b2ZpbGVMZXZlbElkKSB7Ci0gICAgICAgICAgY2FzZSBWaWRlb0NvZGVjSW5mby5IMjY0X0NPTlNU
UkFJTkVEX0hJR0hfM18xOgotICAgICAgICAgICAgZm9ybWF0LnNldEludGVnZXIoInByb2ZpbGUi
LCBWSURFT19BVkNfUFJPRklMRV9ISUdIKTsKLSAgICAgICAgICAgIGZvcm1hdC5zZXRJbnRlZ2Vy
KCJsZXZlbCIsIFZJREVPX0FWQ19MRVZFTF8zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgVmlkZW9Db2RlY0luZm8uSDI2NF9DT05TVFJBSU5FRF9CQVNFTElORV8zXzE6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTG9nZ2lu
Zy53KFRBRywgIlVua25vd24gcHJvZmlsZSBsZXZlbCBpZDogIiArIHByb2ZpbGVMZXZlbElkKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkZvcm1hdDogIiArIGZv
cm1hdCk7Ci0gICAgICBjb2RlYy5jb25maWd1cmUoCi0gICAgICAgICAgZm9ybWF0LCBudWxsIC8q
IHN1cmZhY2UgKi8sIG51bGwgLyogY3J5cHRvICovLCBNZWRpYUNvZGVjLkNPTkZJR1VSRV9GTEFH
X0VOQ09ERSk7Ci0KLSAgICAgIGlmICh1c2VTdXJmYWNlTW9kZSkgewotICAgICAgICB0ZXh0dXJl
RWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlRWdsMTQoc2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05G
SUdfUkVDT1JEQUJMRSk7Ci0gICAgICAgIHRleHR1cmVJbnB1dFN1cmZhY2UgPSBjb2RlYy5jcmVh
dGVJbnB1dFN1cmZhY2UoKTsKLSAgICAgICAgdGV4dHVyZUVnbEJhc2UuY3JlYXRlU3VyZmFjZSh0
ZXh0dXJlSW5wdXRTdXJmYWNlKTsKLSAgICAgICAgdGV4dHVyZUVnbEJhc2UubWFrZUN1cnJlbnQo
KTsKLSAgICAgIH0KLQotICAgICAgY29kZWMuc3RhcnQoKTsKLSAgICAgIG91dHB1dEJ1ZmZlcnMg
PSBjb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJpbml0RW5jb2RlSW50ZXJuYWwgZmFp
bGVkIiwgZSk7Ci0gICAgICByZWxlYXNlKCk7Ci0gICAgICByZXR1cm4gVmlkZW9Db2RlY1N0YXR1
cy5GQUxMQkFDS19TT0ZUV0FSRTsKLSAgICB9Ci0KLSAgICBydW5uaW5nID0gdHJ1ZTsKLSAgICBv
dXRwdXRUaHJlYWRDaGVja2VyLmRldGFjaFRocmVhZCgpOwotICAgIG91dHB1dFRocmVhZCA9IGNy
ZWF0ZU91dHB1dFRocmVhZCgpOwotICAgIG91dHB1dFRocmVhZC5zdGFydCgpOwotCi0gICAgcmV0
dXJuIFZpZGVvQ29kZWNTdGF0dXMuT0s7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZp
ZGVvQ29kZWNTdGF0dXMgcmVsZWFzZSgpIHsKLSAgICBlbmNvZGVUaHJlYWRDaGVja2VyLmNoZWNr
SXNPblZhbGlkVGhyZWFkKCk7Ci0KLSAgICBmaW5hbCBWaWRlb0NvZGVjU3RhdHVzIHJldHVyblZh
bHVlOwotICAgIGlmIChvdXRwdXRUaHJlYWQgPT0gbnVsbCkgewotICAgICAgcmV0dXJuVmFsdWUg
PSBWaWRlb0NvZGVjU3RhdHVzLk9LOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBUaGUgb3V0cHV0
VGhyZWFkIGFjdHVhbGx5IHN0b3BzIGFuZCByZWxlYXNlcyB0aGUgY29kZWMgb25jZSBydW5uaW5n
IGlzIGZhbHNlLgotICAgICAgcnVubmluZyA9IGZhbHNlOwotICAgICAgaWYgKCFUaHJlYWRVdGls
cy5qb2luVW5pbnRlcnJ1cHRpYmx5KG91dHB1dFRocmVhZCwgTUVESUFfQ09ERUNfUkVMRUFTRV9U
SU1FT1VUX01TKSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZW5jb2RlciByZWxl
YXNlIHRpbWVvdXQiKTsKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBWaWRlb0NvZGVjU3RhdHVzLlRJ
TUVPVVQ7Ci0gICAgICB9IGVsc2UgaWYgKHNodXRkb3duRXhjZXB0aW9uICE9IG51bGwpIHsKLSAg
ICAgICAgLy8gTG9nIHRoZSBleGNlcHRpb24gYW5kIHR1cm4gaXQgaW50byBhbiBlcnJvci4KLSAg
ICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGVuY29kZXIgcmVsZWFzZSBleGNlcHRpb24iLCBz
aHV0ZG93bkV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVyblZhbHVlID0gVmlkZW9Db2RlY1N0YXR1
cy5FUlJPUjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVyblZhbHVlID0gVmlkZW9Db2Rl
Y1N0YXR1cy5PSzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZXh0dXJlRHJhd2VyLnJlbGVhc2Uo
KTsKLSAgICB2aWRlb0ZyYW1lRHJhd2VyLnJlbGVhc2UoKTsKLSAgICBpZiAodGV4dHVyZUVnbEJh
c2UgIT0gbnVsbCkgewotICAgICAgdGV4dHVyZUVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgdGV4
dHVyZUVnbEJhc2UgPSBudWxsOwotICAgIH0KLSAgICBpZiAodGV4dHVyZUlucHV0U3VyZmFjZSAh
PSBudWxsKSB7Ci0gICAgICB0ZXh0dXJlSW5wdXRTdXJmYWNlLnJlbGVhc2UoKTsKLSAgICAgIHRl
eHR1cmVJbnB1dFN1cmZhY2UgPSBudWxsOwotICAgIH0KLSAgICBvdXRwdXRCdWlsZGVycy5jbGVh
cigpOwotCi0gICAgY29kZWMgPSBudWxsOwotICAgIG91dHB1dEJ1ZmZlcnMgPSBudWxsOwotICAg
IG91dHB1dFRocmVhZCA9IG51bGw7Ci0KLSAgICAvLyBBbGxvdyBjaGFuZ2luZyB0aHJlYWQgYWZ0
ZXIgcmVsZWFzZS4KLSAgICBlbmNvZGVUaHJlYWRDaGVja2VyLmRldGFjaFRocmVhZCgpOwotCi0g
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWRl
b0NvZGVjU3RhdHVzIGVuY29kZShWaWRlb0ZyYW1lIHZpZGVvRnJhbWUsIEVuY29kZUluZm8gZW5j
b2RlSW5mbykgewotICAgIGVuY29kZVRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQo
KTsKLSAgICBpZiAoY29kZWMgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0
dXMuVU5JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICBmaW5hbCBWaWRlb0ZyYW1lLkJ1ZmZlciB2
aWRlb0ZyYW1lQnVmZmVyID0gdmlkZW9GcmFtZS5nZXRCdWZmZXIoKTsKLSAgICBmaW5hbCBib29s
ZWFuIGlzVGV4dHVyZUJ1ZmZlciA9IHZpZGVvRnJhbWVCdWZmZXIgaW5zdGFuY2VvZiBWaWRlb0Zy
YW1lLlRleHR1cmVCdWZmZXI7Ci0KLSAgICAvLyBJZiBpbnB1dCByZXNvbHV0aW9uIGNoYW5nZWQs
IHJlc3RhcnQgdGhlIGNvZGVjIHdpdGggdGhlIG5ldyByZXNvbHV0aW9uLgotICAgIGZpbmFsIGlu
dCBmcmFtZVdpZHRoID0gdmlkZW9GcmFtZS5nZXRCdWZmZXIoKS5nZXRXaWR0aCgpOwotICAgIGZp
bmFsIGludCBmcmFtZUhlaWdodCA9IHZpZGVvRnJhbWUuZ2V0QnVmZmVyKCkuZ2V0SGVpZ2h0KCk7
Ci0gICAgZmluYWwgYm9vbGVhbiBzaG91bGRVc2VTdXJmYWNlTW9kZSA9IGNhblVzZVN1cmZhY2Uo
KSAmJiBpc1RleHR1cmVCdWZmZXI7Ci0gICAgaWYgKGZyYW1lV2lkdGggIT0gd2lkdGggfHwgZnJh
bWVIZWlnaHQgIT0gaGVpZ2h0IHx8IHNob3VsZFVzZVN1cmZhY2VNb2RlICE9IHVzZVN1cmZhY2VN
b2RlKSB7Ci0gICAgICBWaWRlb0NvZGVjU3RhdHVzIHN0YXR1cyA9IHJlc2V0Q29kZWMoZnJhbWVX
aWR0aCwgZnJhbWVIZWlnaHQsIHNob3VsZFVzZVN1cmZhY2VNb2RlKTsKLSAgICAgIGlmIChzdGF0
dXMgIT0gVmlkZW9Db2RlY1N0YXR1cy5PSykgewotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChvdXRwdXRCdWlsZGVycy5zaXplKCkgPiBNQVhfRU5DT0RF
Ul9RX1NJWkUpIHsKLSAgICAgIC8vIFRvbyBtYW55IGZyYW1lcyBpbiB0aGUgZW5jb2Rlci4gIERy
b3AgdGhpcyBmcmFtZS4KLSAgICAgIExvZ2dpbmcuZShUQUcsICJEcm9wcGVkIGZyYW1lLCBlbmNv
ZGVyIHF1ZXVlIGZ1bGwiKTsKLSAgICAgIHJldHVybiBWaWRlb0NvZGVjU3RhdHVzLk5PX09VVFBV
VDsgLy8gU2VlIHdlYnJ0YyBidWcgMjg4Ny4KLSAgICB9Ci0KLSAgICBib29sZWFuIHJlcXVlc3Rl
ZEtleUZyYW1lID0gZmFsc2U7Ci0gICAgZm9yIChFbmNvZGVkSW1hZ2UuRnJhbWVUeXBlIGZyYW1l
VHlwZSA6IGVuY29kZUluZm8uZnJhbWVUeXBlcykgewotICAgICAgaWYgKGZyYW1lVHlwZSA9PSBF
bmNvZGVkSW1hZ2UuRnJhbWVUeXBlLlZpZGVvRnJhbWVLZXkpIHsKLSAgICAgICAgcmVxdWVzdGVk
S2V5RnJhbWUgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1ZXN0ZWRLZXlG
cmFtZSB8fCBzaG91bGRGb3JjZUtleUZyYW1lKHZpZGVvRnJhbWUuZ2V0VGltZXN0YW1wTnMoKSkp
IHsKLSAgICAgIHJlcXVlc3RLZXlGcmFtZSh2aWRlb0ZyYW1lLmdldFRpbWVzdGFtcE5zKCkpOwot
ICAgIH0KLQotICAgIC8vIE51bWJlciBvZiBieXRlcyBpbiB0aGUgdmlkZW8gYnVmZmVyLiBZIGNo
YW5uZWwgaXMgc2FtcGxlZCBhdCBvbmUgYnl0ZSBwZXIgcGl4ZWw7IFUgYW5kIFYgYXJlCi0gICAg
Ly8gc3Vic2FtcGxlZCBhdCBvbmUgYnl0ZSBwZXIgZm91ciBwaXhlbHMuCi0gICAgaW50IGJ1ZmZl
clNpemUgPSB2aWRlb0ZyYW1lQnVmZmVyLmdldEhlaWdodCgpICogdmlkZW9GcmFtZUJ1ZmZlci5n
ZXRXaWR0aCgpICogMyAvIDI7Ci0gICAgRW5jb2RlZEltYWdlLkJ1aWxkZXIgYnVpbGRlciA9IEVu
Y29kZWRJbWFnZS5idWlsZGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5zZXRDYXB0dXJlVGltZU5zKHZpZGVvRnJhbWUuZ2V0VGltZXN0YW1wTnMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb21wbGV0ZUZyYW1lKHRydWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RW5jb2RlZFdpZHRo
KHZpZGVvRnJhbWUuZ2V0QnVmZmVyKCkuZ2V0V2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5zZXRFbmNvZGVkSGVpZ2h0KHZpZGVvRnJhbWUuZ2V0QnVmZmVy
KCkuZ2V0SGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
c2V0Um90YXRpb24odmlkZW9GcmFtZS5nZXRSb3RhdGlvbigpKTsKLSAgICBvdXRwdXRCdWlsZGVy
cy5vZmZlcihidWlsZGVyKTsKLQotICAgIGZpbmFsIFZpZGVvQ29kZWNTdGF0dXMgcmV0dXJuVmFs
dWU7Ci0gICAgaWYgKHVzZVN1cmZhY2VNb2RlKSB7Ci0gICAgICByZXR1cm5WYWx1ZSA9IGVuY29k
ZVRleHR1cmVCdWZmZXIodmlkZW9GcmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVyblZh
bHVlID0gZW5jb2RlQnl0ZUJ1ZmZlcih2aWRlb0ZyYW1lLCB2aWRlb0ZyYW1lQnVmZmVyLCBidWZm
ZXJTaXplKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgcXVldWUgd2FzIHN1Y2Nlc3Nm
dWwuCi0gICAgaWYgKHJldHVyblZhbHVlICE9IFZpZGVvQ29kZWNTdGF0dXMuT0spIHsKLSAgICAg
IC8vIEtlZXAgdGhlIG91dHB1dCBidWlsZGVycyBpbiBzeW5jIHdpdGggYnVmZmVycyBpbiB0aGUg
Y29kZWMuCi0gICAgICBvdXRwdXRCdWlsZGVycy5wb2xsTGFzdCgpOwotICAgIH0KLQotICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9Db2RlY1N0YXR1cyBlbmNv
ZGVUZXh0dXJlQnVmZmVyKFZpZGVvRnJhbWUgdmlkZW9GcmFtZSkgewotICAgIGVuY29kZVRocmVh
ZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgLy8gVE9E
TyhwZXJraik6IGdsQ2xlYXIoKSBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IHNpbmNlIGV2ZXJ5IHBp
eGVsIGlzIGNvdmVyZWQgYW55d2F5LAotICAgICAgLy8gYnV0IGl0J3MgYSB3b3JrYXJvdW5kIGZv
ciBidWcgd2VicnRjOjUxNDcuCi0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7Ci0gICAgICAvLyBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHJlbGVhc2UgdGhp
cyBmcmFtZSBiZWNhdXNlIGl0IGRvZXNuJ3Qgb3duIHRoZSBidWZmZXIuCi0gICAgICBWaWRlb0Zy
YW1lIGRlcm90YXRlZEZyYW1lID0KLSAgICAgICAgICBuZXcgVmlkZW9GcmFtZSh2aWRlb0ZyYW1l
LmdldEJ1ZmZlcigpLCAwIC8qIHJvdGF0aW9uICovLCB2aWRlb0ZyYW1lLmdldFRpbWVzdGFtcE5z
KCkpOwotICAgICAgdmlkZW9GcmFtZURyYXdlci5kcmF3RnJhbWUoZGVyb3RhdGVkRnJhbWUsIHRl
eHR1cmVEcmF3ZXIsIG51bGwgLyogYWRkaXRpb25hbFJlbmRlck1hdHJpeCAqLyk7Ci0gICAgICB0
ZXh0dXJlRWdsQmFzZS5zd2FwQnVmZmVycyh2aWRlb0ZyYW1lLmdldFRpbWVzdGFtcE5zKCkpOwot
ICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
ImVuY29kZVRleHR1cmUgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gVmlkZW9Db2RlY1N0YXR1
cy5FUlJPUjsKLSAgICB9Ci0gICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMuT0s7Ci0gIH0KLQot
ICBwcml2YXRlIFZpZGVvQ29kZWNTdGF0dXMgZW5jb2RlQnl0ZUJ1ZmZlcigKLSAgICAgIFZpZGVv
RnJhbWUgdmlkZW9GcmFtZSwgVmlkZW9GcmFtZS5CdWZmZXIgdmlkZW9GcmFtZUJ1ZmZlciwgaW50
IGJ1ZmZlclNpemUpIHsKLSAgICBlbmNvZGVUaHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhy
ZWFkKCk7Ci0gICAgLy8gRnJhbWUgdGltZXN0YW1wIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgbWlj
cm9zZWNvbmQuCi0gICAgbG9uZyBwcmVzZW50YXRpb25UaW1lc3RhbXBVcyA9ICh2aWRlb0ZyYW1l
LmdldFRpbWVzdGFtcE5zKCkgKyA1MDApIC8gMTAwMDsKLQotICAgIC8vIE5vIHRpbWVvdXQuICBE
b24ndCBibG9jayBmb3IgYW4gaW5wdXQgYnVmZmVyLCBkcm9wIGZyYW1lcyBpZiB0aGUgZW5jb2Rl
ciBmYWxscyBiZWhpbmQuCi0gICAgaW50IGluZGV4OwotICAgIHRyeSB7Ci0gICAgICBpbmRleCA9
IGNvZGVjLmRlcXVldWVJbnB1dEJ1ZmZlcigwIC8qIHRpbWVvdXQgKi8pOwotICAgIH0gY2F0Y2gg
KElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVxdWV1
ZUlucHV0QnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMu
RVJST1I7Ci0gICAgfQotCi0gICAgaWYgKGluZGV4ID09IC0xKSB7Ci0gICAgICAvLyBFbmNvZGVy
IGlzIGZhbGxpbmcgYmVoaW5kLiAgTm8gaW5wdXQgYnVmZmVycyBhdmFpbGFibGUuICBEcm9wIHRo
ZSBmcmFtZS4KLSAgICAgIExvZ2dpbmcuZChUQUcsICJEcm9wcGVkIGZyYW1lLCBubyBpbnB1dCBi
dWZmZXJzIGF2YWlsYWJsZSIpOwotICAgICAgcmV0dXJuIFZpZGVvQ29kZWNTdGF0dXMuTk9fT1VU
UFVUOyAvLyBTZWUgd2VicnRjIGJ1ZyAyODg3LgotICAgIH0KLQotICAgIEJ5dGVCdWZmZXIgYnVm
ZmVyOwotICAgIHRyeSB7Ci0gICAgICBidWZmZXIgPSBjb2RlYy5nZXRJbnB1dEJ1ZmZlcnMoKVtp
bmRleF07Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJnZXRJbnB1dEJ1ZmZlcnMgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4g
VmlkZW9Db2RlY1N0YXR1cy5FUlJPUjsKLSAgICB9Ci0gICAgZmlsbElucHV0QnVmZmVyKGJ1ZmZl
ciwgdmlkZW9GcmFtZUJ1ZmZlcik7Ci0KLSAgICB0cnkgewotICAgICAgY29kZWMucXVldWVJbnB1
dEJ1ZmZlcigKLSAgICAgICAgICBpbmRleCwgMCAvKiBvZmZzZXQgKi8sIGJ1ZmZlclNpemUsIHBy
ZXNlbnRhdGlvblRpbWVzdGFtcFVzLCAwIC8qIGZsYWdzICovKTsKLSAgICB9IGNhdGNoIChJbGxl
Z2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInF1ZXVlSW5wdXRC
dWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICAvLyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gdGhyb3du
IHdoZW4gdGhlIGNvZGVjIGlzIGluIHRoZSB3cm9uZyBzdGF0ZS4KLSAgICAgIHJldHVybiBWaWRl
b0NvZGVjU3RhdHVzLkVSUk9SOwotICAgIH0KLSAgICByZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5P
SzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlkZW9Db2RlY1N0YXR1cyBzZXRSYXRl
QWxsb2NhdGlvbihCaXRyYXRlQWxsb2NhdGlvbiBiaXRyYXRlQWxsb2NhdGlvbiwgaW50IGZyYW1l
cmF0ZSkgewotICAgIGVuY29kZVRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsK
LSAgICBpZiAoZnJhbWVyYXRlID4gTUFYX1ZJREVPX0ZSQU1FUkFURSkgewotICAgICAgZnJhbWVy
YXRlID0gTUFYX1ZJREVPX0ZSQU1FUkFURTsKLSAgICB9Ci0gICAgYml0cmF0ZUFkanVzdGVyLnNl
dFRhcmdldHMoYml0cmF0ZUFsbG9jYXRpb24uZ2V0U3VtKCksIGZyYW1lcmF0ZSk7Ci0gICAgcmV0
dXJuIFZpZGVvQ29kZWNTdGF0dXMuT0s7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFNj
YWxpbmdTZXR0aW5ncyBnZXRTY2FsaW5nU2V0dGluZ3MoKSB7Ci0gICAgZW5jb2RlVGhyZWFkQ2hl
Y2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIGlmIChhdXRvbWF0aWNSZXNpemVPbikg
ewotICAgICAgaWYgKGNvZGVjVHlwZSA9PSBWaWRlb0NvZGVjTWltZVR5cGUuVlA4KSB7Ci0gICAg
ICAgIGZpbmFsIGludCBrTG93VnA4UXBUaHJlc2hvbGQgPSAyOTsKLSAgICAgICAgZmluYWwgaW50
IGtIaWdoVnA4UXBUaHJlc2hvbGQgPSA5NTsKLSAgICAgICAgcmV0dXJuIG5ldyBTY2FsaW5nU2V0
dGluZ3Moa0xvd1ZwOFFwVGhyZXNob2xkLCBrSGlnaFZwOFFwVGhyZXNob2xkKTsKLSAgICAgIH0g
ZWxzZSBpZiAoY29kZWNUeXBlID09IFZpZGVvQ29kZWNNaW1lVHlwZS5IMjY0KSB7Ci0gICAgICAg
IGZpbmFsIGludCBrTG93SDI2NFFwVGhyZXNob2xkID0gMjQ7Ci0gICAgICAgIGZpbmFsIGludCBr
SGlnaEgyNjRRcFRocmVzaG9sZCA9IDM3OwotICAgICAgICByZXR1cm4gbmV3IFNjYWxpbmdTZXR0
aW5ncyhrTG93SDI2NFFwVGhyZXNob2xkLCBrSGlnaEgyNjRRcFRocmVzaG9sZCk7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBTY2FsaW5nU2V0dGluZ3MuT0ZGOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW1wbGVtZW50YXRpb25OYW1lKCkgewotICAgIHJldHVy
biAiSFdFbmNvZGVyIjsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9Db2RlY1N0YXR1cyByZXNldENv
ZGVjKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCwgYm9vbGVhbiBuZXdVc2VTdXJmYWNlTW9k
ZSkgewotICAgIGVuY29kZVRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAg
ICBWaWRlb0NvZGVjU3RhdHVzIHN0YXR1cyA9IHJlbGVhc2UoKTsKLSAgICBpZiAoc3RhdHVzICE9
IFZpZGVvQ29kZWNTdGF0dXMuT0spIHsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAg
IHdpZHRoID0gbmV3V2lkdGg7Ci0gICAgaGVpZ2h0ID0gbmV3SGVpZ2h0OwotICAgIHVzZVN1cmZh
Y2VNb2RlID0gbmV3VXNlU3VyZmFjZU1vZGU7Ci0gICAgcmV0dXJuIGluaXRFbmNvZGVJbnRlcm5h
bCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEZvcmNlS2V5RnJhbWUobG9uZyBw
cmVzZW50YXRpb25UaW1lc3RhbXBOcykgewotICAgIGVuY29kZVRocmVhZENoZWNrZXIuY2hlY2tJ
c09uVmFsaWRUaHJlYWQoKTsKLSAgICByZXR1cm4gZm9yY2VkS2V5RnJhbWVOcyA+IDAgJiYgcHJl
c2VudGF0aW9uVGltZXN0YW1wTnMgPiBsYXN0S2V5RnJhbWVOcyArIGZvcmNlZEtleUZyYW1lTnM7
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVxdWVzdEtleUZyYW1lKGxvbmcgcHJlc2VudGF0aW9u
VGltZXN0YW1wTnMpIHsKLSAgICBlbmNvZGVUaHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhy
ZWFkKCk7Ci0gICAgLy8gSWRlYWxseSBNZWRpYUNvZGVjIHdvdWxkIGhvbm9yIEJVRkZFUl9GTEFH
X1NZTkNfRlJBTUUgc28gd2UgY291bGQKLSAgICAvLyBpbmRpY2F0ZSB0aGlzIGluIHF1ZXVlSW5w
dXRCdWZmZXIoKSBiZWxvdyBhbmQgZ3VhcmFudGVlIF90aGlzXyBmcmFtZQotICAgIC8vIGJlIGVu
Y29kZWQgYXMgYSBrZXkgZnJhbWUsIGJ1dCBzYWRseSB0aGF0IGZsYWcgaXMgaWdub3JlZC4gIElu
c3RlYWQsCi0gICAgLy8gd2UgcmVxdWVzdCBhIGtleSBmcmFtZSAic29vbiIuCi0gICAgdHJ5IHsK
LSAgICAgIEJ1bmRsZSBiID0gbmV3IEJ1bmRsZSgpOwotICAgICAgYi5wdXRJbnQoTWVkaWFDb2Rl
Yy5QQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwgMCk7Ci0gICAgICBjb2RlYy5zZXRQ
YXJhbWV0ZXJzKGIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAicmVxdWVzdEtleUZyYW1lIGZhaWxlZCIsIGUpOwotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBsYXN0S2V5RnJhbWVOcyA9IHByZXNlbnRhdGlvblRpbWVzdGFt
cE5zOwotICB9Ci0KLSAgcHJpdmF0ZSBUaHJlYWQgY3JlYXRlT3V0cHV0VGhyZWFkKCkgewotICAg
IHJldHVybiBuZXcgVGhyZWFkKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIHdoaWxlIChydW5uaW5nKSB7Ci0gICAgICAgICAgZGVsaXZlckVu
Y29kZWRJbWFnZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbGVhc2VDb2RlY09uT3V0cHV0VGhy
ZWFkKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8vIFZpc2libGUgZm9yIHRlc3Rpbmcu
Ci0gIHByb3RlY3RlZCB2b2lkIGRlbGl2ZXJFbmNvZGVkSW1hZ2UoKSB7Ci0gICAgb3V0cHV0VGhy
ZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIHRyeSB7Ci0gICAgICBNZWRp
YUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9IG5ldyBNZWRpYUNvZGVjLkJ1ZmZlckluZm8oKTsKLSAg
ICAgIGludCBpbmRleCA9IGNvZGVjLmRlcXVldWVPdXRwdXRCdWZmZXIoaW5mbywgREVRVUVVRV9P
VVRQVVRfQlVGRkVSX1RJTUVPVVRfVVMpOwotICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAg
ICBpZiAoaW5kZXggPT0gTWVkaWFDb2RlYy5JTkZPX09VVFBVVF9CVUZGRVJTX0NIQU5HRUQpIHsK
LSAgICAgICAgICBvdXRwdXRCdWZmZXJzQnVzeUNvdW50LndhaXRGb3JaZXJvKCk7Ci0gICAgICAg
ICAgb3V0cHV0QnVmZmVycyA9IGNvZGVjLmdldE91dHB1dEJ1ZmZlcnMoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIEJ5dGVCdWZmZXIgY29kZWNPdXRwdXRC
dWZmZXIgPSBvdXRwdXRCdWZmZXJzW2luZGV4XTsKLSAgICAgIGNvZGVjT3V0cHV0QnVmZmVyLnBv
c2l0aW9uKGluZm8ub2Zmc2V0KTsKLSAgICAgIGNvZGVjT3V0cHV0QnVmZmVyLmxpbWl0KGluZm8u
b2Zmc2V0ICsgaW5mby5zaXplKTsKLQotICAgICAgaWYgKChpbmZvLmZsYWdzICYgTWVkaWFDb2Rl
Yy5CVUZGRVJfRkxBR19DT0RFQ19DT05GSUcpICE9IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRB
RywgIkNvbmZpZyBmcmFtZSBnZW5lcmF0ZWQuIE9mZnNldDogIiArIGluZm8ub2Zmc2V0ICsgIi4g
U2l6ZTogIiArIGluZm8uc2l6ZSk7Ci0gICAgICAgIGNvbmZpZ0J1ZmZlciA9IEJ5dGVCdWZmZXIu
YWxsb2NhdGVEaXJlY3QoaW5mby5zaXplKTsKLSAgICAgICAgY29uZmlnQnVmZmVyLnB1dChjb2Rl
Y091dHB1dEJ1ZmZlcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBiaXRyYXRlQWRqdXN0ZXIu
cmVwb3J0RW5jb2RlZEZyYW1lKGluZm8uc2l6ZSk7Ci0gICAgICAgIGlmIChhZGp1c3RlZEJpdHJh
dGUgIT0gYml0cmF0ZUFkanVzdGVyLmdldEFkanVzdGVkQml0cmF0ZUJwcygpKSB7Ci0gICAgICAg
ICAgdXBkYXRlQml0cmF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgYm9vbGVhbiBp
c0tleUZyYW1lID0gKGluZm8uZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZFUl9GTEFHX1NZTkNfRlJB
TUUpICE9IDA7Ci0gICAgICAgIGlmIChpc0tleUZyYW1lKSB7Ci0gICAgICAgICAgTG9nZ2luZy5k
KFRBRywgIlN5bmMgZnJhbWUgZ2VuZXJhdGVkIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5h
bCBCeXRlQnVmZmVyIGZyYW1lQnVmZmVyOwotICAgICAgICBpZiAoaXNLZXlGcmFtZSAmJiBjb2Rl
Y1R5cGUgPT0gVmlkZW9Db2RlY01pbWVUeXBlLkgyNjQpIHsKLSAgICAgICAgICBMb2dnaW5nLmQo
VEFHLAotICAgICAgICAgICAgICAiUHJlcGVuZGluZyBjb25maWcgZnJhbWUgb2Ygc2l6ZSAiICsg
Y29uZmlnQnVmZmVyLmNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAgICsgIiB0byBvdXRwdXQg
YnVmZmVyIHdpdGggb2Zmc2V0ICIgKyBpbmZvLm9mZnNldCArICIsIHNpemUgIiArIGluZm8uc2l6
ZSk7Ci0gICAgICAgICAgLy8gRm9yIEguMjY0IGtleSBmcmFtZSBwcmVwZW5kIFNQUyBhbmQgUFBT
IE5BTHMgYXQgdGhlIHN0YXJ0LgotICAgICAgICAgIGZyYW1lQnVmZmVyID0gQnl0ZUJ1ZmZlci5h
bGxvY2F0ZURpcmVjdChpbmZvLnNpemUgKyBjb25maWdCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAg
ICAgICAgY29uZmlnQnVmZmVyLnJld2luZCgpOwotICAgICAgICAgIGZyYW1lQnVmZmVyLnB1dChj
b25maWdCdWZmZXIpOwotICAgICAgICAgIGZyYW1lQnVmZmVyLnB1dChjb2RlY091dHB1dEJ1ZmZl
cik7Ci0gICAgICAgICAgZnJhbWVCdWZmZXIucmV3aW5kKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgZnJhbWVCdWZmZXIgPSBjb2RlY091dHB1dEJ1ZmZlci5zbGljZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZmluYWwgRW5jb2RlZEltYWdlLkZyYW1lVHlwZSBmcmFtZVR5cGUgPSBp
c0tleUZyYW1lCi0gICAgICAgICAgICA/IEVuY29kZWRJbWFnZS5GcmFtZVR5cGUuVmlkZW9GcmFt
ZUtleQotICAgICAgICAgICAgOiBFbmNvZGVkSW1hZ2UuRnJhbWVUeXBlLlZpZGVvRnJhbWVEZWx0
YTsKLQotICAgICAgICBvdXRwdXRCdWZmZXJzQnVzeUNvdW50LmluY3JlbWVudCgpOwotICAgICAg
ICBFbmNvZGVkSW1hZ2UuQnVpbGRlciBidWlsZGVyID0gb3V0cHV0QnVpbGRlcnMucG9sbCgpOwot
ICAgICAgICBFbmNvZGVkSW1hZ2UgZW5jb2RlZEltYWdlID0gYnVpbGRlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRCdWZmZXIoZnJhbWVCdWZmZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbGxiYWNrIHNo
b3VsZCBub3QgdGhyb3cgYW55IGV4Y2VwdGlvbnMgc2luY2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgY2FsbGVkIG9uIGFuIGFyYml0
cmFyeSB0aHJlYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgYnVnIHdlYnJ0YzoxMTIzMCBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYy5yZWxlYXNlT3V0cHV0QnVm
ZmVyKGluZGV4LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJyZWxlYXNlT3V0cHV0QnVm
ZmVyIGZhaWxlZCIsIGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXRCdWZmZXJzQnVzeUNvdW50LmRlY3JlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5zZXRGcmFtZVR5cGUoZnJhbWVUeXBlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5jcmVhdGVFbmNvZGVkSW1hZ2UoKTsKLSAgICAgICAgLy8gVE9E
TyhtZWxsZW0pOiAgU2V0IGNvZGVjLXNwZWNpZmljIGluZm8uCi0gICAgICAgIGNhbGxiYWNrLm9u
RW5jb2RlZEZyYW1lKGVuY29kZWRJbWFnZSwgbmV3IENvZGVjU3BlY2lmaWNJbmZvKCkpOwotICAg
ICAgICAvLyBOb3RlIHRoYXQgdGhlIGNhbGxiYWNrIG1heSBoYXZlIHJldGFpbmVkIHRoZSBpbWFn
ZS4KLSAgICAgICAgZW5jb2RlZEltYWdlLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9IGNhdGNo
IChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImRlbGl2
ZXJPdXRwdXQgZmFpbGVkIiwgZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbGVh
c2VDb2RlY09uT3V0cHV0VGhyZWFkKCkgewotICAgIG91dHB1dFRocmVhZENoZWNrZXIuY2hlY2tJ
c09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiUmVsZWFzaW5nIE1lZGlhQ29k
ZWMgb24gb3V0cHV0IHRocmVhZCIpOwotICAgIG91dHB1dEJ1ZmZlcnNCdXN5Q291bnQud2FpdEZv
clplcm8oKTsKLSAgICB0cnkgewotICAgICAgY29kZWMuc3RvcCgpOwotICAgIH0gY2F0Y2ggKEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZW5jb2RlciBzdG9wIGZh
aWxlZCIsIGUpOwotICAgIH0KLSAgICB0cnkgewotICAgICAgY29kZWMucmVsZWFzZSgpOwotICAg
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZW5j
b2RlciByZWxlYXNlIGZhaWxlZCIsIGUpOwotICAgICAgLy8gUHJvcGFnYXRlIGV4Y2VwdGlvbnMg
Y2F1Z2h0IGR1cmluZyByZWxlYXNlIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkLgotICAgICAgc2h1
dGRvd25FeGNlcHRpb24gPSBlOwotICAgIH0KLSAgICBjb25maWdCdWZmZXIgPSBudWxsOwotICAg
IExvZ2dpbmcuZChUQUcsICJSZWxlYXNlIG9uIG91dHB1dCB0aHJlYWQgZG9uZSIpOwotICB9Ci0K
LSAgcHJpdmF0ZSBWaWRlb0NvZGVjU3RhdHVzIHVwZGF0ZUJpdHJhdGUoKSB7Ci0gICAgb3V0cHV0
VGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIGFkanVzdGVkQml0cmF0
ZSA9IGJpdHJhdGVBZGp1c3Rlci5nZXRBZGp1c3RlZEJpdHJhdGVCcHMoKTsKLSAgICB0cnkgewot
ICAgICAgQnVuZGxlIHBhcmFtcyA9IG5ldyBCdW5kbGUoKTsKLSAgICAgIHBhcmFtcy5wdXRJbnQo
TWVkaWFDb2RlYy5QQVJBTUVURVJfS0VZX1ZJREVPX0JJVFJBVEUsIGFkanVzdGVkQml0cmF0ZSk7
Ci0gICAgICBjb2RlYy5zZXRQYXJhbWV0ZXJzKHBhcmFtcyk7Ci0gICAgICByZXR1cm4gVmlkZW9D
b2RlY1N0YXR1cy5PSzsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewot
ICAgICAgTG9nZ2luZy5lKFRBRywgInVwZGF0ZUJpdHJhdGUgZmFpbGVkIiwgZSk7Ci0gICAgICBy
ZXR1cm4gVmlkZW9Db2RlY1N0YXR1cy5FUlJPUjsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJv
b2xlYW4gY2FuVXNlU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gc2hhcmVkQ29udGV4dCAhPSBudWxs
ICYmIHN1cmZhY2VDb2xvckZvcm1hdCAhPSBudWxsOwotICB9Ci0KLSAgLy8gVmlzaWJsZSBmb3Ig
dGVzdGluZy4KLSAgcHJvdGVjdGVkIHZvaWQgZmlsbElucHV0QnVmZmVyKEJ5dGVCdWZmZXIgYnVm
ZmVyLCBWaWRlb0ZyYW1lLkJ1ZmZlciB2aWRlb0ZyYW1lQnVmZmVyKSB7Ci0gICAgeXV2Rm9ybWF0
LmZpbGxCdWZmZXIoYnVmZmVyLCB2aWRlb0ZyYW1lQnVmZmVyKTsKLSAgfQotCi0gIC8qKgotICAg
KiBFbnVtZXJhdGlvbiBvZiBzdXBwb3J0ZWQgWVVWIGNvbG9yIGZvcm1hdHMgdXNlZCBmb3IgTWVk
aWFDb2RlYydzIGlucHV0LgotICAgKi8KLSAgcHJpdmF0ZSBlbnVtIFl1dkZvcm1hdCB7Ci0gICAg
STQyMCB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHZvaWQgZmlsbEJ1ZmZlcihCeXRlQnVmZmVy
IGRzdEJ1ZmZlciwgVmlkZW9GcmFtZS5CdWZmZXIgc3JjQnVmZmVyKSB7Ci0gICAgICAgIFZpZGVv
RnJhbWUuSTQyMEJ1ZmZlciBpNDIwID0gc3JjQnVmZmVyLnRvSTQyMCgpOwotICAgICAgICBZdXZI
ZWxwZXIuSTQyMENvcHkoaTQyMC5nZXREYXRhWSgpLCBpNDIwLmdldFN0cmlkZVkoKSwgaTQyMC5n
ZXREYXRhVSgpLCBpNDIwLmdldFN0cmlkZVUoKSwKLSAgICAgICAgICAgIGk0MjAuZ2V0RGF0YVYo
KSwgaTQyMC5nZXRTdHJpZGVWKCksIGRzdEJ1ZmZlciwgaTQyMC5nZXRXaWR0aCgpLCBpNDIwLmdl
dEhlaWdodCgpKTsKLSAgICAgICAgaTQyMC5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfSwKLSAg
ICBOVjEyIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgdm9pZCBmaWxsQnVmZmVyKEJ5dGVCdWZm
ZXIgZHN0QnVmZmVyLCBWaWRlb0ZyYW1lLkJ1ZmZlciBzcmNCdWZmZXIpIHsKLSAgICAgICAgVmlk
ZW9GcmFtZS5JNDIwQnVmZmVyIGk0MjAgPSBzcmNCdWZmZXIudG9JNDIwKCk7Ci0gICAgICAgIFl1
dkhlbHBlci5JNDIwVG9OVjEyKGk0MjAuZ2V0RGF0YVkoKSwgaTQyMC5nZXRTdHJpZGVZKCksIGk0
MjAuZ2V0RGF0YVUoKSwgaTQyMC5nZXRTdHJpZGVVKCksCi0gICAgICAgICAgICBpNDIwLmdldERh
dGFWKCksIGk0MjAuZ2V0U3RyaWRlVigpLCBkc3RCdWZmZXIsIGk0MjAuZ2V0V2lkdGgoKSwgaTQy
MC5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIGk0MjAucmVsZWFzZSgpOwotICAgICAgfQotICAgIH07
Ci0KLSAgICBhYnN0cmFjdCB2b2lkIGZpbGxCdWZmZXIoQnl0ZUJ1ZmZlciBkc3RCdWZmZXIsIFZp
ZGVvRnJhbWUuQnVmZmVyIHNyY0J1ZmZlcik7Ci0KLSAgICBzdGF0aWMgWXV2Rm9ybWF0IHZhbHVl
T2YoaW50IGNvbG9yRm9ybWF0KSB7Ci0gICAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KSB7Ci0gICAg
ICAgIGNhc2UgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVW
NDIwUGxhbmFyOgotICAgICAgICAgIHJldHVybiBJNDIwOwotICAgICAgICBjYXNlIE1lZGlhQ29k
ZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXI6Ci0g
ICAgICAgIGNhc2UgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfUUNPTV9G
b3JtYXRZVVY0MjBTZW1pUGxhbmFyOgotICAgICAgICBjYXNlIE1lZGlhQ29kZWNVdGlscy5DT0xP
Ul9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm06Ci0gICAgICAgICAgcmV0dXJu
IE5WMTI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1
bWVudEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgY29sb3JGb3JtYXQ6ICIgKyBjb2xvckZvcm1hdCk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0hp
c3RvZ3JhbS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9IaXN0b2dyYW0uamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODc3OTg2MTM0YWZiZDkwNDk4MTEwZDNkZWM3N2VmOTY0ZWQ1
NjdjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2
YS9vcmcvd2VicnRjL0hpc3RvZ3JhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIENs
YXNzIGZvciBob2xkaW5nIHRoZSBuYXRpdmUgcG9pbnRlciBvZiBhIGhpc3RvZ3JhbS4gU2luY2Ug
dGhlcmUgaXMgbm8gd2F5IHRvIGRlc3Ryb3kgYQotICogaGlzdG9ncmFtLCBwbGVhc2UgZG9uJ3Qg
Y3JlYXRlIHVubmVjZXNzYXJ5IGluc3RhbmNlcyBvZiB0aGlzIG9iamVjdC4gVGhpcyBjbGFzcyBp
cyB0aHJlYWQgc2FmZS4KLSAqCi0gKiBVc2FnZSBleGFtcGxlOgotICogcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgSGlzdG9ncmFtIHNvbWVNZXRyaWNIaXN0b2dyYW0gPQotICogICAgIEhpc3RvZ3JhbS5j
cmVhdGVDb3VudHMoIldlYlJUQy5WaWRlby5Tb21lTWV0cmljIiwgMSwgMTAwMDAsIDUwKTsKLSAq
IHNvbWVNZXRyaWNIaXN0b2dyYW0uYWRkU2FtcGxlKHNvbWVWYXJpYWJsZSk7Ci0gKi8KLWNsYXNz
IEhpc3RvZ3JhbSB7Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBoYW5kbGU7Ci0KLSAgcHJpdmF0ZSBI
aXN0b2dyYW0obG9uZyBoYW5kbGUpIHsKLSAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgfQot
Ci0gIHN0YXRpYyBwdWJsaWMgSGlzdG9ncmFtIGNyZWF0ZUNvdW50cyhTdHJpbmcgbmFtZSwgaW50
IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KSB7Ci0gICAgcmV0dXJuIG5ldyBIaXN0b2dy
YW0obmF0aXZlQ3JlYXRlQ291bnRzKG5hbWUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCkpOwotICB9
Ci0KLSAgc3RhdGljIHB1YmxpYyBIaXN0b2dyYW0gY3JlYXRlRW51bWVyYXRpb24oU3RyaW5nIG5h
bWUsIGludCBtYXgpIHsKLSAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbShuYXRpdmVDcmVhdGVFbnVt
ZXJhdGlvbihuYW1lLCBtYXgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNhbXBsZShpbnQg
c2FtcGxlKSB7Ci0gICAgbmF0aXZlQWRkU2FtcGxlKGhhbmRsZSwgc2FtcGxlKTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUNvdW50cyhTdHJpbmcgbmFt
ZSwgaW50IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KTsKLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlRW51bWVyYXRpb24oU3RyaW5nIG5hbWUsIGludCBtYXgp
OwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBZGRTYW1wbGUobG9uZyBoYW5k
bGUsIGludCBzYW1wbGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9KTklMb2dn
aW5nLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0pOSUxvZ2dpbmcuamF2YQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjM5MWRiNjFhMTM1ZmIxNDM3ODUxOTZkNDYwMjNkZTYyMjRkNTBh
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9v
cmcvd2VicnRjL0pOSUxvZ2dpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53
ZWJydGMuQ2FsbGVkQnlOYXRpdmU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnYWJsZTsKLWltcG9y
dCBvcmcud2VicnRjLkxvZ2dpbmcuU2V2ZXJpdHk7Ci0KLWNsYXNzIEpOSUxvZ2dpbmcgewotICBw
cml2YXRlIGZpbmFsIExvZ2dhYmxlIGxvZ2dhYmxlOwotCi0gIHB1YmxpYyBKTklMb2dnaW5nKExv
Z2dhYmxlIGxvZ2dhYmxlKSB7Ci0gICAgdGhpcy5sb2dnYWJsZSA9IGxvZ2dhYmxlOwotICB9Ci0K
LSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyB2b2lkIGxvZ1RvSW5qZWN0YWJsZShTdHJpbmcg
bWVzc2FnZSwgSW50ZWdlciBzZXZlcml0eSwgU3RyaW5nIHRhZykgewotICAgIGxvZ2dhYmxlLm9u
TG9nTWVzc2FnZShtZXNzYWdlLCBTZXZlcml0eS52YWx1ZXMoKVtzZXZlcml0eV0sIHRhZyk7Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvSm5pQ29tbW9uLmphdmEgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2
YS9vcmcvd2VicnRjL0puaUNvbW1vbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlMWIyZTUxM2Q3M2RhOWRlY2ZkZjU4ZmYwM2E3OTY5NzZhNGY0ZmE1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvSm5pQ29t
bW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwot
Ci0vKiogQ2xhc3Mgd2l0aCBzdGF0aWMgSk5JIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBhcmUgdXNl
ZCBpbiBtYW55IHBsYWNlcy4gKi8KLXB1YmxpYyBjbGFzcyBKbmlDb21tb24gewotICAvKiogRnVu
Y3Rpb25zIHRvIGluY3JlbWVudC9kZWNyZW1lbnQgYW4gcnRjOjpSZWZDb3VudEludGVyZmFjZSBw
b2ludGVyLiAqLwotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUFkZFJlZihsb25n
IHJlZkNvdW50ZWRQb2ludGVyKTsKLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVS
ZWxlYXNlUmVmKGxvbmcgcmVmQ291bnRlZFBvaW50ZXIpOwotCi0gIHB1YmxpYyBzdGF0aWMgbmF0
aXZlIEJ5dGVCdWZmZXIgbmF0aXZlQWxsb2NhdGVCeXRlQnVmZmVyKGludCBzaXplKTsKLSAgcHVi
bGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVGcmVlQnl0ZUJ1ZmZlcihCeXRlQnVmZmVyIGJ1
ZmZlcik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0puaUhlbHBlci5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2phdmEvb3JnL3dlYnJ0Yy9KbmlIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMGQ1NmQ1ZDkyYjY3MDdlMmM5Y2U3NTIyOGZmYjAxMzRhYjcxZDk4Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL0pu
aUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRl
ZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogVGhp
cyBjbGFzcyBpcyBvbmx5IHVzZWQgZnJvbSBqbmlfaGVscGVyLmNjIHRvIGdpdmUgc29tZSBKYXZh
IGZ1bmN0aW9uYWxpdHkgdGhhdCB3ZXJlIG5vdCBwb3NzaWJsZQotICogdG8gZ2VuZXJhdGUgaW4g
b3RoZXIgd2F5cyBkdWUgdG8gYnVncy53ZWJydGMub3JnLzg2MDYgYW5kIGJ1Z3Mud2VicnRjLm9y
Zy84NjMyLgotICovCi1jbGFzcyBKbmlIZWxwZXIgewotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9y
Zy84NjMyKTogUmVtb3ZlLgotICBAQ2FsbGVkQnlOYXRpdmUKLSAgc3RhdGljIGJ5dGVbXSBnZXRT
dHJpbmdCeXRlcyhTdHJpbmcgcykgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gcy5nZXRCeXRl
cygiSVNPLTg4NTktMSIpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRp
b24gZSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIklTTy04ODU5LTEgaXMg
dW5zdXBwb3J0ZWQiKTsKLSAgICB9Ci0gIH0KLQotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy84
NjMyKTogUmVtb3ZlLgotICBAQ2FsbGVkQnlOYXRpdmUKLSAgc3RhdGljIE9iamVjdCBnZXRTdHJp
bmdDbGFzcygpIHsKLSAgICByZXR1cm4gU3RyaW5nLmNsYXNzOwotICB9Ci0KLSAgLy8gVE9ETyhi
dWdzLndlYnJ0Yy5vcmcvODYwNik6IFJlbW92ZS4KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHN0YXRp
YyBPYmplY3QgZ2V0S2V5KE1hcC5FbnRyeSBlbnRyeSkgewotICAgIHJldHVybiBlbnRyeS5nZXRL
ZXkoKTsKLSAgfQotCi0gIC8vIFRPRE8oYnVncy53ZWJydGMub3JnLzg2MDYpOiBSZW1vdmUuCi0g
IEBDYWxsZWRCeU5hdGl2ZQotICBzdGF0aWMgT2JqZWN0IGdldFZhbHVlKE1hcC5FbnRyeSBlbnRy
eSkgewotICAgIHJldHVybiBlbnRyeS5nZXRWYWx1ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
amF2YS9vcmcvd2VicnRjL01lZGlhQ29kZWNVdGlscy5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9N
ZWRpYUNvZGVjVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAyOGNj
M2FlNDY5NzI1N2EzNTY4ZGIzMGYxMDA2OTA3Y2IzZmY0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL01lZGlhQ29kZWNVdGls
cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2Rl
Y0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxp
dGllczsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5h
bm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGph
dmEudXRpbC5NYXA7Ci0KLS8qKiBDb250YWluZXIgY2xhc3MgZm9yIHN0YXRpYyBjb25zdGFudHMg
YW5kIGhlbHBlcnMgdXNlZCB3aXRoIE1lZGlhQ29kZWMuICovCi0vLyBXZSBhcmUgZm9yY2VkIHRv
IHVzZSB0aGUgb2xkIEFQSSBiZWNhdXNlIHdlIHdhbnQgdG8gc3VwcG9ydCBBUEkgbGV2ZWwgPCAy
MS4KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1jbGFzcyBNZWRpYUNvZGVjVXRp
bHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhQ29kZWNVdGls
cyI7Ci0KLSAgLy8gUHJlZml4ZXMgZm9yIHN1cHBvcnRlZCBoYXJkd2FyZSBlbmNvZGVyL2RlY29k
ZXIgY29tcG9uZW50IG5hbWVzLgotICBzdGF0aWMgZmluYWwgU3RyaW5nIEVYWU5PU19QUkVGSVgg
PSAiT01YLkV4eW5vcy4iOwotICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVMX1BSRUZJWCA9ICJP
TVguSW50ZWwuIjsKLSAgc3RhdGljIGZpbmFsIFN0cmluZyBOVklESUFfUFJFRklYID0gIk9NWC5O
dmlkaWEuIjsKLSAgc3RhdGljIGZpbmFsIFN0cmluZyBRQ09NX1BSRUZJWCA9ICJPTVgucWNvbS4i
OwotICBzdGF0aWMgZmluYWwgU3RyaW5nW10gU09GVFdBUkVfSU1QTEVNRU5UQVRJT05fUFJFRklY
RVMgPSB7Ik9NWC5nb29nbGUuIiwgIk9NWC5TRUMuIn07Ci0KLSAgLy8gTlYxMiBjb2xvciBmb3Jt
YXQgc3VwcG9ydGVkIGJ5IFFDT00gY29kZWMsIGJ1dCBub3QgZGVjbGFyZWQgaW4gTWVkaWFDb2Rl
YyAtCi0gIC8vIHNlZSAvaGFyZHdhcmUvcWNvbS9tZWRpYS9tbS1jb3JlL2luYy9PTVhfUUNPTUV4
dG5zLmgKLSAgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNl
bWlQbGFuYXIzMm00a2EgPSAweDdGQTMwQzAxOwotICBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FD
T01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjE2bTRrYSA9IDB4N0ZBMzBDMDI7Ci0gIHN0
YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyNjR4
MzJUaWxlMm04a2EgPSAweDdGQTMwQzAzOwotICBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01f
Rk9STUFUWVVWNDIwUGFja2VkU2VtaVBsYW5hcjMybSA9IDB4N0ZBMzBDMDQ7Ci0KLSAgLy8gQ29s
b3IgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgZGVjb2RlciAtIGluIG9yZGVyIG9mIHBy
ZWZlcmVuY2UuCi0gIHN0YXRpYyBmaW5hbCBpbnRbXSBERUNPREVSX0NPTE9SX0ZPUk1BVFMgPSBu
ZXcgaW50W10ge0NvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwKLSAg
ICAgIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAg
ICBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9RQ09NX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0g
ICAgICBNZWRpYUNvZGVjVXRpbHMuQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxh
bmFyMzJtNGthLAotICAgICAgTWVkaWFDb2RlY1V0aWxzLkNPTE9SX1FDT01fRk9STUFUWVZVNDIw
UGFja2VkU2VtaVBsYW5hcjE2bTRrYSwKLSAgICAgIE1lZGlhQ29kZWNVdGlscy5DT0xPUl9RQ09N
X0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYSwKLSAgICAgIE1lZGlh
Q29kZWNVdGlscy5DT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm19Owot
Ci0gIC8vIENvbG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlIGVuY29kZXIgLSBpbiBv
cmRlciBvZiBwcmVmZXJlbmNlLgotICBzdGF0aWMgZmluYWwgaW50W10gRU5DT0RFUl9DT0xPUl9G
T1JNQVRTID0gewotICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1Jf
Rm9ybWF0WVVWNDIwUGxhbmFyLAotICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRp
ZXMuQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIE1lZGlhQ29kZWNJbmZvLkNv
ZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX1FDT01fRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAg
IE1lZGlhQ29kZWNVdGlscy5DT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIz
Mm19OwotCi0gIC8vIENvbG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRleHR1cmUgbW9kZSBlbmNv
ZGluZyAtIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCi0gIHN0YXRpYyBmaW5hbCBpbnRbXSBURVhU
VVJFX0NPTE9SX0ZPUk1BVFMgPSBnZXRUZXh0dXJlQ29sb3JGb3JtYXRzKCk7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgaW50W10gZ2V0VGV4dHVyZUNvbG9yRm9ybWF0cygpIHsKLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UID49IDE4KSB7Ci0gICAgICByZXR1cm4gbmV3IGludFtdIHtNZWRpYUNv
ZGVjSW5mby5Db2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRTdXJmYWNlfTsKLSAgICB9IGVs
c2UgewotICAgICAgcmV0dXJuIG5ldyBpbnRbXSB7fTsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMg
QE51bGxhYmxlIEludGVnZXIgc2VsZWN0Q29sb3JGb3JtYXQoCi0gICAgICBpbnRbXSBzdXBwb3J0
ZWRDb2xvckZvcm1hdHMsIENvZGVjQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcykgewotICAgIGZv
ciAoaW50IHN1cHBvcnRlZENvbG9yRm9ybWF0IDogc3VwcG9ydGVkQ29sb3JGb3JtYXRzKSB7Ci0g
ICAgICBmb3IgKGludCBjb2RlY0NvbG9yRm9ybWF0IDogY2FwYWJpbGl0aWVzLmNvbG9yRm9ybWF0
cykgewotICAgICAgICBpZiAoY29kZWNDb2xvckZvcm1hdCA9PSBzdXBwb3J0ZWRDb2xvckZvcm1h
dCkgewotICAgICAgICAgIHJldHVybiBjb2RlY0NvbG9yRm9ybWF0OwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgc3RhdGljIGJvb2xlYW4gY29k
ZWNTdXBwb3J0c1R5cGUoTWVkaWFDb2RlY0luZm8gaW5mbywgVmlkZW9Db2RlY01pbWVUeXBlIHR5
cGUpIHsKLSAgICBmb3IgKFN0cmluZyBtaW1lVHlwZSA6IGluZm8uZ2V0U3VwcG9ydGVkVHlwZXMo
KSkgewotICAgICAgaWYgKHR5cGUubWltZVR5cGUoKS5lcXVhbHMobWltZVR5cGUpKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRDb2RlY1Byb3BlcnRpZXMoVmlkZW9D
b2RlY01pbWVUeXBlIHR5cGUsIGJvb2xlYW4gaGlnaFByb2ZpbGUpIHsKLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgIGNhc2UgVlA4OgotICAgICAgY2FzZSBWUDk6Ci0gICAgICAgIHJldHVybiBu
ZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgIGNhc2UgSDI2NDoKLSAgICAgICAg
cmV0dXJuIEgyNjRVdGlscy5nZXREZWZhdWx0SDI2NFBhcmFtcyhoaWdoUHJvZmlsZSk7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJV
bnN1cHBvcnRlZCBjb2RlYzogIiArIHR5cGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgTWVk
aWFDb2RlY1V0aWxzKCkgewotICAgIC8vIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50
aWF0ZWQuCi0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlckZhY3RvcnkuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVv
RGVjb2RlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2YWNh
NTgyMmJmM2ZlNmQzM2YyMTJiZGMyNjE1YzU2MDgyMWNiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRl
b0RlY29kZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9y
Zy53ZWJydGMuTWVkaWFDb2RlY1V0aWxzLkVYWU5PU19QUkVGSVg7Ci1pbXBvcnQgc3RhdGljIG9y
Zy53ZWJydGMuTWVkaWFDb2RlY1V0aWxzLlFDT01fUFJFRklYOwotCi1pbXBvcnQgYW5kcm9pZC5t
ZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJbmZv
LkNvZGVjQ2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0xpc3Q7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3Rh
dGlvbi5OdWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEu
dXRpbC5MaXN0OwotCi0vKiogRmFjdG9yeSBmb3IgZGVjb2RlcnMgYmFja2VkIGJ5IEFuZHJvaWQg
TWVkaWFDb2RlYyBBUEkuICovCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKSAvLyBB
UEkgbGV2ZWwgMTYgcmVxdWlyZXMgdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kcy4KLWNsYXNzIE1l
ZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5IGltcGxlbWVudHMgVmlkZW9EZWNvZGVyRmFjdG9y
eSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFDb2RlY1ZpZGVv
RGVjb2RlckZhY3RvcnkiOwotCi0gIHByaXZhdGUgZmluYWwgQE51bGxhYmxlIEVnbEJhc2UuQ29u
dGV4dCBzaGFyZWRDb250ZXh0OwotICBwcml2YXRlIGZpbmFsIEBOdWxsYWJsZSBQcmVkaWNhdGU8
TWVkaWFDb2RlY0luZm8+IGNvZGVjQWxsb3dlZFByZWRpY2F0ZTsKLQotICAvKioKLSAgICogTWVk
aWFDb2RlY1ZpZGVvRGVjb2RlckZhY3Rvcnkgd2l0aCBzdXBwb3J0IG9mIGNvZGVjcyBmaWx0ZXJp
bmcuCi0gICAqCi0gICAqIEBwYXJhbSBzaGFyZWRDb250ZXh0IFRoZSB0ZXh0dXJlcyBnZW5lcmF0
ZWQgd2lsbCBiZSBhY2Nlc3NpYmxlIGZyb20gdGhpcyBjb250ZXh0LiBNYXkgYmUgbnVsbCwKLSAg
ICogICAgICAgICAgICAgICAgICAgICAgdGhpcyBkaXNhYmxlcyB0ZXh0dXJlIHN1cHBvcnQuCi0g
ICAqIEBwYXJhbSBjb2RlY0FsbG93ZWRQcmVkaWNhdGUgb3B0aW9uYWwgcHJlZGljYXRlIHRvIHRl
c3QgaWYgY29kZWMgYWxsb3dlZC4gQWxsIGNvZGVjcyBhcmUKLSAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxvd2VkIHdoZW4gcHJlZGljYXRlIGlzIG5vdCBwcm92aWRlZC4KLSAg
ICovCi0gIHB1YmxpYyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeShATnVsbGFibGUgRWds
QmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsCi0gICAgICBATnVsbGFibGUgUHJlZGljYXRlPE1l
ZGlhQ29kZWNJbmZvPiBjb2RlY0FsbG93ZWRQcmVkaWNhdGUpIHsKLSAgICB0aGlzLnNoYXJlZENv
bnRleHQgPSBzaGFyZWRDb250ZXh0OwotICAgIHRoaXMuY29kZWNBbGxvd2VkUHJlZGljYXRlID0g
Y29kZWNBbGxvd2VkUHJlZGljYXRlOwotICB9Ci0KLSAgQE51bGxhYmxlCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgVmlkZW9EZWNvZGVyIGNyZWF0ZURlY29kZXIoVmlkZW9Db2RlY0luZm8gY29kZWNU
eXBlKSB7Ci0gICAgVmlkZW9Db2RlY01pbWVUeXBlIHR5cGUgPSBWaWRlb0NvZGVjTWltZVR5cGUu
dmFsdWVPZihjb2RlY1R5cGUuZ2V0TmFtZSgpKTsKLSAgICBNZWRpYUNvZGVjSW5mbyBpbmZvID0g
ZmluZENvZGVjRm9yVHlwZSh0eXBlKTsKLQotICAgIGlmIChpbmZvID09IG51bGwpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLQotICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
cyA9IGluZm8uZ2V0Q2FwYWJpbGl0aWVzRm9yVHlwZSh0eXBlLm1pbWVUeXBlKCkpOwotICAgIHJl
dHVybiBuZXcgQW5kcm9pZFZpZGVvRGVjb2RlcihuZXcgTWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5
SW1wbCgpLCBpbmZvLmdldE5hbWUoKSwgdHlwZSwKLSAgICAgICAgTWVkaWFDb2RlY1V0aWxzLnNl
bGVjdENvbG9yRm9ybWF0KE1lZGlhQ29kZWNVdGlscy5ERUNPREVSX0NPTE9SX0ZPUk1BVFMsIGNh
cGFiaWxpdGllcyksCi0gICAgICAgIHNoYXJlZENvbnRleHQpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBWaWRlb0NvZGVjSW5mb1tdIGdldFN1cHBvcnRlZENvZGVjcygpIHsKLSAgICBM
aXN0PFZpZGVvQ29kZWNJbmZvPiBzdXBwb3J0ZWRDb2RlY0luZm9zID0gbmV3IEFycmF5TGlzdDxW
aWRlb0NvZGVjSW5mbz4oKTsKLSAgICAvLyBHZW5lcmF0ZSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNv
ZGVjcyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlOgotICAgIC8vIFZQOCwgVlA5LCBIMjY0IChoaWdo
IHByb2ZpbGUpLCBhbmQgSDI2NCAoYmFzZWxpbmUgcHJvZmlsZSkuCi0gICAgZm9yIChWaWRlb0Nv
ZGVjTWltZVR5cGUgdHlwZSA6IG5ldyBWaWRlb0NvZGVjTWltZVR5cGVbXSB7Ci0gICAgICAgICAg
ICAgVmlkZW9Db2RlY01pbWVUeXBlLlZQOCwgVmlkZW9Db2RlY01pbWVUeXBlLlZQOSwgVmlkZW9D
b2RlY01pbWVUeXBlLkgyNjR9KSB7Ci0gICAgICBNZWRpYUNvZGVjSW5mbyBjb2RlYyA9IGZpbmRD
b2RlY0ZvclR5cGUodHlwZSk7Ci0gICAgICBpZiAoY29kZWMgIT0gbnVsbCkgewotICAgICAgICBT
dHJpbmcgbmFtZSA9IHR5cGUubmFtZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBWaWRlb0NvZGVj
TWltZVR5cGUuSDI2NCAmJiBpc0gyNjRIaWdoUHJvZmlsZVN1cHBvcnRlZChjb2RlYykpIHsKLSAg
ICAgICAgICBzdXBwb3J0ZWRDb2RlY0luZm9zLmFkZChuZXcgVmlkZW9Db2RlY0luZm8oCi0gICAg
ICAgICAgICAgIG5hbWUsIE1lZGlhQ29kZWNVdGlscy5nZXRDb2RlY1Byb3BlcnRpZXModHlwZSwg
LyogaGlnaFByb2ZpbGU9ICovIHRydWUpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdXBwb3J0
ZWRDb2RlY0luZm9zLmFkZChuZXcgVmlkZW9Db2RlY0luZm8oCi0gICAgICAgICAgICBuYW1lLCBN
ZWRpYUNvZGVjVXRpbHMuZ2V0Q29kZWNQcm9wZXJ0aWVzKHR5cGUsIC8qIGhpZ2hQcm9maWxlPSAq
LyBmYWxzZSkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3VwcG9ydGVkQ29kZWNJ
bmZvcy50b0FycmF5KG5ldyBWaWRlb0NvZGVjSW5mb1tzdXBwb3J0ZWRDb2RlY0luZm9zLnNpemUo
KV0pOwotICB9Ci0KLSAgcHJpdmF0ZSBATnVsbGFibGUgTWVkaWFDb2RlY0luZm8gZmluZENvZGVj
Rm9yVHlwZShWaWRlb0NvZGVjTWltZVR5cGUgdHlwZSkgewotICAgIC8vIEhXIGRlY29kaW5nIGlz
IG5vdCBzdXBwb3J0ZWQgb24gYnVpbGRzIGJlZm9yZSBLSVRLQVQuCi0gICAgaWYgKEJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICByZXR1
cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1lZGlhQ29kZWNMaXN0
LmdldENvZGVjQ291bnQoKTsgKytpKSB7Ci0gICAgICBNZWRpYUNvZGVjSW5mbyBpbmZvID0gbnVs
bDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGluZm8gPSBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0lu
Zm9BdChpKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZGVjb2RlciBjb2RlYyBpbmZv
IiwgZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpbmZvID09IG51bGwgfHwgaW5mby5pc0VuY29k
ZXIoKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGlzU3VwcG9y
dGVkQ29kZWMoaW5mbywgdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuIGluZm87Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG51bGw7IC8vIE5vIHN1cHBvcnQgZm9yIHRoaXMgdHlwZS4KLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVkaWFDb2RlY0luZm8gaW5kaWNh
dGVzIGEgc3VwcG9ydGVkIGVuY29kZXIgZm9yIHRoZSBnaXZlbiB0eXBlLgotICBwcml2YXRlIGJv
b2xlYW4gaXNTdXBwb3J0ZWRDb2RlYyhNZWRpYUNvZGVjSW5mbyBpbmZvLCBWaWRlb0NvZGVjTWlt
ZVR5cGUgdHlwZSkgewotICAgIFN0cmluZyBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0gICAgaWYg
KCFNZWRpYUNvZGVjVXRpbHMuY29kZWNTdXBwb3J0c1R5cGUoaW5mbywgdHlwZSkpIHsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gQ2hlY2sgZm9yIGEgc3VwcG9ydGVkIGNvbG9y
IGZvcm1hdC4KLSAgICBpZiAoTWVkaWFDb2RlY1V0aWxzLnNlbGVjdENvbG9yRm9ybWF0KAotICAg
ICAgICAgICAgTWVkaWFDb2RlY1V0aWxzLkRFQ09ERVJfQ09MT1JfRk9STUFUUywgaW5mby5nZXRD
YXBhYmlsaXRpZXNGb3JUeXBlKHR5cGUubWltZVR5cGUoKSkpCi0gICAgICAgID09IG51bGwpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQ29kZWNBbGxvd2VkKGlu
Zm8pOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ29kZWNBbGxvd2VkKE1lZGlhQ29kZWNJ
bmZvIGluZm8pIHsKLSAgICBpZiAoY29kZWNBbGxvd2VkUHJlZGljYXRlID09IG51bGwpIHsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gY29kZWNBbGxvd2VkUHJlZGljYXRl
LnRlc3QoaW5mbyk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNIMjY0SGlnaFByb2ZpbGVT
dXBwb3J0ZWQoTWVkaWFDb2RlY0luZm8gaW5mbykgewotICAgIFN0cmluZyBuYW1lID0gaW5mby5n
ZXROYW1lKCk7Ci0gICAgLy8gU3VwcG9ydCBILjI2NCBIUCBkZWNvZGluZyBvbiBRQ09NIGNoaXBz
IGZvciBBbmRyb2lkIEwgYW5kIGFib3ZlLgotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQg
Pj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCAmJiBuYW1lLnN0YXJ0c1dpdGgoUUNPTV9Q
UkVGSVgpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gU3VwcG9ydCBILjI2
NCBIUCBkZWNvZGluZyBvbiBFeHlub3MgY2hpcHMgZm9yIEFuZHJvaWQgTSBhbmQgYWJvdmUuCi0g
ICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk0gJiYg
bmFtZS5zdGFydHNXaXRoKEVYWU5PU19QUkVGSVgpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2Vi
cnRjL01lZGlhQ29kZWNXcmFwcGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL01lZGlhQ29kZWNX
cmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNjdkMWY0YjlkNWVh
ODRmODg2ZDdiYmNiZjVmNWIwYzcwYzYyNDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjV3JhcHBlci5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjOwotaW1w
b3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDcnlwdG87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRp
YUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
U3VyZmFjZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0vKioKLSAqIFN1YnNldCBv
ZiBtZXRob2RzIGRlZmluZWQgaW4ge0BsaW5rIGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY30gbmVl
ZGVkIGJ5Ci0gKiB7QGxpbmsgSGFyZHdhcmVWaWRlb0VuY29kZXJ9IGFuZCB7QGxpbmsgQW5kcm9p
ZFZpZGVvRGVjb2Rlcn0uIFRoaXMgaW50ZXJmYWNlCi0gKiBleGlzdHMgdG8gYWxsb3cgbW9ja2lu
ZyBhbmQgdXNpbmcgYSBmYWtlIGltcGxlbWVudGF0aW9uIGluIHRlc3RzLgotICovCi1pbnRlcmZh
Y2UgTWVkaWFDb2RlY1dyYXBwZXIgewotICB2b2lkIGNvbmZpZ3VyZShNZWRpYUZvcm1hdCBmb3Jt
YXQsIFN1cmZhY2Ugc3VyZmFjZSwgTWVkaWFDcnlwdG8gY3J5cHRvLCBpbnQgZmxhZ3MpOwotCi0g
IHZvaWQgc3RhcnQoKTsKLQotICB2b2lkIGZsdXNoKCk7Ci0KLSAgdm9pZCBzdG9wKCk7Ci0KLSAg
dm9pZCByZWxlYXNlKCk7Ci0KLSAgaW50IGRlcXVldWVJbnB1dEJ1ZmZlcihsb25nIHRpbWVvdXRV
cyk7Ci0KLSAgdm9pZCBxdWV1ZUlucHV0QnVmZmVyKGludCBpbmRleCwgaW50IG9mZnNldCwgaW50
IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZVVzLCBpbnQgZmxhZ3MpOwotCi0gIGludCBkZXF1
ZXVlT3V0cHV0QnVmZmVyKE1lZGlhQ29kZWMuQnVmZmVySW5mbyBpbmZvLCBsb25nIHRpbWVvdXRV
cyk7Ci0KLSAgdm9pZCByZWxlYXNlT3V0cHV0QnVmZmVyKGludCBpbmRleCwgYm9vbGVhbiByZW5k
ZXIpOwotCi0gIE1lZGlhRm9ybWF0IGdldE91dHB1dEZvcm1hdCgpOwotCi0gIEJ5dGVCdWZmZXJb
XSBnZXRJbnB1dEJ1ZmZlcnMoKTsKLQotICBCeXRlQnVmZmVyW10gZ2V0T3V0cHV0QnVmZmVycygp
OwotCi0gIFN1cmZhY2UgY3JlYXRlSW5wdXRTdXJmYWNlKCk7Ci0KLSAgdm9pZCBzZXRQYXJhbWV0
ZXJzKEJ1bmRsZSBwYXJhbXMpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9NZWRp
YUNvZGVjV3JhcHBlckZhY3RvcnkuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTWVkaWFDb2RlY1dy
YXBwZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NjJjYjYy
YTdmYzI1ODhhYmQ0ZjYxN2FlMTcwZjA2YjNlYTg3NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjV3JhcHBl
ckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRp
b247Ci0KLWludGVyZmFjZSBNZWRpYUNvZGVjV3JhcHBlckZhY3RvcnkgewotICAvKioKLSAgICog
Q3JlYXRlcyBhIG5ldyB7QGxpbmsgTWVkaWFDb2RlY1dyYXBwZXJ9IGJ5IGNvZGVjIG5hbWUuCi0g
ICAqCi0gICAqIDxwPkZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgYW5kcm9p
ZC5tZWRpYS5NZWRpYUNvZGVjI2NyZWF0ZUJ5Q29kZWNOYW1lfS4KLSAgICovCi0gIE1lZGlhQ29k
ZWNXcmFwcGVyIGNyZWF0ZUJ5Q29kZWNOYW1lKFN0cmluZyBuYW1lKSB0aHJvd3MgSU9FeGNlcHRp
b247Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL01lZGlhQ29kZWNXcmFwcGVyRmFj
dG9yeUltcGwuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5
SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDRkNmViZTRmNTc5ZjY5
NzIxZDEwZGY4YmUwMzUyNjc5OWJlZTg4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5
SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5U
YXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjOwotaW1wb3J0IGFuZHJv
aWQubWVkaWEuTWVkaWFDb2RlYy5CdWZmZXJJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVk
aWFDcnlwdG87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9ydCBhbmRy
b2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBqYXZh
LmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICog
SW1wbGVtZW50YXRpb24gb2YgTWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5IHRoYXQgcmV0dXJucyBN
ZWRpYUNvZGVjSW50ZXJmYWNlcyB3cmFwcGluZwotICoge0BsaW5rIGFuZHJvaWQubWVkaWEuTWVk
aWFDb2RlY30gb2JqZWN0cy4KLSAqLwotY2xhc3MgTWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5SW1w
bCBpbXBsZW1lbnRzIE1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeSB7Ci0gIHByaXZhdGUgc3RhdGlj
IGNsYXNzIE1lZGlhQ29kZWNXcmFwcGVySW1wbCBpbXBsZW1lbnRzIE1lZGlhQ29kZWNXcmFwcGVy
IHsKLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhQ29kZWMgbWVkaWFDb2RlYzsKLQotICAgIHB1Ymxp
YyBNZWRpYUNvZGVjV3JhcHBlckltcGwoTWVkaWFDb2RlYyBtZWRpYUNvZGVjKSB7Ci0gICAgICB0
aGlzLm1lZGlhQ29kZWMgPSBtZWRpYUNvZGVjOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShNZWRpYUZvcm1hdCBmb3JtYXQsIFN1cmZhY2Ugc3VyZmFj
ZSwgTWVkaWFDcnlwdG8gY3J5cHRvLCBpbnQgZmxhZ3MpIHsKLSAgICAgIG1lZGlhQ29kZWMuY29u
ZmlndXJlKGZvcm1hdCwgc3VyZmFjZSwgY3J5cHRvLCBmbGFncyk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnQoKSB7Ci0gICAgICBtZWRpYUNvZGVjLnN0YXJ0
KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZmx1c2goKSB7Ci0g
ICAgICBtZWRpYUNvZGVjLmZsdXNoKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgc3RvcCgpIHsKLSAgICAgIG1lZGlhQ29kZWMuc3RvcCgpOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBtZWRpYUNvZGVj
LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGRlcXVl
dWVJbnB1dEJ1ZmZlcihsb25nIHRpbWVvdXRVcykgewotICAgICAgcmV0dXJuIG1lZGlhQ29kZWMu
ZGVxdWV1ZUlucHV0QnVmZmVyKHRpbWVvdXRVcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgcXVldWVJbnB1dEJ1ZmZlcigKLSAgICAgICAgaW50IGluZGV4LCBpbnQg
b2Zmc2V0LCBpbnQgc2l6ZSwgbG9uZyBwcmVzZW50YXRpb25UaW1lVXMsIGludCBmbGFncykgewot
ICAgICAgbWVkaWFDb2RlYy5xdWV1ZUlucHV0QnVmZmVyKGluZGV4LCBvZmZzZXQsIHNpemUsIHBy
ZXNlbnRhdGlvblRpbWVVcywgZmxhZ3MpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBpbnQgZGVxdWV1ZU91dHB1dEJ1ZmZlcihCdWZmZXJJbmZvIGluZm8sIGxvbmcgdGltZW91
dFVzKSB7Ci0gICAgICByZXR1cm4gbWVkaWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8s
IHRpbWVvdXRVcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVs
ZWFzZU91dHB1dEJ1ZmZlcihpbnQgaW5kZXgsIGJvb2xlYW4gcmVuZGVyKSB7Ci0gICAgICBtZWRp
YUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgsIHJlbmRlcik7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhRm9ybWF0IGdldE91dHB1dEZvcm1hdCgpIHsKLSAg
ICAgIHJldHVybiBtZWRpYUNvZGVjLmdldE91dHB1dEZvcm1hdCgpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBCeXRlQnVmZmVyW10gZ2V0SW5wdXRCdWZmZXJzKCkgewotICAg
ICAgcmV0dXJuIG1lZGlhQ29kZWMuZ2V0SW5wdXRCdWZmZXJzKCk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVCdWZmZXJbXSBnZXRPdXRwdXRCdWZmZXJzKCkgewotICAg
ICAgcmV0dXJuIG1lZGlhQ29kZWMuZ2V0T3V0cHV0QnVmZmVycygpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIEBUYXJnZXRBcGkoMTgpCi0gICAgcHVibGljIFN1cmZhY2UgY3JlYXRlSW5w
dXRTdXJmYWNlKCkgewotICAgICAgcmV0dXJuIG1lZGlhQ29kZWMuY3JlYXRlSW5wdXRTdXJmYWNl
KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgQFRhcmdldEFwaSgxOSkKLSAgICBwdWJs
aWMgdm9pZCBzZXRQYXJhbWV0ZXJzKEJ1bmRsZSBwYXJhbXMpIHsKLSAgICAgIG1lZGlhQ29kZWMu
c2V0UGFyYW1ldGVycyhwYXJhbXMpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgTWVkaWFDb2RlY1dyYXBwZXIgY3JlYXRlQnlDb2RlY05hbWUoU3RyaW5nIG5hbWUpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG5ldyBNZWRpYUNvZGVjV3JhcHBlckltcGwoTWVk
aWFDb2RlYy5jcmVhdGVCeUNvZGVjTmFtZShuYW1lKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
YXZhL29yZy93ZWJydGMvTlYxMkJ1ZmZlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9OVjEyQnVm
ZmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjZmNzI0NzhiMTgzNDNj
NTc1NDI0NTFlMGNjZDhmM2Y0ODM3YmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9OVjEyQnVmZmVyLmphdmEKKysrIC9kZXYv
bnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBq
YXZhLm5pby5CeXRlQnVmZmVyOwotCi1wdWJsaWMgY2xhc3MgTlYxMkJ1ZmZlciBpbXBsZW1lbnRz
IFZpZGVvRnJhbWUuQnVmZmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgd2lkdGg7Ci0gIHByaXZh
dGUgZmluYWwgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgc3RyaWRlOwotICBwcml2
YXRlIGZpbmFsIGludCBzbGljZUhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGJ1
ZmZlcjsKLSAgcHJpdmF0ZSBmaW5hbCBSZWZDb3VudERlbGVnYXRlIHJlZkNvdW50RGVsZWdhdGU7
Ci0KLSAgcHVibGljIE5WMTJCdWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRl
LCBpbnQgc2xpY2VIZWlnaHQsIEJ5dGVCdWZmZXIgYnVmZmVyLAotICAgICAgQE51bGxhYmxlIFJ1
bm5hYmxlIHJlbGVhc2VDYWxsYmFjaykgewotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0
aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB0aGlzLnN0cmlkZSA9IHN0cmlkZTsKLSAgICB0aGlz
LnNsaWNlSGVpZ2h0ID0gc2xpY2VIZWlnaHQ7Ci0gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0g
ICAgdGhpcy5yZWZDb3VudERlbGVnYXRlID0gbmV3IFJlZkNvdW50RGVsZWdhdGUocmVsZWFzZUNh
bGxiYWNrKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFdpZHRoKCkgewot
ICAgIHJldHVybiB3aWR0aDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldEhl
aWdodCgpIHsKLSAgICByZXR1cm4gaGVpZ2h0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIgdG9JNDIwKCkgewotICAgIHJldHVybiAoVmlkZW9GcmFt
ZS5JNDIwQnVmZmVyKSBjcm9wQW5kU2NhbGUoMCwgMCwgd2lkdGgsIGhlaWdodCwgd2lkdGgsIGhl
aWdodCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmV0YWluKCkgewotICAg
IHJlZkNvdW50RGVsZWdhdGUucmV0YWluKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgcmVsZWFzZSgpIHsKLSAgICByZWZDb3VudERlbGVnYXRlLnJlbGVhc2UoKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlkZW9GcmFtZS5CdWZmZXIgY3JvcEFuZFNjYWxlKAot
ICAgICAgaW50IGNyb3BYLCBpbnQgY3JvcFksIGludCBjcm9wV2lkdGgsIGludCBjcm9wSGVpZ2h0
LCBpbnQgc2NhbGVXaWR0aCwgaW50IHNjYWxlSGVpZ2h0KSB7Ci0gICAgSmF2YUk0MjBCdWZmZXIg
bmV3QnVmZmVyID0gSmF2YUk0MjBCdWZmZXIuYWxsb2NhdGUoc2NhbGVXaWR0aCwgc2NhbGVIZWln
aHQpOwotICAgIG5hdGl2ZUNyb3BBbmRTY2FsZShjcm9wWCwgY3JvcFksIGNyb3BXaWR0aCwgY3Jv
cEhlaWdodCwgc2NhbGVXaWR0aCwgc2NhbGVIZWlnaHQsIGJ1ZmZlciwgd2lkdGgsCi0gICAgICAg
IGhlaWdodCwgc3RyaWRlLCBzbGljZUhlaWdodCwgbmV3QnVmZmVyLmdldERhdGFZKCksIG5ld0J1
ZmZlci5nZXRTdHJpZGVZKCksCi0gICAgICAgIG5ld0J1ZmZlci5nZXREYXRhVSgpLCBuZXdCdWZm
ZXIuZ2V0U3RyaWRlVSgpLCBuZXdCdWZmZXIuZ2V0RGF0YVYoKSwgbmV3QnVmZmVyLmdldFN0cmlk
ZVYoKSk7Ci0gICAgcmV0dXJuIG5ld0J1ZmZlcjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSB2b2lkIG5hdGl2ZUNyb3BBbmRTY2FsZShpbnQgY3JvcFgsIGludCBjcm9wWSwgaW50IGNy
b3BXaWR0aCwgaW50IGNyb3BIZWlnaHQsCi0gICAgICBpbnQgc2NhbGVXaWR0aCwgaW50IHNjYWxl
SGVpZ2h0LCBCeXRlQnVmZmVyIHNyYywgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0LCBpbnQg
c3JjU3RyaWRlLAotICAgICAgaW50IHNyY1NsaWNlSGVpZ2h0LCBCeXRlQnVmZmVyIGRzdFksIGlu
dCBkc3RTdHJpZGVZLCBCeXRlQnVmZmVyIGRzdFUsIGludCBkc3RTdHJpZGVVLAotICAgICAgQnl0
ZUJ1ZmZlciBkc3RWLCBpbnQgZHN0U3RyaWRlVik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcv
d2VicnRjL05WMjFCdWZmZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTlYyMUJ1ZmZlci5qYXZh
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmU2ZTE3OWRhZWJmODU1NmVmNWQ3MDkx
Mzk4ZGE5NTEyYTUzNjhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTlYyMUJ1ZmZlci5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS5uaW8u
Qnl0ZUJ1ZmZlcjsKLQotcHVibGljIGNsYXNzIE5WMjFCdWZmZXIgaW1wbGVtZW50cyBWaWRlb0Zy
YW1lLkJ1ZmZlciB7Ci0gIHByaXZhdGUgZmluYWwgYnl0ZVtdIGRhdGE7Ci0gIHByaXZhdGUgZmlu
YWwgaW50IHdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgZmlu
YWwgUmVmQ291bnREZWxlZ2F0ZSByZWZDb3VudERlbGVnYXRlOwotCi0gIHB1YmxpYyBOVjIxQnVm
ZmVyKGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEBOdWxsYWJsZSBSdW5uYWJs
ZSByZWxlYXNlQ2FsbGJhY2spIHsKLSAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgIHRoaXMud2lk
dGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB0aGlzLnJlZkNvdW50
RGVsZWdhdGUgPSBuZXcgUmVmQ291bnREZWxlZ2F0ZShyZWxlYXNlQ2FsbGJhY2spOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB7Ci0gICAgcmV0dXJuIHdpZHRo
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgewotICAgIHJl
dHVybiBoZWlnaHQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZGVvRnJhbWUuSTQy
MEJ1ZmZlciB0b0k0MjAoKSB7Ci0gICAgLy8gQ3JvcHBpbmcgY29udmVydHMgdGhlIGZyYW1lIHRv
IEk0MjAuIEp1c3QgY3JvcCBhbmQgc2NhbGUgdG8gdGhlIHdob2xlIGltYWdlLgotICAgIHJldHVy
biAoVmlkZW9GcmFtZS5JNDIwQnVmZmVyKSBjcm9wQW5kU2NhbGUoMCAvKiBjcm9wWCAqLywgMCAv
KiBjcm9wWSAqLywgd2lkdGggLyogY3JvcFdpZHRoICovLAotICAgICAgICBoZWlnaHQgLyogY3Jv
cEhlaWdodCAqLywgd2lkdGggLyogc2NhbGVXaWR0aCAqLywgaGVpZ2h0IC8qIHNjYWxlSGVpZ2h0
ICovKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZXRhaW4oKSB7Ci0gICAg
cmVmQ291bnREZWxlZ2F0ZS5yZXRhaW4oKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCByZWxlYXNlKCkgewotICAgIHJlZkNvdW50RGVsZWdhdGUucmVsZWFzZSgpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWRlb0ZyYW1lLkJ1ZmZlciBjcm9wQW5kU2NhbGUoCi0g
ICAgICBpbnQgY3JvcFgsIGludCBjcm9wWSwgaW50IGNyb3BXaWR0aCwgaW50IGNyb3BIZWlnaHQs
IGludCBzY2FsZVdpZHRoLCBpbnQgc2NhbGVIZWlnaHQpIHsKLSAgICBKYXZhSTQyMEJ1ZmZlciBu
ZXdCdWZmZXIgPSBKYXZhSTQyMEJ1ZmZlci5hbGxvY2F0ZShzY2FsZVdpZHRoLCBzY2FsZUhlaWdo
dCk7Ci0gICAgbmF0aXZlQ3JvcEFuZFNjYWxlKGNyb3BYLCBjcm9wWSwgY3JvcFdpZHRoLCBjcm9w
SGVpZ2h0LCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCwgZGF0YSwgd2lkdGgsCi0gICAgICAgIGhl
aWdodCwgbmV3QnVmZmVyLmdldERhdGFZKCksIG5ld0J1ZmZlci5nZXRTdHJpZGVZKCksIG5ld0J1
ZmZlci5nZXREYXRhVSgpLAotICAgICAgICBuZXdCdWZmZXIuZ2V0U3RyaWRlVSgpLCBuZXdCdWZm
ZXIuZ2V0RGF0YVYoKSwgbmV3QnVmZmVyLmdldFN0cmlkZVYoKSk7Ci0gICAgcmV0dXJuIG5ld0J1
ZmZlcjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUNyb3BBbmRT
Y2FsZShpbnQgY3JvcFgsIGludCBjcm9wWSwgaW50IGNyb3BXaWR0aCwgaW50IGNyb3BIZWlnaHQs
Ci0gICAgICBpbnQgc2NhbGVXaWR0aCwgaW50IHNjYWxlSGVpZ2h0LCBieXRlW10gc3JjLCBpbnQg
c3JjV2lkdGgsIGludCBzcmNIZWlnaHQsIEJ5dGVCdWZmZXIgZHN0WSwKLSAgICAgIGludCBkc3RT
dHJpZGVZLCBCeXRlQnVmZmVyIGRzdFUsIGludCBkc3RTdHJpZGVVLCBCeXRlQnVmZmVyIGRzdFYs
IGludCBkc3RTdHJpZGVWKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTmF0aXZl
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTmF0aXZlQW5k
cm9pZFZpZGVvVHJhY2tTb3VyY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2RjOWI1MzU1NDIxODZmYzQzYWM5NjRiNjZmYzc3OWQ1NjkwODkzZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL05hdGl2ZUFu
ZHJvaWRWaWRlb1RyYWNrU291cmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxOSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5W
aWRlb0ZyYW1lOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9Qcm9jZXNzb3I7Ci0KLS8qKgotICog
VGhpcyBjbGFzcyBpcyBtZWFudCB0byBiZSBhIHNpbXBsZSBsYXllciB0aGF0IG9ubHkgaGFuZGxl
cyB0aGUgSk5JIHdyYXBwaW5nIG9mIGEgQysrCi0gKiBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSwg
dGhhdCBjYW4gZWFzaWx5IGJlIG1vY2tlZCBvdXQgaW4gSmF2YSB1bml0IHRlc3RzLiBSZWZyYWlu
IGZyb20gYWRkaW5nCi0gKiBhbnkgdW5uZWNlc3NhcnkgbG9naWMgdG8gdGhpcyBjbGFzcy4KLSAq
IFRoaXMgY2xhc3MgaXMgdGhyZWQgc2FmZSBhbmQgbWV0aG9kcyBjYW4gYmUgY2FsbGVkIGZyb20g
YW55IHRocmVhZCwgYnV0IGlmIGZyYW1lcyBBLCBCLCAuLi4sIGFyZQotICogc2VudCB0byBhZGFw
dEZyYW1lKCksIHRoZSBhZGFwdGVkIGZyYW1lcyBhZGFwdGVkQSwgYWRhcHRlZEIsIC4uLiwgbmVl
ZHMgdG8gYmUgcGFzc2VkIGluIHRoZSBzYW1lCi0gKiBvcmRlciB0byBvbkZyYW1lQ2FwdHVyZWQo
KS4KLSAqLwotY2xhc3MgTmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UgewotICAvLyBQb2lu
dGVyIHRvIHdlYnJ0Yzo6am5pOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZS4KLSAgcHJpdmF0ZSBm
aW5hbCBsb25nIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlOwotCi0gIHB1YmxpYyBOYXRp
dmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZShsb25nIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291
cmNlKSB7Ci0gICAgdGhpcy5uYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSA9IG5hdGl2ZUFu
ZHJvaWRWaWRlb1RyYWNrU291cmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgc3RhdGUg
Zm9yIHRoZSBuYXRpdmUgTWVkaWFTb3VyY2VJbnRlcmZhY2UuIE1hcHMgYm9vbGVhbiB0byBlaXRo
ZXIKLSAgICogU291cmNlU3RhdGU6OmtMaXZlIG9yIFNvdXJjZVN0YXRlOjprRW5kZWQuCi0gICAq
LwotICBwdWJsaWMgdm9pZCBzZXRTdGF0ZShib29sZWFuIGlzTGl2ZSkgewotICAgIG5hdGl2ZVNl
dFN0YXRlKG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLCBpc0xpdmUpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZGVsaXZlcmlu
ZyBhbnkgZnJhbWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmcmFtZSBzaG91bGQgYmUKLSAgICogZHJv
cHBlZCBvciB3aGF0IHRoZSBjcm9wcGluZyBhbmQgc2NhbGluZyBwYXJhbWV0ZXJzIHNob3VsZCBi
ZS4gSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBudWxsLCB0aGUKLSAgICogZnJhbWUgc2hvdWxkIGJl
IGRyb3BwZWQsIG90aGVyd2lzZSB0aGUgZnJhbWUgc2hvdWxkIGJlIGFkYXB0ZWQgaW4gYWNjb3Jk
YW5jZSB0byB0aGUgZnJhbWUKLSAgICogYWRhcHRhdGlvbiBwYXJhbWV0ZXJzIGJlZm9yZSBjYWxs
aW5nIG9uRnJhbWVDYXB0dXJlZCgpLgotICAgKi8KLSAgQE51bGxhYmxlCi0gIHB1YmxpYyBWaWRl
b1Byb2Nlc3Nvci5GcmFtZUFkYXB0YXRpb25QYXJhbWV0ZXJzIGFkYXB0RnJhbWUoVmlkZW9GcmFt
ZSBmcmFtZSkgewotICAgIHJldHVybiBuYXRpdmVBZGFwdEZyYW1lKG5hdGl2ZUFuZHJvaWRWaWRl
b1RyYWNrU291cmNlLCBmcmFtZS5nZXRCdWZmZXIoKS5nZXRXaWR0aCgpLAotICAgICAgICBmcmFt
ZS5nZXRCdWZmZXIoKS5nZXRIZWlnaHQoKSwgZnJhbWUuZ2V0Um90YXRpb24oKSwgZnJhbWUuZ2V0
VGltZXN0YW1wTnMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUGFzcyBhbiBhZGFwdGVkIGZyYW1l
IHRvIHRoZSBuYXRpdmUgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuIE5vdGUgdGhhdCBhZGFwdEZy
YW1lKCkgaXMKLSAgICogZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGZpcnN0IGFuZCB0aGF0IHRoZSBw
YXNzZWQgZnJhbWUgY29uZm9ybXMgdG8gdGhvc2UgcGFyYW1ldGVycy4KLSAgICovCi0gIHB1Ymxp
YyB2b2lkIG9uRnJhbWVDYXB0dXJlZChWaWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAgbmF0aXZlT25G
cmFtZUNhcHR1cmVkKG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLCBmcmFtZS5nZXRSb3Rh
dGlvbigpLAotICAgICAgICBmcmFtZS5nZXRUaW1lc3RhbXBOcygpLCBmcmFtZS5nZXRCdWZmZXIo
KSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2Ug
ZnJhbWVzIHRvIGJlIHNjYWxlZCBkb3duIHRvIHRoZSByZXF1ZXN0ZWQgcmVzb2x1dGlvbi4gQWxz
bywKLSAgICogZnJhbWVzIHdpbGwgYmUgY3JvcHBlZCB0byBtYXRjaCB0aGUgcmVxdWVzdGVkIGFz
cGVjdCByYXRpbywgYW5kIGZyYW1lcyB3aWxsIGJlIGRyb3BwZWQgdG8gbWF0Y2gKLSAgICogdGhl
IHJlcXVlc3RlZCBmcHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGFwdE91dHB1dEZvcm1hdChW
aWRlb1NvdXJjZS5Bc3BlY3RSYXRpbyB0YXJnZXRMYW5kc2NhcGVBc3BlY3RSYXRpbywKLSAgICAg
IEBOdWxsYWJsZSBJbnRlZ2VyIG1heExhbmRzY2FwZVBpeGVsQ291bnQsIFZpZGVvU291cmNlLkFz
cGVjdFJhdGlvIHRhcmdldFBvcnRyYWl0QXNwZWN0UmF0aW8sCi0gICAgICBATnVsbGFibGUgSW50
ZWdlciBtYXhQb3J0cmFpdFBpeGVsQ291bnQsIEBOdWxsYWJsZSBJbnRlZ2VyIG1heEZwcykgewot
ICAgIG5hdGl2ZUFkYXB0T3V0cHV0Rm9ybWF0KG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNl
LCB0YXJnZXRMYW5kc2NhcGVBc3BlY3RSYXRpby53aWR0aCwKLSAgICAgICAgdGFyZ2V0TGFuZHNj
YXBlQXNwZWN0UmF0aW8uaGVpZ2h0LCBtYXhMYW5kc2NhcGVQaXhlbENvdW50LCB0YXJnZXRQb3J0
cmFpdEFzcGVjdFJhdGlvLndpZHRoLAotICAgICAgICB0YXJnZXRQb3J0cmFpdEFzcGVjdFJhdGlv
LmhlaWdodCwgbWF4UG9ydHJhaXRQaXhlbENvdW50LCBtYXhGcHMpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgc2V0SXNTY3JlZW5jYXN0KGJvb2xlYW4gaXNTY3JlZW5jYXN0KSB7Ci0gICAgbmF0aXZl
U2V0SXNTY3JlZW5jYXN0KG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLCBpc1NjcmVlbmNh
c3QpOwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHN0YXRpYyBWaWRlb1Byb2Nlc3Nvci5G
cmFtZUFkYXB0YXRpb25QYXJhbWV0ZXJzIGNyZWF0ZUZyYW1lQWRhcHRhdGlvblBhcmFtZXRlcnMo
aW50IGNyb3BYLAotICAgICAgaW50IGNyb3BZLCBpbnQgY3JvcFdpZHRoLCBpbnQgY3JvcEhlaWdo
dCwgaW50IHNjYWxlV2lkdGgsIGludCBzY2FsZUhlaWdodCwgbG9uZyB0aW1lc3RhbXBOcywKLSAg
ICAgIGJvb2xlYW4gZHJvcCkgewotICAgIHJldHVybiBuZXcgVmlkZW9Qcm9jZXNzb3IuRnJhbWVB
ZGFwdGF0aW9uUGFyYW1ldGVycygKLSAgICAgICAgY3JvcFgsIGNyb3BZLCBjcm9wV2lkdGgsIGNy
b3BIZWlnaHQsIHNjYWxlV2lkdGgsIHNjYWxlSGVpZ2h0LCB0aW1lc3RhbXBOcywgZHJvcCk7Ci0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTZXRJc1NjcmVlbmNhc3Qo
Ci0gICAgICBsb25nIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLCBib29sZWFuIGlzU2Ny
ZWVuY2FzdCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldFN0YXRlKGxv
bmcgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UsIGJvb2xlYW4gaXNMaXZlKTsKLSAgcHJp
dmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQWRhcHRPdXRwdXRGb3JtYXQobG9uZyBuYXRp
dmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSwKLSAgICAgIGludCBsYW5kc2NhcGVXaWR0aCwgaW50
IGxhbmRzY2FwZUhlaWdodCwgQE51bGxhYmxlIEludGVnZXIgbWF4TGFuZHNjYXBlUGl4ZWxDb3Vu
dCwKLSAgICAgIGludCBwb3J0cmFpdFdpZHRoLCBpbnQgcG9ydHJhaXRIZWlnaHQsIEBOdWxsYWJs
ZSBJbnRlZ2VyIG1heFBvcnRyYWl0UGl4ZWxDb3VudCwKLSAgICAgIEBOdWxsYWJsZSBJbnRlZ2Vy
IG1heEZwcyk7Ci0gIEBOdWxsYWJsZQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgVmlkZW9Qcm9j
ZXNzb3IuRnJhbWVBZGFwdGF0aW9uUGFyYW1ldGVycyBuYXRpdmVBZGFwdEZyYW1lKAotICAgICAg
bG9uZyBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wTnMpOwotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgdm9pZCBuYXRpdmVPbkZyYW1lQ2FwdHVyZWQoCi0gICAgICBsb25nIG5hdGl2ZUFuZHJvaWRW
aWRlb1RyYWNrU291cmNlLCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wTnMsIFZpZGVvRnJh
bWUuQnVmZmVyIGJ1ZmZlcik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL05hdGl2
ZUNhcHR1cmVyT2JzZXJ2ZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTmF0aXZlQ2FwdHVyZXJP
YnNlcnZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTk1ZmIzYTRjNDFl
ODI2MWY2Y2Y0NjNiMDFiMTcyMWU1OTkzZjAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTmF0aXZlQ2FwdHVyZXJPYnNlcnZl
ci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9GcmFt
ZTsKLQotLyoqCi0gKiBVc2VkIGZyb20gbmF0aXZlIGFwaSBhbmQgaW1wbGVtZW50cyBhIHNpbXBs
ZSBWaWRlb0NhcHR1cmVyLkNhcHR1cmVyT2JzZXJ2ZXIgdGhhdCBmZWVkcyBmcmFtZXMgdG8KLSAq
IGEgd2VicnRjOjpqbmk6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNlLgotICovCi1jbGFzcyBOYXRp
dmVDYXB0dXJlck9ic2VydmVyIGltcGxlbWVudHMgQ2FwdHVyZXJPYnNlcnZlciB7Ci0gIHByaXZh
dGUgZmluYWwgTmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UgbmF0aXZlQW5kcm9pZFZpZGVv
VHJhY2tTb3VyY2U7Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHB1YmxpYyBOYXRpdmVDYXB0dXJl
ck9ic2VydmVyKGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAgdGhpcy5uYXRpdmVBbmRyb2lkVmlk
ZW9UcmFja1NvdXJjZSA9IG5ldyBOYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZShuYXRpdmVT
b3VyY2UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdGFy
dGVkKGJvb2xlYW4gc3VjY2VzcykgewotICAgIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNl
LnNldFN0YXRlKHN1Y2Nlc3MpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
Q2FwdHVyZXJTdG9wcGVkKCkgewotICAgIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLnNl
dFN0YXRlKC8qIGlzTGl2ZT0gKi8gZmFsc2UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uRnJhbWVDYXB0dXJlZChWaWRlb0ZyYW1lIGZyYW1lKSB7Ci0gICAgZmluYWwgVmlk
ZW9Qcm9jZXNzb3IuRnJhbWVBZGFwdGF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0KLSAgICAg
ICAgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuYWRhcHRGcmFtZShmcmFtZSk7Ci0gICAg
aWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkgewotICAgICAgLy8gRHJvcCBmcmFtZS4KLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBmaW5hbCBWaWRlb0ZyYW1lLkJ1ZmZlciBhZGFwdGVkQnVmZmVy
ID0KLSAgICAgICAgZnJhbWUuZ2V0QnVmZmVyKCkuY3JvcEFuZFNjYWxlKHBhcmFtZXRlcnMuY3Jv
cFgsIHBhcmFtZXRlcnMuY3JvcFksIHBhcmFtZXRlcnMuY3JvcFdpZHRoLAotICAgICAgICAgICAg
cGFyYW1ldGVycy5jcm9wSGVpZ2h0LCBwYXJhbWV0ZXJzLnNjYWxlV2lkdGgsIHBhcmFtZXRlcnMu
c2NhbGVIZWlnaHQpOwotICAgIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLm9uRnJhbWVD
YXB0dXJlZCgKLSAgICAgICAgbmV3IFZpZGVvRnJhbWUoYWRhcHRlZEJ1ZmZlciwgZnJhbWUuZ2V0
Um90YXRpb24oKSwgcGFyYW1ldGVycy50aW1lc3RhbXBOcykpOwotICAgIGFkYXB0ZWRCdWZmZXIu
cmVsZWFzZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL05hdGl2ZUxp
YnJhcnkuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvTmF0aXZlTGlicmFyeS5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmE1ZDZmZjE2Nzc4OWViZDA2YjJjZmFlNGYwNWM5YmQy
MjdkNTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
YXZhL29yZy93ZWJydGMvTmF0aXZlTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
Y2xhc3MgTmF0aXZlTGlicmFyeSB7Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUcgPSAiTmF0
aXZlTGlicmFyeSI7Ci0KLSAgc3RhdGljIGNsYXNzIERlZmF1bHRMb2FkZXIgaW1wbGVtZW50cyBO
YXRpdmVMaWJyYXJ5TG9hZGVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBs
b2FkKFN0cmluZyBuYW1lKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiTG9hZGluZyBsaWJyYXJ5
OiAiICsgbmFtZSk7Ci0gICAgICB0cnkgewotICAgICAgICBTeXN0ZW0ubG9hZExpYnJhcnkobmFt
ZSk7Ci0gICAgICB9IGNhdGNoIChVbnNhdGlzZmllZExpbmtFcnJvciBlKSB7Ci0gICAgICAgIExv
Z2dpbmcuZShUQUcsICJGYWlsZWQgdG8gbG9hZCBuYXRpdmUgbGlicmFyeTogIiArIG5hbWUsIGUp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsK
LSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBsaWJyYXJ5TG9hZGVkOwotCi0gIC8qKgotICAgKiBM
b2FkcyB0aGUgbmF0aXZlIGxpYnJhcnkuIENsaWVudHMgc2hvdWxkIGNhbGwgUGVlckNvbm5lY3Rp
b25GYWN0b3J5LmluaXRpYWxpemUuIEl0IHdpbGwgY2FsbAotICAgKiB0aGlzIG1ldGhvZCBmb3Ig
dGhlbS4KLSAgICovCi0gIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoTmF0aXZlTGlicmFyeUxvYWRl
ciBsb2FkZXIsIFN0cmluZyBsaWJyYXJ5TmFtZSkgewotICAgIHN5bmNocm9uaXplZCAobG9jaykg
ewotICAgICAgaWYgKGxpYnJhcnlMb2FkZWQpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk5h
dGl2ZSBsaWJyYXJ5IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiIpOwotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiTG9hZGluZyBuYXRpdmUgbGlicmFyeTog
IiArIGxpYnJhcnlOYW1lKTsKLSAgICAgIGxpYnJhcnlMb2FkZWQgPSBsb2FkZXIubG9hZChsaWJy
YXJ5TmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGlicmFy
eSBoYXMgYmVlbiBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiAqLwotICBzdGF0aWMgYm9vbGVhbiBpc0xv
YWRlZCgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxvY2spIHsKLSAgICAgIHJldHVybiBsaWJyYXJ5
TG9hZGVkOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9SZWZD
b3VudERlbGVnYXRlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL1JlZkNvdW50RGVsZWdhdGUuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiYzBjM2VkOWE0Y2I1YTA4ZGE1YWNh
MzgxZjdhZDA4NjIzNWMyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL1JlZkNvdW50RGVsZWdhdGUuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1w
b3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotCi0vKioKLSAq
IEltcGxlbWVudGF0aW9uIG9mIFJlZkNvdW50ZWQgdGhhdCBleGVjdXRlcyBhIFJ1bm5hYmxlIG9u
Y2UgdGhlIHJlZiBjb3VudCByZWFjaGVzIHplcm8uCi0gKi8KLWNsYXNzIFJlZkNvdW50RGVsZWdh
dGUgaW1wbGVtZW50cyBSZWZDb3VudGVkIHsKLSAgcHJpdmF0ZSBmaW5hbCBBdG9taWNJbnRlZ2Vy
IHJlZkNvdW50ID0gbmV3IEF0b21pY0ludGVnZXIoMSk7Ci0gIHByaXZhdGUgZmluYWwgQE51bGxh
YmxlIFJ1bm5hYmxlIHJlbGVhc2VDYWxsYmFjazsKLQotICAvKioKLSAgICogQHBhcmFtIHJlbGVh
c2VDYWxsYmFjayBDYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgb25jZSB0aGUgcmVmIGNv
dW50IHJlYWNoZXMgemVyby4KLSAgICovCi0gIHB1YmxpYyBSZWZDb3VudERlbGVnYXRlKEBOdWxs
YWJsZSBSdW5uYWJsZSByZWxlYXNlQ2FsbGJhY2spIHsKLSAgICB0aGlzLnJlbGVhc2VDYWxsYmFj
ayA9IHJlbGVhc2VDYWxsYmFjazsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBy
ZXRhaW4oKSB7Ci0gICAgaW50IHVwZGF0ZWRfY291bnQgPSByZWZDb3VudC5pbmNyZW1lbnRBbmRH
ZXQoKTsKLSAgICBpZiAodXBkYXRlZF9jb3VudCA8IDIpIHsKLSAgICAgIHRocm93IG5ldyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24oInJldGFpbigpIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCByZWZj
b3VudCA8IDEiKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVs
ZWFzZSgpIHsKLSAgICBpbnQgdXBkYXRlZF9jb3VudCA9IHJlZkNvdW50LmRlY3JlbWVudEFuZEdl
dCgpOwotICAgIGlmICh1cGRhdGVkX2NvdW50IDwgMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbigicmVsZWFzZSgpIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCByZWZj
b3VudCA8IDEiKTsKLSAgICB9Ci0gICAgaWYgKHVwZGF0ZWRfY291bnQgPT0gMCAmJiByZWxlYXNl
Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgcmVsZWFzZUNhbGxiYWNrLnJ1bigpOwotICAgIH0K
LSAgfQotCi0gIC8qKgotICAgKiBUcmllcyB0byByZXRhaW4gdGhlIG9iamVjdC4gQ2FuIGJlIHVz
ZWQgaW4gc2NlbmFyaW9zIHdoZXJlIGl0IGlzIHVua25vd24gaWYgdGhlIG9iamVjdCBoYXMKLSAg
ICogYWxyZWFkeSBiZWVuIHJlbGVhc2VkLiBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCBvciBm
YWxzZSBpZiB0aGUgb2JqZWN0IHdhcyBhbHJlYWR5IHJlbGVhc2VkLgotICAgKi8KLSAgYm9vbGVh
biBzYWZlUmV0YWluKCkgewotICAgIGludCBjdXJyZW50UmVmQ291bnQgPSByZWZDb3VudC5nZXQo
KTsKLSAgICB3aGlsZSAoY3VycmVudFJlZkNvdW50ICE9IDApIHsKLSAgICAgIGlmIChyZWZDb3Vu
dC53ZWFrQ29tcGFyZUFuZFNldChjdXJyZW50UmVmQ291bnQsIGN1cnJlbnRSZWZDb3VudCArIDEp
KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgY3VycmVudFJlZkNvdW50
ID0gcmVmQ291bnQuZ2V0KCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9WaWRlb0NvZGVjTWltZVR5cGUuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZh
L29yZy93ZWJydGMvVmlkZW9Db2RlY01pbWVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGYyN2E5MTc2Y2ZkMzUyNTAzZWEyYjExNTdiNzViYTAxYTc3ZDdmOWEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0
Yy9WaWRlb0NvZGVjTWltZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEVudW1lcmF0
aW9uIG9mIHN1cHBvcnRlZCB2aWRlbyBjb2RlYyB0eXBlcy4gKi8KLWVudW0gVmlkZW9Db2RlY01p
bWVUeXBlIHsKLSAgVlA4KCJ2aWRlby94LXZuZC5vbjIudnA4IiksCi0gIFZQOSgidmlkZW8veC12
bmQub24yLnZwOSIpLAotICBIMjY0KCJ2aWRlby9hdmMiKTsKLQotICBwcml2YXRlIGZpbmFsIFN0
cmluZyBtaW1lVHlwZTsKLQotICBwcml2YXRlIFZpZGVvQ29kZWNNaW1lVHlwZShTdHJpbmcgbWlt
ZVR5cGUpIHsKLSAgICB0aGlzLm1pbWVUeXBlID0gbWltZVR5cGU7Ci0gIH0KLQotICBTdHJpbmcg
bWltZVR5cGUoKSB7Ci0gICAgcmV0dXJuIG1pbWVUeXBlOwotICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
amF2YS9vcmcvd2VicnRjL1ZpZGVvRGVjb2RlcldyYXBwZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJy
dGMvVmlkZW9EZWNvZGVyV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyYWFlMDQxNjQwMjU0NDFhODY0OTk2Yjc3ZTU2YjQxYmZjNmJkMmFkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvVmlkZW9E
ZWNvZGVyV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5W
aWRlb0RlY29kZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgSmF2YSBnbHVl
IGNvZGUgZm9yIEpOSSBnZW5lcmF0aW9uIG9mIFZpZGVvRGVjb2Rlci4KLSAqLwotY2xhc3MgVmlk
ZW9EZWNvZGVyV3JhcHBlciB7Ci0gIEBDYWxsZWRCeU5hdGl2ZQotICBzdGF0aWMgVmlkZW9EZWNv
ZGVyLkNhbGxiYWNrIGNyZWF0ZURlY29kZXJDYWxsYmFjayhmaW5hbCBsb25nIG5hdGl2ZURlY29k
ZXIpIHsKLSAgICByZXR1cm4gKFZpZGVvRnJhbWUgZnJhbWUsIEludGVnZXIgZGVjb2RlVGltZU1z
LAotICAgICAgICAgICAgICAgSW50ZWdlciBxcCkgLT4gbmF0aXZlT25EZWNvZGVkRnJhbWUobmF0
aXZlRGVjb2RlciwgZnJhbWUsIGRlY29kZVRpbWVNcywgcXApOwotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlT25EZWNvZGVkRnJhbWUoCi0gICAgICBsb25nIG5hdGl2
ZVZpZGVvRGVjb2RlcldyYXBwZXIsIFZpZGVvRnJhbWUgZnJhbWUsIEludGVnZXIgZGVjb2RlVGlt
ZU1zLCBJbnRlZ2VyIHFwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvVmlkZW9F
bmNvZGVyV3JhcHBlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXJXcmFwcGVy
LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NWUwNThjY2EwNzY5YzI4NWFk
N2U5MzY3OTczMGZiYmE2OWFkMzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0Yy9WaWRlb0VuY29kZXJXcmFwcGVyLmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLS8vIEV4cGxpY2l0IGltcG9ydHMgbmVjZXNzYXJ5IGZvciBKTkkgZ2Vu
ZXJhdGlvbi4KLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWlt
cG9ydCBvcmcud2VicnRjLlZpZGVvRW5jb2RlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRh
aW5zIHRoZSBKYXZhIGdsdWUgY29kZSBmb3IgSk5JIGdlbmVyYXRpb24gb2YgVmlkZW9FbmNvZGVy
LgotICovCi1jbGFzcyBWaWRlb0VuY29kZXJXcmFwcGVyIHsKLSAgQENhbGxlZEJ5TmF0aXZlCi0g
IHN0YXRpYyBib29sZWFuIGdldFNjYWxpbmdTZXR0aW5nc09uKFZpZGVvRW5jb2Rlci5TY2FsaW5n
U2V0dGluZ3Mgc2NhbGluZ1NldHRpbmdzKSB7Ci0gICAgcmV0dXJuIHNjYWxpbmdTZXR0aW5ncy5v
bjsKLSAgfQotCi0gIEBOdWxsYWJsZQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgc3RhdGljIEludGVn
ZXIgZ2V0U2NhbGluZ1NldHRpbmdzTG93KFZpZGVvRW5jb2Rlci5TY2FsaW5nU2V0dGluZ3Mgc2Nh
bGluZ1NldHRpbmdzKSB7Ci0gICAgcmV0dXJuIHNjYWxpbmdTZXR0aW5ncy5sb3c7Ci0gIH0KLQot
ICBATnVsbGFibGUKLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHN0YXRpYyBJbnRlZ2VyIGdldFNjYWxp
bmdTZXR0aW5nc0hpZ2goVmlkZW9FbmNvZGVyLlNjYWxpbmdTZXR0aW5ncyBzY2FsaW5nU2V0dGlu
Z3MpIHsKLSAgICByZXR1cm4gc2NhbGluZ1NldHRpbmdzLmhpZ2g7Ci0gIH0KLQotICBAQ2FsbGVk
QnlOYXRpdmUKLSAgc3RhdGljIFZpZGVvRW5jb2Rlci5DYWxsYmFjayBjcmVhdGVFbmNvZGVyQ2Fs
bGJhY2soZmluYWwgbG9uZyBuYXRpdmVFbmNvZGVyKSB7Ci0gICAgcmV0dXJuIChFbmNvZGVkSW1h
Z2UgZnJhbWUsCi0gICAgICAgICAgICAgICBWaWRlb0VuY29kZXIuQ29kZWNTcGVjaWZpY0luZm8g
aW5mbykgLT4gbmF0aXZlT25FbmNvZGVkRnJhbWUobmF0aXZlRW5jb2RlciwgZnJhbWUpOwotICB9
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlT25FbmNvZGVkRnJhbWUoCi0g
ICAgICBsb25nIG5hdGl2ZVZpZGVvRW5jb2RlcldyYXBwZXIsIEVuY29kZWRJbWFnZSBmcmFtZSk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL1dlYlJ0Y0NsYXNzTG9hZGVyLmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvamF2YS9vcmcvd2VicnRjL1dlYlJ0Y0NsYXNzTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAyM2U5MmNmYjFlNTZjODVhZDg2MjI2OWQ4N2I1NmJjYmZmZjNlZjUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3Jn
L3dlYnJ0Yy9XZWJSdGNDbGFzc0xvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAq
IFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBDbGFzc0xvYWRlciB0aGF0IGlzIGNhcGFibGUgb2YgbG9h
ZGluZyBXZWJSVEMgSmF2YSBjbGFzc2VzIHJlZ2FyZGxlc3Mgb2YKLSAqIHdoYXQgdGhyZWFkIGl0
J3MgY2FsbGVkIGZyb20uIFN1Y2ggYSBDbGFzc0xvYWRlciBpcyBuZWVkZWQgZm9yIHRoZSBmZXcg
Y2FzZXMgd2hlcmUgdGhlIEpOSQotICogbWVjaGFuaXNtIGlzIHVuYWJsZSB0byBhdXRvbWF0aWNh
bGx5IGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgQ2xhc3NMb2FkZXIgaW5zdGFuY2UuCi0gKi8K
LWNsYXNzIFdlYlJ0Y0NsYXNzTG9hZGVyIHsKLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHN0YXRpYyBP
YmplY3QgZ2V0Q2xhc3NMb2FkZXIoKSB7Ci0gICAgT2JqZWN0IGxvYWRlciA9IFdlYlJ0Y0NsYXNz
TG9hZGVyLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgaWYgKGxvYWRlciA9PSBudWxsKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIGdldCBXZWJSVEMg
Y2xhc3MgbG9hZGVyLiIpOwotICAgIH0KLSAgICByZXR1cm4gbG9hZGVyOwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL1dyYXBwZWROYXRpdmVJNDIwQnVmZmVyLmphdmEgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
amF2YS9vcmcvd2VicnRjL1dyYXBwZWROYXRpdmVJNDIwQnVmZmVyLmphdmEKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDA0NjE2NjBmY2ZmNjU0YjllYjNkNmJkNDFhNDc0ZDI3YThmOTMx
ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEv
b3JnL3dlYnJ0Yy9XcmFwcGVkTmF0aXZlSTQyMEJ1ZmZlci5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsMTEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB3cmFw
cyBhIHdlYnJ0Yzo6STQyMEJ1ZmZlckludGVyZmFjZSBpbnRvIGEgVmlkZW9GcmFtZS5JNDIwQnVm
ZmVyLgotICovCi1jbGFzcyBXcmFwcGVkTmF0aXZlSTQyMEJ1ZmZlciBpbXBsZW1lbnRzIFZpZGVv
RnJhbWUuSTQyMEJ1ZmZlciB7Ci0gIHByaXZhdGUgZmluYWwgaW50IHdpZHRoOwotICBwcml2YXRl
IGZpbmFsIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBkYXRhWTsKLSAg
cHJpdmF0ZSBmaW5hbCBpbnQgc3RyaWRlWTsKLSAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGRh
dGFVOwotICBwcml2YXRlIGZpbmFsIGludCBzdHJpZGVVOwotICBwcml2YXRlIGZpbmFsIEJ5dGVC
dWZmZXIgZGF0YVY7Ci0gIHByaXZhdGUgZmluYWwgaW50IHN0cmlkZVY7Ci0gIHByaXZhdGUgZmlu
YWwgbG9uZyBuYXRpdmVCdWZmZXI7Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIFdyYXBwZWROYXRp
dmVJNDIwQnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgQnl0ZUJ1ZmZlciBkYXRhWSwgaW50
IHN0cmlkZVksIEJ5dGVCdWZmZXIgZGF0YVUsCi0gICAgICBpbnQgc3RyaWRlVSwgQnl0ZUJ1ZmZl
ciBkYXRhViwgaW50IHN0cmlkZVYsIGxvbmcgbmF0aXZlQnVmZmVyKSB7Ci0gICAgdGhpcy53aWR0
aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHRoaXMuZGF0YVkgPSBk
YXRhWTsKLSAgICB0aGlzLnN0cmlkZVkgPSBzdHJpZGVZOwotICAgIHRoaXMuZGF0YVUgPSBkYXRh
VTsKLSAgICB0aGlzLnN0cmlkZVUgPSBzdHJpZGVVOwotICAgIHRoaXMuZGF0YVYgPSBkYXRhVjsK
LSAgICB0aGlzLnN0cmlkZVYgPSBzdHJpZGVWOwotICAgIHRoaXMubmF0aXZlQnVmZmVyID0gbmF0
aXZlQnVmZmVyOwotCi0gICAgcmV0YWluKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IGludCBnZXRXaWR0aCgpIHsKLSAgICByZXR1cm4gd2lkdGg7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGludCBnZXRIZWlnaHQoKSB7Ci0gICAgcmV0dXJuIGhlaWdodDsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgQnl0ZUJ1ZmZlciBnZXREYXRhWSgpIHsKLSAgICAvLyBSZXR1
cm4gYSBzbGljZSB0byBwcmV2ZW50IHJlbGF0aXZlIHJlYWRzIGZyb20gY2hhbmdpbmcgdGhlIHBv
c2l0aW9uLgotICAgIHJldHVybiBkYXRhWS5zbGljZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBCeXRlQnVmZmVyIGdldERhdGFVKCkgewotICAgIC8vIFJldHVybiBhIHNsaWNlIHRv
IHByZXZlbnQgcmVsYXRpdmUgcmVhZHMgZnJvbSBjaGFuZ2luZyB0aGUgcG9zaXRpb24uCi0gICAg
cmV0dXJuIGRhdGFVLnNsaWNlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIEJ5dGVC
dWZmZXIgZ2V0RGF0YVYoKSB7Ci0gICAgLy8gUmV0dXJuIGEgc2xpY2UgdG8gcHJldmVudCByZWxh
dGl2ZSByZWFkcyBmcm9tIGNoYW5naW5nIHRoZSBwb3NpdGlvbi4KLSAgICByZXR1cm4gZGF0YVYu
c2xpY2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFN0cmlkZVkoKSB7
Ci0gICAgcmV0dXJuIHN0cmlkZVk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBn
ZXRTdHJpZGVVKCkgewotICAgIHJldHVybiBzdHJpZGVVOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBpbnQgZ2V0U3RyaWRlVigpIHsKLSAgICByZXR1cm4gc3RyaWRlVjsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIHRvSTQyMCgpIHsKLSAg
ICByZXRhaW4oKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCByZXRhaW4oKSB7Ci0gICAgSm5pQ29tbW9uLm5hdGl2ZUFkZFJlZihuYXRpdmVCdWZm
ZXIpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAg
Sm5pQ29tbW9uLm5hdGl2ZVJlbGVhc2VSZWYobmF0aXZlQnVmZmVyKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgVmlkZW9GcmFtZS5CdWZmZXIgY3JvcEFuZFNjYWxlKAotICAgICAgaW50
IGNyb3BYLCBpbnQgY3JvcFksIGludCBjcm9wV2lkdGgsIGludCBjcm9wSGVpZ2h0LCBpbnQgc2Nh
bGVXaWR0aCwgaW50IHNjYWxlSGVpZ2h0KSB7Ci0gICAgcmV0dXJuIEphdmFJNDIwQnVmZmVyLmNy
b3BBbmRTY2FsZUk0MjAoCi0gICAgICAgIHRoaXMsIGNyb3BYLCBjcm9wWSwgY3JvcFdpZHRoLCBj
cm9wSGVpZ2h0LCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Ny
Yy9qYXZhL29yZy93ZWJydGMvYXVkaW8vVm9sdW1lTG9nZ2VyLmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2Vi
cnRjL2F1ZGlvL1ZvbHVtZUxvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1ZDk1MDA3MDcwM2NjZjc5Njc4NjliYmU5MmQxNTE5ODIxMzQyN2FjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8v
Vm9sdW1lTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLmF1ZGlvOwotCi1pbXBvcnQgYW5k
cm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRp
b24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGphdmEudXRpbC5U
aW1lclRhc2s7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi0vLyBUT0RPKG1hZ2plZCk6
IERvIHdlIHJlYWxseSBuZWVkIHRvIHNwYXduIGEgbmV3IHRocmVhZCBqdXN0IHRvIGxvZyB2b2x1
bWU/IENhbiB3ZSByZS11c2UgdGhlCi0vLyBBdWRpb1RyYWNrVGhyZWFkIGluc3RlYWQ/Ci0vKioK
LSAqIFByaXZhdGUgdXRpbGl0eSBjbGFzcyB0aGF0IHBlcmlvZGljYWxseSBjaGVja3MgYW5kIGxv
Z3MgdGhlIHZvbHVtZSBsZXZlbCBvZiB0aGUgYXVkaW8gc3RyZWFtIHRoYXQKLSAqIGlzIGN1cnJl
bnRseSBjb250cm9sbGVkIGJ5IHRoZSB2b2x1bWUgY29udHJvbC4gQSB0aW1lciB0cmlnZ2VycyBs
b2dzIG9uY2UgZXZlcnkgMzAgc2Vjb25kcyBhbmQKLSAqIHRoZSB0aW1lcidzIGFzc29jaWF0ZWQg
dGhyZWFkIGlzIG5hbWVkICJXZWJSdGNWb2x1bWVMZXZlbExvZ2dlclRocmVhZCIuCi0gKi8KLWNs
YXNzIFZvbHVtZUxvZ2dlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAi
Vm9sdW1lTG9nZ2VyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRIUkVBRF9OQU1F
ID0gIldlYlJ0Y1ZvbHVtZUxldmVsTG9nZ2VyVGhyZWFkIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IFRJTUVSX1BFUklPRF9JTl9TRUNPTkRTID0gMzA7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBB
dWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICBwcml2YXRlIEBOdWxsYWJsZSBUaW1lciB0aW1l
cjsKLQotICBwdWJsaWMgVm9sdW1lTG9nZ2VyKEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIpIHsK
LSAgICB0aGlzLmF1ZGlvTWFuYWdlciA9IGF1ZGlvTWFuYWdlcjsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHN0YXJ0KCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydCIgKyBXZWJSdGNBdWRpb1V0
aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKHRpbWVyICE9IG51bGwpIHsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgImF1ZGlvIG1vZGUgaXM6ICIgKyBXZWJS
dGNBdWRpb1V0aWxzLm1vZGVUb1N0cmluZyhhdWRpb01hbmFnZXIuZ2V0TW9kZSgpKSk7Ci0KLSAg
ICB0aW1lciA9IG5ldyBUaW1lcihUSFJFQURfTkFNRSk7Ci0gICAgdGltZXIuc2NoZWR1bGUobmV3
IExvZ1ZvbHVtZVRhc2soYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFn
ZXIuU1RSRUFNX1JJTkcpLAotICAgICAgICAgICAgICAgICAgICAgICBhdWRpb01hbmFnZXIuZ2V0
U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCkpLAotICAgICAg
ICAwLCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyAqIDEwMDApOwotICB9Ci0KLSAgcHJpdmF0ZSBj
bGFzcyBMb2dWb2x1bWVUYXNrIGV4dGVuZHMgVGltZXJUYXNrIHsKLSAgICBwcml2YXRlIGZpbmFs
IGludCBtYXhSaW5nVm9sdW1lOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1heFZvaWNlQ2FsbFZv
bHVtZTsKLQotICAgIExvZ1ZvbHVtZVRhc2soaW50IG1heFJpbmdWb2x1bWUsIGludCBtYXhWb2lj
ZUNhbGxWb2x1bWUpIHsKLSAgICAgIHRoaXMubWF4UmluZ1ZvbHVtZSA9IG1heFJpbmdWb2x1bWU7
Ci0gICAgICB0aGlzLm1heFZvaWNlQ2FsbFZvbHVtZSA9IG1heFZvaWNlQ2FsbFZvbHVtZTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBmaW5h
bCBpbnQgbW9kZSA9IGF1ZGlvTWFuYWdlci5nZXRNb2RlKCk7Ci0gICAgICBpZiAobW9kZSA9PSBB
dWRpb01hbmFnZXIuTU9ERV9SSU5HVE9ORSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLAotICAg
ICAgICAgICAgIlNUUkVBTV9SSU5HIHN0cmVhbSB2b2x1bWU6ICIgKyBhdWRpb01hbmFnZXIuZ2V0
U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fUklORykKLSAgICAgICAgICAgICAgICAr
ICIgKG1heD0iICsgbWF4UmluZ1ZvbHVtZSArICIpIik7Ci0gICAgICB9IGVsc2UgaWYgKG1vZGUg
PT0gQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNBVElPTikgewotICAgICAgICBMb2dnaW5n
LmQoVEFHLAotICAgICAgICAgICAgIlZPSUNFX0NBTEwgc3RyZWFtIHZvbHVtZTogIgotICAgICAg
ICAgICAgICAgICsgYXVkaW9NYW5hZ2VyLmdldFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RS
RUFNX1ZPSUNFX0NBTEwpCi0gICAgICAgICAgICAgICAgKyAiIChtYXg9IiArIG1heFZvaWNlQ2Fs
bFZvbHVtZSArICIpIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc3Rv
cCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RvcCIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRo
cmVhZEluZm8oKSk7Ci0gICAgaWYgKHRpbWVyICE9IG51bGwpIHsKLSAgICAgIHRpbWVyLmNhbmNl
bCgpOwotICAgICAgdGltZXIgPSBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2ph
dmEvb3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb0VmZmVjdHMuamF2YSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93
ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZmNTc1YmUyY2UwOWZkYzg2NzJlOWE3ODRhMzhlNzUwN2U4ODI4MGQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0
Yy9hdWRpby9XZWJSdGNBdWRpb0VmZmVjdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLmF1ZGlv
OwotCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkFjb3VzdGljRWNob0NhbmNlbGVyOwot
aW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3QuRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLmF1ZGlvZnguTm9pc2VTdXBwcmVzc29yOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1p
bXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgamF2YS51
dGlsLlVVSUQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi0vLyBUaGlzIGNsYXNzIHdy
YXBzIGNvbnRyb2wgb2YgdGhyZWUgZGlmZmVyZW50IHBsYXRmb3JtIGVmZmVjdHMuIFN1cHBvcnRl
ZAotLy8gZWZmZWN0cyBhcmU6IEFjb3VzdGljRWNob0NhbmNlbGVyIChBRUMpIGFuZCBOb2lzZVN1
cHByZXNzb3IgKE5TKS4KLS8vIENhbGxpbmcgZW5hYmxlKCkgd2lsbCBhY3RpdmUgYWxsIGVmZmVj
dHMgdGhhdCBhcmUKLS8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGlmIHRoZSBjb3JyZXNwb25k
aW5nIHxzaG91bGRFbmFibGVYWFh8IG1lbWJlciBpcyBzZXQuCi1jbGFzcyBXZWJSdGNBdWRpb0Vm
ZmVjdHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb0VmZmVjdHNF
eHRlcm5hbCI7Ci0KLSAgLy8gVVVJRHMgZm9yIFNvZnR3YXJlIEF1ZGlvIEVmZmVjdHMgdGhhdCB3
ZSB3YW50IHRvIGF2b2lkIHVzaW5nLgotICAvLyBUaGUgaW1wbGVtZW50b3IgZmllbGQgd2lsbCBi
ZSBzZXQgdG8gIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBVVUlEIEFPU1BfQUNPVVNUSUNfRUNIT19DQU5DRUxFUiA9Ci0gICAgICBVVUlE
LmZyb21TdHJpbmcoImJiMzkyZWMwLThkNGQtMTFlMC1hODk2LTAwMDJhNWQ1YzUxYiIpOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBVVUlEIEFPU1BfTk9JU0VfU1VQUFJFU1NPUiA9Ci0gICAgICBV
VUlELmZyb21TdHJpbmcoImMwNmM4NDAwLThlMDYtMTFlMC05Y2I2LTAwMDJhNWQ1YzUxYiIpOwot
Ci0gIC8vIENvbnRhaW5zIHRoZSBhdmFpbGFibGUgZWZmZWN0IGRlc2NyaXB0b3JzIHJldHVybmVk
IGZyb20gdGhlCi0gIC8vIEF1ZGlvRWZmZWN0LmdldEVmZmVjdHMoKSBjYWxsLiBUaGlzIHJlc3Vs
dCBpcyBjYWNoZWQgdG8gYXZvaWQgZG9pbmcgdGhlCi0gIC8vIHNsb3cgT1MgY2FsbCBtdWx0aXBs
ZSB0aW1lcy4KLSAgcHJpdmF0ZSBzdGF0aWMgQE51bGxhYmxlIERlc2NyaXB0b3JbXSBjYWNoZWRF
ZmZlY3RzOwotCi0gIC8vIENvbnRhaW5zIHRoZSBhdWRpbyBlZmZlY3Qgb2JqZWN0cy4gQ3JlYXRl
ZCBpbiBlbmFibGUoKSBhbmQgZGVzdHJveWVkCi0gIC8vIGluIHJlbGVhc2UoKS4KLSAgcHJpdmF0
ZSBATnVsbGFibGUgQWNvdXN0aWNFY2hvQ2FuY2VsZXIgYWVjOwotICBwcml2YXRlIEBOdWxsYWJs
ZSBOb2lzZVN1cHByZXNzb3IgbnM7Ci0KLSAgLy8gQWZmZWN0cyB0aGUgZmluYWwgc3RhdGUgZ2l2
ZW4gdG8gdGhlIHNldEVuYWJsZWQoKSBtZXRob2Qgb24gZWFjaCBlZmZlY3QuCi0gIC8vIFRoZSBk
ZWZhdWx0IHN0YXRlIGlzIHNldCB0byAiZGlzYWJsZWQiIGJ1dCBlYWNoIGVmZmVjdCBjYW4gYWxz
byBiZSBlbmFibGVkCi0gIC8vIGJ5IGNhbGxpbmcgc2V0QUVDKCkgYW5kIHNldE5TKCkuCi0gIHBy
aXZhdGUgYm9vbGVhbiBzaG91bGRFbmFibGVBZWM7Ci0gIHByaXZhdGUgYm9vbGVhbiBzaG91bGRF
bmFibGVOczsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGNvbmRpdGlvbnMgZm9yIHN1cHBv
cnRpbmcgSFcgQWNvdXN0aWMgRWNobyBDYW5jZWxsYXRpb24gKEFFQykgYXJlCi0gIC8vIGZ1bGZp
bGxlZC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBw
b3J0ZWQoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IDE4KQotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0VmZmVjdFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3Qu
RUZGRUNUX1RZUEVfQUVDLCBBT1NQX0FDT1VTVElDX0VDSE9fQ0FOQ0VMRVIpOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGZvciBzdXBwb3J0aW5nIEhXIE5vaXNl
IFN1cHByZXNzaW9uIChOUykgYXJlIGZ1bGZpbGxlZC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFu
IGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNE
S19JTlQgPCAxOCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNFZmZlY3RUeXBl
QXZhaWxhYmxlKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX05TLCBBT1NQX05PSVNFX1NVUFBSRVNT
T1IpOwotICB9Ci0KLSAgcHVibGljIFdlYlJ0Y0F1ZGlvRWZmZWN0cygpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gIH0K
LQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9y
bSBBRUMuIEl0IG1vZGlmaWVzCi0gIC8vIHxzaG91bGRFbmFibGVBZWN8IHdoaWNoIGlzIHVzZWQg
aW4gZW5hYmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBzdGF0ZQotICAvLyBvZiB0aGUgQUVDIGVmZmVj
dCBpcyBtb2RpZmllZC4gUmV0dXJucyB0cnVlIGlmIEhXIEFFQyBpcyBzdXBwb3J0ZWQgYW5kCi0g
IC8vIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVibGljIGJvb2xlYW4gc2V0QUVDKGJvb2xlYW4gZW5h
YmxlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInNldEFFQygiICsgZW5hYmxlICsgIikiKTsKLSAg
ICBpZiAoIWlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSkgewotICAgICAgTG9nZ2lu
Zy53KFRBRywgIlBsYXRmb3JtIEFFQyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICBzaG91bGRF
bmFibGVBZWMgPSBmYWxzZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGFl
YyAhPSBudWxsICYmIChlbmFibGUgIT0gc2hvdWxkRW5hYmxlQWVjKSkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgIlBsYXRmb3JtIEFFQyBzdGF0ZSBjYW4ndCBiZSBtb2RpZmllZCB3aGlsZSByZWNv
cmRpbmciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc2hvdWxkRW5hYmxlQWVj
ID0gZW5hYmxlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhv
ZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gTlMuIEl0IG1vZGlmaWVzCi0gIC8v
IHxzaG91bGRFbmFibGVOc3wgd2hpY2ggaXMgdXNlZCBpbiBlbmFibGUoKSB3aGVyZSB0aGUgYWN0
dWFsIHN0YXRlCi0gIC8vIG9mIHRoZSBOUyBlZmZlY3QgaXMgbW9kaWZpZWQuIFJldHVybnMgdHJ1
ZSBpZiBIVyBOUyBpcyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVi
bGljIGJvb2xlYW4gc2V0TlMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
c2V0TlMoIiArIGVuYWJsZSArICIpIik7Ci0gICAgaWYgKCFpc05vaXNlU3VwcHJlc3NvclN1cHBv
cnRlZCgpKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiUGxhdGZvcm0gTlMgaXMgbm90IHN1cHBv
cnRlZCIpOwotICAgICAgc2hvdWxkRW5hYmxlTnMgPSBmYWxzZTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgaWYgKG5zICE9IG51bGwgJiYgKGVuYWJsZSAhPSBzaG91bGRFbmFibGVO
cykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJQbGF0Zm9ybSBOUyBzdGF0ZSBjYW4ndCBiZSBt
b2RpZmllZCB3aGlsZSByZWNvcmRpbmciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgc2hvdWxkRW5hYmxlTnMgPSBlbmFibGU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBlbmFibGUoaW50IGF1ZGlvU2Vzc2lvbikgewotICAgIExvZ2dpbmcuZChUQUcs
ICJlbmFibGUoYXVkaW9TZXNzaW9uPSIgKyBhdWRpb1Nlc3Npb24gKyAiKSIpOwotICAgIGFzc2Vy
dFRydWUoYWVjID09IG51bGwpOwotICAgIGFzc2VydFRydWUobnMgPT0gbnVsbCk7Ci0KLSAgICBp
ZiAoREVCVUcpIHsKLSAgICAgIC8vIEFkZCBsb2dnaW5nIG9mIHN1cHBvcnRlZCBlZmZlY3RzIGJ1
dCBmaWx0ZXIgb3V0ICJWb0lQIGVmZmVjdHMiLCBpLmUuLAotICAgICAgLy8gQUVDLCBBRUMgYW5k
IE5TLiBBdm9pZCBjYWxsaW5nIEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygpIHVubGVzcyB0aGUK
LSAgICAgIC8vIERFQlVHIGZsYWcgaXMgc2V0IHNpbmNlIHdlIGhhdmUgc2VlbiBjcmFzaGVzIGlu
IHRoaXMgQVBJLgotICAgICAgZm9yIChEZXNjcmlwdG9yIGQgOiBBdWRpb0VmZmVjdC5xdWVyeUVm
ZmVjdHMoKSkgewotICAgICAgICBpZiAoZWZmZWN0VHlwZUlzVm9JUChkLnR5cGUpKSB7Ci0gICAg
ICAgICAgTG9nZ2luZy5kKFRBRywKLSAgICAgICAgICAgICAgIm5hbWU6ICIgKyBkLm5hbWUgKyAi
LCAiCi0gICAgICAgICAgICAgICAgICArICJtb2RlOiAiICsgZC5jb25uZWN0TW9kZSArICIsICIK
LSAgICAgICAgICAgICAgICAgICsgImltcGxlbWVudG9yOiAiICsgZC5pbXBsZW1lbnRvciArICIs
ICIKLSAgICAgICAgICAgICAgICAgICsgIlVVSUQ6ICIgKyBkLnV1aWQpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQo
KSkgewotICAgICAgLy8gQ3JlYXRlIGFuIEFjb3VzdGljRWNob0NhbmNlbGVyIGFuZCBhdHRhY2gg
aXQgdG8gdGhlIEF1ZGlvUmVjb3JkIG9uCi0gICAgICAvLyB0aGUgc3BlY2lmaWVkIGF1ZGlvIHNl
c3Npb24uCi0gICAgICBhZWMgPSBBY291c3RpY0VjaG9DYW5jZWxlci5jcmVhdGUoYXVkaW9TZXNz
aW9uKTsKLSAgICAgIGlmIChhZWMgIT0gbnVsbCkgewotICAgICAgICBib29sZWFuIGVuYWJsZWQg
PSBhZWMuZ2V0RW5hYmxlZCgpOwotICAgICAgICBib29sZWFuIGVuYWJsZSA9IHNob3VsZEVuYWJs
ZUFlYyAmJiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCk7Ci0gICAgICAgIGlmIChh
ZWMuc2V0RW5hYmxlZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0LlNVQ0NFU1MpIHsKLSAgICAgICAg
ICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHNldCB0aGUgQWNvdXN0aWNFY2hvQ2FuY2VsZXIg
c3RhdGUiKTsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLAotICAgICAgICAgICAg
IkFjb3VzdGljRWNob0NhbmNlbGVyOiB3YXMgIiArIChlbmFibGVkID8gImVuYWJsZWQiIDogImRp
c2FibGVkIikgKyAiLCBlbmFibGU6ICIKLSAgICAgICAgICAgICAgICArIGVuYWJsZSArICIsIGlz
IG5vdzogIiArIChhZWMuZ2V0RW5hYmxlZCgpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBjcmVhdGUg
dGhlIEFjb3VzdGljRWNob0NhbmNlbGVyIGluc3RhbmNlIik7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsKLSAgICAgIC8vIENyZWF0ZSBh
biBOb2lzZVN1cHByZXNzb3IgYW5kIGF0dGFjaCBpdCB0byB0aGUgQXVkaW9SZWNvcmQgb24gdGhl
Ci0gICAgICAvLyBzcGVjaWZpZWQgYXVkaW8gc2Vzc2lvbi4KLSAgICAgIG5zID0gTm9pc2VTdXBw
cmVzc29yLmNyZWF0ZShhdWRpb1Nlc3Npb24pOwotICAgICAgaWYgKG5zICE9IG51bGwpIHsKLSAg
ICAgICAgYm9vbGVhbiBlbmFibGVkID0gbnMuZ2V0RW5hYmxlZCgpOwotICAgICAgICBib29sZWFu
IGVuYWJsZSA9IHNob3VsZEVuYWJsZU5zICYmIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCk7
Ci0gICAgICAgIGlmIChucy5zZXRFbmFibGVkKGVuYWJsZSkgIT0gQXVkaW9FZmZlY3QuU1VDQ0VT
UykgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gc2V0IHRoZSBOb2lzZVN1
cHByZXNzb3Igc3RhdGUiKTsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLAotICAg
ICAgICAgICAgIk5vaXNlU3VwcHJlc3Nvcjogd2FzICIgKyAoZW5hYmxlZCA/ICJlbmFibGVkIiA6
ICJkaXNhYmxlZCIpICsgIiwgZW5hYmxlOiAiICsgZW5hYmxlCi0gICAgICAgICAgICAgICAgKyAi
LCBpcyBub3c6ICIgKyAobnMuZ2V0RW5hYmxlZCgpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBjcmVh
dGUgdGhlIE5vaXNlU3VwcHJlc3NvciBpbnN0YW5jZSIpOwotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIC8vIFJlbGVhc2VzIGFsbCBuYXRpdmUgYXVkaW8gZWZmZWN0IHJlc291cmNlcy4gSXQgaXMg
YSBnb29kIHByYWN0aWNlIHRvCi0gIC8vIHJlbGVhc2UgdGhlIGVmZmVjdCBlbmdpbmUgd2hlbiBu
b3QgaW4gdXNlIGFzIGNvbnRyb2wgY2FuIGJlIHJldHVybmVkCi0gIC8vIHRvIG90aGVyIGFwcGxp
Y2F0aW9ucyBvciB0aGUgbmF0aXZlIHJlc291cmNlcyByZWxlYXNlZC4KLSAgcHVibGljIHZvaWQg
cmVsZWFzZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAicmVsZWFzZSIpOwotICAgIGlmIChhZWMg
IT0gbnVsbCkgewotICAgICAgYWVjLnJlbGVhc2UoKTsKLSAgICAgIGFlYyA9IG51bGw7Ci0gICAg
fQotICAgIGlmIChucyAhPSBudWxsKSB7Ci0gICAgICBucy5yZWxlYXNlKCk7Ci0gICAgICBucyA9
IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGZvciBlZmZlY3QgdHlwZXMg
aW4gfHR5cGV8IHRoYXQgYXJlIG9mICJWb0lQIiB0eXBlczoKLSAgLy8gQWNvdXN0aWMgRWNobyBD
YW5jZWxlciAoQUVDKSBvciBBdXRvbWF0aWMgR2FpbiBDb250cm9sIChBR0MpIG9yCi0gIC8vIE5v
aXNlIFN1cHByZXNzb3IgKE5TKS4gTm90ZSB0aGF0LCBhbiBleHRyYSBjaGVjayBmb3Igc3VwcG9y
dCBpcyBuZWVkZWQKLSAgLy8gaW4gZWFjaCBjb21wYXJpc29uIHNpbmNlIHNvbWUgZGV2aWNlcyBp
bmNsdWRlcyBlZmZlY3RzIGluIHRoZQotICAvLyBBdWRpb0VmZmVjdC5EZXNjcmlwdG9yIGFycmF5
IHRoYXQgYXJlIGFjdHVhbGx5IG5vdCBhdmFpbGFibGUgb24gdGhlIGRldmljZS4KLSAgLy8gQXMg
YW4gZXhhbXBsZTogU2Ftc3VuZyBHYWxheHkgUzYgaW5jbHVkZXMgYW4gQUdDIGluIHRoZSBkZXNj
cmlwdG9yIGJ1dAotICAvLyBBdXRvbWF0aWNHYWluQ29udHJvbC5pc0F2YWlsYWJsZSgpIHJldHVy
bnMgZmFsc2UuCi0gIHByaXZhdGUgYm9vbGVhbiBlZmZlY3RUeXBlSXNWb0lQKFVVSUQgdHlwZSkg
ewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAxOCkKLSAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiAoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDLmVxdWFscyh0eXBl
KSAmJiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkpCi0gICAgICAgIHx8IChBdWRp
b0VmZmVjdC5FRkZFQ1RfVFlQRV9OUy5lcXVhbHModHlwZSkgJiYgaXNOb2lzZVN1cHByZXNzb3JT
dXBwb3J0ZWQoKSk7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBl
eGNlcHRpb24gd2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMg
dm9pZCBhc3NlcnRUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24p
IHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRv
IGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBjYWNoZWQgY29weSBv
ZiB0aGUgYXVkaW8gZWZmZWN0cyBhcnJheSwgaWYgYXZhaWxhYmxlLCBvcgotICAvLyBxdWVyaWVz
IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciB0aGUgbGlzdCBvZiBlZmZlY3RzLgotICBwcml2YXRl
IHN0YXRpYyBATnVsbGFibGUgRGVzY3JpcHRvcltdIGdldEF2YWlsYWJsZUVmZmVjdHMoKSB7Ci0g
ICAgaWYgKGNhY2hlZEVmZmVjdHMgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIGNhY2hlZEVmZmVj
dHM7Ci0gICAgfQotICAgIC8vIFRoZSBjYWNoaW5nIGlzIGJlc3QgZWZmb3J0IG9ubHkgLSBpZiB0
aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsCi0gICAgLy8gdGhyZWFkcyBpbiBwYXJh
bGxlbCwgdGhleSBtYXkgZW5kIHVwIGRvaW5nIHRoZSB1bmRlcmx5aW5nIE9TIGNhbGwKLSAgICAv
LyBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3JtYWxseSBvbmx5IGNhbGxlZCBvbiBvbmUgdGhyZWFk
IHNvIHRoZXJlJ3Mgbm8KLSAgICAvLyByZWFsIG5lZWQgdG8gb3B0aW1pemUgZm9yIHRoZSBtdWx0
aXBsZSB0aHJlYWRzIGNhc2UuCi0gICAgY2FjaGVkRWZmZWN0cyA9IEF1ZGlvRWZmZWN0LnF1ZXJ5
RWZmZWN0cygpOwotICAgIHJldHVybiBjYWNoZWRFZmZlY3RzOwotICB9Ci0KLSAgLy8gUmV0dXJu
cyB0cnVlIGlmIGFuIGVmZmVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgYXZhaWxhYmxlLiBG
dW5jdGlvbmFsbHkKLSAgLy8gZXF1aXZhbGVudCB0byAoTm9pc2VTdXBwcmVzc29yfEF1dG9tYXRp
Y0dhaW5Db250cm9sfC4uLikuaXNBdmFpbGFibGUoKSwgYnV0Ci0gIC8vIGZhc3RlciBhcyBpdCBh
dm9pZHMgdGhlIGV4cGVuc2l2ZSBPUyBjYWxsIHRvIGVudW1lcmF0ZSBlZmZlY3RzLgotICBwcml2
YXRlIHN0YXRpYyBib29sZWFuIGlzRWZmZWN0VHlwZUF2YWlsYWJsZShVVUlEIGVmZmVjdFR5cGUs
IFVVSUQgYmxhY2tMaXN0ZWRVdWlkKSB7Ci0gICAgRGVzY3JpcHRvcltdIGVmZmVjdHMgPSBnZXRB
dmFpbGFibGVFZmZlY3RzKCk7Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKERlc2NyaXB0b3IgZCA6IGVmZmVjdHMpIHsKLSAg
ICAgIGlmIChkLnR5cGUuZXF1YWxzKGVmZmVjdFR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAhZC51
dWlkLmVxdWFscyhibGFja0xpc3RlZFV1aWQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRj
QXVkaW9NYW5hZ2VyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL2F1ZGlvL1dlYlJ0Y0F1ZGlvTWFu
YWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDE2ZGFkNTAyNThhMTlk
NWZmZGQ4YjMxNGYwNTQ3MWQwYmRlZTg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9NYW5hZ2Vy
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy5hdWRpbzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVu
dC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWlt
cG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVk
aW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBvcnQgYW5k
cm9pZC5tZWRpYS5BdWRpb1RyYWNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5Mb2dnaW5nOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FsbGVkQnlOYXRpdmU7Ci0K
LS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBzdGF0aWMgZnVuY3Rpb25zIHRvIHF1ZXJ5IHNh
bXBsZSByYXRlIGFuZCBpbnB1dC9vdXRwdXQgYXVkaW8gYnVmZmVyIHNpemVzLgotICovCi1jbGFz
cyBXZWJSdGNBdWRpb01hbmFnZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFH
ID0gIldlYlJ0Y0F1ZGlvTWFuYWdlckV4dGVybmFsIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgREVGQVVMVF9TQU1QTEVfUkFURV9IWiA9IDE2MDAwOwotCi0gIC8vIERlZmF1bHQgYXVk
aW8gZGF0YSBmb3JtYXQgaXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVk
IHRvIGJlIHN1cHBvcnRlZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IEJJVFNfUEVSX1NBTVBMRSA9IDE2OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBE
RUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVIgPSAyNTY7Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHN0
YXRpYyBBdWRpb01hbmFnZXIgZ2V0QXVkaW9NYW5hZ2VyKENvbnRleHQgY29udGV4dCkgewotICAg
IHJldHVybiAoQXVkaW9NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5B
VURJT19TRVJWSUNFKTsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBzdGF0aWMgaW50IGdl
dE91dHB1dEJ1ZmZlclNpemUoCi0gICAgICBDb250ZXh0IGNvbnRleHQsIEF1ZGlvTWFuYWdlciBh
dWRpb01hbmFnZXIsIGludCBzYW1wbGVSYXRlLCBpbnQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscykg
ewotICAgIHJldHVybiBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoY29udGV4dCkKLSAgICAg
ICAgPyBnZXRMb3dMYXRlbmN5RnJhbWVzUGVyQnVmZmVyKGF1ZGlvTWFuYWdlcikKLSAgICAgICAg
OiBnZXRNaW5PdXRwdXRGcmFtZVNpemUoc2FtcGxlUmF0ZSwgbnVtYmVyT2ZPdXRwdXRDaGFubmVs
cyk7Ci0gIH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgc3RhdGljIGludCBnZXRJbnB1dEJ1ZmZl
clNpemUoCi0gICAgICBDb250ZXh0IGNvbnRleHQsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIs
IGludCBzYW1wbGVSYXRlLCBpbnQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzKSB7Ci0gICAgcmV0dXJu
IGlzTG93TGF0ZW5jeUlucHV0U3VwcG9ydGVkKGNvbnRleHQpCi0gICAgICAgID8gZ2V0TG93TGF0
ZW5jeUZyYW1lc1BlckJ1ZmZlcihhdWRpb01hbmFnZXIpCi0gICAgICAgIDogZ2V0TWluSW5wdXRG
cmFtZVNpemUoc2FtcGxlUmF0ZSwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzKTsKLSAgfQotCi0gIHBy
aXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9ydGVkKENvbnRleHQg
Y29udGV4dCkgewotICAgIHJldHVybiBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lz
dGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX0FVRElPX0xPV19MQVRFTkNZKTsKLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQo
Q29udGV4dCBjb250ZXh0KSB7Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogaW52ZXN0aWdhdGUgaWYg
c29tZSBzb3J0IG9mIGRldmljZSBsaXN0IGlzIG5lZWRlZCBoZXJlCi0gICAgLy8gYXMgd2VsbC4g
VGhlIE5ESyBkb2Mgc3RhdGVzIHRoYXQ6ICJBcyBvZiBBUEkgbGV2ZWwgMjEsIGxvd2VyIGxhdGVu
Y3kKLSAgICAvLyBhdWRpbyBpbnB1dCBpcyBzdXBwb3J0ZWQgb24gc2VsZWN0IGRldmljZXMuIFRv
IHRha2UgYWR2YW50YWdlIG9mIHRoaXMKLSAgICAvLyBmZWF0dXJlLCBmaXJzdCBjb25maXJtIHRo
YXQgbG93ZXIgbGF0ZW5jeSBvdXRwdXQgaXMgYXZhaWxhYmxlIi4KLSAgICByZXR1cm4gQnVpbGQu
VkVSU0lPTi5TREtfSU5UID49IDIxICYmIGlzTG93TGF0ZW5jeU91dHB1dFN1cHBvcnRlZChjb250
ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYXRpdmUgaW5wdXQvb3V0cHV0
IHNhbXBsZSByYXRlIGZvciB0aGlzIGRldmljZSdzIG91dHB1dCBzdHJlYW0uCi0gICAqLwotICBA
Q2FsbGVkQnlOYXRpdmUKLSAgc3RhdGljIGludCBnZXRTYW1wbGVSYXRlKEF1ZGlvTWFuYWdlciBh
dWRpb01hbmFnZXIpIHsKLSAgICAvLyBPdmVycmlkZSB0aGlzIGlmIHdlJ3JlIHJ1bm5pbmcgb24g
YW4gb2xkIGVtdWxhdG9yIGltYWdlIHdoaWNoIG9ubHkKLSAgICAvLyBzdXBwb3J0cyA4IGtIeiBh
bmQgZG9lc24ndCBzdXBwb3J0IFBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURS4KLSAgICBpZiAo
V2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25FbXVsYXRvcigpKSB7Ci0gICAgICBMb2dnaW5nLmQo
VEFHLCAiUnVubmluZyBlbXVsYXRvciwgb3ZlcnJpZGluZyBzYW1wbGUgcmF0ZSB0byA4IGtIei4i
KTsKLSAgICAgIHJldHVybiA4MDAwOwotICAgIH0KLSAgICAvLyBEZWxpdmVyIGJlc3QgcG9zc2li
bGUgZXN0aW1hdGUgYmFzZWQgb24gZGVmYXVsdCBBbmRyb2lkIEF1ZGlvTWFuYWdlciBBUElzLgot
ICAgIGZpbmFsIGludCBzYW1wbGVSYXRlSHogPSBnZXRTYW1wbGVSYXRlRm9yQXBpTGV2ZWwoYXVk
aW9NYW5hZ2VyKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU2FtcGxlIHJhdGUgaXMgc2V0IHRvICIg
KyBzYW1wbGVSYXRlSHogKyAiIEh6Iik7Ci0gICAgcmV0dXJuIHNhbXBsZVJhdGVIejsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIGludCBnZXRTYW1wbGVSYXRlRm9yQXBpTGV2ZWwoQXVkaW9NYW5h
Z2VyIGF1ZGlvTWFuYWdlcikgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAxNykg
ewotICAgICAgcmV0dXJuIERFRkFVTFRfU0FNUExFX1JBVEVfSFo7Ci0gICAgfQotICAgIFN0cmlu
ZyBzYW1wbGVSYXRlU3RyaW5nID0gYXVkaW9NYW5hZ2VyLmdldFByb3BlcnR5KEF1ZGlvTWFuYWdl
ci5QUk9QRVJUWV9PVVRQVVRfU0FNUExFX1JBVEUpOwotICAgIHJldHVybiAoc2FtcGxlUmF0ZVN0
cmluZyA9PSBudWxsKSA/IERFRkFVTFRfU0FNUExFX1JBVEVfSFogOiBJbnRlZ2VyLnBhcnNlSW50
KHNhbXBsZVJhdGVTdHJpbmcpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmF0aXZlIG91dHB1
dCBidWZmZXIgc2l6ZSBmb3IgbG93LWxhdGVuY3kgb3V0cHV0IHN0cmVhbXMuCi0gIHByaXZhdGUg
c3RhdGljIGludCBnZXRMb3dMYXRlbmN5RnJhbWVzUGVyQnVmZmVyKEF1ZGlvTWFuYWdlciBhdWRp
b01hbmFnZXIpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgMTcpIHsKLSAgICAg
IHJldHVybiBERUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVI7Ci0gICAgfQotICAgIFN0cmluZyBmcmFt
ZXNQZXJCdWZmZXIgPQotICAgICAgICBhdWRpb01hbmFnZXIuZ2V0UHJvcGVydHkoQXVkaW9NYW5h
Z2VyLlBST1BFUlRZX09VVFBVVF9GUkFNRVNfUEVSX0JVRkZFUik7Ci0gICAgcmV0dXJuIGZyYW1l
c1BlckJ1ZmZlciA9PSBudWxsID8gREVGQVVMVF9GUkFNRV9QRVJfQlVGRkVSIDogSW50ZWdlci5w
YXJzZUludChmcmFtZXNQZXJCdWZmZXIpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWluaW11
bSBvdXRwdXQgYnVmZmVyIHNpemUgZm9yIEphdmEgYmFzZWQgYXVkaW8gKEF1ZGlvVHJhY2spLgot
ICAvLyBUaGlzIHNpemUgY2FuIGFsc28gYmUgdXNlZCBmb3IgT3BlblNMIEVTIGltcGxlbWVudGF0
aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mgc3VwcG9ydCBvZiBsb3ctbGF0ZW5jeSBv
dXRwdXQuCi0gIHByaXZhdGUgc3RhdGljIGludCBnZXRNaW5PdXRwdXRGcmFtZVNpemUoaW50IHNh
bXBsZVJhdGVJbkh6LCBpbnQgbnVtQ2hhbm5lbHMpIHsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJG
cmFtZSA9IG51bUNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGZpbmFsIGlu
dCBjaGFubmVsQ29uZmlnID0KLSAgICAgICAgKG51bUNoYW5uZWxzID09IDEgPyBBdWRpb0Zvcm1h
dC5DSEFOTkVMX09VVF9NT05PIDogQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVPKTsKLSAg
ICByZXR1cm4gQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplKAotICAgICAgICAgICAgICAgc2Ft
cGxlUmF0ZUluSHosIGNoYW5uZWxDb25maWcsIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJ
VCkKLSAgICAgICAgLyBieXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWlu
aW11bSBpbnB1dCBidWZmZXIgc2l6ZSBmb3IgSmF2YSBiYXNlZCBhdWRpbyAoQXVkaW9SZWNvcmQp
LgotICAvLyBUaGlzIHNpemUgY2FuIGNhbHNvIGJlIHVzZWQgZm9yIE9wZW5TTCBFUyBpbXBsZW1l
bnRhdGlvbnMgb24gZGV2aWNlcyB0aGF0Ci0gIC8vIGxhY2tzIHN1cHBvcnQgb2YgbG93LWxhdGVu
Y3kgaW5wdXQuCi0gIHByaXZhdGUgc3RhdGljIGludCBnZXRNaW5JbnB1dEZyYW1lU2l6ZShpbnQg
c2FtcGxlUmF0ZUluSHosIGludCBudW1DaGFubmVscykgewotICAgIGZpbmFsIGludCBieXRlc1Bl
ckZyYW1lID0gbnVtQ2hhbm5lbHMgKiAoQklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgZmluYWwg
aW50IGNoYW5uZWxDb25maWcgPQotICAgICAgICAobnVtQ2hhbm5lbHMgPT0gMSA/IEF1ZGlvRm9y
bWF0LkNIQU5ORUxfSU5fTU9OTyA6IEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fU1RFUkVPKTsKLSAg
ICByZXR1cm4gQXVkaW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAgICAgIHNh
bXBsZVJhdGVJbkh6LCBjaGFubmVsQ29uZmlnLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZC
SVQpCi0gICAgICAgIC8gYnl0ZXNQZXJGcmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEv
b3JnL3dlYnJ0Yy9hdWRpby9XZWJSdGNBdWRpb1JlY29yZC5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2phdmEvb3JnL3dlYnJ0
Yy9hdWRpby9XZWJSdGNBdWRpb1JlY29yZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiN2I3OGY3MzFmNWJmYmY2N2Y4YjkxYWM0MjQxMmYzNzNkNzFhYjgxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVk
aW8vV2ViUnRjQXVkaW9SZWNvcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4NSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLmF1ZGlvOwotCi1p
bXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRGV2aWNlSW5mbzsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9N
YW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5BdWRpb1JlY29yZGluZ0NvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5tZWRp
YS5NZWRpYVJlY29yZGVyLkF1ZGlvU291cmNlOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0
aW9uLk51bGxhYmxlOwotaW1wb3J0IGphdmEubGFuZy5TeXN0ZW07Ci1pbXBvcnQgamF2YS5uaW8u
Qnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5J
dGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3Vy
cmVudC5DYWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1p
bXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotaW1w
b3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2VicnRjLkNhbGxlZEJ5TmF0aXZl
OwotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9ydCBvcmcud2VicnRjLlRocmVhZFV0
aWxzOwotaW1wb3J0IG9yZy53ZWJydGMuYXVkaW8uSmF2YUF1ZGlvRGV2aWNlTW9kdWxlLkF1ZGlv
UmVjb3JkRXJyb3JDYWxsYmFjazsKLWltcG9ydCBvcmcud2VicnRjLmF1ZGlvLkphdmFBdWRpb0Rl
dmljZU1vZHVsZS5BdWRpb1JlY29yZFN0YXJ0RXJyb3JDb2RlOwotaW1wb3J0IG9yZy53ZWJydGMu
YXVkaW8uSmF2YUF1ZGlvRGV2aWNlTW9kdWxlLkF1ZGlvUmVjb3JkU3RhdGVDYWxsYmFjazsKLWlt
cG9ydCBvcmcud2VicnRjLmF1ZGlvLkphdmFBdWRpb0RldmljZU1vZHVsZS5TYW1wbGVzUmVhZHlD
YWxsYmFjazsKLQotY2xhc3MgV2ViUnRjQXVkaW9SZWNvcmQgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvUmVjb3JkRXh0ZXJuYWwiOwotCi0gIC8vIFJl
cXVlc3RlZCBzaXplIG9mIGVhY2ggcmVjb3JkZWQgYnVmZmVyIHByb3ZpZGVkIHRvIHRoZSBjbGll
bnQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQUxMQkFDS19CVUZGRVJfU0laRV9NUyA9
IDEwOwotCi0gIC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNhbGxiYWNrcyBwZXIgc2Vjb25kLgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19QRVJfU0VDT05EID0gMTAwMCAvIENBTExC
QUNLX0JVRkZFUl9TSVpFX01TOwotCi0gIC8vIFdlIGFzayBmb3IgYSBuYXRpdmUgYnVmZmVyIHNp
emUgb2YgQlVGRkVSX1NJWkVfRkFDVE9SICogKG1pbmltdW0gcmVxdWlyZWQKLSAgLy8gYnVmZmVy
IHNpemUpLiBUaGUgZXh0cmEgc3BhY2UgaXMgYWxsb2NhdGVkIHRvIGd1YXJkIGFnYWluc3QgZ2xp
dGNoZXMgdW5kZXIKLSAgLy8gaGlnaCBsb2FkLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
QlVGRkVSX1NJWkVfRkFDVE9SID0gMjsKLQotICAvLyBUaGUgQXVkaW9SZWNvcmRKYXZhVGhyZWFk
IGlzIGFsbG93ZWQgdG8gd2FpdCBmb3Igc3VjY2Vzc2Z1bCBjYWxsIHRvIGpvaW4oKQotICAvLyBi
dXQgdGhlIHdhaXQgdGltZXMgb3V0IGFmdGhlciB0aGlzIGFtb3VudCBvZiB0aW1lLgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBsb25nIEFVRElPX1JFQ09SRF9USFJFQURfSk9JTl9USU1FT1VUX01T
ID0gMjAwMDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0FVRElPX1NPVVJD
RSA9IEF1ZGlvU291cmNlLlZPSUNFX0NPTU1VTklDQVRJT047Ci0KLSAgLy8gRGVmYXVsdCBhdWRp
byBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0IHBlciBzYW1wbGUuCi0gIC8vIEd1YXJhbnRlZWQg
dG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGlu
dCBERUZBVUxUX0FVRElPX0ZPUk1BVCA9IEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVDsK
LQotICAvLyBJbmRpY2F0ZXMgQXVkaW9SZWNvcmQgaGFzIHN0YXJ0ZWQgcmVjb3JkaW5nIGF1ZGlv
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVVESU9fUkVDT1JEX1NUQVJUID0gMDsKLQot
ICAvLyBJbmRpY2F0ZXMgQXVkaW9SZWNvcmQgaGFzIHN0b3BwZWQgcmVjb3JkaW5nIGF1ZGlvLgot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVVESU9fUkVDT1JEX1NUT1AgPSAxOwotCi0gIC8v
IFRpbWUgdG8gd2FpdCBiZWZvcmUgY2hlY2tpbmcgcmVjb3JkaW5nIHN0YXR1cyBhZnRlciBzdGFy
dCBoYXMgYmVlbiBjYWxsZWQuIFRlc3RzIGhhdmUKLSAgLy8gc2hvd24gdGhhdCB0aGUgcmVzdWx0
IGNhbiBzb21ldGltZXMgYmUgaW52YWxpZCAob3VyIG93biBzdGF0dXMgbWlnaHQgYmUgbWlzc2lu
ZykgaWYgd2UgY2hlY2sKLSAgLy8gZGlyZWN0bHkgYWZ0ZXIgc3RhcnQuCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBDSEVDS19SRUNfU1RBVFVTX0RFTEFZX01TID0gMTAwOwotCi0gIHByaXZh
dGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIEF1ZGlvTWFuYWdlciBh
dWRpb01hbmFnZXI7Ci0gIHByaXZhdGUgZmluYWwgaW50IGF1ZGlvU291cmNlOwotICBwcml2YXRl
IGZpbmFsIGludCBhdWRpb0Zvcm1hdDsKLQotICBwcml2YXRlIGxvbmcgbmF0aXZlQXVkaW9SZWNv
cmQ7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBXZWJSdGNBdWRpb0VmZmVjdHMgZWZmZWN0cyA9IG5ldyBX
ZWJSdGNBdWRpb0VmZmVjdHMoKTsKLQotICBwcml2YXRlIEBOdWxsYWJsZSBCeXRlQnVmZmVyIGJ5
dGVCdWZmZXI7Ci0KLSAgcHJpdmF0ZSBATnVsbGFibGUgQXVkaW9SZWNvcmQgYXVkaW9SZWNvcmQ7
Ci0gIHByaXZhdGUgQE51bGxhYmxlIEF1ZGlvUmVjb3JkVGhyZWFkIGF1ZGlvVGhyZWFkOwotCi0g
IHByaXZhdGUgQE51bGxhYmxlIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAg
cHJpdmF0ZSBATnVsbGFibGUgU2NoZWR1bGVkRnV0dXJlPFN0cmluZz4gZnV0dXJlOwotCi0gIHBy
aXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBtaWNyb3Bob25lTXV0ZTsKLSAgcHJpdmF0ZSBib29sZWFu
IGF1ZGlvU291cmNlTWF0Y2hlc1JlY29yZGluZ1Nlc3Npb247Ci0gIHByaXZhdGUgYm9vbGVhbiBp
c0F1ZGlvQ29uZmlnVmVyaWZpZWQ7Ci0gIHByaXZhdGUgYnl0ZVtdIGVtcHR5Qnl0ZXM7Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBATnVsbGFibGUgQXVkaW9SZWNvcmRFcnJvckNhbGxiYWNrIGVycm9yQ2Fs
bGJhY2s7Ci0gIHByaXZhdGUgZmluYWwgQE51bGxhYmxlIEF1ZGlvUmVjb3JkU3RhdGVDYWxsYmFj
ayBzdGF0ZUNhbGxiYWNrOwotICBwcml2YXRlIGZpbmFsIEBOdWxsYWJsZSBTYW1wbGVzUmVhZHlD
YWxsYmFjayBhdWRpb1NhbXBsZXNSZWFkeUNhbGxiYWNrOwotICBwcml2YXRlIGZpbmFsIGJvb2xl
YW4gaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZDsKLSAgcHJpdmF0ZSBmaW5hbCBib29s
ZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkOwotCi0gIC8qKgotICAgKiBBdWRpbyB0aHJl
YWQgd2hpY2gga2VlcHMgY2FsbGluZyBCeXRlQnVmZmVyLnJlYWQoKSB3YWl0aW5nIGZvciBhdWRp
bwotICAgKiB0byBiZSByZWNvcmRlZC4gRmVlZHMgcmVjb3JkZWQgZGF0YSB0byB0aGUgbmF0aXZl
IGNvdW50ZXJwYXJ0IGFzIGEKLSAgICogcGVyaW9kaWMgc2VxdWVuY2Ugb2YgY2FsbGJhY2tzIHVz
aW5nIERhdGFJc1JlY29yZGVkKCkuCi0gICAqIFRoaXMgdGhyZWFkIHVzZXMgYSBQcm9jZXNzLlRI
UkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJpb3JpdHkuCi0gICAqLwotICBwcml2YXRlIGNs
YXNzIEF1ZGlvUmVjb3JkVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKLSAgICBwcml2YXRlIHZvbGF0
aWxlIGJvb2xlYW4ga2VlcEFsaXZlID0gdHJ1ZTsKLQotICAgIHB1YmxpYyBBdWRpb1JlY29yZFRo
cmVhZChTdHJpbmcgbmFtZSkgewotICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQ
cmlvcml0eShQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8pOwotICAgICAgTG9n
Z2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkVGhyZWFkIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhy
ZWFkSW5mbygpKTsKLSAgICAgIGFzc2VydFRydWUoYXVkaW9SZWNvcmQuZ2V0UmVjb3JkaW5nU3Rh
dGUoKSA9PSBBdWRpb1JlY29yZC5SRUNPUkRTVEFURV9SRUNPUkRJTkcpOwotCi0gICAgICAvLyBB
dWRpbyByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQgYW5kIHRoZSBjbGllbnQgaXMgaW5mb3JtZWQgYWJv
dXQgaXQuCi0gICAgICBkb0F1ZGlvUmVjb3JkU3RhdGVDYWxsYmFjayhBVURJT19SRUNPUkRfU1RB
UlQpOwotCi0gICAgICBsb25nIGxhc3RUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICB3
aGlsZSAoa2VlcEFsaXZlKSB7Ci0gICAgICAgIGludCBieXRlc1JlYWQgPSBhdWRpb1JlY29yZC5y
ZWFkKGJ5dGVCdWZmZXIsIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgICAgIGlmIChieXRl
c1JlYWQgPT0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgaWYgKG1pY3JvcGhv
bmVNdXRlKSB7Ci0gICAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICBi
eXRlQnVmZmVyLnB1dChlbXB0eUJ5dGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gSXQn
cyBwb3NzaWJsZSB3ZSd2ZSBiZWVuIHNodXQgZG93biBkdXJpbmcgdGhlIHJlYWQsIGFuZCBzdG9w
UmVjb3JkaW5nKCkgdHJpZWQgYW5kCi0gICAgICAgICAgLy8gZmFpbGVkIHRvIGpvaW4gdGhpcyB0
aHJlYWQuIFRvIGJlIGEgYml0IHNhZmVyLCB0cnkgdG8gYXZvaWQgY2FsbGluZyBhbnkgbmF0aXZl
IG1ldGhvZHMKLSAgICAgICAgICAvLyBpbiBjYXNlIHRoZXkndmUgYmVlbiB1bnJlZ2lzdGVyZWQg
YWZ0ZXIgc3RvcFJlY29yZGluZygpIHJldHVybmVkLgotICAgICAgICAgIGlmIChrZWVwQWxpdmUp
IHsKLSAgICAgICAgICAgIG5hdGl2ZURhdGFJc1JlY29yZGVkKG5hdGl2ZUF1ZGlvUmVjb3JkLCBi
eXRlc1JlYWQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoYXVkaW9TYW1wbGVzUmVhZHlD
YWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBDb3B5IHRoZSBlbnRpcmUgYnl0ZSBi
dWZmZXIgYXJyYXkuIFRoZSBzdGFydCBvZiB0aGUgYnl0ZUJ1ZmZlciBpcyBub3QgbmVjZXNzYXJp
bHkKLSAgICAgICAgICAgIC8vIGF0IGluZGV4IDAuCi0gICAgICAgICAgICBieXRlW10gZGF0YSA9
IEFycmF5cy5jb3B5T2ZSYW5nZShieXRlQnVmZmVyLmFycmF5KCksIGJ5dGVCdWZmZXIuYXJyYXlP
ZmZzZXQoKSwKLSAgICAgICAgICAgICAgICBieXRlQnVmZmVyLmNhcGFjaXR5KCkgKyBieXRlQnVm
ZmVyLmFycmF5T2Zmc2V0KCkpOwotICAgICAgICAgICAgYXVkaW9TYW1wbGVzUmVhZHlDYWxsYmFj
ay5vbldlYlJ0Y0F1ZGlvUmVjb3JkU2FtcGxlc1JlYWR5KAotICAgICAgICAgICAgICAgIG5ldyBK
YXZhQXVkaW9EZXZpY2VNb2R1bGUuQXVkaW9TYW1wbGVzKGF1ZGlvUmVjb3JkLmdldEF1ZGlvRm9y
bWF0KCksCi0gICAgICAgICAgICAgICAgICAgIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb3VudCgp
LCBhdWRpb1JlY29yZC5nZXRTYW1wbGVSYXRlKCksIGRhdGEpKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICJBdWRpb1JlY29y
ZC5yZWFkIGZhaWxlZDogIiArIGJ5dGVzUmVhZDsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCBl
cnJvck1lc3NhZ2UpOwotICAgICAgICAgIGlmIChieXRlc1JlYWQgPT0gQXVkaW9SZWNvcmQuRVJS
T1JfSU5WQUxJRF9PUEVSQVRJT04pIHsKLSAgICAgICAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwot
ICAgICAgICAgICAgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRFcnJvcihlcnJvck1lc3NhZ2UpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB0cnkgewotICAgICAgICBp
ZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgIGF1ZGlvUmVjb3JkLnN0b3AoKTsK
LSAgICAgICAgICBkb0F1ZGlvUmVjb3JkU3RhdGVDYWxsYmFjayhBVURJT19SRUNPUkRfU1RPUCk7
Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1JlY29yZC5zdG9wIGZhaWxlZDogIiArIGUuZ2V0
TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTdG9wcyB0aGUgaW5uZXIgdGhy
ZWFkIGxvb3AgYW5kIGFsc28gY2FsbHMgQXVkaW9SZWNvcmQuc3RvcCgpLgotICAgIC8vIERvZXMg
bm90IGJsb2NrIHRoZSBjYWxsaW5nIHRocmVhZC4KLSAgICBwdWJsaWMgdm9pZCBzdG9wVGhyZWFk
KCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgInN0b3BUaHJlYWQiKTsKLSAgICAgIGtlZXBBbGl2
ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBXZWJSdGNBdWRp
b1JlY29yZChDb250ZXh0IGNvbnRleHQsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIpIHsKLSAg
ICB0aGlzKGNvbnRleHQsIGF1ZGlvTWFuYWdlciwgREVGQVVMVF9BVURJT19TT1VSQ0UsIERFRkFV
TFRfQVVESU9fRk9STUFULAotICAgICAgICBudWxsIC8qIGVycm9yQ2FsbGJhY2sgKi8sIG51bGwg
Lyogc3RhdGVDYWxsYmFjayAqLywgbnVsbCAvKiBhdWRpb1NhbXBsZXNSZWFkeUNhbGxiYWNrICov
LAotICAgICAgICBXZWJSdGNBdWRpb0VmZmVjdHMuaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBv
cnRlZCgpLAotICAgICAgICBXZWJSdGNBdWRpb0VmZmVjdHMuaXNOb2lzZVN1cHByZXNzb3JTdXBw
b3J0ZWQoKSk7Ci0gIH0KLQotICBwdWJsaWMgV2ViUnRjQXVkaW9SZWNvcmQoQ29udGV4dCBjb250
ZXh0LCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyLCBpbnQgYXVkaW9Tb3VyY2UsCi0gICAgICBp
bnQgYXVkaW9Gb3JtYXQsIEBOdWxsYWJsZSBBdWRpb1JlY29yZEVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjaywKLSAgICAgIEBOdWxsYWJsZSBBdWRpb1JlY29yZFN0YXRlQ2FsbGJhY2sgc3RhdGVD
YWxsYmFjaywKLSAgICAgIEBOdWxsYWJsZSBTYW1wbGVzUmVhZHlDYWxsYmFjayBhdWRpb1NhbXBs
ZXNSZWFkeUNhbGxiYWNrLAotICAgICAgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3Vw
cG9ydGVkLCBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKSB7Ci0gICAgaWYgKGlz
QWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQgJiYgIVdlYlJ0Y0F1ZGlvRWZmZWN0cy5pc0Fj
b3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24oIkhXIEFFQyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotICAgIGlm
IChpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCAmJiAhV2ViUnRjQXVkaW9FZmZlY3RzLmlzTm9p
c2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oIkhXIE5TIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0gICAgdGhpcy5jb250
ZXh0ID0gY29udGV4dDsKLSAgICB0aGlzLmF1ZGlvTWFuYWdlciA9IGF1ZGlvTWFuYWdlcjsKLSAg
ICB0aGlzLmF1ZGlvU291cmNlID0gYXVkaW9Tb3VyY2U7Ci0gICAgdGhpcy5hdWRpb0Zvcm1hdCA9
IGF1ZGlvRm9ybWF0OwotICAgIHRoaXMuZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7Ci0g
ICAgdGhpcy5zdGF0ZUNhbGxiYWNrID0gc3RhdGVDYWxsYmFjazsKLSAgICB0aGlzLmF1ZGlvU2Ft
cGxlc1JlYWR5Q2FsbGJhY2sgPSBhdWRpb1NhbXBsZXNSZWFkeUNhbGxiYWNrOwotICAgIHRoaXMu
aXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCA9IGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJT
dXBwb3J0ZWQ7Ci0gICAgdGhpcy5pc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCA9IGlzTm9pc2VT
dXBwcmVzc29yU3VwcG9ydGVkOwotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1
ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBw
dWJsaWMgdm9pZCBzZXROYXRpdmVBdWRpb1JlY29yZChsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKSB7
Ci0gICAgdGhpcy5uYXRpdmVBdWRpb1JlY29yZCA9IG5hdGl2ZUF1ZGlvUmVjb3JkOwotICB9Ci0K
LSAgQENhbGxlZEJ5TmF0aXZlCi0gIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBv
cnRlZCgpIHsKLSAgICByZXR1cm4gaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZDsKLSAg
fQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9y
dGVkKCkgewotICAgIHJldHVybiBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZDsKLSAgfQotCi0g
IC8vIFJldHVybnMgdHJ1ZSBpZiBhIHZhbGlkIGNhbGwgdG8gdmVyaWZ5QXVkaW9Db25maWcoKSBo
YXMgYmVlbiBkb25lLiBTaG91bGQgYWx3YXlzIGJlCi0gIC8vIGNoZWNrZWQgYmVmb3JlIHVzaW5n
IHRoZSByZXR1cm5lZCB2YWx1ZSBvZiBpc0F1ZGlvU291cmNlTWF0Y2hpbmdSZWNvcmRpbmdTZXNz
aW9uKCkuCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBib29sZWFuIGlzQXVkaW9Db25maWdWZXJpZmll
ZCgpIHsKLSAgICByZXR1cm4gaXNBdWRpb0NvbmZpZ1ZlcmlmaWVkOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHZlcmlmeUF1ZGlvQ29uZmlnKCkgc3VjY2VlZHMuIFRoaXMgdmFsdWUgaXMg
c2V0IGFmdGVyIGEgc3BlY2lmaWMgZGVsYXkgd2hlbgotICAvLyBzdGFydFJlY29yZGluZygpIGhh
cyBiZWVuIGNhbGxlZC4gSGVuY2UsIHNob3VsZCBwcmVmZXJhYmx5IGJlIGNhbGxlZCBpbiBjb21i
aW5hdGlvbiB3aXRoCi0gIC8vIHN0b3BSZWNvcmRpbmcoKSB0byBlbnN1cmUgdGhhdCBpdCBoYXMg
YmVlbiBzZXQgcHJvcGVybHkuIHxpc0F1ZGlvQ29uZmlnVmVyaWZpZWR8IGlzCi0gIC8vIGVuYWJs
ZWQgaW4gV2ViUnRjQXVkaW9SZWNvcmQgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIHZhbHVl
IGlzIHZhbGlkLgotICBAQ2FsbGVkQnlOYXRpdmUKLSAgYm9vbGVhbiBpc0F1ZGlvU291cmNlTWF0
Y2hpbmdSZWNvcmRpbmdTZXNzaW9uKCkgewotICAgIGlmICghaXNBdWRpb0NvbmZpZ1ZlcmlmaWVk
KSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiQXVkaW8gY29uZmlndXJhdGlvbiBoYXMgbm90IHll
dCBiZWVuIHZlcmlmaWVkIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biBhdWRpb1NvdXJjZU1hdGNoZXNSZWNvcmRpbmdTZXNzaW9uOwotICB9Ci0KLSAgQENhbGxlZEJ5
TmF0aXZlCi0gIHByaXZhdGUgYm9vbGVhbiBlbmFibGVCdWlsdEluQUVDKGJvb2xlYW4gZW5hYmxl
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImVuYWJsZUJ1aWx0SW5BRUMoIiArIGVuYWJsZSArICIp
Iik7Ci0gICAgcmV0dXJuIGVmZmVjdHMuc2V0QUVDKGVuYWJsZSk7Ci0gIH0KLQotICBAQ2FsbGVk
QnlOYXRpdmUKLSAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZUJ1aWx0SW5OUyhib29sZWFuIGVuYWJs
ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGVCdWlsdEluTlMoIiArIGVuYWJsZSArICIp
Iik7Ci0gICAgcmV0dXJuIGVmZmVjdHMuc2V0TlMoZW5hYmxlKTsKLSAgfQotCi0gIEBDYWxsZWRC
eU5hdGl2ZQotICBwcml2YXRlIGludCBpbml0UmVjb3JkaW5nKGludCBzYW1wbGVSYXRlLCBpbnQg
Y2hhbm5lbHMpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdFJlY29yZGluZyhzYW1wbGVSYXRl
PSIgKyBzYW1wbGVSYXRlICsgIiwgY2hhbm5lbHM9IiArIGNoYW5uZWxzICsgIikiKTsKLSAgICBp
ZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkgewotICAgICAgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRJ
bml0RXJyb3IoIkluaXRSZWNvcmRpbmcgY2FsbGVkIHR3aWNlIHdpdGhvdXQgU3RvcFJlY29yZGlu
Zy4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZmluYWwgaW50IGJ5dGVzUGVyRnJh
bWUgPSBjaGFubmVscyAqIGdldEJ5dGVzUGVyU2FtcGxlKGF1ZGlvRm9ybWF0KTsKLSAgICBmaW5h
bCBpbnQgZnJhbWVzUGVyQnVmZmVyID0gc2FtcGxlUmF0ZSAvIEJVRkZFUlNfUEVSX1NFQ09ORDsK
LSAgICBieXRlQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRlc1BlckZyYW1l
ICogZnJhbWVzUGVyQnVmZmVyKTsKLSAgICBpZiAoIShieXRlQnVmZmVyLmhhc0FycmF5KCkpKSB7
Ci0gICAgICByZXBvcnRXZWJSdGNBdWRpb1JlY29yZEluaXRFcnJvcigiQnl0ZUJ1ZmZlciBkb2Vz
IG5vdCBoYXZlIGJhY2tpbmcgYXJyYXkuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAg
IExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNhcGFjaXR5OiAiICsgYnl0ZUJ1ZmZlci5jYXBh
Y2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3IGJ5dGVbYnl0ZUJ1ZmZlci5jYXBhY2l0eSgp
XTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBCeXRlQnVmZmVyIHdpdGggZXZlcnkg
Y2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRoZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgR2V0
RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5IGhhdmUgdGhlCi0gICAgLy8gdGhlIG5hdGl2
ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0aGUgbWVtb3J5IG9uY2UuCi0gICAgbmF0aXZl
Q2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKG5hdGl2ZUF1ZGlvUmVjb3JkLCBieXRlQnVmZmVyKTsK
LQotICAgIC8vIEdldCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSByZXF1aXJlZCBmb3IgdGhlIHN1
Y2Nlc3NmdWwgY3JlYXRpb24gb2YKLSAgICAvLyBhbiBBdWRpb1JlY29yZCBvYmplY3QsIGluIGJ5
dGUgdW5pdHMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgc2l6ZSBkb2Vzbid0IGd1YXJhbnRlZSBh
IHNtb290aCByZWNvcmRpbmcgdW5kZXIgbG9hZC4KLSAgICBmaW5hbCBpbnQgY2hhbm5lbENvbmZp
ZyA9IGNoYW5uZWxDb3VudFRvQ29uZmlndXJhdGlvbihjaGFubmVscyk7Ci0gICAgaW50IG1pbkJ1
ZmZlclNpemUgPSBBdWRpb1JlY29yZC5nZXRNaW5CdWZmZXJTaXplKHNhbXBsZVJhdGUsIGNoYW5u
ZWxDb25maWcsIGF1ZGlvRm9ybWF0KTsKLSAgICBpZiAobWluQnVmZmVyU2l6ZSA9PSBBdWRpb1Jl
Y29yZC5FUlJPUiB8fCBtaW5CdWZmZXJTaXplID09IEF1ZGlvUmVjb3JkLkVSUk9SX0JBRF9WQUxV
RSkgewotICAgICAgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRJbml0RXJyb3IoIkF1ZGlvUmVjb3Jk
LmdldE1pbkJ1ZmZlclNpemUgZmFpbGVkOiAiICsgbWluQnVmZmVyU2l6ZSk7Ci0gICAgICByZXR1
cm4gLTE7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1JlY29yZC5nZXRNaW5CdWZm
ZXJTaXplOiAiICsgbWluQnVmZmVyU2l6ZSk7Ci0KLSAgICAvLyBVc2UgYSBsYXJnZXIgYnVmZmVy
IHNpemUgdGhhbiB0aGUgbWluaW11bSByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIHRoZQotICAgIC8v
IEF1ZGlvUmVjb3JkIGluc3RhbmNlIHRvIGVuc3VyZSBzbW9vdGggcmVjb3JkaW5nIHVuZGVyIGxv
YWQuIEl0IGhhcyBiZWVuCi0gICAgLy8gdmVyaWZpZWQgdGhhdCBpdCBkb2VzIG5vdCBpbmNyZWFz
ZSB0aGUgYWN0dWFsIHJlY29yZGluZyBsYXRlbmN5LgotICAgIGludCBidWZmZXJTaXplSW5CeXRl
cyA9IE1hdGgubWF4KEJVRkZFUl9TSVpFX0ZBQ1RPUiAqIG1pbkJ1ZmZlclNpemUsIGJ5dGVCdWZm
ZXIuY2FwYWNpdHkoKSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImJ1ZmZlclNpemVJbkJ5dGVzOiAi
ICsgYnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIHRyeSB7Ci0gICAgICBpZiAoQnVpbGQuVkVSU0lP
Ti5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTSkgewotICAgICAgICAvLyBVc2UgdGhl
IEF1ZGlvUmVjb3JkLkJ1aWxkZXIgY2xhc3Mgb24gQW5kcm9pZCBNICgyMykgYW5kIGFib3ZlLgot
ICAgICAgICAvLyBUaHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLgotICAgICAgICBhdWRp
b1JlY29yZCA9IGNyZWF0ZUF1ZGlvUmVjb3JkT25NT3JIaWdoZXIoCi0gICAgICAgICAgICBhdWRp
b1NvdXJjZSwgc2FtcGxlUmF0ZSwgY2hhbm5lbENvbmZpZywgYXVkaW9Gb3JtYXQsIGJ1ZmZlclNp
emVJbkJ5dGVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgb2xkIEF1ZGlv
UmVjb3JkIGNvbnN0cnVjdG9yIGZvciBBUEkgbGV2ZWxzIGJlbG93IDIzLgotICAgICAgICAvLyBU
aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24uCi0gICAgICAgIGF1ZGlvUmVjb3Jk
ID0gY3JlYXRlQXVkaW9SZWNvcmRPbkxvd2VyVGhhbk0oCi0gICAgICAgICAgICBhdWRpb1NvdXJj
ZSwgc2FtcGxlUmF0ZSwgY2hhbm5lbENvbmZpZywgYXVkaW9Gb3JtYXQsIGJ1ZmZlclNpemVJbkJ5
dGVzKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gfCBV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBSZXBvcnQgb2YgZXhj
ZXB0aW9uIG1lc3NhZ2UgaXMgc3VmZmljaWVudC4gRXhhbXBsZTogIkNhbm5vdCBjcmVhdGUgQXVk
aW9SZWNvcmQiLgotICAgICAgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRJbml0RXJyb3IoZS5nZXRN
ZXNzYWdlKCkpOwotICAgICAgcmVsZWFzZUF1ZGlvUmVzb3VyY2VzKCk7Ci0gICAgICByZXR1cm4g
LTE7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZCA9PSBudWxsIHx8IGF1ZGlvUmVjb3JkLmdl
dFN0YXRlKCkgIT0gQXVkaW9SZWNvcmQuU1RBVEVfSU5JVElBTElaRUQpIHsKLSAgICAgIHJlcG9y
dFdlYlJ0Y0F1ZGlvUmVjb3JkSW5pdEVycm9yKCJDcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbiBv
ZiBhdWRpbyByZWNvcmRlciBmYWlsZWQuIik7Ci0gICAgICByZWxlYXNlQXVkaW9SZXNvdXJjZXMo
KTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZWZmZWN0cy5lbmFibGUoYXVkaW9SZWNv
cmQuZ2V0QXVkaW9TZXNzaW9uSWQoKSk7Ci0gICAgbG9nTWFpblBhcmFtZXRlcnMoKTsKLSAgICBs
b2dNYWluUGFyYW1ldGVyc0V4dGVuZGVkKCk7Ci0gICAgLy8gQ2hlY2sgbnVtYmVyIG9mIGFjdGl2
ZSByZWNvcmRpbmcgc2Vzc2lvbnMuIFNob3VsZCBiZSB6ZXJvIGJ1dCB3ZSBoYXZlIHNlZW4gY29u
ZmxpY3QgY2FzZXMKLSAgICAvLyBhbmQgYWRkaW5nIGEgbG9nIGZvciBpdCBjYW4gaGVscCB1cyBm
aWd1cmUgb3V0IGRldGFpbHMgYWJvdXQgY29uZmxpY3Rpbmcgc2Vzc2lvbnMuCi0gICAgZmluYWwg
aW50IG51bUFjdGl2ZVJlY29yZGluZ1Nlc3Npb25zID0KLSAgICAgICAgbG9nUmVjb3JkaW5nQ29u
ZmlndXJhdGlvbnMoZmFsc2UgLyogdmVyaWZ5QXVkaW9Db25maWcgKi8pOwotICAgIGlmIChudW1B
Y3RpdmVSZWNvcmRpbmdTZXNzaW9ucyAhPSAwKSB7Ci0gICAgICAvLyBMb2cgdGhlIGNvbmZsaWN0
IGFzIGEgd2FybmluZyBzaW5jZSBpbml0aWFsaXphdGlvbiBkaWQgaW4gZmFjdCBzdWNjZWVkLiBN
b3N0IGxpa2VseSwgdGhlCi0gICAgICAvLyB1cGNvbWluZyBjYWxsIHRvIHN0YXJ0UmVjb3JkaW5n
KCkgd2lsbCBmYWlsIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuCi0gICAgICBMb2dnaW5nLncoCi0g
ICAgICAgICAgVEFHLCAiUG90ZW50aWFsIG1pY3JvcGhvbmUgY29uZmxpY3QuIEFjdGl2ZSBzZXNz
aW9uczogIiArIG51bUFjdGl2ZVJlY29yZGluZ1Nlc3Npb25zKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZyYW1lc1BlckJ1ZmZlcjsKLSAgfQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIGJv
b2xlYW4gc3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0UmVjb3Jk
aW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZCAhPSBudWxsKTsKLSAgICBhc3NlcnRU
cnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIHRyeSB7Ci0gICAgICBhdWRpb1JlY29yZC5z
dGFydFJlY29yZGluZygpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICByZXBvcnRXZWJSdGNBdWRpb1JlY29yZFN0YXJ0RXJyb3IoQXVkaW9SZWNvcmRTdGFy
dEVycm9yQ29kZS5BVURJT19SRUNPUkRfU1RBUlRfRVhDRVBUSU9OLAotICAgICAgICAgICJBdWRp
b1JlY29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZC5nZXRSZWNvcmRpbmdT
dGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlJFQ09SRFNUQVRFX1JFQ09SRElORykgewotICAgICAgcmVw
b3J0V2ViUnRjQXVkaW9SZWNvcmRTdGFydEVycm9yKEF1ZGlvUmVjb3JkU3RhcnRFcnJvckNvZGUu
QVVESU9fUkVDT1JEX1NUQVJUX1NUQVRFX01JU01BVENILAotICAgICAgICAgICJBdWRpb1JlY29y
ZC5zdGFydFJlY29yZGluZyBmYWlsZWQgLSBpbmNvcnJlY3Qgc3RhdGU6ICIKLSAgICAgICAgICAg
ICAgKyBhdWRpb1JlY29yZC5nZXRSZWNvcmRpbmdTdGF0ZSgpKTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgYXVkaW9UaHJlYWQgPSBuZXcgQXVkaW9SZWNvcmRUaHJlYWQoIkF1ZGlv
UmVjb3JkSmF2YVRocmVhZCIpOwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgc2NoZWR1
bGVMb2dSZWNvcmRpbmdDb25maWd1cmF0aW9uc1Rhc2soKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fQotCi0gIEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIGJvb2xlYW4gc3RvcFJlY29yZGluZygp
IHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RvcFJlY29yZGluZyIpOwotICAgIGFzc2VydFRydWUo
YXVkaW9UaHJlYWQgIT0gbnVsbCk7Ci0gICAgaWYgKGZ1dHVyZSAhPSBudWxsKSB7Ci0gICAgICBp
ZiAoIWZ1dHVyZS5pc0RvbmUoKSkgewotICAgICAgICAvLyBNaWdodCBiZSBuZWVkZWQgaWYgdGhl
IGNsaWVudCBjYWxscyBzdGFydFJlY29yZGluZygpLCBzdG9wUmVjb3JkaW5nKCkgYmFjay10by1i
YWNrLgotICAgICAgICBmdXR1cmUuY2FuY2VsKHRydWUgLyogbWF5SW50ZXJydXB0SWZSdW5uaW5n
ICovKTsKLSAgICAgIH0KLSAgICAgIGZ1dHVyZSA9IG51bGw7Ci0gICAgfQotICAgIGlmIChleGVj
dXRvciAhPSBudWxsKSB7Ci0gICAgICBleGVjdXRvci5zaHV0ZG93bk5vdygpOwotICAgICAgZXhl
Y3V0b3IgPSBudWxsOwotICAgIH0KLSAgICBhdWRpb1RocmVhZC5zdG9wVGhyZWFkKCk7Ci0gICAg
aWYgKCFUaHJlYWRVdGlscy5qb2luVW5pbnRlcnJ1cHRpYmx5KGF1ZGlvVGhyZWFkLCBBVURJT19S
RUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJK
b2luIG9mIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCB0aW1lZCBvdXQiKTsKLSAgICAgIFdlYlJ0Y0F1
ZGlvVXRpbHMubG9nQXVkaW9TdGF0ZShUQUcsIGNvbnRleHQsIGF1ZGlvTWFuYWdlcik7Ci0gICAg
fQotICAgIGF1ZGlvVGhyZWFkID0gbnVsbDsKLSAgICBlZmZlY3RzLnJlbGVhc2UoKTsKLSAgICBy
ZWxlYXNlQXVkaW9SZXNvdXJjZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEBUYXJn
ZXRBcGkoQnVpbGQuVkVSU0lPTl9DT0RFUy5NKQotICBwcml2YXRlIHN0YXRpYyBBdWRpb1JlY29y
ZCBjcmVhdGVBdWRpb1JlY29yZE9uTU9ySGlnaGVyKAotICAgICAgaW50IGF1ZGlvU291cmNlLCBp
bnQgc2FtcGxlUmF0ZSwgaW50IGNoYW5uZWxDb25maWcsIGludCBhdWRpb0Zvcm1hdCwgaW50IGJ1
ZmZlclNpemVJbkJ5dGVzKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImNyZWF0ZUF1ZGlvUmVjb3Jk
T25NT3JIaWdoZXIiKTsKLSAgICByZXR1cm4gbmV3IEF1ZGlvUmVjb3JkLkJ1aWxkZXIoKQotICAg
ICAgICAuc2V0QXVkaW9Tb3VyY2UoYXVkaW9Tb3VyY2UpCi0gICAgICAgIC5zZXRBdWRpb0Zvcm1h
dChuZXcgQXVkaW9Gb3JtYXQuQnVpbGRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
LnNldEVuY29kaW5nKGF1ZGlvRm9ybWF0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5z
ZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNl
dENoYW5uZWxNYXNrKGNoYW5uZWxDb25maWcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmJ1aWxkKCkpCi0gICAgICAgIC5zZXRCdWZmZXJTaXplSW5CeXRlcyhidWZmZXJTaXplSW5CeXRl
cykKLSAgICAgICAgLmJ1aWxkKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBBdWRpb1JlY29y
ZCBjcmVhdGVBdWRpb1JlY29yZE9uTG93ZXJUaGFuTSgKLSAgICAgIGludCBhdWRpb1NvdXJjZSwg
aW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVsQ29uZmlnLCBpbnQgYXVkaW9Gb3JtYXQsIGludCBi
dWZmZXJTaXplSW5CeXRlcykgewotICAgIExvZ2dpbmcuZChUQUcsICJjcmVhdGVBdWRpb1JlY29y
ZE9uTG93ZXJUaGFuTSIpOwotICAgIHJldHVybiBuZXcgQXVkaW9SZWNvcmQoYXVkaW9Tb3VyY2Us
IHNhbXBsZVJhdGUsIGNoYW5uZWxDb25maWcsIGF1ZGlvRm9ybWF0LCBidWZmZXJTaXplSW5CeXRl
cyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnMoKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywKLSAgICAgICAgIkF1ZGlvUmVjb3JkOiAiCi0gICAgICAgICAgICArICJzZXNz
aW9uIElEOiAiICsgYXVkaW9SZWNvcmQuZ2V0QXVkaW9TZXNzaW9uSWQoKSArICIsICIKLSAgICAg
ICAgICAgICsgImNoYW5uZWxzOiAiICsgYXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvdW50KCkgKyAi
LCAiCi0gICAgICAgICAgICArICJzYW1wbGUgcmF0ZTogIiArIGF1ZGlvUmVjb3JkLmdldFNhbXBs
ZVJhdGUoKSk7Ci0gIH0KLQotICBAVGFyZ2V0QXBpKEJ1aWxkLlZFUlNJT05fQ09ERVMuTSkKLSAg
cHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKSB7Ci0gICAgaWYgKEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk0pIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsCi0gICAgICAgICAgIkF1ZGlvUmVjb3JkOiAiCi0gICAgICAgICAgICAgIC8vIFRo
ZSBmcmFtZSBjb3VudCBvZiB0aGUgbmF0aXZlIEF1ZGlvUmVjb3JkIGJ1ZmZlci4KLSAgICAgICAg
ICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJhbWVzOiAiICsgYXVkaW9SZWNvcmQuZ2V0QnVmZmVy
U2l6ZUluRnJhbWVzKCkpOwotICAgIH0KLSAgfQotCi0gIEBUYXJnZXRBcGkoQnVpbGQuVkVSU0lP
Tl9DT0RFUy5OKQotICAvLyBDaGVja3MgdGhlIG51bWJlciBvZiBhY3RpdmUgcmVjb3JkaW5nIHNl
c3Npb25zIGFuZCBsb2dzIHRoZSBzdGF0ZXMgb2YgYWxsIGFjdGl2ZSBzZXNzaW9ucy4KLSAgLy8g
UmV0dXJucyBudW1iZXIgb2YgYWN0aXZlIHNlc3Npb25zLgotICBwcml2YXRlIGludCBsb2dSZWNv
cmRpbmdDb25maWd1cmF0aW9ucyhib29sZWFuIHZlcmlmeUF1ZGlvQ29uZmlnKSB7Ci0gICAgaWYg
KEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuTikgewotICAgICAg
TG9nZ2luZy53KFRBRywgIkF1ZGlvTWFuYWdlciNnZXRBY3RpdmVSZWNvcmRpbmdDb25maWd1cmF0
aW9ucygpIHJlcXVpcmVzIE4gb3IgaGlnaGVyIik7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgaWYgKGF1ZGlvUmVjb3JkID09IG51bGwpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICAvLyBHZXQgYSBsaXN0IG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGF1ZGlvIHJlY29yZGluZyBj
b25maWd1cmF0aW9ucyBvZiB0aGUgZGV2aWNlIChjYW4gYmUgbW9yZQotICAgIC8vIHRoYW4gb25l
KS4gQW4gZW1wdHkgbGlzdCBpbmRpY2F0ZXMgdGhlcmUgaXMgbm8gcmVjb3JkaW5nIGFjdGl2ZSB3
aGVuIHF1ZXJpZWQuCi0gICAgTGlzdDxBdWRpb1JlY29yZGluZ0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3MgPSBhdWRpb01hbmFnZXIuZ2V0QWN0aXZlUmVjb3JkaW5nQ29uZmlndXJhdGlvbnMoKTsKLSAg
ICBmaW5hbCBpbnQgbnVtQWN0aXZlUmVjb3JkaW5nU2Vzc2lvbnMgPSBjb25maWdzLnNpemUoKTsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiTnVtYmVyIG9mIGFjdGl2ZSByZWNvcmRpbmcgc2Vzc2lvbnM6
ICIgKyBudW1BY3RpdmVSZWNvcmRpbmdTZXNzaW9ucyk7Ci0gICAgaWYgKG51bUFjdGl2ZVJlY29y
ZGluZ1Nlc3Npb25zID4gMCkgewotICAgICAgbG9nQWN0aXZlUmVjb3JkaW5nQ29uZmlncyhhdWRp
b1JlY29yZC5nZXRBdWRpb1Nlc3Npb25JZCgpLCBjb25maWdzKTsKLSAgICAgIGlmICh2ZXJpZnlB
dWRpb0NvbmZpZykgewotICAgICAgICAvLyBSdW4gYW4gZXh0cmEgY2hlY2sgdG8gdmVyaWZ5IHRo
YXQgdGhlIGV4aXN0aW5nIGF1ZGlvIHNvdXJjZSBkb2luZyB0aGUgcmVjb3JkaW5nICh0aWVkCi0g
ICAgICAgIC8vIHRvIHRoZSBBdWRpb1JlY29yZCBpbnN0YW5jZSkgaXMgbWF0Y2hpbmcgd2hhdCB0
aGUgYXVkaW8gcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24gbGlzdHMKLSAgICAgICAgLy8gYXMgaXRz
IGNsaWVudCBwYXJhbWV0ZXJzLiBJZiB0aGVzZSBkbyBub3QgbWF0Y2gsIHJlY29yZGluZyBtaWdo
dCB3b3JrIGJ1dCB1bmRlciBpbnZhbGlkCi0gICAgICAgIC8vIGNvbmRpdGlvbnMuCi0gICAgICAg
IGF1ZGlvU291cmNlTWF0Y2hlc1JlY29yZGluZ1Nlc3Npb24gPQotICAgICAgICAgICAgdmVyaWZ5
QXVkaW9Db25maWcoYXVkaW9SZWNvcmQuZ2V0QXVkaW9Tb3VyY2UoKSwgYXVkaW9SZWNvcmQuZ2V0
QXVkaW9TZXNzaW9uSWQoKSwKLSAgICAgICAgICAgICAgICBhdWRpb1JlY29yZC5nZXRGb3JtYXQo
KSwgYXVkaW9SZWNvcmQuZ2V0Um91dGVkRGV2aWNlKCksIGNvbmZpZ3MpOwotICAgICAgICBpc0F1
ZGlvQ29uZmlnVmVyaWZpZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVt
QWN0aXZlUmVjb3JkaW5nU2Vzc2lvbnM7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNo
IHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHBy
aXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlm
ICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVk
IGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgY2hh
bm5lbENvdW50VG9Db25maWd1cmF0aW9uKGludCBjaGFubmVscykgewotICAgIHJldHVybiAoY2hh
bm5lbHMgPT0gMSA/IEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fTU9OTyA6IEF1ZGlvRm9ybWF0LkNI
QU5ORUxfSU5fU1RFUkVPKTsKLSAgfQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2Fj
aGVEaXJlY3RCdWZmZXJBZGRyZXNzKAotICAgICAgbG9uZyBuYXRpdmVBdWRpb1JlY29yZEpuaSwg
Qnl0ZUJ1ZmZlciBieXRlQnVmZmVyKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVEYXRh
SXNSZWNvcmRlZChsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkSm5pLCBpbnQgYnl0ZXMpOwotCi0gIC8v
IFNldHMgYWxsIHJlY29yZGVkIHNhbXBsZXMgdG8gemVybyBpZiB8bXV0ZXwgaXMgdHJ1ZSwgaS5l
LiwgZW5zdXJlcyB0aGF0Ci0gIC8vIHRoZSBtaWNyb3Bob25lIGlzIG11dGVkLgotICBwdWJsaWMg
dm9pZCBzZXRNaWNyb3Bob25lTXV0ZShib29sZWFuIG11dGUpIHsKLSAgICBMb2dnaW5nLncoVEFH
LCAic2V0TWljcm9waG9uZU11dGUoIiArIG11dGUgKyAiKSIpOwotICAgIG1pY3JvcGhvbmVNdXRl
ID0gbXV0ZTsKLSAgfQotCi0gIC8vIFJlbGVhc2VzIHRoZSBuYXRpdmUgQXVkaW9SZWNvcmQgcmVz
b3VyY2VzLgotICBwcml2YXRlIHZvaWQgcmVsZWFzZUF1ZGlvUmVzb3VyY2VzKCkgewotICAgIExv
Z2dpbmcuZChUQUcsICJyZWxlYXNlQXVkaW9SZXNvdXJjZXMiKTsKLSAgICBpZiAoYXVkaW9SZWNv
cmQgIT0gbnVsbCkgewotICAgICAgYXVkaW9SZWNvcmQucmVsZWFzZSgpOwotICAgICAgYXVkaW9S
ZWNvcmQgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRXZWJSdGNB
dWRpb1JlY29yZEluaXRFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nZ2luZy5l
KFRBRywgIkluaXQgcmVjb3JkaW5nIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICBXZWJS
dGNBdWRpb1V0aWxzLmxvZ0F1ZGlvU3RhdGUoVEFHLCBjb250ZXh0LCBhdWRpb01hbmFnZXIpOwot
ICAgIGxvZ1JlY29yZGluZ0NvbmZpZ3VyYXRpb25zKGZhbHNlIC8qIHZlcmlmeUF1ZGlvQ29uZmln
ICovKTsKLSAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBlcnJvckNhbGxi
YWNrLm9uV2ViUnRjQXVkaW9SZWNvcmRJbml0RXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0V2ViUnRjQXVkaW9SZWNvcmRTdGFydEVycm9yKAot
ICAgICAgQXVkaW9SZWNvcmRTdGFydEVycm9yQ29kZSBlcnJvckNvZGUsIFN0cmluZyBlcnJvck1l
c3NhZ2UpIHsKLSAgICBMb2dnaW5nLmUoVEFHLCAiU3RhcnQgcmVjb3JkaW5nIGVycm9yOiAiICsg
ZXJyb3JDb2RlICsgIi4gIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgV2ViUnRjQXVkaW9VdGlscy5s
b2dBdWRpb1N0YXRlKFRBRywgY29udGV4dCwgYXVkaW9NYW5hZ2VyKTsKLSAgICBsb2dSZWNvcmRp
bmdDb25maWd1cmF0aW9ucyhmYWxzZSAvKiB2ZXJpZnlBdWRpb0NvbmZpZyAqLyk7Ci0gICAgaWYg
KGVycm9yQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgZXJyb3JDYWxsYmFjay5vbldlYlJ0Y0F1
ZGlvUmVjb3JkU3RhcnRFcnJvcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydFdlYlJ0Y0F1ZGlvUmVjb3JkRXJyb3IoU3RyaW5nIGVy
cm9yTWVzc2FnZSkgewotICAgIExvZ2dpbmcuZShUQUcsICJSdW4tdGltZSByZWNvcmRpbmcgZXJy
b3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMubG9nQXVkaW9TdGF0
ZShUQUcsIGNvbnRleHQsIGF1ZGlvTWFuYWdlcik7Ci0gICAgaWYgKGVycm9yQ2FsbGJhY2sgIT0g
bnVsbCkgewotICAgICAgZXJyb3JDYWxsYmFjay5vbldlYlJ0Y0F1ZGlvUmVjb3JkRXJyb3IoZXJy
b3JNZXNzYWdlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZG9BdWRpb1JlY29yZFN0
YXRlQ2FsbGJhY2soaW50IGF1ZGlvU3RhdGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZG9BdWRp
b1JlY29yZFN0YXRlQ2FsbGJhY2s6ICIgKyBhdWRpb1N0YXRlVG9TdHJpbmcoYXVkaW9TdGF0ZSkp
OwotICAgIGlmIChzdGF0ZUNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGlmIChhdWRpb1N0YXRl
ID09IFdlYlJ0Y0F1ZGlvUmVjb3JkLkFVRElPX1JFQ09SRF9TVEFSVCkgewotICAgICAgICBzdGF0
ZUNhbGxiYWNrLm9uV2ViUnRjQXVkaW9SZWNvcmRTdGFydCgpOwotICAgICAgfSBlbHNlIGlmIChh
dWRpb1N0YXRlID09IFdlYlJ0Y0F1ZGlvUmVjb3JkLkFVRElPX1JFQ09SRF9TVE9QKSB7Ci0gICAg
ICAgIHN0YXRlQ2FsbGJhY2sub25XZWJSdGNBdWRpb1JlY29yZFN0b3AoKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJJbnZhbGlkIGF1ZGlvIHN0YXRlIik7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVmZXJlbmNlIGZyb20gQW5kcm9pZCBjb2RlLCBBdWRp
b0Zvcm1hdC5nZXRCeXRlc1BlclNhbXBsZS4gQml0UGVyU2FtcGxlIC8gOAotICAvLyBEZWZhdWx0
IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXRzIHBlciBzYW1wbGUuCi0gIC8vIEd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzCi0gIHByaXZhdGUgc3RhdGljIGlu
dCBnZXRCeXRlc1BlclNhbXBsZShpbnQgYXVkaW9Gb3JtYXQpIHsKLSAgICBzd2l0Y2ggKGF1ZGlv
Rm9ybWF0KSB7Ci0gICAgICBjYXNlIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV84QklUOgotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklU
OgotICAgICAgY2FzZSBBdWRpb0Zvcm1hdC5FTkNPRElOR19JRUM2MTkzNzoKLSAgICAgIGNhc2Ug
QXVkaW9Gb3JtYXQuRU5DT0RJTkdfREVGQVVMVDoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBj
YXNlIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV9GTE9BVDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0g
ICAgICBjYXNlIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX0lOVkFMSUQ6Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQgYXVkaW8gZm9y
bWF0ICIgKyBhdWRpb0Zvcm1hdCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVXNlIGFuIEV4ZWN1dG9y
U2VydmljZSB0byBzY2hlZHVsZSBhIHRhc2sgYWZ0ZXIgYSBnaXZlbiBkZWxheSB3aGVyZSB0aGUg
dGFzayBjb25zaXN0cyBvZgotICAvLyBjaGVja2luZyAoYnkgbG9nZ2luZykgdGhlIGN1cnJlbnQg
c3RhdHVzIG9mIGFjdGl2ZSByZWNvcmRpbmcgc2Vzc2lvbnMuCi0gIHByaXZhdGUgdm9pZCBzY2hl
ZHVsZUxvZ1JlY29yZGluZ0NvbmZpZ3VyYXRpb25zVGFzaygpIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAic2NoZWR1bGVMb2dSZWNvcmRpbmdDb25maWd1cmF0aW9uc1Rhc2siKTsKLSAgICBpZiAoQnVp
bGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5OKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChleGVjdXRvciAhPSBudWxsKSB7Ci0gICAgICBleGVjdXRvci5z
aHV0ZG93bk5vdygpOwotICAgIH0KLSAgICBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVU
aHJlYWRTY2hlZHVsZWRFeGVjdXRvcigpOwotCi0gICAgQ2FsbGFibGU8U3RyaW5nPiBjYWxsYWJs
ZSA9ICgpIC0+IHsKLSAgICAgIGxvZ1JlY29yZGluZ0NvbmZpZ3VyYXRpb25zKHRydWUgLyogdmVy
aWZ5QXVkaW9Db25maWcgKi8pOwotICAgICAgcmV0dXJuICJTY2hlZHVsZWQgdGFzayBpcyBkb25l
IjsKLSAgICB9OwotCi0gICAgaWYgKGZ1dHVyZSAhPSBudWxsICYmICFmdXR1cmUuaXNEb25lKCkp
IHsKLSAgICAgIGZ1dHVyZS5jYW5jZWwodHJ1ZSAvKiBtYXlJbnRlcnJ1cHRJZlJ1bm5pbmcgKi8p
OwotICAgIH0KLSAgICAvLyBTY2hlZHVsZSBjYWxsIHRvIGxvZ1JlY29yZGluZ0NvbmZpZ3VyYXRp
b25zKCkgZnJvbSBleGVjdXRvciB0aHJlYWQgYWZ0ZXIgZml4ZWQgZGVsYXkuCi0gICAgZnV0dXJl
ID0gZXhlY3V0b3Iuc2NoZWR1bGUoY2FsbGFibGUsIENIRUNLX1JFQ19TVEFUVVNfREVMQVlfTVMs
IFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gIH07Ci0KLSAgQFRhcmdldEFwaShCdWlsZC5WRVJT
SU9OX0NPREVTLk4pCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbG9nQWN0aXZlUmVjb3JkaW5n
Q29uZmlncygKLSAgICAgIGludCBzZXNzaW9uLCBMaXN0PEF1ZGlvUmVjb3JkaW5nQ29uZmlndXJh
dGlvbj4gY29uZmlncykgewotICAgIGFzc2VydFRydWUoIWNvbmZpZ3MuaXNFbXB0eSgpKTsKLSAg
ICBmaW5hbCBJdGVyYXRvcjxBdWRpb1JlY29yZGluZ0NvbmZpZ3VyYXRpb24+IGl0ID0gY29uZmln
cy5pdGVyYXRvcigpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1JlY29yZGluZ0NvbmZpZ3Vy
YXRpb25zOiAiKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBmaW5hbCBBdWRp
b1JlY29yZGluZ0NvbmZpZ3VyYXRpb24gY29uZmlnID0gaXQubmV4dCgpOwotICAgICAgU3RyaW5n
QnVpbGRlciBjb25mID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgIC8vIFRoZSBhdWRpbyBz
b3VyY2Ugc2VsZWN0ZWQgYnkgdGhlIGNsaWVudC4KLSAgICAgIGZpbmFsIGludCBhdWRpb1NvdXJj
ZSA9IGNvbmZpZy5nZXRDbGllbnRBdWRpb1NvdXJjZSgpOwotICAgICAgY29uZi5hcHBlbmQoIiAg
Y2xpZW50IGF1ZGlvIHNvdXJjZT0iKQotICAgICAgICAgIC5hcHBlbmQoV2ViUnRjQXVkaW9VdGls
cy5hdWRpb1NvdXJjZVRvU3RyaW5nKGF1ZGlvU291cmNlKSkKLSAgICAgICAgICAuYXBwZW5kKCIs
IGNsaWVudCBzZXNzaW9uIGlkPSIpCi0gICAgICAgICAgLmFwcGVuZChjb25maWcuZ2V0Q2xpZW50
QXVkaW9TZXNzaW9uSWQoKSkKLSAgICAgICAgICAvLyBDb21wYXJlIHdpdGggb3VyIG93biBpZCAo
YmFzZWQgb24gQXVkaW9SZWNvcmQjZ2V0QXVkaW9TZXNzaW9uSWQoKSkuCi0gICAgICAgICAgLmFw
cGVuZCgiICgiKQotICAgICAgICAgIC5hcHBlbmQoc2Vzc2lvbikKLSAgICAgICAgICAuYXBwZW5k
KCIpIikKLSAgICAgICAgICAuYXBwZW5kKCJcbiIpOwotICAgICAgLy8gQXVkaW8gZm9ybWF0IGF0
IHdoaWNoIGF1ZGlvIGlzIHJlY29yZGVkIG9uIHRoaXMgQW5kcm9pZCBkZXZpY2UuIE5vdGUgdGhh
dCBpdCBtYXkgZGlmZmVyCi0gICAgICAvLyBmcm9tIHRoZSBjbGllbnQgYXBwbGljYXRpb24gcmVj
b3JkaW5nIGZvcm1hdCAoc2VlIGdldENsaWVudEZvcm1hdCgpKS4KLSAgICAgIEF1ZGlvRm9ybWF0
IGZvcm1hdCA9IGNvbmZpZy5nZXRGb3JtYXQoKTsKLSAgICAgIGNvbmYuYXBwZW5kKCIgIERldmlj
ZSBBdWRpb0Zvcm1hdDogIikKLSAgICAgICAgICAuYXBwZW5kKCJjaGFubmVsIGNvdW50PSIpCi0g
ICAgICAgICAgLmFwcGVuZChmb3JtYXQuZ2V0Q2hhbm5lbENvdW50KCkpCi0gICAgICAgICAgLmFw
cGVuZCgiLCBjaGFubmVsIGluZGV4IG1hc2s9IikKLSAgICAgICAgICAuYXBwZW5kKGZvcm1hdC5n
ZXRDaGFubmVsSW5kZXhNYXNrKCkpCi0gICAgICAgICAgLy8gT25seSBBdWRpb0Zvcm1hdCNDSEFO
TkVMX0lOX01PTk8gaXMgZ3VhcmFudGVlZCB0byB3b3JrIG9uIGFsbCBkZXZpY2VzLgotICAgICAg
ICAgIC5hcHBlbmQoIiwgY2hhbm5lbCBtYXNrPSIpCi0gICAgICAgICAgLmFwcGVuZChXZWJSdGNB
dWRpb1V0aWxzLmNoYW5uZWxNYXNrVG9TdHJpbmcoZm9ybWF0LmdldENoYW5uZWxNYXNrKCkpKQot
ICAgICAgICAgIC5hcHBlbmQoIiwgZW5jb2Rpbmc9IikKLSAgICAgICAgICAuYXBwZW5kKFdlYlJ0
Y0F1ZGlvVXRpbHMuYXVkaW9FbmNvZGluZ1RvU3RyaW5nKGZvcm1hdC5nZXRFbmNvZGluZygpKSkK
LSAgICAgICAgICAuYXBwZW5kKCIsIHNhbXBsZSByYXRlPSIpCi0gICAgICAgICAgLmFwcGVuZChm
b3JtYXQuZ2V0U2FtcGxlUmF0ZSgpKQotICAgICAgICAgIC5hcHBlbmQoIlxuIik7Ci0gICAgICAv
LyBBdWRpbyBmb3JtYXQgYXQgd2hpY2ggdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBpcyByZWNvcmRp
bmcgYXVkaW8uCi0gICAgICBmb3JtYXQgPSBjb25maWcuZ2V0Q2xpZW50Rm9ybWF0KCk7Ci0gICAg
ICBjb25mLmFwcGVuZCgiICBDbGllbnQgQXVkaW9Gb3JtYXQ6ICIpCi0gICAgICAgICAgLmFwcGVu
ZCgiY2hhbm5lbCBjb3VudD0iKQotICAgICAgICAgIC5hcHBlbmQoZm9ybWF0LmdldENoYW5uZWxD
b3VudCgpKQotICAgICAgICAgIC5hcHBlbmQoIiwgY2hhbm5lbCBpbmRleCBtYXNrPSIpCi0gICAg
ICAgICAgLmFwcGVuZChmb3JtYXQuZ2V0Q2hhbm5lbEluZGV4TWFzaygpKQotICAgICAgICAgIC8v
IE9ubHkgQXVkaW9Gb3JtYXQjQ0hBTk5FTF9JTl9NT05PIGlzIGd1YXJhbnRlZWQgdG8gd29yayBv
biBhbGwgZGV2aWNlcy4KLSAgICAgICAgICAuYXBwZW5kKCIsIGNoYW5uZWwgbWFzaz0iKQotICAg
ICAgICAgIC5hcHBlbmQoV2ViUnRjQXVkaW9VdGlscy5jaGFubmVsTWFza1RvU3RyaW5nKGZvcm1h
dC5nZXRDaGFubmVsTWFzaygpKSkKLSAgICAgICAgICAuYXBwZW5kKCIsIGVuY29kaW5nPSIpCi0g
ICAgICAgICAgLmFwcGVuZChXZWJSdGNBdWRpb1V0aWxzLmF1ZGlvRW5jb2RpbmdUb1N0cmluZyhm
b3JtYXQuZ2V0RW5jb2RpbmcoKSkpCi0gICAgICAgICAgLmFwcGVuZCgiLCBzYW1wbGUgcmF0ZT0i
KQotICAgICAgICAgIC5hcHBlbmQoZm9ybWF0LmdldFNhbXBsZVJhdGUoKSkKLSAgICAgICAgICAu
YXBwZW5kKCJcbiIpOwotICAgICAgLy8gQXVkaW8gaW5wdXQgZGV2aWNlIHVzZWQgZm9yIHRoaXMg
cmVjb3JkaW5nIHNlc3Npb24uCi0gICAgICBmaW5hbCBBdWRpb0RldmljZUluZm8gZGV2aWNlID0g
Y29uZmlnLmdldEF1ZGlvRGV2aWNlKCk7Ci0gICAgICBpZiAoZGV2aWNlICE9IG51bGwpIHsKLSAg
ICAgICAgYXNzZXJ0VHJ1ZShkZXZpY2UuaXNTb3VyY2UoKSk7Ci0gICAgICAgIGNvbmYuYXBwZW5k
KCIgIEF1ZGlvRGV2aWNlOiAiKQotICAgICAgICAgICAgLmFwcGVuZCgidHlwZT0iKQotICAgICAg
ICAgICAgLmFwcGVuZChXZWJSdGNBdWRpb1V0aWxzLmRldmljZVR5cGVUb1N0cmluZyhkZXZpY2Uu
Z2V0VHlwZSgpKSkKLSAgICAgICAgICAgIC5hcHBlbmQoIiwgaWQ9IikKLSAgICAgICAgICAgIC5h
cHBlbmQoZGV2aWNlLmdldElkKCkpOwotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgY29u
Zi50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBWZXJp
ZnkgdGhhdCB0aGUgY2xpZW50IGF1ZGlvIGNvbmZpZ3VyYXRpb24gKGRldmljZSBhbmQgZm9ybWF0
KSBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKLSAgLy8gY29uZmlndXJhdGlvbiAoc2FtZSBhcyBBdWRp
b1JlY29yZCdzKS4KLSAgQFRhcmdldEFwaShCdWlsZC5WRVJTSU9OX0NPREVTLk4pCi0gIHByaXZh
dGUgc3RhdGljIGJvb2xlYW4gdmVyaWZ5QXVkaW9Db25maWcoaW50IHNvdXJjZSwgaW50IHNlc3Np
b24sIEF1ZGlvRm9ybWF0IGZvcm1hdCwKLSAgICAgIEF1ZGlvRGV2aWNlSW5mbyBkZXZpY2UsIExp
c3Q8QXVkaW9SZWNvcmRpbmdDb25maWd1cmF0aW9uPiBjb25maWdzKSB7Ci0gICAgYXNzZXJ0VHJ1
ZSghY29uZmlncy5pc0VtcHR5KCkpOwotICAgIGZpbmFsIEl0ZXJhdG9yPEF1ZGlvUmVjb3JkaW5n
Q29uZmlndXJhdGlvbj4gaXQgPSBjb25maWdzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhh
c05leHQoKSkgewotICAgICAgZmluYWwgQXVkaW9SZWNvcmRpbmdDb25maWd1cmF0aW9uIGNvbmZp
ZyA9IGl0Lm5leHQoKTsKLSAgICAgIGZpbmFsIEF1ZGlvRGV2aWNlSW5mbyBjb25maWdEZXZpY2Ug
PSBjb25maWcuZ2V0QXVkaW9EZXZpY2UoKTsKLSAgICAgIGlmIChjb25maWdEZXZpY2UgPT0gbnVs
bCkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGlmICgoY29uZmlnLmdldENs
aWVudEF1ZGlvU291cmNlKCkgPT0gc291cmNlKQotICAgICAgICAgICYmIChjb25maWcuZ2V0Q2xp
ZW50QXVkaW9TZXNzaW9uSWQoKSA9PSBzZXNzaW9uKQotICAgICAgICAgIC8vIENoZWNrIHRoZSBj
bGllbnQgZm9ybWF0IChzaG91bGQgbWF0Y2ggdGhlIGZvcm1hdCBvZiB0aGUgQXVkaW9SZWNvcmQg
aW5zdGFuY2UpLgotICAgICAgICAgICYmIChjb25maWcuZ2V0Q2xpZW50Rm9ybWF0KCkuZ2V0RW5j
b2RpbmcoKSA9PSBmb3JtYXQuZ2V0RW5jb2RpbmcoKSkKLSAgICAgICAgICAmJiAoY29uZmlnLmdl
dENsaWVudEZvcm1hdCgpLmdldFNhbXBsZVJhdGUoKSA9PSBmb3JtYXQuZ2V0U2FtcGxlUmF0ZSgp
KQotICAgICAgICAgICYmIChjb25maWcuZ2V0Q2xpZW50Rm9ybWF0KCkuZ2V0Q2hhbm5lbE1hc2so
KSA9PSBmb3JtYXQuZ2V0Q2hhbm5lbE1hc2soKSkKLSAgICAgICAgICAmJiAoY29uZmlnLmdldENs
aWVudEZvcm1hdCgpLmdldENoYW5uZWxJbmRleE1hc2soKSA9PSBmb3JtYXQuZ2V0Q2hhbm5lbElu
ZGV4TWFzaygpKQotICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgZm9ybWF0IGlz
IHByb3Blcmx5IGNvbmZpZ3VyZWQuCi0gICAgICAgICAgJiYgKGNvbmZpZy5nZXRGb3JtYXQoKS5n
ZXRFbmNvZGluZygpICE9IEF1ZGlvRm9ybWF0LkVOQ09ESU5HX0lOVkFMSUQpCi0gICAgICAgICAg
JiYgKGNvbmZpZy5nZXRGb3JtYXQoKS5nZXRTYW1wbGVSYXRlKCkgPiAwKQotICAgICAgICAgIC8v
ICBGb3IgdGhlIGNoYW5uZWwgbWFzaywgZWl0aGVyIHRoZSBwb3NpdGlvbiBvciBpbmRleC1iYXNl
ZCB2YWx1ZSBtdXN0IGJlIHZhbGlkLgotICAgICAgICAgICYmICgoY29uZmlnLmdldEZvcm1hdCgp
LmdldENoYW5uZWxNYXNrKCkgIT0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTlZBTElEKQotICAgICAg
ICAgICAgICB8fCAoY29uZmlnLmdldEZvcm1hdCgpLmdldENoYW5uZWxJbmRleE1hc2soKSAhPSBB
dWRpb0Zvcm1hdC5DSEFOTkVMX0lOVkFMSUQpKQotICAgICAgICAgICYmIGNoZWNrRGV2aWNlTWF0
Y2goY29uZmlnRGV2aWNlLCBkZXZpY2UpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJ2ZXJp
ZnlBdWRpb0NvbmZpZzogUEFTUyIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgTG9nZ2luZy5lKFRBRywgInZlcmlmeUF1ZGlvQ29uZmlnOiBGQUlMRUQiKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBAVGFyZ2V0QXBpKEJ1aWxkLlZFUlNJT05fQ09ERVMu
TikKLSAgLy8gUmV0dXJucyB0cnVlIGlmIGRldmljZSBBIHBhcmFtZXRlcnMgbWF0Y2hlcyB0aG9z
ZSBvZiBkZXZpY2UgQi4KLSAgLy8gVE9ETyhoZW5yaWthKTogY2FuIGJlIGltcHJvdmVkIGJ5IGFk
ZGluZyBBdWRpb0RldmljZUluZm8jZ2V0QWRkcmVzcygpIGJ1dCBpdCByZXF1aXJlcyBBUEkgMjku
Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2hlY2tEZXZpY2VNYXRjaChBdWRpb0RldmljZUlu
Zm8gZGV2QSwgQXVkaW9EZXZpY2VJbmZvIGRldkIpIHsKLSAgICByZXR1cm4gKChkZXZBLmdldElk
KCkgPT0gZGV2Qi5nZXRJZCgpICYmIChkZXZBLmdldFR5cGUoKSA9PSBkZXZCLmdldFR5cGUoKSkp
KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBhdWRpb1N0YXRlVG9TdHJpbmcoaW50
IHN0YXRlKSB7Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgY2FzZSBXZWJSdGNBdWRpb1Jl
Y29yZC5BVURJT19SRUNPUkRfU1RBUlQ6Ci0gICAgICAgIHJldHVybiAiU1RBUlQiOwotICAgICAg
Y2FzZSBXZWJSdGNBdWRpb1JlY29yZC5BVURJT19SRUNPUkRfU1RPUDoKLSAgICAgICAgcmV0dXJu
ICJTVE9QIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiSU5WQUxJRCI7Ci0gICAg
fQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL2F1ZGlvL1dlYlJ0Y0F1ZGlv
VHJhY2suamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9UcmFjay5qYXZh
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGM5ZGQxNzlkZmQ2NmVlOWE4YmMzNWJi
OGZlYWYwM2NkOWQ2YjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9UcmFjay5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsNTIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGMuYXVkaW87Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0
QXBpOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuQXVkaW9BdHRyaWJ1dGVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3JtYXQ7Ci1p
bXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5B
dWRpb1RyYWNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Q
cm9jZXNzOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1w
b3J0IGphdmEubGFuZy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9y
dCBvcmcud2VicnRjLkNhbGxlZEJ5TmF0aXZlOwotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsK
LWltcG9ydCBvcmcud2VicnRjLlRocmVhZFV0aWxzOwotaW1wb3J0IG9yZy53ZWJydGMuYXVkaW8u
SmF2YUF1ZGlvRGV2aWNlTW9kdWxlLkF1ZGlvVHJhY2tFcnJvckNhbGxiYWNrOwotaW1wb3J0IG9y
Zy53ZWJydGMuYXVkaW8uSmF2YUF1ZGlvRGV2aWNlTW9kdWxlLkF1ZGlvVHJhY2tTdGFydEVycm9y
Q29kZTsKLWltcG9ydCBvcmcud2VicnRjLmF1ZGlvLkphdmFBdWRpb0RldmljZU1vZHVsZS5BdWRp
b1RyYWNrU3RhdGVDYWxsYmFjazsKLQotY2xhc3MgV2ViUnRjQXVkaW9UcmFjayB7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9UcmFja0V4dGVybmFsIjsK
LQotICAvLyBEZWZhdWx0IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBs
ZS4KLSAgLy8gR3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1
ZXN0ZWQgc2l6ZSBvZiBlYWNoIHJlY29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAx
MDsKLQotICAvLyBBdmVyYWdlIG51bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFD
S19CVUZGRVJfU0laRV9NUzsKLQotICAvLyBUaGUgQXVkaW9UcmFja1RocmVhZCBpcyBhbGxvd2Vk
IHRvIHdhaXQgZm9yIHN1Y2Nlc3NmdWwgY2FsbCB0byBqb2luKCkKLSAgLy8gYnV0IHRoZSB3YWl0
IHRpbWVzIG91dCBhZnRoZXIgdGhpcyBhbW91bnQgb2YgdGltZS4KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgbG9uZyBBVURJT19UUkFDS19USFJFQURfSk9JTl9USU1FT1VUX01TID0gMjAwMDsKLQot
ICAvLyBCeSBkZWZhdWx0LCBXZWJSVEMgY3JlYXRlcyBhdWRpbyB0cmFja3Mgd2l0aCBhIHVzYWdl
IGF0dHJpYnV0ZQotICAvLyBjb3JyZXNwb25kaW5nIHRvIHZvaWNlIGNvbW11bmljYXRpb25zLCBz
dWNoIGFzIHRlbGVwaG9ueSBvciBWb0lQLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVG
QVVMVF9VU0FHRSA9IGdldERlZmF1bHRVc2FnZUF0dHJpYnV0ZSgpOwotCi0gIHByaXZhdGUgc3Rh
dGljIGludCBnZXREZWZhdWx0VXNhZ2VBdHRyaWJ1dGUoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJ
T04uU0RLX0lOVCA+PSAyMSkgewotICAgICAgcmV0dXJuIEF1ZGlvQXR0cmlidXRlcy5VU0FHRV9W
T0lDRV9DT01NVU5JQ0FUSU9OOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBOb3QgdXNlZCBvbiBT
REtzIGxvd2VyIHRoYW4gTC4KLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotCi0gIC8vIElu
ZGljYXRlcyB0aGUgQXVkaW9UcmFjayBoYXMgc3RhcnRlZCBwbGF5aW5nIGF1ZGlvLgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVVESU9fVFJBQ0tfU1RBUlQgPSAwOwotCi0gIC8vIEluZGlj
YXRlcyB0aGUgQXVkaW9UcmFjayBoYXMgc3RvcHBlZCBwbGF5aW5nIGF1ZGlvLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgQVVESU9fVFJBQ0tfU1RPUCA9IDE7Ci0KLSAgcHJpdmF0ZSBsb25n
IG5hdGl2ZUF1ZGlvVHJhY2s7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICBw
cml2YXRlIGZpbmFsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0gIHByaXZhdGUgZmluYWwg
VGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlciB0aHJlYWRDaGVja2VyID0gbmV3IFRocmVhZFV0aWxz
LlRocmVhZENoZWNrZXIoKTsKLQotICBwcml2YXRlIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcjsKLQot
ICBwcml2YXRlIEBOdWxsYWJsZSBBdWRpb1RyYWNrIGF1ZGlvVHJhY2s7Ci0gIHByaXZhdGUgQE51
bGxhYmxlIEF1ZGlvVHJhY2tUaHJlYWQgYXVkaW9UaHJlYWQ7Ci0gIHByaXZhdGUgZmluYWwgVm9s
dW1lTG9nZ2VyIHZvbHVtZUxvZ2dlcjsKLQotICAvLyBTYW1wbGVzIHRvIGJlIHBsYXllZCBhcmUg
cmVwbGFjZWQgYnkgemVyb3MgaWYgfHNwZWFrZXJNdXRlfCBpcyBzZXQgdG8gdHJ1ZS4KLSAgLy8g
Q2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNwZWFrZXIgaXMgZnVsbHkgbXV0ZWQuCi0g
IHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBzcGVha2VyTXV0ZTsKLSAgcHJpdmF0ZSBieXRlW10g
ZW1wdHlCeXRlczsKLQotICBwcml2YXRlIGZpbmFsIEBOdWxsYWJsZSBBdWRpb1RyYWNrRXJyb3JD
YWxsYmFjayBlcnJvckNhbGxiYWNrOwotICBwcml2YXRlIGZpbmFsIEBOdWxsYWJsZSBBdWRpb1Ry
YWNrU3RhdGVDYWxsYmFjayBzdGF0ZUNhbGxiYWNrOwotCi0gIC8qKgotICAgKiBBdWRpbyB0aHJl
YWQgd2hpY2gga2VlcHMgY2FsbGluZyBBdWRpb1RyYWNrLndyaXRlKCkgdG8gc3RyZWFtIGF1ZGlv
LgotICAgKiBEYXRhIGlzIHBlcmlvZGljYWxseSBhY3F1aXJlZCBmcm9tIHRoZSBuYXRpdmUgV2Vi
UlRDIGxheWVyIHVzaW5nIHRoZQotICAgKiBuYXRpdmVHZXRQbGF5b3V0RGF0YSBjYWxsYmFjayBm
dW5jdGlvbi4KLSAgICogVGhpcyB0aHJlYWQgdXNlcyBhIFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZ
X1VSR0VOVF9BVURJTyBwcmlvcml0eS4KLSAgICovCi0gIHByaXZhdGUgY2xhc3MgQXVkaW9UcmFj
a1RocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIGtl
ZXBBbGl2ZSA9IHRydWU7Ci0KLSAgICBwdWJsaWMgQXVkaW9UcmFja1RocmVhZChTdHJpbmcgbmFt
ZSkgewotICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQcmlvcml0eShQcm9jZXNz
LlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8pOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1
ZGlvVHJhY2tUaHJlYWQiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAg
ICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrLmdldFBsYXlTdGF0ZSgpID09IEF1ZGlvVHJhY2suUExB
WVNUQVRFX1BMQVlJTkcpOwotCi0gICAgICAvLyBBdWRpbyBwbGF5b3V0IGhhcyBzdGFydGVkIGFu
ZCB0aGUgY2xpZW50IGlzIGluZm9ybWVkIGFib3V0IGl0LgotICAgICAgZG9BdWRpb1RyYWNrU3Rh
dGVDYWxsYmFjayhBVURJT19UUkFDS19TVEFSVCk7Ci0KLSAgICAgIC8vIEZpeGVkIHNpemUgaW4g
Ynl0ZXMgb2YgZWFjaCAxMG1zIGJsb2NrIG9mIGF1ZGlvIGRhdGEgdGhhdCB3ZSBhc2sgZm9yCi0g
ICAgICAvLyB1c2luZyBjYWxsYmFja3MgdG8gdGhlIG5hdGl2ZSBXZWJSVEMgY2xpZW50LgotICAg
ICAgZmluYWwgaW50IHNpemVJbkJ5dGVzID0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpOwotCi0gICAg
ICB3aGlsZSAoa2VlcEFsaXZlKSB7Ci0gICAgICAgIC8vIEdldCAxMG1zIG9mIFBDTSBkYXRhIGZy
b20gdGhlIG5hdGl2ZSBXZWJSVEMgY2xpZW50LiBBdWRpbyBkYXRhIGlzCi0gICAgICAgIC8vIHdy
aXR0ZW4gaW50byB0aGUgY29tbW9uIEJ5dGVCdWZmZXIgdXNpbmcgdGhlIGFkZHJlc3MgdGhhdCB3
YXMKLSAgICAgICAgLy8gY2FjaGVkIGF0IGNvbnN0cnVjdGlvbi4KLSAgICAgICAgbmF0aXZlR2V0
UGxheW91dERhdGEobmF0aXZlQXVkaW9UcmFjaywgc2l6ZUluQnl0ZXMpOwotICAgICAgICAvLyBX
cml0ZSBkYXRhIHVudGlsIGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGF1ZGlvIHNp
bmsuCi0gICAgICAgIC8vIFVwb24gcmV0dXJuLCB0aGUgYnVmZmVyIHBvc2l0aW9uIHdpbGwgaGF2
ZSBiZWVuIGFkdmFuY2VkIHRvIHJlZmxlY3QKLSAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBkYXRh
IHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRoZSBBdWRpb1RyYWNrLgotICAgICAg
ICBhc3NlcnRUcnVlKHNpemVJbkJ5dGVzIDw9IGJ5dGVCdWZmZXIucmVtYWluaW5nKCkpOwotICAg
ICAgICBpZiAoc3BlYWtlck11dGUpIHsKLSAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0g
ICAgICAgICAgYnl0ZUJ1ZmZlci5wdXQoZW1wdHlCeXRlcyk7Ci0gICAgICAgICAgYnl0ZUJ1ZmZl
ci5wb3NpdGlvbigwKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3Jp
dGVCeXRlcyhhdWRpb1RyYWNrLCBieXRlQnVmZmVyLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIGlm
IChieXRlc1dyaXR0ZW4gIT0gc2l6ZUluQnl0ZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFH
LCAiQXVkaW9UcmFjay53cml0ZSBwbGF5ZWQgaW52YWxpZCBudW1iZXIgb2YgYnl0ZXM6ICIgKyBi
eXRlc1dyaXR0ZW4pOwotICAgICAgICAgIC8vIElmIGEgd3JpdGUoKSByZXR1cm5zIGEgbmVnYXRp
dmUgdmFsdWUsIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KLSAgICAgICAgICAvLyBTdG9wIHBsYXlp
bmcgYW5kIHJlcG9ydCBhbiBlcnJvciBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgaWYgKGJ5dGVz
V3JpdHRlbiA8IDApIHsKLSAgICAgICAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAgICAgICAg
ICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFja0Vycm9yKCJBdWRpb1RyYWNrLndyaXRlIGZhaWxlZDog
IiArIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFRo
ZSBieXRlIGJ1ZmZlciBtdXN0IGJlIHJld2luZGVkIHNpbmNlIGJ5dGVCdWZmZXIucG9zaXRpb24o
KSBpcwotICAgICAgICAvLyBpbmNyZWFzZWQgYXQgZWFjaCBjYWxsIHRvIEF1ZGlvVHJhY2sud3Jp
dGUoKS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywKLSAgICAgICAgLy8gbmV4dCBjYWxsIHRvIEF1ZGlv
VHJhY2sud3JpdGUoKSB3aWxsIGZhaWwuCi0gICAgICAgIGJ5dGVCdWZmZXIucmV3aW5kKCk7Ci0K
LSAgICAgICAgLy8gVE9ETyhoZW5yaWthKTogaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgZGVs
YXkgZXN0aW1hdGUgaGVyZSBieQotICAgICAgICAvLyBjb3VudGluZyBudW1iZXIgb2Ygd3JpdHRl
biBmcmFtZXMgYW5kIHN1YnRyYWN0aW5nIHRoZSByZXN1bHQgZnJvbQotICAgICAgICAvLyBhdWRp
b1RyYWNrLmdldFBsYXliYWNrSGVhZFBvc2l0aW9uKCkuCi0gICAgICB9Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBpbnQgd3JpdGVCeXRlcyhBdWRpb1RyYWNrIGF1ZGlvVHJhY2ssIEJ5dGVCdWZmZXIg
Ynl0ZUJ1ZmZlciwgaW50IHNpemVJbkJ5dGVzKSB7Ci0gICAgICBpZiAoQnVpbGQuVkVSU0lPTi5T
REtfSU5UID49IDIxKSB7Ci0gICAgICAgIHJldHVybiBhdWRpb1RyYWNrLndyaXRlKGJ5dGVCdWZm
ZXIsIHNpemVJbkJ5dGVzLCBBdWRpb1RyYWNrLldSSVRFX0JMT0NLSU5HKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHJldHVybiBhdWRpb1RyYWNrLndyaXRlKGJ5dGVCdWZmZXIuYXJyYXkoKSwg
Ynl0ZUJ1ZmZlci5hcnJheU9mZnNldCgpLCBzaXplSW5CeXRlcyk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gU3RvcHMgdGhlIGlubmVyIHRocmVhZCBsb29wIHdoaWNoIHJlc3VsdHMgaW4gY2Fs
bGluZyBBdWRpb1RyYWNrLnN0b3AoKS4KLSAgICAvLyBEb2VzIG5vdCBibG9jayB0aGUgY2FsbGlu
ZyB0aHJlYWQuCi0gICAgcHVibGljIHZvaWQgc3RvcFRocmVhZCgpIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJzdG9wVGhyZWFkIik7Ci0gICAgICBrZWVwQWxpdmUgPSBmYWxzZTsKLSAgICB9Ci0g
IH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgV2ViUnRjQXVkaW9UcmFjayhDb250ZXh0IGNvbnRl
eHQsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIpIHsKLSAgICB0aGlzKGNvbnRleHQsIGF1ZGlv
TWFuYWdlciwgbnVsbCAvKiBlcnJvckNhbGxiYWNrICovLCBudWxsIC8qIHN0YXRlQ2FsbGJhY2sg
Ki8pOwotICB9Ci0KLSAgV2ViUnRjQXVkaW9UcmFjayhDb250ZXh0IGNvbnRleHQsIEF1ZGlvTWFu
YWdlciBhdWRpb01hbmFnZXIsCi0gICAgICBATnVsbGFibGUgQXVkaW9UcmFja0Vycm9yQ2FsbGJh
Y2sgZXJyb3JDYWxsYmFjaywKLSAgICAgIEBOdWxsYWJsZSBBdWRpb1RyYWNrU3RhdGVDYWxsYmFj
ayBzdGF0ZUNhbGxiYWNrKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5kZXRhY2hUaHJlYWQoKTsKLSAg
ICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMuYXVkaW9NYW5hZ2VyID0gYXVkaW9N
YW5hZ2VyOwotICAgIHRoaXMuZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7Ci0gICAgdGhp
cy5zdGF0ZUNhbGxiYWNrID0gc3RhdGVDYWxsYmFjazsKLSAgICB0aGlzLnZvbHVtZUxvZ2dlciA9
IG5ldyBWb2x1bWVMb2dnZXIoYXVkaW9NYW5hZ2VyKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3Rv
ciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gIH0KLQotICBAQ2FsbGVk
QnlOYXRpdmUKLSAgcHVibGljIHZvaWQgc2V0TmF0aXZlQXVkaW9UcmFjayhsb25nIG5hdGl2ZUF1
ZGlvVHJhY2spIHsKLSAgICB0aGlzLm5hdGl2ZUF1ZGlvVHJhY2sgPSBuYXRpdmVBdWRpb1RyYWNr
OwotICB9Ci0KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0UGxheW91
dChpbnQgc2FtcGxlUmF0ZSwgaW50IGNoYW5uZWxzLCBkb3VibGUgYnVmZmVyU2l6ZUZhY3Rvcikg
ewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2dnaW5n
LmQoVEFHLAotICAgICAgICAiaW5pdFBsYXlvdXQoc2FtcGxlUmF0ZT0iICsgc2FtcGxlUmF0ZSAr
ICIsIGNoYW5uZWxzPSIgKyBjaGFubmVscwotICAgICAgICAgICAgKyAiLCBidWZmZXJTaXplRmFj
dG9yPSIgKyBidWZmZXJTaXplRmFjdG9yICsgIikiKTsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJG
cmFtZSA9IGNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGJ5dGVCdWZmZXIg
PSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGJ5dGVzUGVyRnJhbWUgKiAoc2FtcGxlUmF0ZSAv
IEJVRkZFUlNfUEVSX1NFQ09ORCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNh
cGFjaXR5OiAiICsgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3
IGJ5dGVbYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5n
IHRoZSBCeXRlQnVmZmVyIHdpdGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRo
ZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5
IGhhdmUgdGhlCi0gICAgLy8gdGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0
aGUgbWVtb3J5IG9uY2UuCi0gICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKG5hdGl2
ZUF1ZGlvVHJhY2ssIGJ5dGVCdWZmZXIpOwotCi0gICAgLy8gR2V0IHRoZSBtaW5pbXVtIGJ1ZmZl
ciBzaXplIHJlcXVpcmVkIGZvciB0aGUgc3VjY2Vzc2Z1bCBjcmVhdGlvbiBvZiBhbgotICAgIC8v
IEF1ZGlvVHJhY2sgb2JqZWN0IHRvIGJlIGNyZWF0ZWQgaW4gdGhlIE1PREVfU1RSRUFNIG1vZGUu
Ci0gICAgLy8gTm90ZSB0aGF0IHRoaXMgc2l6ZSBkb2Vzbid0IGd1YXJhbnRlZSBhIHNtb290aCBw
bGF5YmFjayB1bmRlciBsb2FkLgotICAgIGZpbmFsIGludCBjaGFubmVsQ29uZmlnID0gY2hhbm5l
bENvdW50VG9Db25maWd1cmF0aW9uKGNoYW5uZWxzKTsKLSAgICBmaW5hbCBpbnQgbWluQnVmZmVy
U2l6ZUluQnl0ZXMgPSAoaW50KSAoQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplKHNhbXBsZVJh
dGUsIGNoYW5uZWxDb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpCi0gICAgICAgICogYnVm
ZmVyU2l6ZUZhY3Rvcik7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm1pbkJ1ZmZlclNpemVJbkJ5dGVz
OiAiICsgbWluQnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIC8vIEZvciB0aGUgc3RyZWFtaW5nIG1v
ZGUsIGRhdGEgbXVzdCBiZSB3cml0dGVuIHRvIHRoZSBhdWRpbyBzaW5rIGluCi0gICAgLy8gY2h1
bmtzIG9mIHNpemUgKGdpdmVuIGJ5IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgbGVzcyB0aGFuIG9y
IGVxdWFsCi0gICAgLy8gdG8gdGhlIHRvdGFsIGJ1ZmZlciBzaXplIHxtaW5CdWZmZXJTaXplSW5C
eXRlc3wuIEJ1dCwgd2UgaGF2ZSBzZWVuCi0gICAgLy8gcmVwb3J0cyBvZiAiZ2V0TWluQnVmZmVy
U2l6ZSgpOiBlcnJvciBxdWVyeWluZyBoYXJkd2FyZSIuIEhlbmNlLCBpdAotICAgIC8vIGNhbiBo
YXBwZW4gdGhhdCB8bWluQnVmZmVyU2l6ZUluQnl0ZXN8IGNvbnRhaW5zIGFuIGludmFsaWQgdmFs
dWUuCi0gICAgaWYgKG1pbkJ1ZmZlclNpemVJbkJ5dGVzIDwgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgp
KSB7Ci0gICAgICByZXBvcnRXZWJSdGNBdWRpb1RyYWNrSW5pdEVycm9yKCJBdWRpb1RyYWNrLmdl
dE1pbkJ1ZmZlclNpemUgcmV0dXJucyBhbiBpbnZhbGlkIHZhbHVlLiIpOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIEVuc3VyZSB0aGF0IHByZXZpc2lvbiBhdWRpbyBzZXNz
aW9uIHdhcyBzdG9wcGVkIGNvcnJlY3RseSBiZWZvcmUgdHJ5aW5nCi0gICAgLy8gdG8gY3JlYXRl
IGEgbmV3IEF1ZGlvVHJhY2suCi0gICAgaWYgKGF1ZGlvVHJhY2sgIT0gbnVsbCkgewotICAgICAg
cmVwb3J0V2ViUnRjQXVkaW9UcmFja0luaXRFcnJvcigiQ29uZmxpY3Qgd2l0aCBleGlzdGluZyBB
dWRpb1RyYWNrLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB0cnkgewotICAg
ICAgLy8gQ3JlYXRlIGFuIEF1ZGlvVHJhY2sgb2JqZWN0IGFuZCBpbml0aWFsaXplIGl0cyBhc3Nv
Y2lhdGVkIGF1ZGlvIGJ1ZmZlci4KLSAgICAgIC8vIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIGRl
dGVybWluZXMgaG93IGxvbmcgYW4gQXVkaW9UcmFjayBjYW4gcGxheQotICAgICAgLy8gYmVmb3Jl
IHJ1bm5pbmcgb3V0IG9mIGRhdGEuCi0gICAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49
IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIG9u
IEFQSSBsZXZlbCAyMSBvciBoaWdoZXIsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhIHNwZWNpYWwg
QXVkaW9UcmFjawotICAgICAgICAvLyBjb25zdHJ1Y3RvciB0aGF0IHVzZXMgQXVkaW9BdHRyaWJ1
dGVzIGFuZCBBdWRpb0Zvcm1hdCBhcyBpbnB1dC4gSXQgYWxsb3dzIHVzIHRvCi0gICAgICAgIC8v
IHN1cGVyc2VkZSB0aGUgbm90aW9uIG9mIHN0cmVhbSB0eXBlcyBmb3IgZGVmaW5pbmcgdGhlIGJl
aGF2aW9yIG9mIGF1ZGlvIHBsYXliYWNrLAotICAgICAgICAvLyBhbmQgdG8gYWxsb3cgY2VydGFp
biBwbGF0Zm9ybXMgb3Igcm91dGluZyBwb2xpY2llcyB0byB1c2UgdGhpcyBpbmZvcm1hdGlvbiBm
b3IgbW9yZQotICAgICAgICAvLyByZWZpbmVkIHZvbHVtZSBvciByb3V0aW5nIGRlY2lzaW9ucy4K
LSAgICAgICAgYXVkaW9UcmFjayA9Ci0gICAgICAgICAgICBjcmVhdGVBdWRpb1RyYWNrT25Mb2xs
aXBvcE9ySGlnaGVyKHNhbXBsZVJhdGUsIGNoYW5uZWxDb25maWcsIG1pbkJ1ZmZlclNpemVJbkJ5
dGVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVzZSBkZWZhdWx0IGNvbnN0cnVjdG9y
IGZvciBBUEkgbGV2ZWxzIGJlbG93IDIxLgotICAgICAgICBhdWRpb1RyYWNrID0KLSAgICAgICAg
ICAgIGNyZWF0ZUF1ZGlvVHJhY2tPbkxvd2VyVGhhbkxvbGxpcG9wKHNhbXBsZVJhdGUsIGNoYW5u
ZWxDb25maWcsIG1pbkJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFj
a0luaXRFcnJvcihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZWxlYXNlQXVkaW9SZXNvdXJjZXMo
KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJdCBjYW4gaGFwcGVuIHRo
YXQgYW4gQXVkaW9UcmFjayBpcyBjcmVhdGVkIGJ1dCBpdCB3YXMgbm90IHN1Y2Nlc3NmdWxseQot
ICAgIC8vIGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFNlZW1zIHRvIGJlIHRoZSBjYXNlIGUu
Zy4gd2hlbiB0aGUgbWF4aW11bQotICAgIC8vIG51bWJlciBvZiBnbG9iYWxseSBhdmFpbGFibGUg
YXVkaW8gdHJhY2tzIGlzIGV4Y2VlZGVkLgotICAgIGlmIChhdWRpb1RyYWNrID09IG51bGwgfHwg
YXVkaW9UcmFjay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2suU1RBVEVfSU5JVElBTElaRUQpIHsK
LSAgICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvVHJhY2tJbml0RXJyb3IoIkluaXRpYWxpemF0aW9uIG9m
IGF1ZGlvIHRyYWNrIGZhaWxlZC4iKTsKLSAgICAgIHJlbGVhc2VBdWRpb1Jlc291cmNlcygpOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2dNYWluUGFyYW1ldGVycygpOwotICAg
IGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IEBDYWxsZWRCeU5hdGl2ZQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRQbGF5b3V0KCkgewotICAg
IHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICB2b2x1bWVMb2dnZXIu
c3RhcnQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRQbGF5b3V0Iik7Ci0gICAgYXNzZXJ0
VHJ1ZShhdWRpb1RyYWNrICE9IG51bGwpOwotICAgIGFzc2VydFRydWUoYXVkaW9UaHJlYWQgPT0g
bnVsbCk7Ci0KLSAgICAvLyBTdGFydHMgcGxheWluZyBhbiBhdWRpbyB0cmFjay4KLSAgICB0cnkg
ewotICAgICAgYXVkaW9UcmFjay5wbGF5KCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydFdlYlJ0Y0F1ZGlvVHJhY2tTdGFydEVycm9yKEF1ZGlv
VHJhY2tTdGFydEVycm9yQ29kZS5BVURJT19UUkFDS19TVEFSVF9FWENFUFRJT04sCi0gICAgICAg
ICAgIkF1ZGlvVHJhY2sucGxheSBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBy
ZWxlYXNlQXVkaW9SZXNvdXJjZXMoKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
aWYgKGF1ZGlvVHJhY2suZ2V0UGxheVN0YXRlKCkgIT0gQXVkaW9UcmFjay5QTEFZU1RBVEVfUExB
WUlORykgewotICAgICAgcmVwb3J0V2ViUnRjQXVkaW9UcmFja1N0YXJ0RXJyb3IoQXVkaW9UcmFj
a1N0YXJ0RXJyb3JDb2RlLkFVRElPX1RSQUNLX1NUQVJUX1NUQVRFX01JU01BVENILAotICAgICAg
ICAgICJBdWRpb1RyYWNrLnBsYXkgZmFpbGVkIC0gaW5jb3JyZWN0IHN0YXRlIDoiICsgYXVkaW9U
cmFjay5nZXRQbGF5U3RhdGUoKSk7Ci0gICAgICByZWxlYXNlQXVkaW9SZXNvdXJjZXMoKTsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYW5kIHN0YXJ0IG5ldyBo
aWdoLXByaW9yaXR5IHRocmVhZCB3aGljaCBjYWxscyBBdWRpb1RyYWNrLndyaXRlKCkKLSAgICAv
LyBhbmQgd2hlcmUgd2UgYWxzbyBjYWxsIHRoZSBuYXRpdmUgbmF0aXZlR2V0UGxheW91dERhdGEo
KSBjYWxsYmFjayB0bwotICAgIC8vIHJlcXVlc3QgZGVjb2RlZCBhdWRpbyBmcm9tIFdlYlJUQy4K
LSAgICBhdWRpb1RocmVhZCA9IG5ldyBBdWRpb1RyYWNrVGhyZWFkKCJBdWRpb1RyYWNrSmF2YVRo
cmVhZCIpOwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJpdmF0ZSBib29sZWFuIHN0b3BQbGF5b3V0KCkgewot
ICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICB2b2x1bWVMb2dn
ZXIuc3RvcCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wUGxheW91dCIpOwotICAgIGFzc2Vy
dFRydWUoYXVkaW9UaHJlYWQgIT0gbnVsbCk7Ci0gICAgbG9nVW5kZXJydW5Db3VudCgpOwotICAg
IGF1ZGlvVGhyZWFkLnN0b3BUaHJlYWQoKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wcGlu
ZyB0aGUgQXVkaW9UcmFja1RocmVhZC4uLiIpOwotICAgIGF1ZGlvVGhyZWFkLmludGVycnVwdCgp
OwotICAgIGlmICghVGhyZWFkVXRpbHMuam9pblVuaW50ZXJydXB0aWJseShhdWRpb1RocmVhZCwg
QVVESU9fVFJBQ0tfVEhSRUFEX0pPSU5fVElNRU9VVF9NUykpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJKb2luIG9mIEF1ZGlvVHJhY2tUaHJlYWQgdGltZWQgb3V0LiIpOwotICAgICAgV2ViUnRj
QXVkaW9VdGlscy5sb2dBdWRpb1N0YXRlKFRBRywgY29udGV4dCwgYXVkaW9NYW5hZ2VyKTsKLSAg
ICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2tUaHJlYWQgaGFzIG5vdyBiZWVuIHN0
b3BwZWQuIik7Ci0gICAgYXVkaW9UaHJlYWQgPSBudWxsOwotICAgIGlmIChhdWRpb1RyYWNrICE9
IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYWxsaW5nIEF1ZGlvVHJhY2suc3RvcC4u
LiIpOwotICAgICAgdHJ5IHsKLSAgICAgICAgYXVkaW9UcmFjay5zdG9wKCk7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJBdWRpb1RyYWNrLnN0b3AgaXMgZG9uZS4iKTsKLSAgICAgICAgZG9BdWRp
b1RyYWNrU3RhdGVDYWxsYmFjayhBVURJT19UUkFDS19TVE9QKTsKLSAgICAgIH0gY2F0Y2ggKEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1Ry
YWNrLnN0b3AgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAg
ICByZWxlYXNlQXVkaW9SZXNvdXJjZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8v
IEdldCBtYXggcG9zc2libGUgdm9sdW1lIGluZGV4IGZvciBhIHBob25lIGNhbGwgYXVkaW8gc3Ry
ZWFtLgotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJpdmF0ZSBpbnQgZ2V0U3RyZWFtTWF4Vm9sdW1l
KCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiZ2V0U3RyZWFtTWF4Vm9sdW1lIik7Ci0gICAgcmV0dXJuIGF1ZGlvTWFuYWdl
ci5nZXRTdHJlYW1NYXhWb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKTsKLSAg
fQotCi0gIC8vIFNldCBjdXJyZW50IHZvbHVtZSBsZXZlbCBmb3IgYSBwaG9uZSBjYWxsIGF1ZGlv
IHN0cmVhbS4KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRTdHJlYW1W
b2x1bWUoaW50IHZvbHVtZSkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJl
YWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAic2V0U3RyZWFtVm9sdW1lKCIgKyB2b2x1bWUgKyAi
KSIpOwotICAgIGlmIChpc1ZvbHVtZUZpeGVkKCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJU
aGUgZGV2aWNlIGltcGxlbWVudHMgYSBmaXhlZCB2b2x1bWUgcG9saWN5LiIpOwotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb01hbmFnZXIuc2V0U3RyZWFtVm9sdW1lKEF1ZGlv
TWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgdm9sdW1lLCAwKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1ZvbHVtZUZpeGVkKCkgewotICAgIGlmIChCdWls
ZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QKQotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBhdWRpb01hbmFnZXIuaXNWb2x1bWVGaXhlZCgpOwot
ICB9Ci0KLSAgLyoqIEdldCBjdXJyZW50IHZvbHVtZSBsZXZlbCBmb3IgYSBwaG9uZSBjYWxsIGF1
ZGlvIHN0cmVhbS4gKi8KLSAgQENhbGxlZEJ5TmF0aXZlCi0gIHByaXZhdGUgaW50IGdldFN0cmVh
bVZvbHVtZSgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgImdldFN0cmVhbVZvbHVtZSIpOwotICAgIHJldHVybiBhdWRpb01h
bmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCk7Ci0g
IH0KLQotICBAQ2FsbGVkQnlOYXRpdmUKLSAgcHJpdmF0ZSBpbnQgR2V0UGxheW91dFVuZGVycnVu
Q291bnQoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyNCkgewotICAgICAg
aWYgKGF1ZGlvVHJhY2sgIT0gbnVsbCkgewotICAgICAgICByZXR1cm4gYXVkaW9UcmFjay5nZXRV
bmRlcnJ1bkNvdW50KCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAtMjsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywKLSAgICAg
ICAgIkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAgICsgInNlc3Npb24gSUQ6ICIgKyBhdWRpb1Ry
YWNrLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0gICAgICAgICAgICArICJjaGFubmVsczog
IiArIGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvdW50KCkgKyAiLCAiCi0gICAgICAgICAgICArICJz
YW1wbGUgcmF0ZTogIiArIGF1ZGlvVHJhY2suZ2V0U2FtcGxlUmF0ZSgpCi0gICAgICAgICAgICAr
ICIsICIKLSAgICAgICAgICAgIC8vIEdhaW4gKD49MS4wKSBleHByZXNzZWQgYXMgbGluZWFyIG11
bHRpcGxpZXIgb24gc2FtcGxlIHZhbHVlcy4KLSAgICAgICAgICAgICsgIm1heCBnYWluOiAiICsg
QXVkaW9UcmFjay5nZXRNYXhWb2x1bWUoKSk7Ci0gIH0KLQotICAvLyBDcmVhdGVzIGFuZCBBdWRp
b1RyYWNrIGluc3RhbmNlIHVzaW5nIEF1ZGlvQXR0cmlidXRlcyBhbmQgQXVkaW9Gb3JtYXQgYXMg
aW5wdXQuCi0gIC8vIEl0IGFsbG93cyBjZXJ0YWluIHBsYXRmb3JtcyBvciByb3V0aW5nIHBvbGlj
aWVzIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciBtb3JlCi0gIC8vIHJlZmluZWQgdm9sdW1l
IG9yIHJvdXRpbmcgZGVjaXNpb25zLgotICBAVGFyZ2V0QXBpKEJ1aWxkLlZFUlNJT05fQ09ERVMu
TE9MTElQT1ApCi0gIHByaXZhdGUgc3RhdGljIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFja09u
TG9sbGlwb3BPckhpZ2hlcigKLSAgICAgIGludCBzYW1wbGVSYXRlSW5IeiwgaW50IGNoYW5uZWxD
b25maWcsIGludCBidWZmZXJTaXplSW5CeXRlcykgewotICAgIExvZ2dpbmcuZChUQUcsICJjcmVh
dGVBdWRpb1RyYWNrT25Mb2xsaXBvcE9ySGlnaGVyIik7Ci0gICAgLy8gVE9ETyhoZW5yaWthKTog
dXNlIHNldFBlcmZvcm1hbmNlTW9kZShpbnQpIHdpdGggUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFU
RU5DWSB0byBjb250cm9sCi0gICAgLy8gcGVyZm9ybWFuY2Ugd2hlbiBBbmRyb2lkIE8gaXMgc3Vw
cG9ydGVkLiBBZGQgc29tZSBsb2dnaW5nIGluIHRoZSBtZWFuIHRpbWUuCi0gICAgZmluYWwgaW50
IG5hdGl2ZU91dHB1dFNhbXBsZVJhdGUgPQotICAgICAgICBBdWRpb1RyYWNrLmdldE5hdGl2ZU91
dHB1dFNhbXBsZVJhdGUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKTsKLSAgICBMb2dn
aW5nLmQoVEFHLCAibmF0aXZlT3V0cHV0U2FtcGxlUmF0ZTogIiArIG5hdGl2ZU91dHB1dFNhbXBs
ZVJhdGUpOwotICAgIGlmIChzYW1wbGVSYXRlSW5IeiAhPSBuYXRpdmVPdXRwdXRTYW1wbGVSYXRl
KSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiVW5hYmxlIHRvIHVzZSBmYXN0IG1vZGUgc2luY2Ug
cmVxdWVzdGVkIHNhbXBsZSByYXRlIGlzIG5vdCBuYXRpdmUiKTsKLSAgICB9Ci0gICAgLy8gQ3Jl
YXRlIGFuIGF1ZGlvIHRyYWNrIHdoZXJlIHRoZSBhdWRpbyB1c2FnZSBpcyBmb3IgVm9JUCBhbmQg
dGhlIGNvbnRlbnQgdHlwZSBpcyBzcGVlY2guCi0gICAgcmV0dXJuIG5ldyBBdWRpb1RyYWNrKG5l
dyBBdWRpb0F0dHJpYnV0ZXMuQnVpbGRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuc2V0VXNhZ2UoREVGQVVMVF9VU0FHRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5zZXRDb250ZW50VHlwZShBdWRpb0F0dHJpYnV0ZXMuQ09OVEVOVF9UWVBFX1NQRUVDSCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpLAotICAgICAgICBuZXcgQXVkaW9G
b3JtYXQuQnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0RW5jb2RpbmcoQXVkaW9Gb3JtYXQuRU5D
T0RJTkdfUENNXzE2QklUKQotICAgICAgICAgICAgLnNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZUlu
SHopCi0gICAgICAgICAgICAuc2V0Q2hhbm5lbE1hc2soY2hhbm5lbENvbmZpZykKLSAgICAgICAg
ICAgIC5idWlsZCgpLAotICAgICAgICBidWZmZXJTaXplSW5CeXRlcywgQXVkaW9UcmFjay5NT0RF
X1NUUkVBTSwgQXVkaW9NYW5hZ2VyLkFVRElPX1NFU1NJT05fSURfR0VORVJBVEUpOwotICB9Ci0K
LSAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikgLy8gRGVwcmVjYXRlZCBpbiBBUEkg
bGV2ZWwgMjUuCi0gIHByaXZhdGUgc3RhdGljIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFja09u
TG93ZXJUaGFuTG9sbGlwb3AoCi0gICAgICBpbnQgc2FtcGxlUmF0ZUluSHosIGludCBjaGFubmVs
Q29uZmlnLCBpbnQgYnVmZmVyU2l6ZUluQnl0ZXMpIHsKLSAgICByZXR1cm4gbmV3IEF1ZGlvVHJh
Y2soQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLCBzYW1wbGVSYXRlSW5IeiwgY2hhbm5l
bENvbmZpZywKLSAgICAgICAgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBidWZmZXJT
aXplSW5CeXRlcywgQXVkaW9UcmFjay5NT0RFX1NUUkVBTSk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgbG9nQnVmZmVyU2l6ZUluRnJhbWVzKCkgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19J
TlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5NKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLAotICAg
ICAgICAgICJBdWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgc2l6
ZSBvZiB0aGUgQXVkaW9UcmFjayBidWZmZXIgdGhhdCB0aGUgYXBwIHdyaXRlcyB0by4KLSAgICAg
ICAgICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJhbWVzOiAiICsgYXVkaW9UcmFjay5nZXRCdWZm
ZXJTaXplSW5GcmFtZXMoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0J1ZmZl
ckNhcGFjaXR5SW5GcmFtZXMoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBC
dWlsZC5WRVJTSU9OX0NPREVTLk4pIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsCi0gICAgICAgICAg
IkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAgICAgLy8gTWF4aW11bSBzaXplIG9mIHRoZSBBdWRp
b1RyYWNrIGJ1ZmZlciBpbiBmcmFtZXMuCi0gICAgICAgICAgICAgICsgImJ1ZmZlciBjYXBhY2l0
eSBpbiBmcmFtZXM6ICIgKyBhdWRpb1RyYWNrLmdldEJ1ZmZlckNhcGFjaXR5SW5GcmFtZXMoKSk7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQo
KSB7Ci0gICAgbG9nQnVmZmVyU2l6ZUluRnJhbWVzKCk7Ci0gICAgbG9nQnVmZmVyQ2FwYWNpdHlJ
bkZyYW1lcygpOwotICB9Ci0KLSAgLy8gUHJpbnRzIHRoZSBudW1iZXIgb2YgdW5kZXJydW4gb2Nj
dXJyZW5jZXMgaW4gdGhlIGFwcGxpY2F0aW9uLWxldmVsIHdyaXRlCi0gIC8vIGJ1ZmZlciBzaW5j
ZSB0aGUgQXVkaW9UcmFjayB3YXMgY3JlYXRlZC4gQW4gdW5kZXJydW4gb2NjdXJzIGlmIHRoZSBh
cHAgZG9lcwotICAvLyBub3Qgd3JpdGUgYXVkaW8gZGF0YSBxdWlja2x5IGVub3VnaCwgY2F1c2lu
ZyB0aGUgYnVmZmVyIHRvIHVuZGVyZmxvdyBhbmQgYQotICAvLyBwb3RlbnRpYWwgYXVkaW8gZ2xp
dGNoLgotICAvLyBUT0RPKGhlbnJpa2EpOiBrZWVwIHRyYWNrIG9mIHRoaXMgdmFsdWUgaW4gdGhl
IGZpZWxkIGFuZCBwb3NzaWJseSBhZGQgbmV3Ci0gIC8vIFVNQSBzdGF0IGlmIG5lZWRlZC4KLSAg
cHJpdmF0ZSB2b2lkIGxvZ1VuZGVycnVuQ291bnQoKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04u
U0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk4pIHsKLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJ1bmRlcnJ1biBjb3VudDogIiArIGF1ZGlvVHJhY2suZ2V0VW5kZXJydW5Db3VudCgpKTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24g
IHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNz
ZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAg
ICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0cnVl
Iik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgY2hhbm5lbENvdW50VG9Db25maWd1cmF0
aW9uKGludCBjaGFubmVscykgewotICAgIHJldHVybiAoY2hhbm5lbHMgPT0gMSA/IEF1ZGlvRm9y
bWF0LkNIQU5ORUxfT1VUX01PTk8gOiBBdWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9TVEVSRU8pOwot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQ2FjaGVEaXJlY3RCdWZm
ZXJBZGRyZXNzKAotICAgICAgbG9uZyBuYXRpdmVBdWRpb1RyYWNrSm5pLCBCeXRlQnVmZmVyIGJ5
dGVCdWZmZXIpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVHZXRQbGF5b3V0
RGF0YShsb25nIG5hdGl2ZUF1ZGlvVHJhY2tKbmksIGludCBieXRlcyk7Ci0KLSAgLy8gU2V0cyBh
bGwgc2FtcGxlcyB0byBiZSBwbGF5ZWQgb3V0IHRvIHplcm8gaWYgfG11dGV8IGlzIHRydWUsIGku
ZS4sCi0gIC8vIGVuc3VyZXMgdGhhdCB0aGUgc3BlYWtlciBpcyBtdXRlZC4KLSAgcHVibGljIHZv
aWQgc2V0U3BlYWtlck11dGUoYm9vbGVhbiBtdXRlKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgInNl
dFNwZWFrZXJNdXRlKCIgKyBtdXRlICsgIikiKTsKLSAgICBzcGVha2VyTXV0ZSA9IG11dGU7Ci0g
IH0KLQotICAvLyBSZWxlYXNlcyB0aGUgbmF0aXZlIEF1ZGlvVHJhY2sgcmVzb3VyY2VzLgotICBw
cml2YXRlIHZvaWQgcmVsZWFzZUF1ZGlvUmVzb3VyY2VzKCkgewotICAgIExvZ2dpbmcuZChUQUcs
ICJyZWxlYXNlQXVkaW9SZXNvdXJjZXMiKTsKLSAgICBpZiAoYXVkaW9UcmFjayAhPSBudWxsKSB7
Ci0gICAgICBhdWRpb1RyYWNrLnJlbGVhc2UoKTsKLSAgICAgIGF1ZGlvVHJhY2sgPSBudWxsOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRXZWJSdGNBdWRpb1RyYWNrSW5pdEVy
cm9yKFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2dnaW5nLmUoVEFHLCAiSW5pdCBwbGF5
b3V0IGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0F1
ZGlvU3RhdGUoVEFHLCBjb250ZXh0LCBhdWRpb01hbmFnZXIpOwotICAgIGlmIChlcnJvckNhbGxi
YWNrICE9IG51bGwpIHsKLSAgICAgIGVycm9yQ2FsbGJhY2sub25XZWJSdGNBdWRpb1RyYWNrSW5p
dEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9y
dFdlYlJ0Y0F1ZGlvVHJhY2tTdGFydEVycm9yKAotICAgICAgQXVkaW9UcmFja1N0YXJ0RXJyb3JD
b2RlIGVycm9yQ29kZSwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZ2dpbmcuZShUQUcs
ICJTdGFydCBwbGF5b3V0IGVycm9yOiAiICsgZXJyb3JDb2RlICsgIi4gIiArIGVycm9yTWVzc2Fn
ZSk7Ci0gICAgV2ViUnRjQXVkaW9VdGlscy5sb2dBdWRpb1N0YXRlKFRBRywgY29udGV4dCwgYXVk
aW9NYW5hZ2VyKTsKLSAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBlcnJv
ckNhbGxiYWNrLm9uV2ViUnRjQXVkaW9UcmFja1N0YXJ0RXJyb3IoZXJyb3JDb2RlLCBlcnJvck1l
c3NhZ2UpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRXZWJSdGNBdWRpb1Ry
YWNrRXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZ2dpbmcuZShUQUcsICJSdW4t
dGltZSBwbGF5YmFjayBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgV2ViUnRjQXVkaW9V
dGlscy5sb2dBdWRpb1N0YXRlKFRBRywgY29udGV4dCwgYXVkaW9NYW5hZ2VyKTsKLSAgICBpZiAo
ZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBlcnJvckNhbGxiYWNrLm9uV2ViUnRjQXVk
aW9UcmFja0Vycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IGRvQXVkaW9UcmFja1N0YXRlQ2FsbGJhY2soaW50IGF1ZGlvU3RhdGUpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiZG9BdWRpb1RyYWNrU3RhdGVDYWxsYmFjazogIiArIGF1ZGlvU3RhdGUpOwotICAg
IGlmIChzdGF0ZUNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGlmIChhdWRpb1N0YXRlID09IFdl
YlJ0Y0F1ZGlvVHJhY2suQVVESU9fVFJBQ0tfU1RBUlQpIHsKLSAgICAgICAgc3RhdGVDYWxsYmFj
ay5vbldlYlJ0Y0F1ZGlvVHJhY2tTdGFydCgpOwotICAgICAgfSBlbHNlIGlmIChhdWRpb1N0YXRl
ID09IFdlYlJ0Y0F1ZGlvVHJhY2suQVVESU9fVFJBQ0tfU1RPUCkgewotICAgICAgICBzdGF0ZUNh
bGxiYWNrLm9uV2ViUnRjQXVkaW9UcmFja1N0b3AoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IExvZ2dpbmcuZShUQUcsICJJbnZhbGlkIGF1ZGlvIHN0YXRlIik7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvamF2YS9vcmcvd2VicnRjL2F1ZGlvL1dlYlJ0Y0F1ZGlvVXRp
bHMuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9VdGlscy5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTFmYzllMDEzMTE1NmE1MDZlNzJiMWFiY2U1
MDZmNjljMDU2YzAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3NyYy9qYXZhL29yZy93ZWJydGMvYXVkaW8vV2ViUnRjQXVkaW9VdGlscy5qYXZhCisrKyAvZGV2
L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGMuYXVkaW87Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5BdWRpb01h
bmFnZXIuTU9ERV9JTl9DQUxMOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFu
YWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT047Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEu
QXVkaW9NYW5hZ2VyLk1PREVfTk9STUFMOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLkF1
ZGlvTWFuYWdlci5NT0RFX1JJTkdUT05FOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRh
cmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lk
LmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Rl
dmljZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsKLWltcG9ydCBhbmRy
b2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUmVjb3Jk
ZXIuQXVkaW9Tb3VyY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBqYXZhLmxh
bmcuVGhyZWFkOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5M
b2dnaW5nOwotCi1maW5hbCBjbGFzcyBXZWJSdGNBdWRpb1V0aWxzIHsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb1V0aWxzRXh0ZXJuYWwiOwotCi0gIC8v
IEhlbHBlciBtZXRob2QgZm9yIGJ1aWxkaW5nIGEgc3RyaW5nIG9mIHRocmVhZCBpbmZvcm1hdGlv
bi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGhyZWFkSW5mbygpIHsKLSAgICByZXR1cm4g
IkBbbmFtZT0iICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiLCBpZD0iICsg
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpCi0gICAgICAgICsgIl0iOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlJ3JlIHJ1bm5pbmcgb24gZW11bGF0b3IuCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBydW5uaW5nT25FbXVsYXRvcigpIHsKLSAgICByZXR1cm4gQnVpbGQuSEFS
RFdBUkUuZXF1YWxzKCJnb2xkZmlzaCIpICYmIEJ1aWxkLkJSQU5ELnN0YXJ0c1dpdGgoImdlbmVy
aWNfIik7Ci0gIH0KLQotICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBidWlsZCwg
dGFrZW4gZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4KLSAgc3RhdGljIHZvaWQgbG9nRGV2aWNlSW5m
byhTdHJpbmcgdGFnKSB7Ci0gICAgTG9nZ2luZy5kKHRhZywKLSAgICAgICAgIkFuZHJvaWQgU0RL
OiAiICsgQnVpbGQuVkVSU0lPTi5TREtfSU5UICsgIiwgIgotICAgICAgICAgICAgKyAiUmVsZWFz
ZTogIiArIEJ1aWxkLlZFUlNJT04uUkVMRUFTRSArICIsICIKLSAgICAgICAgICAgICsgIkJyYW5k
OiAiICsgQnVpbGQuQlJBTkQgKyAiLCAiCi0gICAgICAgICAgICArICJEZXZpY2U6ICIgKyBCdWls
ZC5ERVZJQ0UgKyAiLCAiCi0gICAgICAgICAgICArICJJZDogIiArIEJ1aWxkLklEICsgIiwgIgot
ICAgICAgICAgICAgKyAiSGFyZHdhcmU6ICIgKyBCdWlsZC5IQVJEV0FSRSArICIsICIKLSAgICAg
ICAgICAgICsgIk1hbnVmYWN0dXJlcjogIiArIEJ1aWxkLk1BTlVGQUNUVVJFUiArICIsICIKLSAg
ICAgICAgICAgICsgIk1vZGVsOiAiICsgQnVpbGQuTU9ERUwgKyAiLCAiCi0gICAgICAgICAgICAr
ICJQcm9kdWN0OiAiICsgQnVpbGQuUFJPRFVDVCk7Ci0gIH0KLQotICAvLyBMb2dzIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBjdXJyZW50IGF1ZGlvIHN0YXRlLiBUaGUgaWRlYSBpcyB0byBjYWxsIHRo
aXMKLSAgLy8gbWV0aG9kIHdoZW4gZXJyb3JzIGFyZSBkZXRlY3RlZCB0byBsb2cgdW5kZXIgd2hh
dCBjb25kaXRpb25zIHRoZSBlcnJvcgotICAvLyBvY2N1cnJlZC4gSG9wZWZ1bGx5IGl0IHdpbGwg
cHJvdmlkZSBjbHVlcyB0byB3aGF0IG1pZ2h0IGJlIHRoZSByb290IGNhdXNlLgotICBzdGF0aWMg
dm9pZCBsb2dBdWRpb1N0YXRlKFN0cmluZyB0YWcsIENvbnRleHQgY29udGV4dCwgQXVkaW9NYW5h
Z2VyIGF1ZGlvTWFuYWdlcikgewotICAgIGxvZ0RldmljZUluZm8odGFnKTsKLSAgICBsb2dBdWRp
b1N0YXRlQmFzaWModGFnLCBjb250ZXh0LCBhdWRpb01hbmFnZXIpOwotICAgIGxvZ0F1ZGlvU3Rh
dGVWb2x1bWUodGFnLCBhdWRpb01hbmFnZXIpOwotICAgIGxvZ0F1ZGlvRGV2aWNlSW5mbyh0YWcs
IGF1ZGlvTWFuYWdlcik7Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBBdWRpb0RldmljZUluZm8gdHlw
ZXMgdG8gbG9jYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICBzdGF0aWMgU3RyaW5nIGRldmlj
ZVR5cGVUb1N0cmluZyhpbnQgdHlwZSkgewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgY2Fz
ZSBBdWRpb0RldmljZUluZm8uVFlQRV9VTktOT1dOOgotICAgICAgICByZXR1cm4gIlRZUEVfVU5L
Tk9XTiI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX0JVSUxUSU5fRUFSUElFQ0U6
Ci0gICAgICAgIHJldHVybiAiVFlQRV9CVUlMVElOX0VBUlBJRUNFIjsKLSAgICAgIGNhc2UgQXVk
aW9EZXZpY2VJbmZvLlRZUEVfQlVJTFRJTl9TUEVBS0VSOgotICAgICAgICByZXR1cm4gIlRZUEVf
QlVJTFRJTl9TUEVBS0VSIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfV0lSRURf
SEVBRFNFVDoKLSAgICAgICAgcmV0dXJuICJUWVBFX1dJUkVEX0hFQURTRVQiOwotICAgICAgY2Fz
ZSBBdWRpb0RldmljZUluZm8uVFlQRV9XSVJFRF9IRUFEUEhPTkVTOgotICAgICAgICByZXR1cm4g
IlRZUEVfV0lSRURfSEVBRFBIT05FUyI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBF
X0xJTkVfQU5BTE9HOgotICAgICAgICByZXR1cm4gIlRZUEVfTElORV9BTkFMT0ciOwotICAgICAg
Y2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9MSU5FX0RJR0lUQUw6Ci0gICAgICAgIHJldHVybiAi
VFlQRV9MSU5FX0RJR0lUQUwiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9CTFVF
VE9PVEhfU0NPOgotICAgICAgICByZXR1cm4gIlRZUEVfQkxVRVRPT1RIX1NDTyI7Ci0gICAgICBj
YXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX0JMVUVUT09USF9BMkRQOgotICAgICAgICByZXR1cm4g
IlRZUEVfQkxVRVRPT1RIX0EyRFAiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9I
RE1JOgotICAgICAgICByZXR1cm4gIlRZUEVfSERNSSI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNl
SW5mby5UWVBFX0hETUlfQVJDOgotICAgICAgICByZXR1cm4gIlRZUEVfSERNSV9BUkMiOwotICAg
ICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9VU0JfREVWSUNFOgotICAgICAgICByZXR1cm4g
IlRZUEVfVVNCX0RFVklDRSI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX1VTQl9B
Q0NFU1NPUlk6Ci0gICAgICAgIHJldHVybiAiVFlQRV9VU0JfQUNDRVNTT1JZIjsKLSAgICAgIGNh
c2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfRE9DSzoKLSAgICAgICAgcmV0dXJuICJUWVBFX0RPQ0si
OwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9GTToKLSAgICAgICAgcmV0dXJuICJU
WVBFX0ZNIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfQlVJTFRJTl9NSUM6Ci0g
ICAgICAgIHJldHVybiAiVFlQRV9CVUlMVElOX01JQyI7Ci0gICAgICBjYXNlIEF1ZGlvRGV2aWNl
SW5mby5UWVBFX0ZNX1RVTkVSOgotICAgICAgICByZXR1cm4gIlRZUEVfRk1fVFVORVIiOwotICAg
ICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9UVl9UVU5FUjoKLSAgICAgICAgcmV0dXJuICJU
WVBFX1RWX1RVTkVSIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZpY2VJbmZvLlRZUEVfVEVMRVBIT05Z
OgotICAgICAgICByZXR1cm4gIlRZUEVfVEVMRVBIT05ZIjsKLSAgICAgIGNhc2UgQXVkaW9EZXZp
Y2VJbmZvLlRZUEVfQVVYX0xJTkU6Ci0gICAgICAgIHJldHVybiAiVFlQRV9BVVhfTElORSI7Ci0g
ICAgICBjYXNlIEF1ZGlvRGV2aWNlSW5mby5UWVBFX0lQOgotICAgICAgICByZXR1cm4gIlRZUEVf
SVAiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9CVVM6Ci0gICAgICAgIHJldHVy
biAiVFlQRV9CVVMiOwotICAgICAgY2FzZSBBdWRpb0RldmljZUluZm8uVFlQRV9VU0JfSEVBRFNF
VDoKLSAgICAgICAgcmV0dXJuICJUWVBFX1VTQl9IRUFEU0VUIjsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAiVFlQRV9VTktOT1dOIjsKLSAgICB9Ci0gIH0KLQotICBAVGFyZ2V0QXBp
KEJ1aWxkLlZFUlNJT05fQ09ERVMuTikKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYXVkaW9Tb3Vy
Y2VUb1N0cmluZyhpbnQgc291cmNlKSB7Ci0gICAgLy8gQXVkaW9Tb3VyY2UuVU5QUk9DRVNTRUQg
cmVxdWlyZXMgQVBJIGxldmVsIDI5LiBVc2UgbG9jYWwgZGVmaW5lIGluc3RlYWQuCi0gICAgZmlu
YWwgaW50IFZPSUNFX1BFUkZPUk1BTkNFID0gMTA7Ci0gICAgc3dpdGNoIChzb3VyY2UpIHsKLSAg
ICAgIGNhc2UgQXVkaW9Tb3VyY2UuREVGQVVMVDoKLSAgICAgICAgcmV0dXJuICJERUZBVUxUIjsK
LSAgICAgIGNhc2UgQXVkaW9Tb3VyY2UuTUlDOgotICAgICAgICByZXR1cm4gIk1JQyI7Ci0gICAg
ICBjYXNlIEF1ZGlvU291cmNlLlZPSUNFX1VQTElOSzoKLSAgICAgICAgcmV0dXJuICJWT0lDRV9V
UExJTksiOwotICAgICAgY2FzZSBBdWRpb1NvdXJjZS5WT0lDRV9ET1dOTElOSzoKLSAgICAgICAg
cmV0dXJuICJWT0lDRV9ET1dOTElOSyI7Ci0gICAgICBjYXNlIEF1ZGlvU291cmNlLlZPSUNFX0NB
TEw6Ci0gICAgICAgIHJldHVybiAiVk9JQ0VfQ0FMTCI7Ci0gICAgICBjYXNlIEF1ZGlvU291cmNl
LkNBTUNPUkRFUjoKLSAgICAgICAgcmV0dXJuICJDQU1DT1JERVIiOwotICAgICAgY2FzZSBBdWRp
b1NvdXJjZS5WT0lDRV9SRUNPR05JVElPTjoKLSAgICAgICAgcmV0dXJuICJWT0lDRV9SRUNPR05J
VElPTiI7Ci0gICAgICBjYXNlIEF1ZGlvU291cmNlLlZPSUNFX0NPTU1VTklDQVRJT046Ci0gICAg
ICAgIHJldHVybiAiVk9JQ0VfQ09NTVVOSUNBVElPTiI7Ci0gICAgICBjYXNlIEF1ZGlvU291cmNl
LlVOUFJPQ0VTU0VEOgotICAgICAgICByZXR1cm4gIlVOUFJPQ0VTU0VEIjsKLSAgICAgIGNhc2Ug
Vk9JQ0VfUEVSRk9STUFOQ0U6Ci0gICAgICAgIHJldHVybiAiVk9JQ0VfUEVSRk9STUFOQ0UiOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJJTlZBTElEIjsKLSAgICB9Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGFubmVsTWFza1RvU3RyaW5nKGludCBtYXNrKSB7Ci0g
ICAgLy8gRm9yIGlucHV0IG9yIEF1ZGlvUmVjb3JkLCB0aGUgbWFzayBzaG91bGQgYmUgQXVkaW9G
b3JtYXQjQ0hBTk5FTF9JTl9NT05PIG9yCi0gICAgLy8gQXVkaW9Gb3JtYXQjQ0hBTk5FTF9JTl9T
VEVSRU8uIEF1ZGlvRm9ybWF0I0NIQU5ORUxfSU5fTU9OTyBpcyBndWFyYW50ZWVkIHRvIHdvcmsg
b24gYWxsCi0gICAgLy8gZGV2aWNlcy4KLSAgICBzd2l0Y2ggKG1hc2spIHsKLSAgICAgIGNhc2Ug
QXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9TVEVSRU86Ci0gICAgICAgIHJldHVybiAiSU5fU1RFUkVP
IjsKLSAgICAgIGNhc2UgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05POgotICAgICAgICByZXR1
cm4gIklOX01PTk8iOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJJTlZBTElEIjsK
LSAgICB9Ci0gIH0KLQotICBAVGFyZ2V0QXBpKEJ1aWxkLlZFUlNJT05fQ09ERVMuTikKLSAgcHVi
bGljIHN0YXRpYyBTdHJpbmcgYXVkaW9FbmNvZGluZ1RvU3RyaW5nKGludCBlbmMpIHsKLSAgICBz
d2l0Y2ggKGVuYykgewotICAgICAgY2FzZSBBdWRpb0Zvcm1hdC5FTkNPRElOR19JTlZBTElEOgot
ICAgICAgICByZXR1cm4gIklOVkFMSUQiOwotICAgICAgY2FzZSBBdWRpb0Zvcm1hdC5FTkNPRElO
R19QQ01fMTZCSVQ6Ci0gICAgICAgIHJldHVybiAiUENNXzE2QklUIjsKLSAgICAgIGNhc2UgQXVk
aW9Gb3JtYXQuRU5DT0RJTkdfUENNXzhCSVQ6Ci0gICAgICAgIHJldHVybiAiUENNXzhCSVQiOwot
ICAgICAgY2FzZSBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fRkxPQVQ6Ci0gICAgICAgIHJldHVy
biAiUENNX0ZMT0FUIjsKLSAgICAgIGNhc2UgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfQUMzOgotICAg
ICAgICByZXR1cm4gIkFDMyI7Ci0gICAgICBjYXNlIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX0VfQUMz
OgotICAgICAgICByZXR1cm4gIkFDMyI7Ci0gICAgICBjYXNlIEF1ZGlvRm9ybWF0LkVOQ09ESU5H
X0RUUzoKLSAgICAgICAgcmV0dXJuICJEVFMiOwotICAgICAgY2FzZSBBdWRpb0Zvcm1hdC5FTkNP
RElOR19EVFNfSEQ6Ci0gICAgICAgIHJldHVybiAiRFRTX0hEIjsKLSAgICAgIGNhc2UgQXVkaW9G
b3JtYXQuRU5DT0RJTkdfTVAzOgotICAgICAgICByZXR1cm4gIk1QMyI7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gIkludmFsaWQgZW5jb2Rpbmc6ICIgKyBlbmM7Ci0gICAgfQotICB9
Ci0KLSAgLy8gUmVwb3J0cyBiYXNpYyBhdWRpbyBzdGF0aXN0aWNzLgotICBwcml2YXRlIHN0YXRp
YyB2b2lkIGxvZ0F1ZGlvU3RhdGVCYXNpYyhTdHJpbmcgdGFnLCBDb250ZXh0IGNvbnRleHQsIEF1
ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIpIHsKLSAgICBMb2dnaW5nLmQodGFnLAotICAgICAgICAi
QXVkaW8gU3RhdGU6ICIKLSAgICAgICAgICAgICsgImF1ZGlvIG1vZGU6ICIgKyBtb2RlVG9TdHJp
bmcoYXVkaW9NYW5hZ2VyLmdldE1vZGUoKSkgKyAiLCAiCi0gICAgICAgICAgICArICJoYXMgbWlj
OiAiICsgaGFzTWljcm9waG9uZShjb250ZXh0KSArICIsICIKLSAgICAgICAgICAgICsgIm1pYyBt
dXRlZDogIiArIGF1ZGlvTWFuYWdlci5pc01pY3JvcGhvbmVNdXRlKCkgKyAiLCAiCi0gICAgICAg
ICAgICArICJtdXNpYyBhY3RpdmU6ICIgKyBhdWRpb01hbmFnZXIuaXNNdXNpY0FjdGl2ZSgpICsg
IiwgIgotICAgICAgICAgICAgKyAic3BlYWtlcnBob25lOiAiICsgYXVkaW9NYW5hZ2VyLmlzU3Bl
YWtlcnBob25lT24oKSArICIsICIKLSAgICAgICAgICAgICsgIkJUIFNDTzogIiArIGF1ZGlvTWFu
YWdlci5pc0JsdWV0b290aFNjb09uKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVh
biBpc1ZvbHVtZUZpeGVkKEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIpIHsKLSAgICBpZiAoQnVp
bGQuVkVSU0lPTi5TREtfSU5UIDwgMjEpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGF1ZGlvTWFuYWdlci5pc1ZvbHVtZUZpeGVkKCk7Ci0gIH0KLQotICAvLyBBZGRz
IHZvbHVtZSBpbmZvcm1hdGlvbiBmb3IgYWxsIHBvc3NpYmxlIHN0cmVhbSB0eXBlcy4KLSAgcHJp
dmF0ZSBzdGF0aWMgdm9pZCBsb2dBdWRpb1N0YXRlVm9sdW1lKFN0cmluZyB0YWcsIEF1ZGlvTWFu
YWdlciBhdWRpb01hbmFnZXIpIHsKLSAgICBmaW5hbCBpbnRbXSBzdHJlYW1zID0ge0F1ZGlvTWFu
YWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgQXVkaW9NYW5hZ2VyLlNUUkVBTV9NVVNJQywKLSAgICAg
ICAgQXVkaW9NYW5hZ2VyLlNUUkVBTV9SSU5HLCBBdWRpb01hbmFnZXIuU1RSRUFNX0FMQVJNLCBB
dWRpb01hbmFnZXIuU1RSRUFNX05PVElGSUNBVElPTiwKLSAgICAgICAgQXVkaW9NYW5hZ2VyLlNU
UkVBTV9TWVNURU19OwotICAgIExvZ2dpbmcuZCh0YWcsICJBdWRpbyBTdGF0ZTogIik7Ci0gICAg
Ly8gU29tZSBkZXZpY2VzIG1heSBub3QgaGF2ZSB2b2x1bWUgY29udHJvbHMgYW5kIG1pZ2h0IHVz
ZSBhIGZpeGVkIHZvbHVtZS4KLSAgICBib29sZWFuIGZpeGVkVm9sdW1lID0gaXNWb2x1bWVGaXhl
ZChhdWRpb01hbmFnZXIpOwotICAgIExvZ2dpbmcuZCh0YWcsICIgIGZpeGVkIHZvbHVtZT0iICsg
Zml4ZWRWb2x1bWUpOwotICAgIGlmICghZml4ZWRWb2x1bWUpIHsKLSAgICAgIGZvciAoaW50IHN0
cmVhbSA6IHN0cmVhbXMpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbmZvID0gbmV3IFN0cmlu
Z0J1aWxkZXIoKTsKLSAgICAgICAgaW5mby5hcHBlbmQoIiAgIiArIHN0cmVhbVR5cGVUb1N0cmlu
ZyhzdHJlYW0pICsgIjogIik7Ci0gICAgICAgIGluZm8uYXBwZW5kKCJ2b2x1bWU9IikuYXBwZW5k
KGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoc3RyZWFtKSk7Ci0gICAgICAgIGluZm8uYXBw
ZW5kKCIsIG1heD0iKS5hcHBlbmQoYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShzdHJl
YW0pKTsKLSAgICAgICAgbG9nSXNTdHJlYW1NdXRlKHRhZywgYXVkaW9NYW5hZ2VyLCBzdHJlYW0s
IGluZm8pOwotICAgICAgICBMb2dnaW5nLmQodGFnLCBpbmZvLnRvU3RyaW5nKCkpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgbG9nSXNTdHJlYW1NdXRlKAot
ICAgICAgU3RyaW5nIHRhZywgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlciwgaW50IHN0cmVhbSwg
U3RyaW5nQnVpbGRlciBpbmZvKSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAy
MykgewotICAgICAgaW5mby5hcHBlbmQoIiwgbXV0ZWQ9IikuYXBwZW5kKGF1ZGlvTWFuYWdlci5p
c1N0cmVhbU11dGUoc3RyZWFtKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9p
ZCBsb2dBdWRpb0RldmljZUluZm8oU3RyaW5nIHRhZywgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdl
cikgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAyMykgewotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBmaW5hbCBBdWRpb0RldmljZUluZm9bXSBkZXZpY2VzID0gYXVkaW9NYW5h
Z2VyLmdldERldmljZXMoQXVkaW9NYW5hZ2VyLkdFVF9ERVZJQ0VTX0FMTCk7Ci0gICAgaWYgKGRl
dmljZXMubGVuZ3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nZ2luZy5k
KHRhZywgIkF1ZGlvIERldmljZXM6ICIpOwotICAgIGZvciAoQXVkaW9EZXZpY2VJbmZvIGRldmlj
ZSA6IGRldmljZXMpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgaW5mbyA9IG5ldyBTdHJpbmdCdWls
ZGVyKCk7Ci0gICAgICBpbmZvLmFwcGVuZCgiICAiKS5hcHBlbmQoZGV2aWNlVHlwZVRvU3RyaW5n
KGRldmljZS5nZXRUeXBlKCkpKTsKLSAgICAgIGluZm8uYXBwZW5kKGRldmljZS5pc1NvdXJjZSgp
ID8gIihpbik6ICIgOiAiKG91dCk6ICIpOwotICAgICAgLy8gQW4gZW1wdHkgYXJyYXkgaW5kaWNh
dGVzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cyBhcmJpdHJhcnkgY2hhbm5lbCBjb3VudHMuCi0g
ICAgICBpZiAoZGV2aWNlLmdldENoYW5uZWxDb3VudHMoKS5sZW5ndGggPiAwKSB7Ci0gICAgICAg
IGluZm8uYXBwZW5kKCJjaGFubmVscz0iKS5hcHBlbmQoQXJyYXlzLnRvU3RyaW5nKGRldmljZS5n
ZXRDaGFubmVsQ291bnRzKCkpKTsKLSAgICAgICAgaW5mby5hcHBlbmQoIiwgIik7Ci0gICAgICB9
Ci0gICAgICBpZiAoZGV2aWNlLmdldEVuY29kaW5ncygpLmxlbmd0aCA+IDApIHsKLSAgICAgICAg
Ly8gRXhhbXBsZXM6IEVOQ09ESU5HX1BDTV8xNkJJVCA9IDIsIEVOQ09ESU5HX1BDTV9GTE9BVCA9
IDQuCi0gICAgICAgIGluZm8uYXBwZW5kKCJlbmNvZGluZ3M9IikuYXBwZW5kKEFycmF5cy50b1N0
cmluZyhkZXZpY2UuZ2V0RW5jb2RpbmdzKCkpKTsKLSAgICAgICAgaW5mby5hcHBlbmQoIiwgIik7
Ci0gICAgICB9Ci0gICAgICBpZiAoZGV2aWNlLmdldFNhbXBsZVJhdGVzKCkubGVuZ3RoID4gMCkg
ewotICAgICAgICBpbmZvLmFwcGVuZCgic2FtcGxlIHJhdGVzPSIpLmFwcGVuZChBcnJheXMudG9T
dHJpbmcoZGV2aWNlLmdldFNhbXBsZVJhdGVzKCkpKTsKLSAgICAgICAgaW5mby5hcHBlbmQoIiwg
Iik7Ci0gICAgICB9Ci0gICAgICBpbmZvLmFwcGVuZCgiaWQ9IikuYXBwZW5kKGRldmljZS5nZXRJ
ZCgpKTsKLSAgICAgIExvZ2dpbmcuZCh0YWcsIGluZm8udG9TdHJpbmcoKSk7Ci0gICAgfQotICB9
Ci0KLSAgLy8gQ29udmVydHMgbWVkaWEuQXVkaW9NYW5hZ2VyIG1vZGVzIGludG8gbG9jYWwgc3Ry
aW5nIHJlcHJlc2VudGF0aW9uLgotICBzdGF0aWMgU3RyaW5nIG1vZGVUb1N0cmluZyhpbnQgbW9k
ZSkgewotICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgY2FzZSBNT0RFX0lOX0NBTEw6Ci0gICAg
ICAgIHJldHVybiAiTU9ERV9JTl9DQUxMIjsKLSAgICAgIGNhc2UgTU9ERV9JTl9DT01NVU5JQ0FU
SU9OOgotICAgICAgICByZXR1cm4gIk1PREVfSU5fQ09NTVVOSUNBVElPTiI7Ci0gICAgICBjYXNl
IE1PREVfTk9STUFMOgotICAgICAgICByZXR1cm4gIk1PREVfTk9STUFMIjsKLSAgICAgIGNhc2Ug
TU9ERV9SSU5HVE9ORToKLSAgICAgICAgcmV0dXJuICJNT0RFX1JJTkdUT05FIjsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiTU9ERV9JTlZBTElEIjsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyZWFtVHlwZVRvU3RyaW5nKGludCBzdHJlYW0pIHsKLSAg
ICBzd2l0Y2ggKHN0cmVhbSkgewotICAgICAgY2FzZSBBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNF
X0NBTEw6Ci0gICAgICAgIHJldHVybiAiU1RSRUFNX1ZPSUNFX0NBTEwiOwotICAgICAgY2FzZSBB
dWRpb01hbmFnZXIuU1RSRUFNX01VU0lDOgotICAgICAgICByZXR1cm4gIlNUUkVBTV9NVVNJQyI7
Ci0gICAgICBjYXNlIEF1ZGlvTWFuYWdlci5TVFJFQU1fUklORzoKLSAgICAgICAgcmV0dXJuICJT
VFJFQU1fUklORyI7Ci0gICAgICBjYXNlIEF1ZGlvTWFuYWdlci5TVFJFQU1fQUxBUk06Ci0gICAg
ICAgIHJldHVybiAiU1RSRUFNX0FMQVJNIjsKLSAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLlNUUkVB
TV9OT1RJRklDQVRJT046Ci0gICAgICAgIHJldHVybiAiU1RSRUFNX05PVElGSUNBVElPTiI7Ci0g
ICAgICBjYXNlIEF1ZGlvTWFuYWdlci5TVFJFQU1fU1lTVEVNOgotICAgICAgICByZXR1cm4gIlNU
UkVBTV9TWVNURU0iOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJTVFJFQU1fSU5W
QUxJRCI7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgY2Fu
IHJlY29yZCBhdWRpbyB2aWEgYSBtaWNyb3Bob25lLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFu
IGhhc01pY3JvcGhvbmUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ2V0
UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVf
TUlDUk9QSE9ORSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvREVQUyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvREVQUwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzM2ZhNjgzMDBkNjQ1NjIwMzdhMjVjNGQ4
N2Y1ZTdiMjVmN2ZiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvam5pL0RFUFMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1pbmNsdWRlX3J1
bGVzID0gWwotICAiK3RoaXJkX3BhcnR5L2xpYnl1diIsCi0gICIrY2FsbC9jYWxsZmFjdG9yeWlu
dGVyZmFjZS5oIiwKLSAgIitjb21tb25fdmlkZW8iLAotICAiK2xvZ2dpbmcvcnRjX2V2ZW50X2xv
Zy9ydGNfZXZlbnRfbG9nX2ZhY3RvcnkuaCIsCi0gICIrbWVkaWEvYmFzZSIsCi0gICIrbWVkaWEv
ZW5naW5lIiwKLSAgIittb2R1bGVzL2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1ZGlvX2RldmljZS5o
IiwKLSAgIittb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9hdWRpb19wcm9jZXNzaW5n
LmgiLAotICAiK21vZHVsZXMvaW5jbHVkZSIsCi0gICIrbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUv
anZtX2FuZHJvaWQuaCIsCi0gICIrbW9kdWxlcy92aWRlb19jb2RpbmciLAotICAiK3BjIiwKLSAg
IitzeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZSIsCi1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL09XTkVSUyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Ny
Yy9qbmkvT1dORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJmMjQyMTAyNzNi
N2YyNTg1NzZmOWE5MjBkM2M2M2Q3NTg3MGRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvT1dORVJTCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCww
IEBACi1wZXItZmlsZSBhbmRyb2lkaGlzdG9ncmFtLmNjPXNha2FsQHdlYnJ0Yy5vcmcKLXBlci1m
aWxlIGFuZHJvaWRtZXRyaWNzLmNjPXNha2FsQHdlYnJ0Yy5vcmcKLXBlci1maWxlIGFuZHJvaWR2
aWRlb3RyYWNrc291cmNlLio9c2FrYWxAd2VicnRjLm9yZwotcGVyLWZpbGUgYW5kcm9pZHZpZGVv
dHJhY2tzb3VyY2UuY2M9c2FrYWxAd2VicnRjLm9yZwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lk
X2hpc3RvZ3JhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvYW5kcm9pZF9oaXN0b2dyYW0uY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ5OGYxNDM3NDM4YmQ5ZWQ1YTYyY2NkN2JlYmIwYjk0YjljMDM5NzEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hbmRy
b2lkX2hpc3RvZ3JhbS5jYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2Jhc2Vfam5pL0hpc3RvZ3JhbV9qbmkuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgInN5c3RlbV93cmFw
cGVycy9pbmNsdWRlL21ldHJpY3MuaCIKLQotLy8gRW5hYmxlcyBjb2xsZWN0aW9uIG9mIG5hdGl2
ZSBoaXN0b2dyYW1zIGFuZCBjcmVhdGluZyB0aGVtLgotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1l
c3BhY2Ugam5pIHsKLQotc3RhdGljIGpsb25nIEpOSV9IaXN0b2dyYW1fQ3JlYXRlQ291bnRzKEpO
SUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEphdmFQYXJhbVJlZjxqc3RyaW5nPiYgal9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppbnQgbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppbnQgbWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppbnQgYnVja2V0cykgewotICBzdGQ6OnN0cmluZyBuYW1lID0gSmF2YVRvU3RkU3RyaW5n
KGpuaSwgal9uYW1lKTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIoCi0gICAgICBtZXRyaWNz
OjpIaXN0b2dyYW1GYWN0b3J5R2V0Q291bnRzKG5hbWUsIG1pbiwgbWF4LCBidWNrZXRzKSk7Ci19
Ci0KLXN0YXRpYyBqbG9uZyBKTklfSGlzdG9ncmFtX0NyZWF0ZUVudW1lcmF0aW9uKAotICAgIEpO
SUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqc3RyaW5nPiYgal9uYW1lLAotICAg
IGppbnQgbWF4KSB7Ci0gIHN0ZDo6c3RyaW5nIG5hbWUgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBq
X25hbWUpOwotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihtZXRyaWNzOjpIaXN0b2dyYW1GYWN0
b3J5R2V0RW51bWVyYXRpb24obmFtZSwgbWF4KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9IaXN0
b2dyYW1fQWRkU2FtcGxlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamxvbmcgaGlzdG9ncmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamludCBzYW1wbGUpIHsKLSAgaWYgKGhpc3RvZ3JhbSkgewotICAgIEhpc3RvZ3JhbUFk
ZChyZWludGVycHJldF9jYXN0PG1ldHJpY3M6Okhpc3RvZ3JhbSo+KGhpc3RvZ3JhbSksIHNhbXBs
ZSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lkX21lZGlhX2NvZGVjX2NvbW1vbi5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9h
bmRyb2lkX21lZGlhX2NvZGVjX2NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZTJlYjE5YmE2OWRiMWU0YWRjMjQ2YjYzZDI1Njg1YzdhODE5OGNjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYW5kcm9pZF9tZWRpYV9jb2Rl
Y19jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9BTkRST0lEX01FRElBX0NPREVDX0NP
TU1PTl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0FORFJPSURfTUVESUFfQ09ERUNf
Q09NTU9OX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9sb2dn
aW5nLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGhyZWFkLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFj
ZSBqbmkgewotCi0vLyBVbmNvbW1lbnQgdGhpcyBkZWZpbmUgdG8gZW5hYmxlIHZlcmJvc2UgbG9n
Z2luZyBmb3IgZXZlcnkgZW5jb2RlZC9kZWNvZGVkCi0vLyB2aWRlbyBmcmFtZS4KLS8vI2RlZmlu
ZSBUUkFDS19CVUZGRVJfVElNSU5HCi0KLSNkZWZpbmUgVEFHX0NPTU1PTiAiTWVkaWFDb2RlY1Zp
ZGVvIgotCi0vLyBDb2xvciBmb3JtYXRzIHN1cHBvcnRlZCBieSBlbmNvZGVyIG9yIGRlY29kZXIg
LSBzaG91bGQgaW5jbHVkZSBhbGwKLS8vIGNvbG9ycyBmcm9tIHN1cHBvcnRlZENvbG9yTGlzdCBp
biBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmphdmEgYW5kCi0vLyBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyLmphdmEuIFN1cHBvcnRlZCBjb2xvciBmb3JtYXQgc2V0IGluIGVuY29kZXIKLS8vIGFuZCBk
ZWNvZGVyIGNvdWxkIGJlIGRpZmZlcmVudC4KLWVudW0gQ09MT1JfRk9STUFUVFlQRSB7Ci0gIENP
TE9SX0Zvcm1hdFlVVjQyMFBsYW5hciA9IDB4MTMsCi0gIENPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQ
bGFuYXIgPSAweDE1LAotICBDT0xPUl9RQ09NX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIgPSAweDdG
QTMwQzAwLAotICAvLyBOVjEyIGNvbG9yIGZvcm1hdCBzdXBwb3J0ZWQgYnkgUUNPTSBjb2RlYywg
YnV0IG5vdCBkZWNsYXJlZCBpbiBNZWRpYUNvZGVjIC0KLSAgLy8gc2VlIC9oYXJkd2FyZS9xY29t
L21lZGlhL21tLWNvcmUvaW5jL09NWF9RQ09NRXh0bnMuaAotICAvLyBUaGlzIGZvcm1hdCBpcyBw
cmVzdW1hYmx5IHNpbWlsYXIgdG8gQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgLy8g
YnV0IHJlcXVpcmVzIHNvbWUgKDE2LCAzMj8pIGJ5dGUgYWxpZ25tZW50LgotICBDT0xPUl9RQ09N
X0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIzMm00a2EgPSAweDdGQTMwQzAxLAotICBDT0xP
Ul9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIxNm00a2EgPSAweDdGQTMwQzAyLAot
ICBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYSA9
IDB4N0ZBMzBDMDMsCi0gIENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2VtaVBsYW5hcjMy
bSA9IDB4N0ZBMzBDMDQKLX07Ci0KLS8vIEFyYml0cmFyeSBpbnRlcnZhbCB0byBwb2xsIHRoZSBj
b2RlYyBmb3IgbmV3IG91dHB1dHMuCi1lbnVtIHsga01lZGlhQ29kZWNQb2xsTXMgPSAxMCB9Owot
Ly8gQXJiaXRyYXJ5IGludGVydmFsIHRvIHBvbGwgYXQgd2hlbiB0aGVyZSBzaG91bGQgYmUgbm8g
bW9yZSBmcmFtZXMuCi1lbnVtIHsga01lZGlhQ29kZWNQb2xsTm9GcmFtZXNNcyA9IDEwMCB9Owot
Ly8gTWVkaWEgY29kZWMgbWF4aW11bSBvdXRwdXQgYnVmZmVyIHJlYWR5IHRpbWVvdXQuCi1lbnVt
IHsga01lZGlhQ29kZWNUaW1lb3V0TXMgPSAxMDAwIH07Ci0vLyBJbnRlcnZhbCB0byBwcmludCBj
b2RlYyBzdGF0aXN0aWNzIChiaXRyYXRlLCBmcHMsIGVuY29kaW5nL2RlY29kaW5nIHRpbWUpLgot
ZW51bSB7IGtNZWRpYUNvZGVjU3RhdGlzdGljc0ludGVydmFsTXMgPSAzMDAwIH07Ci0vLyBNYXhp
bXVtIGFtb3VudCBvZiBwZW5kaW5nIGZyYW1lcyBmb3IgVlA4IGRlY29kZXIuCi1lbnVtIHsga01h
eFBlbmRpbmdGcmFtZXNWcDggPSAxIH07Ci0vLyBNYXhpbXVtIGFtb3VudCBvZiBwZW5kaW5nIGZy
YW1lcyBmb3IgVlA5IGRlY29kZXIuCi1lbnVtIHsga01heFBlbmRpbmdGcmFtZXNWcDkgPSAxIH07
Ci0vLyBNYXhpbXVtIGFtb3VudCBvZiBwZW5kaW5nIGZyYW1lcyBmb3IgSC4yNjQgZGVjb2Rlci4K
LWVudW0geyBrTWF4UGVuZGluZ0ZyYW1lc0gyNjQgPSA0IH07Ci0vLyBNYXhpbXVtIGFtb3VudCBv
ZiBkZWNvZGVkIGZyYW1lcyBmb3Igd2hpY2ggcGVyLWZyYW1lIGxvZ2dpbmcgaXMgZW5hYmxlZC4K
LWVudW0geyBrTWF4RGVjb2RlZExvZ0ZyYW1lcyA9IDEwIH07Ci0vLyBNYXhpbXVtIGFtb3VudCBv
ZiBlbmNvZGVkIGZyYW1lcyBmb3Igd2hpY2ggcGVyLWZyYW1lIGxvZ2dpbmcgaXMgZW5hYmxlZC4K
LWVudW0geyBrTWF4RW5jb2RlZExvZ0ZyYW1lcyA9IDEwIH07Ci0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBBbGxvd0Jsb2NraW5nQ2FsbHMoKSB7Ci0gIHJ0Yzo6VGhyZWFkKiBjdXJyZW50X3RocmVhZCA9
IHJ0Yzo6VGhyZWFkOjpDdXJyZW50KCk7Ci0gIGlmIChjdXJyZW50X3RocmVhZCAhPSBOVUxMKQot
ICAgIGN1cnJlbnRfdGhyZWFkLT5ERVBSRUNBVEVEX0FsbG93QmxvY2tpbmdDYWxscygpOwotfQot
Ci0vLyBDaGVja3MgZm9yIGFueSBKYXZhIGV4Y2VwdGlvbiwgcHJpbnRzIHN0YWNrIGJhY2t0cmFj
ZSBhbmQgY2xlYXJzCi0vLyBjdXJyZW50bHkgdGhyb3duIGV4Y2VwdGlvbi4KLXN0YXRpYyBpbmxp
bmUgYm9vbCBDaGVja0V4Y2VwdGlvbihKTklFbnYqIGpuaSkgewotICBpZiAoam5pLT5FeGNlcHRp
b25DaGVjaygpKSB7Ci0gICAgUlRDX0xPR19UQUcocnRjOjpMU19FUlJPUiwgVEFHX0NPTU1PTikg
PDwgIkphdmEgSk5JIGV4Y2VwdGlvbi4iOwotICAgIGpuaS0+RXhjZXB0aW9uRGVzY3JpYmUoKTsK
LSAgICBqbmktPkV4Y2VwdGlvbkNsZWFyKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0
dXJuIGZhbHNlOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9BTkRST0lEX01FRElBX0NPREVD
X0NPTU1PTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lkX21lZGlhX2RlY29kZXIuY2MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
am5pL2FuZHJvaWRfbWVkaWFfZGVjb2Rlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggN2M3MzFjZTdhNDMxNjI4NGNkNmVkNjcxMzM4OWM5OTkyMmJhOWFjMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbWVkaWFfZGVj
b2Rlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDc4NiArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPG1l
bW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJhcGkvc2NvcGVkX3JlZnB0ci5o
IgotI2luY2x1ZGUgImFwaS92aWRlb19jb2RlY3Mvc2RwX3ZpZGVvX2Zvcm1hdC5oIgotI2luY2x1
ZGUgImNvbW1vbl92aWRlby9oMjY0L2gyNjRfYml0c3RyZWFtX3BhcnNlci5oIgotI2luY2x1ZGUg
ImNvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaCIKLSNpbmNsdWRlICJtZWRp
YS9iYXNlL21lZGlhX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgIm1vZHVsZXMvdmlkZW9fY29kaW5n
L2luY2x1ZGUvdmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAibW9kdWxlcy92aWRl
b19jb2RpbmcvdXRpbGl0eS92cDhfaGVhZGVyX3BhcnNlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNl
L2JpbmQuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFz
ZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9u
cy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3Rp
bWVfdXRpbHMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfdmlkZW9fam5pL01l
ZGlhQ29kZWNWaWRlb0RlY29kZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZl
X2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYW5k
cm9pZF9tZWRpYV9jb2RlY19jb21tb24uaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5p
L3ZpZGVvX2ZyYW1lLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGli
eXV2L2NvbnZlcnQuaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5
dXYvcGxhbmFyX2Z1bmN0aW9ucy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNs
dWRlL2xpYnl1di92aWRlb19jb21tb24uaCIKLQotdXNpbmcgcnRjOjpCaW5kOwotdXNpbmcgcnRj
OjpUaHJlYWRNYW5hZ2VyOwotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
Ly8gTG9nZ2luZyBtYWNyb3MuCi0jZGVmaW5lIFRBR19ERUNPREVSICJNZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyIgotI2lmZGVmIFRSQUNLX0JVRkZFUl9USU1JTkcKLSNkZWZpbmUgQUxPR1YoLi4uKSBc
Ci0gIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHX0RFQ09ERVIs
IF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgQUxPR1YoLi4uKQotI2VuZGlmCi0jZGVmaW5l
IEFMT0dEIFJUQ19MT0dfVEFHKHJ0Yzo6TFNfSU5GTywgVEFHX0RFQ09ERVIpCi0jZGVmaW5lIEFM
T0dXIFJUQ19MT0dfVEFHKHJ0Yzo6TFNfV0FSTklORywgVEFHX0RFQ09ERVIpCi0jZGVmaW5lIEFM
T0dFIFJUQ19MT0dfVEFHKHJ0Yzo6TFNfRVJST1IsIFRBR19ERUNPREVSKQotCi1lbnVtIHsga01h
eFdhcm5pbmdMb2dGcmFtZXMgPSAyIH07Ci0KLWNsYXNzIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIg
OiBwdWJsaWMgVmlkZW9EZWNvZGVyLCBwdWJsaWMgcnRjOjpNZXNzYWdlSGFuZGxlciB7Ci0gcHVi
bGljOgotICBleHBsaWNpdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyKEpOSUVudiogam5pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9zdXJmYWNlKTsKLSAg
fk1lZGlhQ29kZWNWaWRlb0RlY29kZXIoKSBvdmVycmlkZTsKLQotICBpbnQzMl90IEluaXREZWNv
ZGUoY29uc3QgVmlkZW9Db2RlYyogY29kZWNTZXR0aW5ncywKLSAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgbnVtYmVyT2ZDb3Jlcykgb3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBEZWNvZGUoY29u
c3QgRW5jb2RlZEltYWdlJiBpbnB1dEltYWdlLAotICAgICAgICAgICAgICAgICBib29sIG1pc3Np
bmdGcmFtZXMsCi0gICAgICAgICAgICAgICAgIGludDY0X3QgcmVuZGVyVGltZU1zID0gLTEpIG92
ZXJyaWRlOwotCi0gIGludDMyX3QgUmVnaXN0ZXJEZWNvZGVDb21wbGV0ZUNhbGxiYWNrKAotICAg
ICAgRGVjb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSBvdmVycmlkZTsKLQotICBpbnQzMl90
IFJlbGVhc2UoKSBvdmVycmlkZTsKLQotICBib29sIFByZWZlcnNMYXRlRGVjb2RpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgLy8gcnRjOjpNZXNzYWdlSGFuZGxlciBp
bXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBPbk1lc3NhZ2UocnRjOjpNZXNzYWdlKiBtc2cpIG92ZXJy
aWRlOwotCi0gIGNvbnN0IGNoYXIqIEltcGxlbWVudGF0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gcHJpdmF0ZToKLSAgLy8gQ0hFQ0stZmFpbCBpZiBub3QgcnVubmluZyBvbiB8Y29kZWNf
dGhyZWFkX3wuCi0gIHZvaWQgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0KLSAgaW50MzJfdCBJbml0
RGVjb2RlT25Db2RlY1RocmVhZCgpOwotICBpbnQzMl90IFJlc2V0RGVjb2RlT25Db2RlY1RocmVh
ZCgpOwotICBpbnQzMl90IFJlbGVhc2VPbkNvZGVjVGhyZWFkKCk7Ci0gIGludDMyX3QgRGVjb2Rl
T25Db2RlY1RocmVhZChjb25zdCBFbmNvZGVkSW1hZ2UmIGlucHV0SW1hZ2UpOwotICAvLyBEZWxp
dmVyIGFueSBvdXRwdXRzIHBlbmRpbmcgaW4gdGhlIE1lZGlhQ29kZWMgdG8gb3VyIHxjYWxsYmFj
a198IGFuZCByZXR1cm4KLSAgLy8gdHJ1ZSBvbiBzdWNjZXNzLgotICBib29sIERlbGl2ZXJQZW5k
aW5nT3V0cHV0cyhKTklFbnYqIGpuaSwgaW50IGRlcXVldWVfdGltZW91dF91cyk7Ci0gIGludDMy
X3QgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKCk7Ci0gIHZvaWQgRW5hYmxlRnJhbWVMb2dP
bldhcm5pbmcoKTsKLSAgdm9pZCBSZXNldFZhcmlhYmxlcygpOwotCi0gIC8vIFR5cGUgb2Ygdmlk
ZW8gY29kZWMuCi0gIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZV87Ci0KLSAgYm9vbCBrZXlfZnJh
bWVfcmVxdWlyZWRfOwotICBib29sIGluaXRlZF87Ci0gIGJvb2wgc3dfZmFsbGJhY2tfcmVxdWly
ZWRfOwotICBjb25zdCBib29sIHVzZV9zdXJmYWNlXzsKLSAgVmlkZW9Db2RlYyBjb2RlY187Ci0g
IEk0MjBCdWZmZXJQb29sIGRlY29kZWRfZnJhbWVfcG9vbF87Ci0gIERlY29kZWRJbWFnZUNhbGxi
YWNrKiBjYWxsYmFja187Ci0gIGludCBmcmFtZXNfcmVjZWl2ZWRfOyAgLy8gTnVtYmVyIG9mIGZy
YW1lcyByZWNlaXZlZCBieSBkZWNvZGVyLgotICBpbnQgZnJhbWVzX2RlY29kZWRfOyAgIC8vIE51
bWJlciBvZiBmcmFtZXMgZGVjb2RlZCBieSBkZWNvZGVyLgotICAvLyBOdW1iZXIgb2YgZGVjb2Rl
ZCBmcmFtZXMgZm9yIHdoaWNoIGxvZyBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQuCi0gIGludCBm
cmFtZXNfZGVjb2RlZF9sb2dnZWRfOwotICBpbnQ2NF90IHN0YXJ0X3RpbWVfbXNfOyAgLy8gU3Rh
cnQgdGltZSBmb3Igc3RhdGlzdGljcy4KLSAgaW50IGN1cnJlbnRfZnJhbWVzXzsgIC8vIE51bWJl
ciBvZiBmcmFtZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGlzdGljcyBpbnRlcnZhbC4KLSAgaW50IGN1
cnJlbnRfYnl0ZXNfOyAgIC8vIEVuY29kZWQgYnl0ZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGlzdGlj
cyBpbnRlcnZhbC4KLSAgaW50IGN1cnJlbnRfZGVjb2RpbmdfdGltZV9tc187ICAvLyBPdmVyYWxs
IGRlY29kaW5nIHRpbWUgaW4gdGhlIGN1cnJlbnQgc2Vjb25kCi0gIGludCBjdXJyZW50X2RlbGF5
X3RpbWVfbXNfOyAgICAgLy8gT3ZlcmFsbCBkZWxheSB0aW1lIGluIHRoZSBjdXJyZW50IHNlY29u
ZC4KLSAgaW50MzJfdCBtYXhfcGVuZGluZ19mcmFtZXNfOyAgICAvLyBNYXhpbXVtIG51bWJlciBv
ZiBwZW5kaW5nIGlucHV0IGZyYW1lcy4KLSAgSDI2NEJpdHN0cmVhbVBhcnNlciBoMjY0X2JpdHN0
cmVhbV9wYXJzZXJfOwotICBzdGQ6OmRlcXVlPGFic2w6Om9wdGlvbmFsPHVpbnQ4X3Q+PiBwZW5k
aW5nX2ZyYW1lX3Fwc187Ci0KLSAgLy8gU3RhdGUgdGhhdCBpcyBjb25zdGFudCBmb3IgdGhlIGxp
ZmV0aW1lIG9mIHRoaXMgb2JqZWN0IG9uY2UgdGhlIGN0b3IKLSAgLy8gcmV0dXJucy4KLSAgc3Rk
Ojp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPgotICAgICAgY29kZWNfdGhyZWFkXzsgIC8vIFRocmVh
ZCBvbiB3aGljaCB0byBvcGVyYXRlIE1lZGlhQ29kZWMuCi0gIFNjb3BlZEphdmFHbG9iYWxSZWY8
am9iamVjdD4gal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXzsKLQotICAvLyBHbG9iYWwgcmVm
ZXJlbmNlczsgbXVzdCBiZSBkZWxldGVkIGluIFJlbGVhc2UoKS4KLSAgc3RkOjp2ZWN0b3I8U2Nv
cGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0Pj4gaW5wdXRfYnVmZmVyc187Ci19OwotCi1NZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyOjpNZWRpYUNvZGVjVmlkZW9EZWNvZGVyKEpOSUVudiogam5pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0NvZGVjVHlw
ZSBjb2RlY1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgdXNlX3N1cmZhY2UpCi0gICAgOiBjb2RlY1R5cGVfKGNvZGVjVHlwZSksCi0gICAg
ICBrZXlfZnJhbWVfcmVxdWlyZWRfKHRydWUpLAotICAgICAgaW5pdGVkXyhmYWxzZSksCi0gICAg
ICBzd19mYWxsYmFja19yZXF1aXJlZF8oZmFsc2UpLAotICAgICAgdXNlX3N1cmZhY2VfKHVzZV9z
dXJmYWNlKSwKLSAgICAgIGNvZGVjX3RocmVhZF8ocnRjOjpUaHJlYWQ6OkNyZWF0ZSgpKSwKLSAg
ICAgIGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8oCi0gICAgICAgICAgam5pLAotICAgICAg
ICAgIEphdmFfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9Db25zdHJ1Y3RvcihqbmkpKSB7Ci0gIGNv
ZGVjX3RocmVhZF8tPlNldE5hbWUoIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIiLCBOVUxMKTsKLSAg
UlRDX0NIRUNLKGNvZGVjX3RocmVhZF8tPlN0YXJ0KCkpIDw8ICJGYWlsZWQgdG8gc3RhcnQgTWVk
aWFDb2RlY1ZpZGVvRGVjb2RlciI7Ci0KLSAgQUxPR0QgPDwgIk1lZGlhQ29kZWNWaWRlb0RlY29k
ZXIgY3Rvci4gVXNlIHN1cmZhY2U6ICIgPDwgdXNlX3N1cmZhY2VfOwotICBtZW1zZXQoJmNvZGVj
XywgMCwgc2l6ZW9mKGNvZGVjXykpOwotICBBbGxvd0Jsb2NraW5nQ2FsbHMoKTsKLX0KLQotTWVk
aWFDb2RlY1ZpZGVvRGVjb2Rlcjo6fk1lZGlhQ29kZWNWaWRlb0RlY29kZXIoKSB7Ci0gIC8vIENh
bGwgUmVsZWFzZSgpIHRvIGVuc3VyZSBubyBtb3JlIGNhbGxiYWNrcyB0byB1cyBhZnRlciB3ZSBh
cmUgZGVsZXRlZC4KLSAgUmVsZWFzZSgpOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0Rl
Y29kZXI6OkluaXREZWNvZGUoY29uc3QgVmlkZW9Db2RlYyogaW5zdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bWJlck9mQ29yZXMpIHsKLSAg
QUxPR0QgPDwgIkluaXREZWNvZGUuIjsKLSAgaWYgKGluc3QgPT0gTlVMTCkgewotICAgIEFMT0dF
IDw8ICJOVUxMIFZpZGVvQ29kZWMgaW5zdGFuY2UiOwotICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfRVJSX1BBUkFNRVRFUjsKLSAgfQotICAvLyBGYWN0b3J5IHNob3VsZCBndWFyZCBhZ2Fp
bnN0IG90aGVyIGNvZGVjcyBiZWluZyB1c2VkIHdpdGggdXMuCi0gIFJUQ19DSEVDSyhpbnN0LT5j
b2RlY1R5cGUgPT0gY29kZWNUeXBlXykKLSAgICAgIDw8ICJVbnN1cHBvcnRlZCBjb2RlYyAiIDw8
IGluc3QtPmNvZGVjVHlwZSA8PCAiIGZvciAiIDw8IGNvZGVjVHlwZV87Ci0KLSAgaWYgKHN3X2Zh
bGxiYWNrX3JlcXVpcmVkXykgewotICAgIEFMT0dFIDw8ICJJbml0RGVjb2RlKCkgLSBmYWxsYmFj
ayB0byBTVyBkZWNvZGVyIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9
Ci0gIC8vIFNhdmUgVmlkZW9Db2RlYyBpbnN0YW5jZSBmb3IgbGF0ZXIuCi0gIGlmICgmY29kZWNf
ICE9IGluc3QpIHsKLSAgICBjb2RlY18gPSAqaW5zdDsKLSAgfQotICAvLyBJZiBtYXhGcmFtZXJh
dGUgaXMgbm90IHNldCB0aGVuIGFzc3VtZSAzMCBmcHMuCi0gIGNvZGVjXy5tYXhGcmFtZXJhdGUg
PSAoY29kZWNfLm1heEZyYW1lcmF0ZSA+PSAxKSA/IGNvZGVjXy5tYXhGcmFtZXJhdGUgOiAzMDsK
LQotICAvLyBDYWxsIEphdmEgaW5pdC4KLSAgcmV0dXJuIGNvZGVjX3RocmVhZF8tPkludm9rZTxp
bnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsCi0gICAgICBCaW5kKCZNZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyOjpJbml0RGVjb2RlT25Db2RlY1RocmVhZCwgdGhpcykpOwotfQotCi12b2lkIE1l
ZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlc2V0VmFyaWFibGVzKCkgewotICBDaGVja09uQ29kZWNU
aHJlYWQoKTsKLQotICBrZXlfZnJhbWVfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgZnJhbWVzX3JlY2Vp
dmVkXyA9IDA7Ci0gIGZyYW1lc19kZWNvZGVkXyA9IDA7Ci0gIGZyYW1lc19kZWNvZGVkX2xvZ2dl
ZF8gPSBrTWF4RGVjb2RlZExvZ0ZyYW1lczsKLSAgc3RhcnRfdGltZV9tc18gPSBydGM6OlRpbWVN
aWxsaXMoKTsKLSAgY3VycmVudF9mcmFtZXNfID0gMDsKLSAgY3VycmVudF9ieXRlc18gPSAwOwot
ICBjdXJyZW50X2RlY29kaW5nX3RpbWVfbXNfID0gMDsKLSAgY3VycmVudF9kZWxheV90aW1lX21z
XyA9IDA7Ci0gIHBlbmRpbmdfZnJhbWVfcXBzXy5jbGVhcigpOwotfQotCi1pbnQzMl90IE1lZGlh
Q29kZWNWaWRlb0RlY29kZXI6OkluaXREZWNvZGVPbkNvZGVjVGhyZWFkKCkgewotICBDaGVja09u
Q29kZWNUaHJlYWQoKTsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVk
ZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgQUxP
R0QgPDwgIkluaXREZWNvZGVPbkNvZGVjVGhyZWFkIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8aW50
Pihjb2RlY1R5cGVfKQotICAgICAgICA8PCAiLiAiIDw8IGNvZGVjXy53aWR0aCA8PCAiIHggIiA8
PCBjb2RlY18uaGVpZ2h0Ci0gICAgICAgIDw8ICIuIEZwczogIiA8PCBzdGF0aWNfY2FzdDxpbnQ+
KGNvZGVjXy5tYXhGcmFtZXJhdGUpOwotCi0gIC8vIFJlbGVhc2UgcHJldmlvdXMgY29kZWMgZmly
c3QgaWYgaXQgd2FzIGFsbG9jYXRlZCBiZWZvcmUuCi0gIGludCByZXRfdmFsID0gUmVsZWFzZU9u
Q29kZWNUaHJlYWQoKTsKLSAgaWYgKHJldF92YWwgPCAwKSB7Ci0gICAgQUxPR0UgPDwgIlJlbGVh
c2UgZmFpbHVyZTogIiA8PCByZXRfdmFsIDw8ICIgLSBmYWxsYmFjayB0byBTVyBjb2RlYyI7Ci0g
ICAgc3dfZmFsbGJhY2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX0VSUk9SOwotICB9Ci0KLSAgUmVzZXRWYXJpYWJsZXMoKTsKLQotICBib29sIHN1Y2Nl
c3MgPSBKYXZhX01lZGlhQ29kZWNWaWRlb0RlY29kZXJfaW5pdERlY29kZSgKLSAgICAgIGpuaSwg
al9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywgY29kZWNUeXBlXywgY29kZWNfLndpZHRoLAot
ICAgICAgY29kZWNfLmhlaWdodCk7Ci0KLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkgfHwgIXN1
Y2Nlc3MpIHsKLSAgICBBTE9HRSA8PCAiQ29kZWMgaW5pdGlhbGl6YXRpb24gZXJyb3IgLSBmYWxs
YmFjayB0byBTVyBjb2RlYy4iOwotICAgIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA9IHRydWU7Ci0g
ICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgfQotICBpbml0ZWRfID0gdHJ1
ZTsKLQotICBzd2l0Y2ggKGNvZGVjVHlwZV8pIHsKLSAgICBjYXNlIGtWaWRlb0NvZGVjVlA4Ogot
ICAgICAgbWF4X3BlbmRpbmdfZnJhbWVzXyA9IGtNYXhQZW5kaW5nRnJhbWVzVnA4OwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBrVmlkZW9Db2RlY1ZQOToKLSAgICAgIG1heF9wZW5kaW5nX2ZyYW1l
c18gPSBrTWF4UGVuZGluZ0ZyYW1lc1ZwOTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1ZpZGVv
Q29kZWNIMjY0OgotICAgICAgbWF4X3BlbmRpbmdfZnJhbWVzXyA9IGtNYXhQZW5kaW5nRnJhbWVz
SDI2NDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBtYXhfcGVuZGluZ19mcmFt
ZXNfID0gMDsKLSAgfQotICBBTE9HRCA8PCAiTWF4aW11bSBhbW91bnQgb2YgcGVuZGluZyBmcmFt
ZXM6ICIgPDwgbWF4X3BlbmRpbmdfZnJhbWVzXzsKLQotICBTY29wZWRKYXZhTG9jYWxSZWY8am9i
amVjdEFycmF5PiBpbnB1dF9idWZmZXJzID0KLSAgICAgIEphdmFfTWVkaWFDb2RlY1ZpZGVvRGVj
b2Rlcl9nZXRJbnB1dEJ1ZmZlcnMoam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfKTsKLSAgaW5w
dXRfYnVmZmVyc18gPSBKYXZhVG9OYXRpdmVWZWN0b3I8U2NvcGVkSmF2YUdsb2JhbFJlZjxqb2Jq
ZWN0Pj4oCi0gICAgICBqbmksIGlucHV0X2J1ZmZlcnMsIFtdKEpOSUVudiogZW52LCBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBvKSB7Ci0gICAgICAgIHJldHVybiBTY29wZWRKYXZhR2xvYmFsUmVm
PGpvYmplY3Q+KGVudiwgbyk7Ci0gICAgICB9KTsKLQotICBjb2RlY190aHJlYWRfLT5Qb3N0RGVs
YXllZChSVENfRlJPTV9IRVJFLCBrTWVkaWFDb2RlY1BvbGxNcywgdGhpcyk7Ci0KLSAgcmV0dXJu
IFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyOjpSZXNldERlY29kZU9uQ29kZWNUaHJlYWQoKSB7Ci0gIENoZWNrT25Db2RlY1RocmVhZCgp
OwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29w
ZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBBTE9HRCA8PCAiUmVzZXRE
ZWNvZGVPbkNvZGVjVGhyZWFkIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8aW50Pihjb2RlY1R5cGVf
KQotICAgICAgICA8PCAiLiAiIDw8IGNvZGVjXy53aWR0aCA8PCAiIHggIiA8PCBjb2RlY18uaGVp
Z2h0OwotICBBTE9HRCA8PCAiICBGcmFtZXMgcmVjZWl2ZWQ6ICIgPDwgZnJhbWVzX3JlY2VpdmVk
XwotICAgICAgICA8PCAiLiBGcmFtZXMgZGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0K
LSAgaW5pdGVkXyA9IGZhbHNlOwotICBydGM6OlRocmVhZE1hbmFnZXI6OkNsZWFyKHRoaXMpOwot
ICBSZXNldFZhcmlhYmxlcygpOwotCi0gIEphdmFfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9yZXNl
dChqbmksIGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlY18ud2lkdGgsIGNvZGVjXy5oZWlnaHQpOwotCi0gIGlmIChD
aGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIlNvZnQgcmVzZXQgZXJyb3IgLSBm
YWxsYmFjayB0byBTVyBjb2RlYy4iOwotICAgIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA9IHRydWU7
Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgfQotICBpbml0ZWRfID0g
dHJ1ZTsKLQotICBjb2RlY190aHJlYWRfLT5Qb3N0RGVsYXllZChSVENfRlJPTV9IRVJFLCBrTWVk
aWFDb2RlY1BvbGxNcywgdGhpcyk7Ci0KLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsK
LX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpSZWxlYXNlKCkgewotICBBTE9H
RCA8PCAiRGVjb2RlclJlbGVhc2UgcmVxdWVzdCI7Ci0gIHJldHVybiBjb2RlY190aHJlYWRfLT5J
bnZva2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9IRVJFLCBCaW5kKCZNZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyOjpSZWxlYXNlT25Db2RlY1RocmVhZCwgdGhpcykpOwotfQotCi1pbnQzMl90IE1l
ZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlbGVhc2VPbkNvZGVjVGhyZWFkKCkgewotICBpZiAoIWlu
aXRlZF8pIHsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIENoZWNr
T25Db2RlY1RocmVhZCgpOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5l
ZWRlZCgpOwotICBBTE9HRCA8PCAiRGVjb2RlclJlbGVhc2VPbkNvZGVjVGhyZWFkOiBGcmFtZXMg
cmVjZWl2ZWQ6ICIgPDwgZnJhbWVzX3JlY2VpdmVkXwotICAgICAgICA8PCAiLiBGcmFtZXMgZGVj
b2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxf
cmVmX2ZyYW1lKGpuaSk7Ci0gIGlucHV0X2J1ZmZlcnNfLmNsZWFyKCk7Ci0gIEphdmFfTWVkaWFD
b2RlY1ZpZGVvRGVjb2Rlcl9yZWxlYXNlKGpuaSwgal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVy
Xyk7Ci0gIGluaXRlZF8gPSBmYWxzZTsKLSAgcnRjOjpUaHJlYWRNYW5hZ2VyOjpDbGVhcih0aGlz
KTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiRGVjb2RlciBy
ZWxlYXNlIGV4Y2VwdGlvbiI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsK
LSAgfQotICBBTE9HRCA8PCAiRGVjb2RlclJlbGVhc2VPbkNvZGVjVGhyZWFkIGRvbmUiOwotICBy
ZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0Rl
Y29kZXI6OkNoZWNrT25Db2RlY1RocmVhZCgpIHsKLSAgUlRDX0NIRUNLKGNvZGVjX3RocmVhZF8u
Z2V0KCkgPT0gVGhyZWFkTWFuYWdlcjo6SW5zdGFuY2UoKS0+Q3VycmVudFRocmVhZCgpKQotICAg
ICAgPDwgIlJ1bm5pbmcgb24gd3JvbmcgdGhyZWFkISI7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1Zp
ZGVvRGVjb2Rlcjo6RW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKSB7Ci0gIC8vIExvZyBuZXh0IDIg
b3V0cHV0IGZyYW1lcy4KLSAgZnJhbWVzX2RlY29kZWRfbG9nZ2VkXyA9Ci0gICAgICBzdGQ6Om1h
eChmcmFtZXNfZGVjb2RlZF9sb2dnZWRfLCBmcmFtZXNfZGVjb2RlZF8gKyBrTWF4V2FybmluZ0xv
Z0ZyYW1lcyk7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UHJvY2Vzc0hX
RXJyb3JPbkNvZGVjVGhyZWFkKCkgewotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLSAgaW50IHJl
dF92YWwgPSBSZWxlYXNlT25Db2RlY1RocmVhZCgpOwotICBpZiAocmV0X3ZhbCA8IDApIHsKLSAg
ICBBTE9HRSA8PCAiUHJvY2Vzc0hXRXJyb3I6IFJlbGVhc2UgZmFpbHVyZSI7Ci0gIH0KLSAgaWYg
KGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNIMjY0KSB7Ci0gICAgLy8gRm9yIG5vdyB0aGVyZSBp
cyBubyBTVyBILjI2NCB3aGljaCBjYW4gYmUgdXNlZCBhcyBmYWxsYmFjayBjb2RlYy4KLSAgICAv
LyBTbyB0cnkgdG8gcmVzdGFydCBodyBjb2RlYyBmb3Igbm93LgotICAgIHJldF92YWwgPSBJbml0
RGVjb2RlT25Db2RlY1RocmVhZCgpOwotICAgIEFMT0dFIDw8ICJSZXNldCBILjI2NCBjb2RlYyBk
b25lLiBTdGF0dXM6ICIgPDwgcmV0X3ZhbDsKLSAgICBpZiAocmV0X3ZhbCA9PSBXRUJSVENfVklE
RU9fQ09ERUNfT0spIHsKLSAgICAgIC8vIEguMjY0IGNvZGVjIHdhcyBzdWNjZXNmdWxseSByZXNl
dCAtIHJldHVybiByZWd1bGFyIGVycm9yIGNvZGUuCi0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX0VSUk9SOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBGYWlsIHRvIHJlc3RhcnQgSC4y
NjQgY29kZWMgLSByZXR1cm4gZXJyb3IgY29kZSB3aGljaCBzaG91bGQgc3RvcCB0aGUKLSAgICAg
IC8vIGNhbGwuCi0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRX
QVJFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBzd19mYWxsYmFja19yZXF1aXJlZF8gPSB0cnVl
OwotICAgIEFMT0dFIDw8ICJSZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRX
QVJFIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwot
ICB9Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6RGVjb2RlKAotICAgIGNv
bnN0IEVuY29kZWRJbWFnZSYgaW5wdXRJbWFnZSwKLSAgICBib29sIG1pc3NpbmdGcmFtZXMsCi0g
ICAgaW50NjRfdCByZW5kZXJUaW1lTXMpIHsKLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykg
ewotICAgIEFMT0dFIDw8ICJEZWNvZGUoKSAtIGZhbGxiYWNrIHRvIFNXIGNvZGVjIjsKLSAgICBy
ZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwotICB9Ci0gIGlmIChj
YWxsYmFja18gPT0gTlVMTCkgewotICAgIEFMT0dFIDw8ICJEZWNvZGUoKSAtIGNhbGxiYWNrXyBp
cyBOVUxMIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX1VOSU5JVElBTElaRUQ7Ci0g
IH0KLSAgaWYgKGlucHV0SW1hZ2UuZGF0YSgpID09IE5VTEwgJiYgaW5wdXRJbWFnZS5zaXplKCkg
PiAwKSB7Ci0gICAgQUxPR0UgPDwgIkRlY29kZSgpIC0gaW5wdXRJbWFnZSBpcyBpbmNvcnJlY3Qi
OwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJSX1BBUkFNRVRFUjsKLSAgfQotICBp
ZiAoIWluaXRlZF8pIHsKLSAgICBBTE9HRSA8PCAiRGVjb2RlKCkgLSBkZWNvZGVyIGlzIG5vdCBp
bml0aWFsaXplZCI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVE
OwotICB9Ci0KLSAgLy8gQ2hlY2sgaWYgZW5jb2RlZCBmcmFtZSBkaW1lbnNpb24gaGFzIGNoYW5n
ZWQuCi0gIGlmICgoaW5wdXRJbWFnZS5fZW5jb2RlZFdpZHRoICogaW5wdXRJbWFnZS5fZW5jb2Rl
ZEhlaWdodCA+IDApICYmCi0gICAgICAoaW5wdXRJbWFnZS5fZW5jb2RlZFdpZHRoICE9IGNvZGVj
Xy53aWR0aCB8fAotICAgICAgIGlucHV0SW1hZ2UuX2VuY29kZWRIZWlnaHQgIT0gY29kZWNfLmhl
aWdodCkpIHsKLSAgICBBTE9HVyA8PCAiSW5wdXQgcmVzb2x1dGlvbiBjaGFuZ2VkIGZyb20gIiA8
PCBjb2RlY18ud2lkdGggPDwgIiB4ICIKLSAgICAgICAgICA8PCBjb2RlY18uaGVpZ2h0IDw8ICIg
dG8gIiA8PCBpbnB1dEltYWdlLl9lbmNvZGVkV2lkdGggPDwgIiB4ICIKLSAgICAgICAgICA8PCBp
bnB1dEltYWdlLl9lbmNvZGVkSGVpZ2h0OwotICAgIGNvZGVjXy53aWR0aCA9IGlucHV0SW1hZ2Uu
X2VuY29kZWRXaWR0aDsKLSAgICBjb2RlY18uaGVpZ2h0ID0gaW5wdXRJbWFnZS5fZW5jb2RlZEhl
aWdodDsKLSAgICBpbnQzMl90IHJldDsKLSAgICBpZiAodXNlX3N1cmZhY2VfICYmCi0gICAgICAg
IChjb2RlY1R5cGVfID09IGtWaWRlb0NvZGVjVlA4IHx8IGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29k
ZWNIMjY0KSkgewotICAgICAgLy8gU29mdCBjb2RlYyByZXNldCAtIG9ubHkgZm9yIHN1cmZhY2Ug
ZGVjb2RpbmcuCi0gICAgICByZXQgPSBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0g
ICAgICAgICAgUlRDX0ZST01fSEVSRSwKLSAgICAgICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyOjpSZXNldERlY29kZU9uQ29kZWNUaHJlYWQsIHRoaXMpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgLy8gSGFyZCBjb2RlYyByZXNldC4KLSAgICAgIHJldCA9IEluaXREZWNvZGUoJmNvZGVj
XywgMSk7Ci0gICAgfQotICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICBBTE9HRSA8PCAiSW5pdERl
Y29kZSBmYWlsdXJlOiAiIDw8IHJldCA8PCAiIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMiOwotICAg
ICAgc3dfZmFsbGJhY2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdBUkU7Ci0gICAgfQotICB9Ci0KLSAgLy8gQWx3YXlzIHN0
YXJ0IHdpdGggYSBjb21wbGV0ZSBrZXkgZnJhbWUuCi0gIGlmIChrZXlfZnJhbWVfcmVxdWlyZWRf
KSB7Ci0gICAgaWYgKGlucHV0SW1hZ2UuX2ZyYW1lVHlwZSAhPSBWaWRlb0ZyYW1lVHlwZTo6a1Zp
ZGVvRnJhbWVLZXkpIHsKLSAgICAgIEFMT0dFIDw8ICJEZWNvZGUoKSAtIGtleSBmcmFtZSBpcyBy
ZXF1aXJlZCI7Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0K
LSAgICBpZiAoIWlucHV0SW1hZ2UuX2NvbXBsZXRlRnJhbWUpIHsKLSAgICAgIEFMT0dFIDw8ICJE
ZWNvZGUoKSAtIGNvbXBsZXRlIGZyYW1lIGlzIHJlcXVpcmVkIjsKLSAgICAgIHJldHVybiBXRUJS
VENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQotICAgIGtleV9mcmFtZV9yZXF1aXJlZF8gPSBm
YWxzZTsKLSAgfQotICBpZiAoaW5wdXRJbWFnZS5zaXplKCkgPT0gMCkgewotICAgIHJldHVybiBX
RUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gIH0KLQotICByZXR1cm4gY29kZWNfdGhyZWFkXy0+
SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRDX0ZST01fSEVSRSwKLSAgICAgIEJpbmQoJk1lZGlh
Q29kZWNWaWRlb0RlY29kZXI6OkRlY29kZU9uQ29kZWNUaHJlYWQsIHRoaXMsIGlucHV0SW1hZ2Up
KTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpEZWNvZGVPbkNvZGVjVGhy
ZWFkKAotICAgIGNvbnN0IEVuY29kZWRJbWFnZSYgaW5wdXRJbWFnZSkgewotICBDaGVja09uQ29k
ZWNUaHJlYWQoKTsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQo
KTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLQotICAvLyBU
cnkgdG8gZHJhaW4gdGhlIGRlY29kZXIgYW5kIHdhaXQgdW50aWwgb3V0cHV0IGlzIG5vdCB0b28K
LSAgLy8gbXVjaCBiZWhpbmQgdGhlIGlucHV0LgotICBpZiAoY29kZWNUeXBlXyA9PSBrVmlkZW9D
b2RlY0gyNjQgJiYKLSAgICAgIGZyYW1lc19yZWNlaXZlZF8gPiBmcmFtZXNfZGVjb2RlZF8gKyBt
YXhfcGVuZGluZ19mcmFtZXNfKSB7Ci0gICAgLy8gUHJpbnQgd2FybmluZyBmb3IgSC4yNjQgb25s
eSAtIGZvciBWUDgvVlA5IG9uZSBmcmFtZSBkZWxheSBpcyBvay4KLSAgICBBTE9HVyA8PCAiRGVj
b2RlciBpcyB0b28gZmFyIGJlaGluZC4gVHJ5IHRvIGRyYWluLiBSZWNlaXZlZDogIgotICAgICAg
ICAgIDw8IGZyYW1lc19yZWNlaXZlZF8gPDwgIi4gRGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2Rl
ZF87Ci0gICAgRW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKTsKLSAgfQotICBjb25zdCBpbnQ2NF90
IGRyYWluX3N0YXJ0ID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gIHdoaWxlICgoZnJhbWVzX3JlY2Vp
dmVkXyA+IGZyYW1lc19kZWNvZGVkXyArIG1heF9wZW5kaW5nX2ZyYW1lc18pICYmCi0gICAgICAg
ICAocnRjOjpUaW1lTWlsbGlzKCkgLSBkcmFpbl9zdGFydCkgPCBrTWVkaWFDb2RlY1RpbWVvdXRN
cykgewotICAgIGlmICghRGVsaXZlclBlbmRpbmdPdXRwdXRzKGpuaSwga01lZGlhQ29kZWNQb2xs
TXMpKSB7Ci0gICAgICBBTE9HRSA8PCAiRGVsaXZlclBlbmRpbmdPdXRwdXRzIGVycm9yLiBGcmFt
ZXMgcmVjZWl2ZWQ6ICIKLSAgICAgICAgICAgIDw8IGZyYW1lc19yZWNlaXZlZF8gPDwgIi4gRnJh
bWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotICAgICAgcmV0dXJuIFByb2Nlc3NI
V0Vycm9yT25Db2RlY1RocmVhZCgpOwotICAgIH0KLSAgfQotICBpZiAoZnJhbWVzX3JlY2VpdmVk
XyA+IGZyYW1lc19kZWNvZGVkXyArIG1heF9wZW5kaW5nX2ZyYW1lc18pIHsKLSAgICBBTE9HRSA8
PCAiT3V0cHV0IGJ1ZmZlciBkZXF1ZXVlIHRpbWVvdXQuIEZyYW1lcyByZWNlaXZlZDogIgotICAg
ICAgICAgIDw8IGZyYW1lc19yZWNlaXZlZF8gPDwgIi4gRnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJh
bWVzX2RlY29kZWRfOwotICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsK
LSAgfQotCi0gIC8vIEdldCBpbnB1dCBidWZmZXIuCi0gIGludCBqX2lucHV0X2J1ZmZlcl9pbmRl
eCA9IEphdmFfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9kZXF1ZXVlSW5wdXRCdWZmZXIoCi0gICAg
ICBqbmksIGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8pOwotICBpZiAoQ2hlY2tFeGNlcHRp
b24oam5pKSB8fCBqX2lucHV0X2J1ZmZlcl9pbmRleCA8IDApIHsKLSAgICBBTE9HRSA8PCAiZGVx
dWV1ZUlucHV0QnVmZmVyIGVycm9yOiAiIDw8IGpfaW5wdXRfYnVmZmVyX2luZGV4Ci0gICAgICAg
ICAgPDwgIi4gUmV0cnkgRGVsaXZlclBlbmRpbmdPdXRwdXRzLiI7Ci0gICAgRW5hYmxlRnJhbWVM
b2dPbldhcm5pbmcoKTsKLSAgICAvLyBUcnkgdG8gZHJhaW4gdGhlIGRlY29kZXIuCi0gICAgaWYg
KCFEZWxpdmVyUGVuZGluZ091dHB1dHMoam5pLCBrTWVkaWFDb2RlY1BvbGxNcykpIHsKLSAgICAg
IEFMT0dFIDw8ICJEZWxpdmVyUGVuZGluZ091dHB1dHMgZXJyb3IuIEZyYW1lcyByZWNlaXZlZDog
IgotICAgICAgICAgICAgPDwgZnJhbWVzX3JlY2VpdmVkXyA8PCAiLiBGcmFtZXMgZGVjb2RlZDog
IiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0gICAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNvZGVj
VGhyZWFkKCk7Ci0gICAgfQotICAgIC8vIFRyeSBkZXF1ZXVlIGlucHV0IGJ1ZmZlciBvbmUgbGFz
dCB0aW1lLgotICAgIGpfaW5wdXRfYnVmZmVyX2luZGV4ID0gSmF2YV9NZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyX2RlcXVldWVJbnB1dEJ1ZmZlcigKLSAgICAgICAgam5pLCBqX21lZGlhX2NvZGVjX3Zp
ZGVvX2RlY29kZXJfKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCBqX2lucHV0X2J1
ZmZlcl9pbmRleCA8IDApIHsKLSAgICAgIEFMT0dFIDw8ICJkZXF1ZXVlSW5wdXRCdWZmZXIgY3Jp
dGljYWwgZXJyb3I6ICIgPDwgal9pbnB1dF9idWZmZXJfaW5kZXg7Ci0gICAgICByZXR1cm4gUHJv
Y2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29weSBlbmNv
ZGVkIGRhdGEgdG8gSmF2YSBCeXRlQnVmZmVyLgotICBqb2JqZWN0IGpfaW5wdXRfYnVmZmVyID0g
aW5wdXRfYnVmZmVyc19bal9pbnB1dF9idWZmZXJfaW5kZXhdLm9iaigpOwotICB1aW50OF90KiBi
dWZmZXIgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RC
dWZmZXJBZGRyZXNzKGpfaW5wdXRfYnVmZmVyKSk7Ci0gIFJUQ19DSEVDSyhidWZmZXIpIDw8ICJJ
bmRpcmVjdCBidWZmZXI/PyI7Ci0gIHNpemVfdCBidWZmZXJfY2FwYWNpdHkgPQotICAgICAgcnRj
OjpkY2hlY2tlZF9jYXN0PHNpemVfdD4oam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX2lu
cHV0X2J1ZmZlcikpOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCBidWZmZXJfY2FwYWNp
dHkgPCBpbnB1dEltYWdlLnNpemUoKSkgewotICAgIEFMT0dFIDw8ICJJbnB1dCBmcmFtZSBzaXpl
ICIgPDwgaW5wdXRJbWFnZS5zaXplKCkKLSAgICAgICAgICA8PCAiIGlzIGJpZ2dlciB0aGFuIGJ1
ZmZlciBzaXplICIgPDwgYnVmZmVyX2NhcGFjaXR5OwotICAgIHJldHVybiBQcm9jZXNzSFdFcnJv
ck9uQ29kZWNUaHJlYWQoKTsKLSAgfQotICBqbG9uZyBwcmVzZW50YXRpb25fdGltZXN0YW1wX3Vz
ID0gc3RhdGljX2Nhc3Q8amxvbmc+KAotICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZnJhbWVz
X3JlY2VpdmVkXykgKiAxMDAwMDAwIC8gY29kZWNfLm1heEZyYW1lcmF0ZSk7Ci0gIG1lbWNweShi
dWZmZXIsIGlucHV0SW1hZ2UuZGF0YSgpLCBpbnB1dEltYWdlLnNpemUoKSk7Ci0KLSAgaWYgKGZy
YW1lc19kZWNvZGVkXyA8IGZyYW1lc19kZWNvZGVkX2xvZ2dlZF8pIHsKLSAgICBBTE9HRCA8PCAi
RGVjb2RlciBmcmFtZSBpbiAjICIgPDwgZnJhbWVzX3JlY2VpdmVkXwotICAgICAgICAgIDw8ICIu
IFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8aW50PihpbnB1dEltYWdlLl9mcmFtZVR5cGUpCi0gICAg
ICAgICAgPDwgIi4gQnVmZmVyICMgIiA8PCBqX2lucHV0X2J1ZmZlcl9pbmRleAotICAgICAgICAg
IDw8ICIuIFRTOiAiIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXBfdXMgLyAxMDAwCi0gICAgICAg
ICAgPDwgIi4gU2l6ZTogIiA8PCBpbnB1dEltYWdlLnNpemUoKTsKLSAgfQotCi0gIC8vIFNhdmUg
aW5wdXQgaW1hZ2UgdGltZXN0YW1wcyBmb3IgbGF0ZXIgb3V0cHV0LgotICBmcmFtZXNfcmVjZWl2
ZWRfKys7Ci0gIGN1cnJlbnRfYnl0ZXNfICs9IGlucHV0SW1hZ2Uuc2l6ZSgpOwotICBhYnNsOjpv
cHRpb25hbDx1aW50OF90PiBxcDsKLSAgaWYgKGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNWUDgp
IHsKLSAgICBpbnQgcXBfaW50OwotICAgIGlmICh2cDg6OkdldFFwKGlucHV0SW1hZ2UuZGF0YSgp
LCBpbnB1dEltYWdlLnNpemUoKSwgJnFwX2ludCkpIHsKLSAgICAgIHFwID0gcXBfaW50OwotICAg
IH0KLSAgfSBlbHNlIGlmIChjb2RlY1R5cGVfID09IGtWaWRlb0NvZGVjSDI2NCkgewotICAgIGgy
NjRfYml0c3RyZWFtX3BhcnNlcl8uUGFyc2VCaXRzdHJlYW0oaW5wdXRJbWFnZS5kYXRhKCksIGlu
cHV0SW1hZ2Uuc2l6ZSgpKTsKLSAgICBpbnQgcXBfaW50OwotICAgIGlmIChoMjY0X2JpdHN0cmVh
bV9wYXJzZXJfLkdldExhc3RTbGljZVFwKCZxcF9pbnQpKSB7Ci0gICAgICBxcCA9IHFwX2ludDsK
LSAgICB9Ci0gIH0KLSAgcGVuZGluZ19mcmFtZV9xcHNfLnB1c2hfYmFjayhxcCk7Ci0KLSAgLy8g
RmVlZCBpbnB1dCB0byBkZWNvZGVyLgotICBib29sIHN1Y2Nlc3MgPSBKYXZhX01lZGlhQ29kZWNW
aWRlb0RlY29kZXJfcXVldWVJbnB1dEJ1ZmZlcigKLSAgICAgIGpuaSwgal9tZWRpYV9jb2RlY192
aWRlb19kZWNvZGVyXywgal9pbnB1dF9idWZmZXJfaW5kZXgsCi0gICAgICBzdGF0aWNfY2FzdDxp
bnQ+KGlucHV0SW1hZ2Uuc2l6ZSgpKSwgcHJlc2VudGF0aW9uX3RpbWVzdGFtcF91cywKLSAgICAg
IHN0YXRpY19jYXN0PGludDY0X3Q+KGlucHV0SW1hZ2UuVGltZXN0YW1wKCkpLCBpbnB1dEltYWdl
Lm50cF90aW1lX21zXyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpIHx8ICFzdWNjZXNzKSB7
Ci0gICAgQUxPR0UgPDwgInF1ZXVlSW5wdXRCdWZmZXIgZXJyb3IiOwotICAgIHJldHVybiBQcm9j
ZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsKLSAgfQotCi0gIC8vIFRyeSB0byBkcmFpbiB0aGUg
ZGVjb2RlcgotICBpZiAoIURlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmksIDApKSB7Ci0gICAgQUxP
R0UgPDwgIkRlbGl2ZXJQZW5kaW5nT3V0cHV0cyBlcnJvciI7Ci0gICAgcmV0dXJuIFByb2Nlc3NI
V0Vycm9yT25Db2RlY1RocmVhZCgpOwotICB9Ci0KLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RF
Q19PSzsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpEZWxpdmVyUGVuZGluZ091
dHB1dHMoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZGVxdWV1ZV90aW1lb3V0X21zKSB7Ci0gIENoZWNrT25Db2RlY1Ro
cmVhZCgpOwotICBpZiAoZnJhbWVzX3JlY2VpdmVkXyA8PSBmcmFtZXNfZGVjb2RlZF8pIHsKLSAg
ICAvLyBObyBuZWVkIHRvIHF1ZXJ5IGZvciBvdXRwdXQgYnVmZmVycyAtIGRlY29kZXIgaXMgZHJh
aW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAvLyBHZXQgZGVjb2RlciBvdXRwdXQuCi0g
IFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciA9Ci0g
ICAgICAodXNlX3N1cmZhY2VfID8gJkphdmFfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9kZXF1ZXVl
VGV4dHVyZUJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICA6ICZKYXZhX01lZGlhQ29kZWNWaWRl
b0RlY29kZXJfZGVxdWV1ZU91dHB1dEJ1ZmZlcikoCi0gICAgICAgICAgam5pLCBqX21lZGlhX2Nv
ZGVjX3ZpZGVvX2RlY29kZXJfLCBkZXF1ZXVlX3RpbWVvdXRfbXMpOwotICBpZiAoQ2hlY2tFeGNl
cHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJkZXF1ZXVlT3V0cHV0QnVmZmVyKCkgZXJyb3Ii
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoSXNOdWxsKGpuaSwgal9kZWNvZGVyX291
dHB1dF9idWZmZXIpKSB7Ci0gICAgLy8gTm8gZGVjb2RlZCBmcmFtZSByZWFkeS4KLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEdldCBkZWNvZGVkIHZpZGVvIGZyYW1lIHByb3BlcnRpZXMu
Ci0gIGludCBjb2xvcl9mb3JtYXQgPSBKYXZhX01lZGlhQ29kZWNWaWRlb0RlY29kZXJfZ2V0Q29s
b3JGb3JtYXQoCi0gICAgICBqbmksIGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8pOwotICBp
bnQgd2lkdGggPQotICAgICAgSmF2YV9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyX2dldFdpZHRoKGpu
aSwgal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXyk7Ci0gIGludCBoZWlnaHQgPQotICAgICAg
SmF2YV9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyX2dldEhlaWdodChqbmksIGpfbWVkaWFfY29kZWNf
dmlkZW9fZGVjb2Rlcl8pOwotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lQnVmZmVy
PiBmcmFtZV9idWZmZXI7Ci0gIGludDY0X3QgcHJlc2VudGF0aW9uX3RpbWVzdGFtcHNfbXMgPSAw
OwotICBpbnQ2NF90IG91dHB1dF90aW1lc3RhbXBzX21zID0gMDsKLSAgaW50NjRfdCBvdXRwdXRf
bnRwX3RpbWVzdGFtcHNfbXMgPSAwOwotICBpbnQgZGVjb2RlX3RpbWVfbXMgPSAwOwotICBpbnQ2
NF90IGZyYW1lX2RlbGF5ZWRfbXMgPSAwOwotICBpZiAodXNlX3N1cmZhY2VfKSB7Ci0gICAgLy8g
RXh0cmFjdCBkYXRhIGZyb20gSmF2YSBEZWNvZGVkVGV4dHVyZUJ1ZmZlci4KLSAgICBwcmVzZW50
YXRpb25fdGltZXN0YW1wc19tcyA9Ci0gICAgICAgIEphdmFfRGVjb2RlZFRleHR1cmVCdWZmZXJf
Z2V0UHJlc2VudGF0aW9uVGltZXN0YW1wTXMoCi0gICAgICAgICAgICBqbmksIGpfZGVjb2Rlcl9v
dXRwdXRfYnVmZmVyKTsKLSAgICBvdXRwdXRfdGltZXN0YW1wc19tcyA9Ci0gICAgICAgIEphdmFf
RGVjb2RlZFRleHR1cmVCdWZmZXJfZ2V0VGltZVN0YW1wTXMoam5pLCBqX2RlY29kZXJfb3V0cHV0
X2J1ZmZlcik7Ci0gICAgb3V0cHV0X250cF90aW1lc3RhbXBzX21zID0gSmF2YV9EZWNvZGVkVGV4
dHVyZUJ1ZmZlcl9nZXROdHBUaW1lc3RhbXBNcygKLSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0
cHV0X2J1ZmZlcik7Ci0gICAgZGVjb2RlX3RpbWVfbXMgPQotICAgICAgICBKYXZhX0RlY29kZWRU
ZXh0dXJlQnVmZmVyX2dldERlY29kZVRpbWVNcyhqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVy
KTsKLQotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX3ZpZGVvX2ZyYW1lX2J1ZmZl
ciA9Ci0gICAgICAgIEphdmFfRGVjb2RlZFRleHR1cmVCdWZmZXJfZ2V0VmlkZW9GcmFtZUJ1ZmZl
cihqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlcik7Ci0gICAgLy8gfHZpZGVvX2ZyYW1lX2J1ZmZl
cnwgPT0gbnVsbCByZXByZXNlbnRzIGEgZHJvcHBlZCBmcmFtZS4KLSAgICBpZiAoIWpfdmlkZW9f
ZnJhbWVfYnVmZmVyLmlzX251bGwoKSkgewotICAgICAgZnJhbWVfZGVsYXllZF9tcyA9IEphdmFf
RGVjb2RlZFRleHR1cmVCdWZmZXJfZ2V0RnJhbWVEZWxheU1zKAotICAgICAgICAgIGpuaSwgal9k
ZWNvZGVyX291dHB1dF9idWZmZXIpOwotICAgICAgZnJhbWVfYnVmZmVyID0gQW5kcm9pZFZpZGVv
QnVmZmVyOjpBZG9wdChqbmksIGpfdmlkZW9fZnJhbWVfYnVmZmVyKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgRW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAg
Ly8gRXh0cmFjdCBkYXRhIGZyb20gSmF2YSBCeXRlQnVmZmVyIGFuZCBjcmVhdGUgb3V0cHV0IHl1
djQyMCBmcmFtZSAtCi0gICAgLy8gZm9yIG5vbiBzdXJmYWNlIGRlY29kaW5nIG9ubHkuCi0gICAg
aW50IHN0cmlkZSA9IEphdmFfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9nZXRTdHJpZGUoCi0gICAg
ICAgIGpuaSwgal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXyk7Ci0gICAgY29uc3QgaW50IHNs
aWNlX2hlaWdodCA9IEphdmFfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9nZXRTbGljZUhlaWdodCgK
LSAgICAgICAgam5pLCBqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfKTsKLSAgICBjb25zdCBp
bnQgb3V0cHV0X2J1ZmZlcl9pbmRleCA9Ci0gICAgICAgIEphdmFfRGVjb2RlZE91dHB1dEJ1ZmZl
cl9nZXRJbmRleChqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyKTsKLSAgICBjb25zdCBpbnQg
b3V0cHV0X2J1ZmZlcl9vZmZzZXQgPQotICAgICAgICBKYXZhX0RlY29kZWRPdXRwdXRCdWZmZXJf
Z2V0T2Zmc2V0KGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIpOwotICAgIGNvbnN0IGludCBv
dXRwdXRfYnVmZmVyX3NpemUgPQotICAgICAgICBKYXZhX0RlY29kZWRPdXRwdXRCdWZmZXJfZ2V0
U2l6ZShqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyKTsKLSAgICBwcmVzZW50YXRpb25fdGlt
ZXN0YW1wc19tcyA9Ci0gICAgICAgIEphdmFfRGVjb2RlZE91dHB1dEJ1ZmZlcl9nZXRQcmVzZW50
YXRpb25UaW1lc3RhbXBNcygKLSAgICAgICAgICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZm
ZXIpOwotICAgIG91dHB1dF90aW1lc3RhbXBzX21zID0KLSAgICAgICAgSmF2YV9EZWNvZGVkT3V0
cHV0QnVmZmVyX2dldFRpbWVzdGFtcE1zKGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIpOwot
ICAgIG91dHB1dF9udHBfdGltZXN0YW1wc19tcyA9IEphdmFfRGVjb2RlZE91dHB1dEJ1ZmZlcl9n
ZXROdHBUaW1lc3RhbXBNcygKLSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlcik7
Ci0KLSAgICBkZWNvZGVfdGltZV9tcyA9Ci0gICAgICAgIEphdmFfRGVjb2RlZE91dHB1dEJ1ZmZl
cl9nZXREZWNvZGVUaW1lTXMoam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlcik7Ci0gICAgUlRD
X0NIRUNLX0dFKHNsaWNlX2hlaWdodCwgaGVpZ2h0KTsKLQotICAgIGlmIChvdXRwdXRfYnVmZmVy
X3NpemUgPCB3aWR0aCAqIGhlaWdodCAqIDMgLyAyKSB7Ci0gICAgICBBTE9HRSA8PCAiSW5zdWZm
aWNpZW50IG91dHB1dCBidWZmZXIgc2l6ZTogIiA8PCBvdXRwdXRfYnVmZmVyX3NpemU7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChvdXRwdXRfYnVmZmVyX3NpemUgPCBzdHJp
ZGUgKiBoZWlnaHQgKiAzIC8gMiAmJgotICAgICAgICBzbGljZV9oZWlnaHQgPT0gaGVpZ2h0ICYm
IHN0cmlkZSA+IHdpZHRoKSB7Ci0gICAgICAvLyBTb21lIGNvZGVjcyAoRXh5bm9zKSBpbmNvcnJl
Y3RseSByZXBvcnQgc3RyaWRlIGluZm9ybWF0aW9uIGZvcgotICAgICAgLy8gb3V0cHV0IGJ5dGUg
YnVmZmVyLCBzbyBhY3R1YWwgc3RyaWRlIHZhbHVlIG5lZWQgdG8gYmUgY29ycmVjdGVkLgotICAg
ICAgc3RyaWRlID0gb3V0cHV0X2J1ZmZlcl9zaXplICogMiAvIChoZWlnaHQgKiAzKTsKLSAgICB9
Ci0gICAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RBcnJheT4gb3V0cHV0X2J1ZmZlcnMgPQot
ICAgICAgICBKYXZhX01lZGlhQ29kZWNWaWRlb0RlY29kZXJfZ2V0T3V0cHV0QnVmZmVycygKLSAg
ICAgICAgICAgIGpuaSwgal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXyk7Ci0gICAgam9iamVj
dCBvdXRwdXRfYnVmZmVyID0KLSAgICAgICAgam5pLT5HZXRPYmplY3RBcnJheUVsZW1lbnQob3V0
cHV0X2J1ZmZlcnMub2JqKCksIG91dHB1dF9idWZmZXJfaW5kZXgpOwotICAgIHVpbnQ4X3QqIHBh
eWxvYWQgPQotICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqbmktPkdldERpcmVj
dEJ1ZmZlckFkZHJlc3Mob3V0cHV0X2J1ZmZlcikpOwotICAgIGlmIChDaGVja0V4Y2VwdGlvbihq
bmkpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHBheWxvYWQgKz0gb3V0cHV0
X2J1ZmZlcl9vZmZzZXQ7Ci0KLSAgICAvLyBDcmVhdGUgeXV2NDIwIGZyYW1lLgotICAgIHJ0Yzo6
c2NvcGVkX3JlZnB0cjxJNDIwQnVmZmVyPiBpNDIwX2J1ZmZlciA9Ci0gICAgICAgIGRlY29kZWRf
ZnJhbWVfcG9vbF8uQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChjb2xvcl9m
b3JtYXQgPT0gQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyKSB7Ci0gICAgICBSVENfQ0hFQ0tfRVEo
MCwgc3RyaWRlICUgMik7Ci0gICAgICBjb25zdCBpbnQgdXZfc3RyaWRlID0gc3RyaWRlIC8gMjsK
LSAgICAgIGNvbnN0IHVpbnQ4X3QqIHlfcHRyID0gcGF5bG9hZDsKLSAgICAgIGNvbnN0IHVpbnQ4
X3QqIHVfcHRyID0geV9wdHIgKyBzdHJpZGUgKiBzbGljZV9oZWlnaHQ7Ci0KLSAgICAgIC8vIE5v
dGUgdGhhdCB0aGUgY2FzZSB3aXRoIG9kZCB8c2xpY2VfaGVpZ2h0fCBpcyBoYW5kbGVkIGluIGEg
c3BlY2lhbCB3YXkuCi0gICAgICAvLyBUaGUgY2hyb21hIGhlaWdodCBjb250YWluZWQgaW4gdGhl
IHBheWxvYWQgaXMgcm91bmRlZCBkb3duIGluc3RlYWQgb2YKLSAgICAgIC8vIHVwLCBtYWtpbmcg
aXQgb25lIHJvdyBsZXNzIHRoYW4gd2hhdCB3ZSBleHBlY3QgaW4gV2ViUlRDLiBUaGVyZWZvcmUs
IHdlCi0gICAgICAvLyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgbGFzdCBjaHJvbWEgcm93cyBmb3Ig
dGhpcyBjYXNlLiBBbHNvLCB0aGUgb2Zmc2V0Ci0gICAgICAvLyBiZXR3ZWVuIHRoZSBZIHBsYW5l
IGFuZCB0aGUgVSBwbGFuZSBpcyB1bmludHVpdGl2ZSBmb3IgdGhpcyBjYXNlLiBTZWUKLSAgICAg
IC8vIGh0dHA6Ly9idWdzLndlYnJ0Yy5vcmcvNjY1MSBmb3IgbW9yZSBpbmZvLgotICAgICAgY29u
c3QgaW50IGNocm9tYV93aWR0aCA9ICh3aWR0aCArIDEpIC8gMjsKLSAgICAgIGNvbnN0IGludCBj
aHJvbWFfaGVpZ2h0ID0KLSAgICAgICAgICAoc2xpY2VfaGVpZ2h0ICUgMiA9PSAwKSA/IChoZWln
aHQgKyAxKSAvIDIgOiBoZWlnaHQgLyAyOwotICAgICAgY29uc3QgaW50IHVfb2Zmc2V0ID0gdXZf
c3RyaWRlICogc2xpY2VfaGVpZ2h0IC8gMjsKLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfcHRyID0g
dV9wdHIgKyB1X29mZnNldDsKLSAgICAgIGxpYnl1djo6Q29weVBsYW5lKHlfcHRyLCBzdHJpZGUs
IGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGk0
MjBfYnVmZmVyLT5TdHJpZGVZKCksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgbGlieXV2OjpDb3B5
UGxhbmUodV9wdHIsIHV2X3N0cmlkZSwgaTQyMF9idWZmZXItPk11dGFibGVEYXRhVSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgaTQyMF9idWZmZXItPlN0cmlkZVUoKSwgY2hyb21hX3dpZHRo
LCBjaHJvbWFfaGVpZ2h0KTsKLSAgICAgIGxpYnl1djo6Q29weVBsYW5lKHZfcHRyLCB1dl9zdHJp
ZGUsIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVYoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGk0MjBfYnVmZmVyLT5TdHJpZGVWKCksIGNocm9tYV93aWR0aCwgY2hyb21hX2hlaWdodCk7Ci0g
ICAgICBpZiAoc2xpY2VfaGVpZ2h0ICUgMiA9PSAxKSB7Ci0gICAgICAgIFJUQ19DSEVDS19FUSho
ZWlnaHQsIHNsaWNlX2hlaWdodCk7Ci0gICAgICAgIC8vIER1cGxpY2F0ZSB0aGUgbGFzdCBjaHJv
bWEgcm93cy4KLSAgICAgICAgdWludDhfdCogdV9sYXN0X3Jvd19wdHIgPSBpNDIwX2J1ZmZlci0+
TXV0YWJsZURhdGFVKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9t
YV9oZWlnaHQgKiBpNDIwX2J1ZmZlci0+U3RyaWRlVSgpOwotICAgICAgICBtZW1jcHkodV9sYXN0
X3Jvd19wdHIsIHVfbGFzdF9yb3dfcHRyIC0gaTQyMF9idWZmZXItPlN0cmlkZVUoKSwKLSAgICAg
ICAgICAgICAgIGk0MjBfYnVmZmVyLT5TdHJpZGVVKCkpOwotICAgICAgICB1aW50OF90KiB2X2xh
c3Rfcm93X3B0ciA9IGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVYoKSArCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hyb21hX2hlaWdodCAqIGk0MjBfYnVmZmVyLT5TdHJpZGVW
KCk7Ci0gICAgICAgIG1lbWNweSh2X2xhc3Rfcm93X3B0ciwgdl9sYXN0X3Jvd19wdHIgLSBpNDIw
X2J1ZmZlci0+U3RyaWRlVigpLAotICAgICAgICAgICAgICAgaTQyMF9idWZmZXItPlN0cmlkZVYo
KSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEFsbCBvdGhlciBzdXBwb3J0ZWQg
Zm9ybWF0cyBhcmUgbnYxMi4KLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHlfcHRyID0gcGF5bG9hZDsK
LSAgICAgIGNvbnN0IHVpbnQ4X3QqIHV2X3B0ciA9IHlfcHRyICsgc3RyaWRlICogc2xpY2VfaGVp
Z2h0OwotICAgICAgbGlieXV2OjpOVjEyVG9JNDIwKHlfcHRyLCBzdHJpZGUsIHV2X3B0ciwgc3Ry
aWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVko
KSwgaTQyMF9idWZmZXItPlN0cmlkZVkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpNDIw
X2J1ZmZlci0+TXV0YWJsZURhdGFVKCksIGk0MjBfYnVmZmVyLT5TdHJpZGVVKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgaTQyMF9idWZmZXItPk11dGFibGVEYXRhVigpLCBpNDIwX2J1ZmZl
ci0+U3RyaWRlVigpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwot
ICAgIH0KLSAgICBmcmFtZV9idWZmZXIgPSBpNDIwX2J1ZmZlcjsKLQotICAgIC8vIFJldHVybiBv
dXRwdXQgYnl0ZSBidWZmZXIgYmFjayB0byBjb2RlYy4KLSAgICBKYXZhX01lZGlhQ29kZWNWaWRl
b0RlY29kZXJfcmV0dXJuRGVjb2RlZE91dHB1dEJ1ZmZlcigKLSAgICAgICAgam5pLCBqX21lZGlh
X2NvZGVjX3ZpZGVvX2RlY29kZXJfLCBvdXRwdXRfYnVmZmVyX2luZGV4KTsKLSAgICBpZiAoQ2hl
Y2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0UgPDwgInJldHVybkRlY29kZWRPdXRwdXRC
dWZmZXIgZXJyb3IiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICBpZiAoZnJh
bWVzX2RlY29kZWRfIDwgZnJhbWVzX2RlY29kZWRfbG9nZ2VkXykgewotICAgIEFMT0dEIDw8ICJE
ZWNvZGVyIGZyYW1lIG91dCAjICIgPDwgZnJhbWVzX2RlY29kZWRfIDw8ICIuICIgPDwgd2lkdGgg
PDwgIiB4ICIKLSAgICAgICAgICA8PCBoZWlnaHQgPDwgIi4gQ29sb3I6ICIgPDwgY29sb3JfZm9y
bWF0Ci0gICAgICAgICAgPDwgIi4gVFM6ICIgPDwgcHJlc2VudGF0aW9uX3RpbWVzdGFtcHNfbXMK
LSAgICAgICAgICA8PCAiLiBEZWNUaW1lOiAiIDw8IHN0YXRpY19jYXN0PGludD4oZGVjb2RlX3Rp
bWVfbXMpCi0gICAgICAgICAgPDwgIi4gRGVsYXlUaW1lOiAiIDw8IHN0YXRpY19jYXN0PGludD4o
ZnJhbWVfZGVsYXllZF9tcyk7Ci0gIH0KLQotICAvLyBDYWxjdWxhdGUgYW5kIHByaW50IGRlY29k
aW5nIHN0YXRpc3RpY3MgLSBldmVyeSAzIHNlY29uZHMuCi0gIGZyYW1lc19kZWNvZGVkXysrOwot
ICBjdXJyZW50X2ZyYW1lc18rKzsKLSAgY3VycmVudF9kZWNvZGluZ190aW1lX21zXyArPSBkZWNv
ZGVfdGltZV9tczsKLSAgY3VycmVudF9kZWxheV90aW1lX21zXyArPSBmcmFtZV9kZWxheWVkX21z
OwotICBpbnQgc3RhdGlzdGljX3RpbWVfbXMgPSBydGM6OlRpbWVNaWxsaXMoKSAtIHN0YXJ0X3Rp
bWVfbXNfOwotICBpZiAoc3RhdGlzdGljX3RpbWVfbXMgPj0ga01lZGlhQ29kZWNTdGF0aXN0aWNz
SW50ZXJ2YWxNcyAmJgotICAgICAgY3VycmVudF9mcmFtZXNfID4gMCkgewotICAgIGludCBjdXJy
ZW50X2JpdHJhdGUgPSBjdXJyZW50X2J5dGVzXyAqIDggLyBzdGF0aXN0aWNfdGltZV9tczsKLSAg
ICBpbnQgY3VycmVudF9mcHMgPQotICAgICAgICAoY3VycmVudF9mcmFtZXNfICogMTAwMCArIHN0
YXRpc3RpY190aW1lX21zIC8gMikgLyBzdGF0aXN0aWNfdGltZV9tczsKLSAgICBBTE9HRCA8PCAi
RnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfCi0gICAgICAgICAgPDwgIi4gUmVj
ZWl2ZWQ6ICIgPDwgZnJhbWVzX3JlY2VpdmVkXwotICAgICAgICAgIDw8ICIuIEJpdHJhdGU6ICIg
PDwgY3VycmVudF9iaXRyYXRlCi0gICAgICAgICAgPDwgIiBrYnBzIgotICAgICAgICAgICAgICIu
IEZwczogIgotICAgICAgICAgIDw8IGN1cnJlbnRfZnBzCi0gICAgICAgICAgPDwgIi4gRGVjVGlt
ZTogIiA8PCAoY3VycmVudF9kZWNvZGluZ190aW1lX21zXyAvIGN1cnJlbnRfZnJhbWVzXykKLSAg
ICAgICAgICA8PCAiLiBEZWxheVRpbWU6ICIgPDwgKGN1cnJlbnRfZGVsYXlfdGltZV9tc18gLyBj
dXJyZW50X2ZyYW1lc18pCi0gICAgICAgICAgPDwgIiBmb3IgbGFzdCAiIDw8IHN0YXRpc3RpY190
aW1lX21zIDw8ICIgbXMuIjsKLSAgICBzdGFydF90aW1lX21zXyA9IHJ0Yzo6VGltZU1pbGxpcygp
OwotICAgIGN1cnJlbnRfZnJhbWVzXyA9IDA7Ci0gICAgY3VycmVudF9ieXRlc18gPSAwOwotICAg
IGN1cnJlbnRfZGVjb2RpbmdfdGltZV9tc18gPSAwOwotICAgIGN1cnJlbnRfZGVsYXlfdGltZV9t
c18gPSAwOwotICB9Ci0KLSAgLy8gSWYgdGhlIGZyYW1lIHdhcyBkcm9wcGVkLCBmcmFtZV9idWZm
ZXIgaXMgbGVmdCBhcyBudWxscHRyLgotICBpZiAoZnJhbWVfYnVmZmVyKSB7Ci0gICAgVmlkZW9G
cmFtZSBkZWNvZGVkX2ZyYW1lID0gVmlkZW9GcmFtZTo6QnVpbGRlcigpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5zZXRfdmlkZW9fZnJhbWVfYnVmZmVyKGZyYW1lX2J1ZmZl
cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldF90aW1lc3RhbXBfcnRw
KDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRfdGltZXN0YW1wX21z
KDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRfcm90YXRpb24oa1Zp
ZGVvUm90YXRpb25fMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxk
KCk7Ci0gICAgZGVjb2RlZF9mcmFtZS5zZXRfdGltZXN0YW1wKG91dHB1dF90aW1lc3RhbXBzX21z
KTsKLSAgICBkZWNvZGVkX2ZyYW1lLnNldF9udHBfdGltZV9tcyhvdXRwdXRfbnRwX3RpbWVzdGFt
cHNfbXMpOwotCi0gICAgYWJzbDo6b3B0aW9uYWw8dWludDhfdD4gcXAgPSBwZW5kaW5nX2ZyYW1l
X3Fwc18uZnJvbnQoKTsKLSAgICBwZW5kaW5nX2ZyYW1lX3Fwc18ucG9wX2Zyb250KCk7Ci0gICAg
Y2FsbGJhY2tfLT5EZWNvZGVkKGRlY29kZWRfZnJhbWUsIGRlY29kZV90aW1lX21zLCBxcCk7Ci0g
IH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6
UmVnaXN0ZXJEZWNvZGVDb21wbGV0ZUNhbGxiYWNrKAotICAgIERlY29kZWRJbWFnZUNhbGxiYWNr
KiBjYWxsYmFjaykgewotICBjYWxsYmFja18gPSBjYWxsYmFjazsKLSAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19PSzsKLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpPbk1lc3Nh
Z2UocnRjOjpNZXNzYWdlKiBtc2cpIHsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhy
ZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5p
KTsKLSAgaWYgKCFpbml0ZWRfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIFdlIG9ubHkgZXZl
ciBzZW5kIG9uZSBtZXNzYWdlIHRvIHx0aGlzfCBkaXJlY3RseSAobm90IHRocm91Z2ggYSBCaW5k
KCknZAotICAvLyBmdW5jdG9yKSwgc28gZXhwZWN0IG5vIElEL2RhdGEuCi0gIFJUQ19DSEVDSygh
bXNnLT5tZXNzYWdlX2lkKSA8PCAiVW5leHBlY3RlZCBtZXNzYWdlISI7Ci0gIFJUQ19DSEVDSygh
bXNnLT5wZGF0YSkgPDwgIlVuZXhwZWN0ZWQgbWVzc2FnZSEiOwotICBDaGVja09uQ29kZWNUaHJl
YWQoKTsKLQotICBpZiAoIURlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmksIDApKSB7Ci0gICAgQUxP
R0UgPDwgIk9uTWVzc2FnZTogRGVsaXZlclBlbmRpbmdPdXRwdXRzIGVycm9yIjsKLSAgICBQcm9j
ZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgY29kZWNfdGhy
ZWFkXy0+UG9zdERlbGF5ZWQoUlRDX0ZST01fSEVSRSwga01lZGlhQ29kZWNQb2xsTXMsIHRoaXMp
OwotfQotCi1jb25zdCBjaGFyKiBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpJbXBsZW1lbnRhdGlv
bk5hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAiTWVkaWFDb2RlYyI7Ci19Ci0KLXN0YXRpYyBqbG9u
ZyBKTklfTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcl9DcmVhdGVEZWNvZGVyKAotICAgIEpOSUVudiog
ZW52LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqc3RyaW5nPiYgY29kZWMsCi0gICAgamJvb2xl
YW4gdXNlX3N1cmZhY2UpIHsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUo
ZW52KTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIobmV3IE1lZGlhQ29kZWNWaWRlb0RlY29k
ZXIoCi0gICAgICBlbnYsIFBheWxvYWRTdHJpbmdUb0NvZGVjVHlwZShKYXZhVG9OYXRpdmVTdHJp
bmcoZW52LCBjb2RlYykpLAotICAgICAgdXNlX3N1cmZhY2UpKTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lk
X21lZGlhX2VuY29kZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbWVkaWFfZW5jb2Rlci5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiMzY4YjZlYzdlY2RhM2VjNjUxZWMwOGRkZDQzMjQx
NTNiMTczYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
am5pL2FuZHJvaWRfbWVkaWFfZW5jb2Rlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyNDggKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRl
IDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
dXRpbGl0eT4KLQotI2luY2x1ZGUgImFic2wvbWVtb3J5L21lbW9yeS5oIgotI2luY2x1ZGUgImFw
aS90YXNrX3F1ZXVlL3F1ZXVlZF90YXNrLmgiCi0jaW5jbHVkZSAiYXBpL3Rhc2tfcXVldWUvdGFz
a19xdWV1ZV9iYXNlLmgiCi0jaW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy9zZHBfdmlkZW9fZm9y
bWF0LmgiCi0jaW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy92aWRlb19lbmNvZGVyLmgiCi0jaW5j
bHVkZSAiY29tbW9uX3ZpZGVvL2gyNjQvaDI2NF9iaXRzdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVk
ZSAiY29tbW9uX3ZpZGVvL2gyNjQvaDI2NF9jb21tb24uaCIKLSNpbmNsdWRlICJjb21tb25fdmlk
ZW8vaDI2NC9wcm9maWxlX2xldmVsX2lkLmgiCi0jaW5jbHVkZSAibWVkaWEvYmFzZS9jb2RlYy5o
IgotI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAibWVk
aWEvZW5naW5lL2ludGVybmFsX2VuY29kZXJfZmFjdG9yeS5oIgotI2luY2x1ZGUgIm1vZHVsZXMv
dmlkZW9fY29kaW5nL2luY2x1ZGUvdmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAi
bW9kdWxlcy92aWRlb19jb2RpbmcvdXRpbGl0eS9xdWFsaXR5X3NjYWxlci5oIgotI2luY2x1ZGUg
Im1vZHVsZXMvdmlkZW9fY29kaW5nL3V0aWxpdHkvdnA4X2hlYWRlcl9wYXJzZXIuaCIKLSNpbmNs
dWRlICJtb2R1bGVzL3ZpZGVvX2NvZGluZy91dGlsaXR5L3ZwOV91bmNvbXByZXNzZWRfaGVhZGVy
X3BhcnNlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJydGNfYmFz
ZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAicnRj
X2Jhc2Uvc3luY2hyb25pemF0aW9uL3NlcXVlbmNlX2NoZWNrZXIuaCIKLSNpbmNsdWRlICJydGNf
YmFzZS90aHJlYWQuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1lX3V0aWxzLmgiCi0jaW5jbHVk
ZSAicnRjX2Jhc2Uvd2Vha19wdHIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRf
dmlkZW9fam5pL01lZGlhQ29kZWNWaWRlb0VuY29kZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lk
L3NyYy9qbmkvYW5kcm9pZF9tZWRpYV9jb2RlY19jb21tb24uaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2pu
aS92aWRlb19jb2RlY19pbmZvLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19mcmFtZS5oIgotI2luY2x1ZGUgInN5c3RlbV93cmFwcGVycy9pbmNsdWRlL2ZpZWxkX3RyaWFs
LmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L2NvbnZlcnQu
aCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvY29udmVydF9m
cm9tLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L3ZpZGVv
X2NvbW1vbi5oIgotCi11c2luZyBydGM6OkJpbmQ7Ci11c2luZyBydGM6OlRocmVhZE1hbmFnZXI7
Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIE1heGltdW0gc3Vw
cG9ydGVkIEhXIHZpZGVvIGVuY29kZXIgZnBzLgotI2RlZmluZSBNQVhfVklERU9fRlBTIDMwCi0v
LyBNYXhpbXVtIGFsbG93ZWQgZnBzIHZhbHVlIGluIFNldFJhdGVzKCkgY2FsbC4KLSNkZWZpbmUg
TUFYX0FMTE9XRURfVklERU9fRlBTIDYwCi0vLyBNYXhpbXVtIGFsbG93ZWQgZnJhbWVzIGluIGVu
Y29kZXIgaW5wdXQgcXVldWUuCi0jZGVmaW5lIE1BWF9FTkNPREVSX1FfU0laRSAyCi0vLyBNYXhp
bXVtIGFtb3VudCBvZiBkcm9wcGVkIGZyYW1lcyBjYXVzZWQgYnkgZnVsbCBlbmNvZGVyIHF1ZXVl
IC0gZXhjZWVkaW5nCi0vLyB0aGlzIHRocmVzaG9sZCBtZWFucyB0aGF0IGVuY29kZXIgcHJvYmFi
bHkgZ290IHN0dWNrIGFuZCBuZWVkIHRvIGJlIHJlc2V0LgotI2RlZmluZSBFTkNPREVSX1NUQUxM
X0ZSQU1FRFJPUF9USFJFU0hPTEQgNjAKLQotLy8gTG9nZ2luZyBtYWNyb3MuCi0jZGVmaW5lIFRB
R19FTkNPREVSICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIgotI2lmZGVmIFRSQUNLX0JVRkZFUl9U
SU1JTkcKLSNkZWZpbmUgQUxPR1YoLi4uKQotX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xP
R19WRVJCT1NFLCBUQUdfRU5DT0RFUiwgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBBTE9H
ViguLi4pCi0jZW5kaWYKLSNkZWZpbmUgQUxPR0QgUlRDX0xPR19UQUcocnRjOjpMU19JTkZPLCBU
QUdfRU5DT0RFUikKLSNkZWZpbmUgQUxPR1cgUlRDX0xPR19UQUcocnRjOjpMU19XQVJOSU5HLCBU
QUdfRU5DT0RFUikKLSNkZWZpbmUgQUxPR0UgUlRDX0xPR19UQUcocnRjOjpMU19FUlJPUiwgVEFH
X0VOQ09ERVIpCi0KLSAgICBuYW1lc3BhY2UgewotICAvLyBNYXhpbXVtIHRpbWUgbGltaXQgYmV0
d2VlbiBpbmNvbWluZyBmcmFtZXMgYmVmb3JlIHJlcXVlc3RpbmcgYSBrZXkgZnJhbWUuCi0gIGNv
bnN0IGludDY0X3Qga0ZyYW1lRGlmZlRocmVzaG9sZE1zID0gMzUwOwotICBjb25zdCBpbnQga01p
bktleUZyYW1lSW50ZXJ2YWwgPSA2OwotICBjb25zdCBjaGFyIGtDdXN0b21RUFRocmVzaG9sZHNG
aWVsZFRyaWFsW10gPSAiV2ViUlRDLUN1c3RvbVFQVGhyZXNob2xkcyI7Ci19ICAvLyBuYW1lc3Bh
Y2UKLQotLy8gTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBpcyBhIFZpZGVvRW5jb2RlciBpbXBsZW1l
bnRhdGlvbiB0aGF0IHVzZXMKLS8vIEFuZHJvaWQncyBNZWRpYUNvZGVjIFNESyBBUEkgYmVoaW5k
IHRoZSBzY2VuZXMgdG8gaW1wbGVtZW50IChob3BlZnVsbHkpCi0vLyBIVy1iYWNrZWQgdmlkZW8g
ZW5jb2RlLiAgVGhpcyBDKysgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYXMgYSB2ZXJ5IHRoaW4gc2hp
bSwKLS8vIGRlbGVnYXRpbmcgYWxsIG9mIHRoZSBpbnRlcmVzdGluZyB3b3JrIHRvIG9yZy53ZWJy
dGMuTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci4KLS8vIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgbXVz
dCBiZSBvcGVyYXRlZCBvbiBhIHNpbmdsZSB0YXNrIHF1ZXVlLCBjdXJyZW50bHkKLS8vIHRoaXMg
aXMgdGhlIGVuY29kZXIgcXVldWUgZnJvbSBWaUUgZW5jb2Rlci4KLWNsYXNzIE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIgOiBwdWJsaWMgVmlkZW9FbmNvZGVyIHsKLSBwdWJsaWM6Ci0gIH5NZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyKCkgb3ZlcnJpZGU7Ci0gIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoSk5J
RW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2RwVmlkZW9Gb3JtYXQm
IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc19lZ2xfY29udGV4dCk7
Ci0KLSAgLy8gVmlkZW9FbmNvZGVyIGltcGxlbWVudGF0aW9uLgotICBpbnQzMl90IEluaXRFbmNv
ZGUoY29uc3QgVmlkZW9Db2RlYyogY29kZWNfc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MpIG92ZXJyaWRlOwotICBpbnQzMl90IEVuY29kZShj
b25zdCBWaWRlb0ZyYW1lJiBpbnB1dF9pbWFnZSwKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8VmlkZW9GcmFtZVR5cGU+KiBmcmFtZV90eXBlcykgb3ZlcnJpZGU7Ci0gIGludDMy
X3QgUmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNrKAotICAgICAgRW5jb2RlZEltYWdlQ2Fs
bGJhY2sqIGNhbGxiYWNrKSBvdmVycmlkZTsKLSAgaW50MzJfdCBSZWxlYXNlKCkgb3ZlcnJpZGU7
Ci0gIHZvaWQgU2V0UmF0ZXMoY29uc3QgUmF0ZUNvbnRyb2xQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KSBvdmVycmlkZTsKLSAgRW5jb2RlckluZm8gR2V0RW5jb2RlckluZm8oKSBjb25zdCBvdmVycmlk
ZTsKLQotICAvLyBGaWxscyB0aGUgaW5wdXQgYnVmZmVyIHdpdGggZGF0YSBmcm9tIHRoZSBidWZm
ZXJzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgotICBib29sIEZpbGxJbnB1dEJ1ZmZlcihKTklFbnYq
IGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0X2J1ZmZlcl9pbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb25zdCogYnVmZmVyX3ksCi0gICAgICAgICAg
ICAgICAgICAgICAgIGludCBzdHJpZGVfeSwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDhf
dCBjb25zdCogYnVmZmVyX3UsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGVfdSwK
LSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb25zdCogYnVmZmVyX3YsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBzdHJpZGVfdik7Ci0KLSBwcml2YXRlOgotICBjbGFzcyBFbmNv
ZGVUYXNrIDogcHVibGljIFF1ZXVlZFRhc2sgewotICAgcHVibGljOgotICAgIGV4cGxpY2l0IEVu
Y29kZVRhc2socnRjOjpXZWFrUHRyPE1lZGlhQ29kZWNWaWRlb0VuY29kZXI+IGVuY29kZXIpOwot
ICAgIGJvb2wgUnVuKCkgb3ZlcnJpZGU7Ci0KLSAgIHByaXZhdGU6Ci0gICAgcnRjOjpXZWFrUHRy
PE1lZGlhQ29kZWNWaWRlb0VuY29kZXI+IGVuY29kZXJfOwotICB9OwotCi0gIC8vIFJlc2V0Q29k
ZWMoKSBjYWxscyBSZWxlYXNlKCkgYW5kIEluaXRFbmNvZGVJbnRlcm5hbCgpIGluIGFuIGF0dGVt
cHQgdG8KLSAgLy8gcmVzdG9yZSB0aGUgY29kZWMgdG8gYW4gb3BlcmFibGUgc3RhdGUuIE5lY2Vz
c2FyeSBhZnRlciBhbGwgbWFubmVyIG9mCi0gIC8vIE9NWC1sYXllciBlcnJvcnMuIFJldHVybnMg
dHJ1ZSBpZiB0aGUgY29kZWMgd2FzIHJlc2V0IHN1Y2Nlc3NmdWxseS4KLSAgYm9vbCBSZXNldENv
ZGVjKCk7Ci0KLSAgLy8gRmFsbGJhY2sgdG8gYSBzb2Z0d2FyZSBlbmNvZGVyIGlmIG9uZSBpcyBz
dXBwb3J0ZWQgZWxzZSB0cnkgdG8gcmVzZXQgdGhlCi0gIC8vIGVuY29kZXIuIENhbGxlZCB3aXRo
IHxyZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZXwgZXF1YWwgdG8gZmFsc2UgZnJvbQotICAv
LyBpbml0L3JlbGVhc2UgZW5jb2RlciBzbyB0aGF0IHdlIGRvbid0IGdvIGludG8gaW5maW5pdGUg
cmVjdXJzaW9uLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvZGVjIHdhcyByZXNldCBzdWNj
ZXNzZnVsbHkuCi0gIGJvb2wgUHJvY2Vzc0hXRXJyb3IoYm9vbCByZXNldF9pZl9mYWxsYmFja191
bmF2YWlsYWJsZSk7Ci0KLSAgLy8gQ2FsbHMgUHJvY2Vzc0hXRXJyb3IodHJ1ZSkuIFJldHVybnMg
V0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFIGlmCi0gIC8vIHN3X2ZhbGxiYWNr
X3JlcXVpcmVkXyB3YXMgc2V0IG9yIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUiBvdGhlcndpc2Uu
Ci0gIGludDMyX3QgUHJvY2Vzc0hXRXJyb3JPbkVuY29kZSgpOwotCi0gIC8vIElmIHdpZHRoPT0w
IHRoZW4gdGhpcyBpcyBhc3N1bWVkIHRvIGJlIGEgcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZQot
ICAvLyBwcmV2aW91c2x5LWN1cnJlbnQgdmFsdWVzIGFyZSByZXVzZWQgaW5zdGVhZCBvZiB0aGUg
cGFzc2VkIHBhcmFtZXRlcnMKLSAgLy8gKG1ha2VzIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQg
dGhyZWFkLXNhZmV0eSkuCi0gIGludDMyX3QgSW5pdEVuY29kZUludGVybmFsKGludCB3aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGticHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX3N1cmZhY2UpOwot
ICAvLyBSZWNvbmZpZ3VyZSB0byBtYXRjaCB8ZnJhbWV8IGluIHdpZHRoLCBoZWlnaHQuIEFsc28g
cmVjb25maWd1cmVzIHRoZQotICAvLyBlbmNvZGVyIGlmIHxmcmFtZXwgaXMgYSB0ZXh0dXJlL2J5
dGUgYnVmZmVyIGFuZCB0aGUgZW5jb2RlciBpcyBpbml0aWFsaXplZAotICAvLyBmb3IgYnl0ZSBi
dWZmZXIvdGV4dHVyZS4gUmV0dXJucyBmYWxzZSBpZiByZWNvbmZpZ3VyaW5nIGZhaWxzLgotICBi
b29sIE1heWJlUmVjb25maWd1cmVFbmNvZGVyKEpOSUVudiogam5pLCBjb25zdCBWaWRlb0ZyYW1l
JiBmcmFtZSk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmcmFtZSBpcyBhIHRleHR1cmUg
ZnJhbWUgYW5kIHdlIHNob3VsZCB1c2Ugc3VyZmFjZQotICAvLyBiYXNlZCBlbmNvZGluZy4KLSAg
Ym9vbCBJc1RleHR1cmVGcmFtZShKTklFbnYqIGpuaSwgY29uc3QgVmlkZW9GcmFtZSYgZnJhbWUp
OwotCi0gIGJvb2wgRW5jb2RlQnl0ZUJ1ZmZlcihKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wga2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VmlkZW9GcmFtZSYgZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfYnVm
ZmVyX2luZGV4KTsKLSAgLy8gRW5jb2RlcyBhIG5ldyBzdHlsZSBvcmcud2VicnRjLlZpZGVvRnJh
bWUuIE1pZ2h0IGJlIGEgSTQyMCBvciBhIHRleHR1cmUKLSAgLy8gZnJhbWUuCi0gIGJvb2wgRW5j
b2RlSmF2YUZyYW1lKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGtl
eV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYg
ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dF9idWZmZXJfaW5kZXgpOwot
Ci0gIC8vIERlbGl2ZXIgYW55IG91dHB1dHMgcGVuZGluZyBpbiB0aGUgTWVkaWFDb2RlYyB0byBv
dXIgfGNhbGxiYWNrX3wgYW5kIHJldHVybgotICAvLyB0cnVlIG9uIHN1Y2Nlc3MuCi0gIGJvb2wg
RGVsaXZlclBlbmRpbmdPdXRwdXRzKEpOSUVudiogam5pKTsKLQotICBWaWRlb0VuY29kZXI6OlNj
YWxpbmdTZXR0aW5ncyBHZXRTY2FsaW5nU2V0dGluZ3NJbnRlcm5hbCgpIGNvbnN0OwotCi0gIC8v
IERpc3BsYXlzIGVuY29kZXIgc3RhdGlzdGljcy4KLSAgdm9pZCBMb2dTdGF0aXN0aWNzKGJvb2wg
Zm9yY2VfbG9nKTsKLQotICBWaWRlb0NvZGVjVHlwZSBHZXRDb2RlY1R5cGUoKSBjb25zdDsKLQot
I2lmIFJUQ19EQ0hFQ0tfSVNfT04KLSAgLy8gTXV0ZXggZm9yIHByb3RlY3RpbmcgaW5pdGVkXy4g
SXQgaXMgb25seSB1c2VkIGZvciBjb3JyZWN0bmVzcyBjaGVja2luZyBvbgotICAvLyBkZWJ1ZyBi
dWlsZC4gSXQgaXMgdXNlZCBmb3IgY2hlY2tpbmcgdGhhdCBlbmNvZGVyIGhhcyBiZWVuIHJlbGVh
c2VkIGluIHRoZQotICAvLyBkZXN0cnVjdG9yLiBCZWNhdXNlIHRoaXMgbWlnaHQgaGFwcGVuIG9u
IGEgZGlmZmVyZW50IHRocmVhZCwgd2UgbmVlZCBhCi0gIC8vIG11dGV4LgotICBydGM6OkNyaXRp
Y2FsU2VjdGlvbiBpbml0ZWRfY3JpdF87Ci0jZW5kaWYKLQotICAvLyBUeXBlIG9mIHZpZGVvIGNv
ZGVjLgotICBjb25zdCBTZHBWaWRlb0Zvcm1hdCBmb3JtYXRfOwotCi0gIEVuY29kZWRJbWFnZUNh
bGxiYWNrKiBjYWxsYmFja187Ci0KLSAgLy8gU3RhdGUgdGhhdCBpcyBjb25zdGFudCBmb3IgdGhl
IGxpZmV0aW1lIG9mIHRoaXMgb2JqZWN0IG9uY2UgdGhlIGN0b3IKLSAgLy8gcmV0dXJucy4KLSAg
U2VxdWVuY2VDaGVja2VyIGVuY29kZXJfcXVldWVfY2hlY2tlcl87Ci0gIFNjb3BlZEphdmFHbG9i
YWxSZWY8am9iamVjdD4gal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXzsKLQotICAvLyBTdGF0
ZSB0aGF0IGlzIHZhbGlkIG9ubHkgYmV0d2VlbiBJbml0RW5jb2RlKCkgYW5kIHRoZSBuZXh0IFJl
bGVhc2UoKS4KLSAgaW50IHdpZHRoXzsgICAvLyBGcmFtZSB3aWR0aCBpbiBwaXhlbHMuCi0gIGlu
dCBoZWlnaHRfOyAgLy8gRnJhbWUgaGVpZ2h0IGluIHBpeGVscy4KLSAgYm9vbCBpbml0ZWRfOwot
ICBib29sIHVzZV9zdXJmYWNlXzsKLSAgZW51bSBsaWJ5dXY6OkZvdXJDQyBlbmNvZGVyX2ZvdXJj
Y187ICAvLyBFbmNvZGVyIGNvbG9yIHNwYWNlIGZvcm1hdC4KLSAgdWludDMyX3QgbGFzdF9zZXRf
Yml0cmF0ZV9rYnBzXzsgICAgICAvLyBMYXN0LXJlcXVlc3RlZCBiaXRyYXRlIGluIGticHMuCi0g
IHVpbnQzMl90IGxhc3Rfc2V0X2Zwc187ICAgICAgICAgICAgICAgLy8gTGFzdC1yZXF1ZXN0ZWQg
ZnJhbWUgcmF0ZS4KLSAgaW50NjRfdCBjdXJyZW50X3RpbWVzdGFtcF91c187ICAgICAgICAvLyBD
dXJyZW50IGZyYW1lIHRpbWVzdGFtcHMgaW4gdXMuCi0gIGludCBmcmFtZXNfcmVjZWl2ZWRfOyAg
ICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBieSBlbmNvZGVyLgot
ICBpbnQgZnJhbWVzX2VuY29kZWRfOyAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBmcmFt
ZXMgZW5jb2RlZCBieSBlbmNvZGVyLgotICBpbnQgZnJhbWVzX2Ryb3BwZWRfbWVkaWFfZW5jb2Rl
cl87ICAgIC8vIE51bWJlciBvZiBmcmFtZXMgZHJvcHBlZCBieSBlbmNvZGVyLgotICAvLyBOdW1i
ZXIgb2YgZHJvcHBlZCBmcmFtZXMgY2F1c2VkIGJ5IGZ1bGwgcXVldWUuCi0gIGludCBjb25zZWN1
dGl2ZV9mdWxsX3F1ZXVlX2ZyYW1lX2Ryb3BzXzsKLSAgaW50NjRfdCBzdGF0X3N0YXJ0X3RpbWVf
bXNfOyAgLy8gU3RhcnQgdGltZSBmb3Igc3RhdGlzdGljcy4KLSAgaW50IGN1cnJlbnRfZnJhbWVz
XzsgIC8vIE51bWJlciBvZiBmcmFtZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGlzdGljcyBpbnRlcnZh
bC4KLSAgaW50IGN1cnJlbnRfYnl0ZXNfOyAgIC8vIEVuY29kZWQgYnl0ZXMgaW4gdGhlIGN1cnJl
bnQgc3RhdGlzdGljcyBpbnRlcnZhbC4KLSAgaW50IGN1cnJlbnRfYWNjX3FwXzsgIC8vIEFjY3Vt
dWxhdGVkIFFQIGluIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgaW50ZXJ2YWwuCi0gIGludCBjdXJy
ZW50X2VuY29kaW5nX3RpbWVfbXNfOyAgLy8gT3ZlcmFsbCBlbmNvZGluZyB0aW1lIGluIHRoZSBj
dXJyZW50IHNlY29uZAotICBpbnQ2NF90IGxhc3RfaW5wdXRfdGltZXN0YW1wX21zXzsgICAvLyBU
aW1lc3RhbXAgb2YgbGFzdCByZWNlaXZlZCB5dXYgZnJhbWUuCi0gIGludDY0X3QgbGFzdF9vdXRw
dXRfdGltZXN0YW1wX21zXzsgIC8vIFRpbWVzdGFtcCBvZiBsYXN0IGVuY29kZWQgZnJhbWUuCi0g
IC8vIEhvbGRzIHRoZSB0YXNrIHdoaWxlIHRoZSBwb2xsaW5nIGxvb3AgaXMgcGF1c2VkLgotICBz
dGQ6OnVuaXF1ZV9wdHI8UXVldWVkVGFzaz4gZW5jb2RlX3Rhc2tfOwotCi0gIHN0cnVjdCBJbnB1
dEZyYW1lSW5mbyB7Ci0gICAgSW5wdXRGcmFtZUluZm8oaW50NjRfdCBlbmNvZGVfc3RhcnRfdGlt
ZSwKLSAgICAgICAgICAgICAgICAgICBpbnQzMl90IGZyYW1lX3RpbWVzdGFtcCwKLSAgICAgICAg
ICAgICAgICAgICBpbnQ2NF90IGZyYW1lX3JlbmRlcl90aW1lX21zLAotICAgICAgICAgICAgICAg
ICAgIFZpZGVvUm90YXRpb24gcm90YXRpb24pCi0gICAgICAgIDogZW5jb2RlX3N0YXJ0X3RpbWUo
ZW5jb2RlX3N0YXJ0X3RpbWUpLAotICAgICAgICAgIGZyYW1lX3RpbWVzdGFtcChmcmFtZV90aW1l
c3RhbXApLAotICAgICAgICAgIGZyYW1lX3JlbmRlcl90aW1lX21zKGZyYW1lX3JlbmRlcl90aW1l
X21zKSwKLSAgICAgICAgICByb3RhdGlvbihyb3RhdGlvbikge30KLSAgICAvLyBUaW1lIHdoZW4g
dmlkZW8gZnJhbWUgaXMgc2VudCB0byBlbmNvZGVyIGlucHV0LgotICAgIGNvbnN0IGludDY0X3Qg
ZW5jb2RlX3N0YXJ0X3RpbWU7Ci0KLSAgICAvLyBJbnB1dCBmcmFtZSBpbmZvcm1hdGlvbi4KLSAg
ICBjb25zdCBpbnQzMl90IGZyYW1lX3RpbWVzdGFtcDsKLSAgICBjb25zdCBpbnQ2NF90IGZyYW1l
X3JlbmRlcl90aW1lX21zOwotICAgIGNvbnN0IFZpZGVvUm90YXRpb24gcm90YXRpb247Ci0gIH07
Ci0gIHN0ZDo6bGlzdDxJbnB1dEZyYW1lSW5mbz4gaW5wdXRfZnJhbWVfaW5mb3NfOwotICBpbnQz
Ml90IG91dHB1dF90aW1lc3RhbXBfOyAgICAgICAvLyBMYXN0IG91dHB1dCBmcmFtZSB0aW1lc3Rh
bXAgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB8aW5wdXRfZnJh
bWVfaW5mb3NffC4KLSAgaW50NjRfdCBvdXRwdXRfcmVuZGVyX3RpbWVfbXNfOyAgLy8gTGFzdCBv
dXRwdXQgZnJhbWUgcmVuZGVyIHRpbWUgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB8aW5wdXRfZnJhbWVfaW5mb3NffC4KLSAgVmlkZW9Sb3RhdGlvbiBvdXRwdXRf
cm90YXRpb25fOyAgLy8gTGFzdCBvdXRwdXQgZnJhbWUgcm90YXRpb24gZnJvbQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB8aW5wdXRfZnJhbWVfaW5mb3NffC4KLQotICAv
LyBGcmFtZSBzaXplIGluIGJ5dGVzIGZlZCB0byBNZWRpYUNvZGVjLgotICBpbnQgeXV2X3NpemVf
OwotICAvLyBUcnVlIG9ubHkgd2hlbiBiZXR3ZWVuIGEgY2FsbGJhY2tfLT5PbkVuY29kZWRJbWFn
ZSgpIGNhbGwgcmV0dXJuIGEgcG9zaXRpdmUKLSAgLy8gdmFsdWUgYW5kIHRoZSBuZXh0IEVuY29k
ZSgpIGNhbGwgYmVpbmcgaWdub3JlZC4KLSAgYm9vbCBkcm9wX25leHRfaW5wdXRfZnJhbWVfOwot
ICBib29sIHNjYWxlXzsKLSAgSDI2NDo6UHJvZmlsZSBwcm9maWxlXzsKLSAgLy8gR2xvYmFsIHJl
ZmVyZW5jZXM7IG11c3QgYmUgZGVsZXRlZCBpbiBSZWxlYXNlKCkuCi0gIHN0ZDo6dmVjdG9yPFNj
b3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4+IGlucHV0X2J1ZmZlcnNfOwotICBIMjY0Qml0c3Ry
ZWFtUGFyc2VyIGgyNjRfYml0c3RyZWFtX3BhcnNlcl87Ci0KLSAgLy8gVlA5IHZhcmlhYmxlcyB0
byBwb3B1bGF0ZSBjb2RlYyBzcGVjaWZpYyBzdHJ1Y3R1cmUuCi0gIEdvZkluZm9WUDkgZ29mXzsg
IC8vIENvbnRhaW5zIGVhY2ggZnJhbWUncyB0ZW1wb3JhbCBpbmZvcm1hdGlvbiBmb3IKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbm9uLWZsZXhpYmxlIFZQOSBtb2RlLgotICBzaXplX3QgZ29mX2lk
eF87Ci0KLSAgY29uc3QgYm9vbCBoYXNfZWdsX2NvbnRleHRfOwotICBFbmNvZGVySW5mbyBlbmNv
ZGVyX2luZm9fOwotCi0gIC8vIFRlbXBvcmFyeSBmaXggZm9yIFZQOC4KLSAgLy8gU2VuZHMgYSBr
ZXkgZnJhbWUgaWYgZnJhbWVzIGFyZSBsYXJnZWx5IHNwYWNlZCBhcGFydCAocG9zc2libHkKLSAg
Ly8gY29ycmVzcG9uZGluZyB0byBhIGxhcmdlIGltYWdlIGNoYW5nZSkuCi0gIGludDY0X3QgbGFz
dF9mcmFtZV9yZWNlaXZlZF9tc187Ci0gIGludCBmcmFtZXNfcmVjZWl2ZWRfc2luY2VfbGFzdF9r
ZXlfOwotICBWaWRlb0NvZGVjTW9kZSBjb2RlY19tb2RlXzsKLQotICBib29sIHN3X2ZhbGxiYWNr
X3JlcXVpcmVkXzsKLQotICAvLyBBbGwgb3RoZXIgbWVtYmVyIHZhcmlhYmxlcyBzaG91bGQgYmUg
YmVmb3JlIFdlYWtQdHJGYWN0b3J5LiBWYWxpZCBvbmx5IGZyb20KLSAgLy8gSW5pdEVuY29kZSB0
byBSZWxlYXNlLgotICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpXZWFrUHRyRmFjdG9yeTxNZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyPj4gd2Vha19mYWN0b3J5XzsKLX07Ci0KLU1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXI6On5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyKCkgewotI2lmIFJUQ19EQ0hFQ0tfSVNfT04K
LSAgcnRjOjpDcml0U2NvcGUgbG9jaygmaW5pdGVkX2NyaXRfKTsKLSAgUlRDX0RDSEVDSyghaW5p
dGVkXyk7Ci0jZW5kaWYKLX0KLQotTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6TWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlcihKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfZWdsX2NvbnRleHQp
Ci0gICAgOiBmb3JtYXRfKGZvcm1hdCksCi0gICAgICBjYWxsYmFja18oTlVMTCksCi0gICAgICBq
X21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfKAotICAgICAgICAgIGpuaSwKLSAgICAgICAgICBK
YXZhX01lZGlhQ29kZWNWaWRlb0VuY29kZXJfQ29uc3RydWN0b3Ioam5pKSksCi0gICAgICBpbml0
ZWRfKGZhbHNlKSwKLSAgICAgIHVzZV9zdXJmYWNlXyhmYWxzZSksCi0gICAgICBoYXNfZWdsX2Nv
bnRleHRfKGhhc19lZ2xfY29udGV4dCksCi0gICAgICBzd19mYWxsYmFja19yZXF1aXJlZF8oZmFs
c2UpIHsKLSAgZW5jb2Rlcl9xdWV1ZV9jaGVja2VyXy5EZXRhY2goKTsKLX0KLQotaW50MzJfdCBN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpJbml0RW5jb2RlKGNvbnN0IFZpZGVvQ29kZWMqIGNvZGVj
X3NldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFNldHRpbmdzJiBzZXR0aW5ncykgewotICBSVENfRENIRUNLX1JVTl9PTigmZW5jb2Rlcl9x
dWV1ZV9jaGVja2VyXyk7Ci0gIGlmIChjb2RlY19zZXR0aW5ncyA9PSBOVUxMKSB7Ci0gICAgQUxP
R0UgPDwgIk5VTEwgVmlkZW9Db2RlYyBpbnN0YW5jZSI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURF
T19DT0RFQ19FUlJfUEFSQU1FVEVSOwotICB9Ci0gIC8vIEZhY3Rvcnkgc2hvdWxkIGd1YXJkIGFn
YWluc3Qgb3RoZXIgY29kZWNzIGJlaW5nIHVzZWQgd2l0aCB1cy4KLSAgY29uc3QgVmlkZW9Db2Rl
Y1R5cGUgY29kZWNfdHlwZSA9IEdldENvZGVjVHlwZSgpOwotICBSVENfQ0hFQ0soY29kZWNfc2V0
dGluZ3MtPmNvZGVjVHlwZSA9PSBjb2RlY190eXBlKQotICAgICAgPDwgIlVuc3VwcG9ydGVkIGNv
ZGVjICIgPDwgY29kZWNfc2V0dGluZ3MtPmNvZGVjVHlwZSA8PCAiIGZvciAiCi0gICAgICA8PCBj
b2RlY190eXBlOwotICBpZiAoc3dfZmFsbGJhY2tfcmVxdWlyZWRfKSB7Ci0gICAgcmV0dXJuIFdF
QlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotICBjb2RlY19tb2RlXyA9IGNvZGVjX3NldHRpbmdz
LT5tb2RlOwotICBpbnQgaW5pdF93aWR0aCA9IGNvZGVjX3NldHRpbmdzLT53aWR0aDsKLSAgaW50
IGluaXRfaGVpZ2h0ID0gY29kZWNfc2V0dGluZ3MtPmhlaWdodDsKLSAgLy8gU2NhbGluZyBpcyBv
cHRpb25hbGx5IGVuYWJsZWQgZm9yIFZQOCBhbmQgVlA5LgotICAvLyBUT0RPKHBib3MpOiBFeHRy
YWN0IGF1dG9tYXRpY1Jlc2l6ZU9uIG91dCBvZiBWUDggc2V0dGluZ3MuCi0gIHNjYWxlXyA9IGZh
bHNlOwotICBpZiAoY29kZWNfdHlwZSA9PSBrVmlkZW9Db2RlY1ZQOCkgewotICAgIHNjYWxlXyA9
IGNvZGVjX3NldHRpbmdzLT5WUDgoKS5hdXRvbWF0aWNSZXNpemVPbjsKLSAgfSBlbHNlIGlmIChj
b2RlY190eXBlID09IGtWaWRlb0NvZGVjVlA5KSB7Ci0gICAgc2NhbGVfID0gY29kZWNfc2V0dGlu
Z3MtPlZQOSgpLmF1dG9tYXRpY1Jlc2l6ZU9uOwotICB9IGVsc2UgewotICAgIHNjYWxlXyA9IHRy
dWU7Ci0gIH0KLQotICBBTE9HRCA8PCAiSW5pdEVuY29kZSByZXF1ZXN0OiAiIDw8IGluaXRfd2lk
dGggPDwgIiB4ICIgPDwgaW5pdF9oZWlnaHQ7Ci0gIEFMT0dEIDw8ICJFbmNvZGVyIGF1dG9tYXRp
YyByZXNpemUgIiA8PCAoc2NhbGVfID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Ci0KLSAgaWYg
KGNvZGVjX3NldHRpbmdzLT5udW1iZXJPZlNpbXVsY2FzdFN0cmVhbXMgPiAxKSB7Ci0gICAgQUxP
R0QgPDwgIk51bWJlciBvZiBzaW11bGNhc3QgbGF5ZXJzIHJlcXVlc3RlZDogIgotICAgICAgICAg
IDw8IGNvZGVjX3NldHRpbmdzLT5udW1iZXJPZlNpbXVsY2FzdFN0cmVhbXMKLSAgICAgICAgICA8
PCAiLiBSZXF1ZXN0aW5nIHNvZnR3YXJlIGZhbGxiYWNrLiI7Ci0gICAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRTsKLSAgfQotCi0gIC8vIENoZWNrIGFsbG93ZWQg
SC4yNjQgcHJvZmlsZQotICBwcm9maWxlXyA9IEgyNjQ6OlByb2ZpbGU6OmtQcm9maWxlQmFzZWxp
bmU7Ci0gIGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVjSDI2NCkgewotICAgIGNvbnN0IGFi
c2w6Om9wdGlvbmFsPEgyNjQ6OlByb2ZpbGVMZXZlbElkPiBwcm9maWxlX2xldmVsX2lkID0KLSAg
ICAgICAgSDI2NDo6UGFyc2VTZHBQcm9maWxlTGV2ZWxJZChmb3JtYXRfLnBhcmFtZXRlcnMpOwot
ICAgIFJUQ19EQ0hFQ0socHJvZmlsZV9sZXZlbF9pZCk7Ci0gICAgcHJvZmlsZV8gPSBwcm9maWxl
X2xldmVsX2lkLT5wcm9maWxlOwotICAgIEFMT0dEIDw8ICJILjI2NCBwcm9maWxlOiAiIDw8IHBy
b2ZpbGVfOwotICB9Ci0KLSAgZW5jb2Rlcl9pbmZvXy5zdXBwb3J0c19uYXRpdmVfaGFuZGxlID0g
aGFzX2VnbF9jb250ZXh0XzsKLSAgZW5jb2Rlcl9pbmZvXy5pbXBsZW1lbnRhdGlvbl9uYW1lID0g
Ik1lZGlhQ29kZWMiOwotICBlbmNvZGVyX2luZm9fLnNjYWxpbmdfc2V0dGluZ3MgPSBHZXRTY2Fs
aW5nU2V0dGluZ3NJbnRlcm5hbCgpOwotICBlbmNvZGVyX2luZm9fLmlzX2hhcmR3YXJlX2FjY2Vs
ZXJhdGVkID0gdHJ1ZTsKLSAgZW5jb2Rlcl9pbmZvXy5oYXNfaW50ZXJuYWxfc291cmNlID0gZmFs
c2U7Ci0KLSAgcmV0dXJuIEluaXRFbmNvZGVJbnRlcm5hbCgKLSAgICAgIGluaXRfd2lkdGgsIGlu
aXRfaGVpZ2h0LCBjb2RlY19zZXR0aW5ncy0+c3RhcnRCaXRyYXRlLAotICAgICAgY29kZWNfc2V0
dGluZ3MtPm1heEZyYW1lcmF0ZSwKLSAgICAgIGNvZGVjX3NldHRpbmdzLT5leHBlY3RfZW5jb2Rl
X2Zyb21fdGV4dHVyZSAmJiBoYXNfZWdsX2NvbnRleHRfKTsKLX0KLQotYm9vbCBNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyOjpSZXNldENvZGVjKCkgewotICBSVENfRENIRUNLX1JVTl9PTigmZW5jb2Rl
cl9xdWV1ZV9jaGVja2VyXyk7Ci0gIEFMT0dFIDw8ICJSZXNldCI7Ci0gIGlmIChSZWxlYXNlKCkg
IT0gV0VCUlRDX1ZJREVPX0NPREVDX09LKSB7Ci0gICAgQUxPR0UgPDwgIlJlbGVhc2luZyBjb2Rl
YyBmYWlsZWQgZHVyaW5nIHJlc2V0LiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChJ
bml0RW5jb2RlSW50ZXJuYWwod2lkdGhfLCBoZWlnaHRfLCAwLCAwLCBmYWxzZSkgIT0KLSAgICAg
IFdFQlJUQ19WSURFT19DT0RFQ19PSykgewotICAgIEFMT0dFIDw8ICJJbml0aWFsaXppbmcgZW5j
b2RlciBmYWlsZWQgZHVyaW5nIHJlc2V0LiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJl
dHVybiB0cnVlOwotfQotCi1NZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpFbmNvZGVUYXNrOjpFbmNv
ZGVUYXNrKAotICAgIHJ0Yzo6V2Vha1B0cjxNZWRpYUNvZGVjVmlkZW9FbmNvZGVyPiBlbmNvZGVy
KQotICAgIDogZW5jb2Rlcl8oZW5jb2Rlcikge30KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyOjpFbmNvZGVUYXNrOjpSdW4oKSB7Ci0gIGlmICghZW5jb2Rlcl8pIHsKLSAgICAvLyBFbmNv
ZGVyIHdhcyBkZXN0cm95ZWQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBSVENfRENIRUNL
X1JVTl9PTigmZW5jb2Rlcl8tPmVuY29kZXJfcXVldWVfY2hlY2tlcl8pOwotICBKTklFbnYqIGpu
aSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1l
IGxvY2FsX3JlZl9mcmFtZShqbmkpOwotCi0gIGlmICghZW5jb2Rlcl8tPmluaXRlZF8pIHsKLSAg
ICBlbmNvZGVyXy0+ZW5jb2RlX3Rhc2tfID0gYWJzbDo6V3JhcFVuaXF1ZSh0aGlzKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIHJlY292ZXIgZnJv
bSBhIGZhaWx1cmUgaGVyZSBpZiBvbmUgaGFwcGVuZWQsIGJ1dCBpdCdzCi0gIC8vIHVuY2xlYXIg
aG93IHRvIHNpZ25hbCBzdWNoIGEgZmFpbHVyZSB0byB0aGUgYXBwLCBzbyBpbnN0ZWFkIHdlIHN0
YXkgc2lsZW50Ci0gIC8vIGFib3V0IGl0IGFuZCBsZXQgdGhlIG5leHQgYXBwLWNhbGxlZCBBUEkg
bWV0aG9kIHJldmVhbCB0aGUgYm9ya2VkbmVzcy4KLSAgZW5jb2Rlcl8tPkRlbGl2ZXJQZW5kaW5n
T3V0cHV0cyhqbmkpOwotCi0gIGlmICghZW5jb2Rlcl8pIHsKLSAgICAvLyBFbmNvZGVyIGNhbiBi
ZSBkZXN0cm95ZWQgaW4gRGVsaXZlclBlbmRpbmdPdXRwdXRzLgotICAgIHJldHVybiB0cnVlOwot
ICB9Ci0KLSAgLy8gQ2FsbCBsb2cgc3RhdGlzdGljcyBoZXJlIHNvIGl0J3MgY2FsbGVkIGV2ZW4g
aWYgbm8gZnJhbWVzIGFyZSBiZWluZwotICAvLyBkZWxpdmVyZWQuCi0gIGVuY29kZXJfLT5Mb2dT
dGF0aXN0aWNzKGZhbHNlKTsKLQotICAvLyBJZiB0aGVyZSBhcmVuJ3QgbW9yZSBmcmFtZXMgdG8g
ZGVsaXZlciwgd2UgY2FuIHN0YXJ0IHBvbGxpbmcgYXQgbG93ZXIgcmF0ZS4KLSAgaWYgKGVuY29k
ZXJfLT5pbnB1dF9mcmFtZV9pbmZvc18uZW1wdHkoKSkgewotICAgIFRhc2tRdWV1ZUJhc2U6OkN1
cnJlbnQoKS0+UG9zdERlbGF5ZWRUYXNrKGFic2w6OldyYXBVbmlxdWUodGhpcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01lZGlhQ29kZWNQb2xsTm9G
cmFtZXNNcyk7Ci0gIH0gZWxzZSB7Ci0gICAgVGFza1F1ZXVlQmFzZTo6Q3VycmVudCgpLT5Qb3N0
RGVsYXllZFRhc2soYWJzbDo6V3JhcFVuaXF1ZSh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrTWVkaWFDb2RlY1BvbGxNcyk7Ci0gIH0KLQotICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSXNGb3JtYXRTdXBwb3J0ZWQoY29uc3Qgc3RkOjp2ZWN0
b3I8U2RwVmlkZW9Gb3JtYXQ+JiBzdXBwb3J0ZWRfZm9ybWF0cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkgewotICBmb3IgKGNvbnN0IFNkcFZp
ZGVvRm9ybWF0JiBzdXBwb3J0ZWRfZm9ybWF0IDogc3VwcG9ydGVkX2Zvcm1hdHMpIHsKLSAgICBp
ZiAoY3JpY2tldDo6SXNTYW1lQ29kZWMoZm9ybWF0Lm5hbWUsIGZvcm1hdC5wYXJhbWV0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRfZm9ybWF0Lm5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZF9mb3JtYXQucGFyYW1ldGVycykpIHsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UHJvY2Vzc0hXRXJyb3IoCi0gICAgYm9vbCByZXNl
dF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSkgewotICBBTE9HRSA8PCAiUHJvY2Vzc0hXRXJyb3Ii
OwotICBpZiAoSXNGb3JtYXRTdXBwb3J0ZWQoSW50ZXJuYWxFbmNvZGVyRmFjdG9yeSgpLkdldFN1
cHBvcnRlZEZvcm1hdHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF8pKSB7Ci0g
ICAgQUxPR0UgPDwgIkZhbGxiYWNrIHRvIFNXIGVuY29kZXIuIjsKLSAgICBzd19mYWxsYmFja19y
ZXF1aXJlZF8gPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmIChyZXNldF9p
Zl9mYWxsYmFja191bmF2YWlsYWJsZSkgewotICAgIEFMT0dFIDw8ICJSZXNldCBlbmNvZGVyLiI7
Ci0gICAgcmV0dXJuIFJlc2V0Q29kZWMoKTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlu
dDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UHJvY2Vzc0hXRXJyb3JPbkVuY29kZSgpIHsK
LSAgUHJvY2Vzc0hXRXJyb3IodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAq
Lyk7Ci0gIHJldHVybiBzd19mYWxsYmFja19yZXF1aXJlZF8gPyBXRUJSVENfVklERU9fQ09ERUNf
RkFMTEJBQ0tfU09GVFdBUkUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdFQlJU
Q19WSURFT19DT0RFQ19FUlJPUjsKLX0KLQotVmlkZW9Db2RlY1R5cGUgTWVkaWFDb2RlY1ZpZGVv
RW5jb2Rlcjo6R2V0Q29kZWNUeXBlKCkgY29uc3QgewotICByZXR1cm4gUGF5bG9hZFN0cmluZ1Rv
Q29kZWNUeXBlKGZvcm1hdF8ubmFtZSk7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlcjo6SW5pdEVuY29kZUludGVybmFsKGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2JwcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9z
dXJmYWNlKSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZlbmNvZGVyX3F1ZXVlX2NoZWNrZXJfKTsK
LSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykgewotICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfT0s7Ci0gIH0KLSAgUlRDX0NIRUNLKCF1c2Vfc3VyZmFjZSB8fCBoYXNfZWdsX2NvbnRl
eHRfKSA8PCAiRUdMIGNvbnRleHQgbm90IHNldC4iOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1
cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9m
cmFtZShqbmkpOwotCi0gIGNvbnN0IFZpZGVvQ29kZWNUeXBlIGNvZGVjX3R5cGUgPSBHZXRDb2Rl
Y1R5cGUoKTsKLSAgQUxPR0QgPDwgIkluaXRFbmNvZGVJbnRlcm5hbCBUeXBlOiAiIDw8IHN0YXRp
Y19jYXN0PGludD4oY29kZWNfdHlwZSkgPDwgIiwgIgotICAgICAgICA8PCB3aWR0aCA8PCAiIHgg
IiA8PCBoZWlnaHQgPDwgIi4gQml0cmF0ZTogIiA8PCBrYnBzCi0gICAgICAgIDw8ICIga2Jwcy4g
RnBzOiAiIDw8IGZwcyA8PCAiLiBQcm9maWxlOiAiIDw8IHByb2ZpbGVfIDw8ICIuIjsKLSAgaWYg
KGticHMgPT0gMCkgewotICAgIGticHMgPSBsYXN0X3NldF9iaXRyYXRlX2ticHNfOwotICB9Ci0g
IGlmIChmcHMgPT0gMCkgewotICAgIGZwcyA9IE1BWF9WSURFT19GUFM7Ci0gIH0KLQotICB3aWR0
aF8gPSB3aWR0aDsKLSAgaGVpZ2h0XyA9IGhlaWdodDsKLSAgbGFzdF9zZXRfYml0cmF0ZV9rYnBz
XyA9IGticHM7Ci0gIGxhc3Rfc2V0X2Zwc18gPSAoZnBzIDwgTUFYX1ZJREVPX0ZQUykgPyBmcHMg
OiBNQVhfVklERU9fRlBTOwotICB5dXZfc2l6ZV8gPSB3aWR0aF8gKiBoZWlnaHRfICogMyAvIDI7
Ci0gIGZyYW1lc19yZWNlaXZlZF8gPSAwOwotICBmcmFtZXNfZW5jb2RlZF8gPSAwOwotICBmcmFt
ZXNfZHJvcHBlZF9tZWRpYV9lbmNvZGVyXyA9IDA7Ci0gIGNvbnNlY3V0aXZlX2Z1bGxfcXVldWVf
ZnJhbWVfZHJvcHNfID0gMDsKLSAgY3VycmVudF90aW1lc3RhbXBfdXNfID0gMDsKLSAgc3RhdF9z
dGFydF90aW1lX21zXyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICBjdXJyZW50X2ZyYW1lc18gPSAw
OwotICBjdXJyZW50X2J5dGVzXyA9IDA7Ci0gIGN1cnJlbnRfYWNjX3FwXyA9IDA7Ci0gIGN1cnJl
bnRfZW5jb2RpbmdfdGltZV9tc18gPSAwOwotICBsYXN0X2lucHV0X3RpbWVzdGFtcF9tc18gPSAt
MTsKLSAgbGFzdF9vdXRwdXRfdGltZXN0YW1wX21zXyA9IC0xOwotICBvdXRwdXRfdGltZXN0YW1w
XyA9IDA7Ci0gIG91dHB1dF9yZW5kZXJfdGltZV9tc18gPSAwOwotICBpbnB1dF9mcmFtZV9pbmZv
c18uY2xlYXIoKTsKLSAgZHJvcF9uZXh0X2lucHV0X2ZyYW1lXyA9IGZhbHNlOwotICB1c2Vfc3Vy
ZmFjZV8gPSB1c2Vfc3VyZmFjZTsKLSAgZ29mXy5TZXRHb2ZJbmZvVlA5KFRlbXBvcmFsU3RydWN0
dXJlTW9kZTo6a1RlbXBvcmFsU3RydWN0dXJlTW9kZTEpOwotICBnb2ZfaWR4XyA9IDA7Ci0gIGxh
c3RfZnJhbWVfcmVjZWl2ZWRfbXNfID0gLTE7Ci0gIGZyYW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0
X2tleV8gPSBrTWluS2V5RnJhbWVJbnRlcnZhbDsKLQotICAvLyBXZSBlbmZvcmNlIG5vIGV4dHJh
IHN0cmlkZS9wYWRkaW5nIGluIHRoZSBmb3JtYXQgY3JlYXRpb24gc3RlcC4KLSAgY29uc3QgYm9v
bCBlbmNvZGVfc3RhdHVzID0gSmF2YV9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyX2luaXRFbmNvZGUo
Ci0gICAgICBqbmksIGpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sIGNvZGVjX3R5cGUsIHBy
b2ZpbGVfLCB3aWR0aCwgaGVpZ2h0LAotICAgICAga2JwcywgZnBzLCB1c2Vfc3VyZmFjZSk7Ci0K
LSAgaWYgKCFlbmNvZGVfc3RhdHVzKSB7Ci0gICAgQUxPR0UgPDwgIkZhaWxlZCB0byBjb25maWd1
cmUgZW5jb2Rlci4iOwotICAgIFByb2Nlc3NIV0Vycm9yKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxi
YWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9S
OwotICB9Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2Vw
dGlvbiBpbiBpbml0IGVuY29kZS4iOwotICAgIFByb2Nlc3NIV0Vycm9yKGZhbHNlIC8qIHJlc2V0
X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NP
REVDX0VSUk9SOwotICB9Ci0KLSAgaWYgKCF1c2Vfc3VyZmFjZSkgewotICAgIFNjb3BlZEphdmFM
b2NhbFJlZjxqb2JqZWN0QXJyYXk+IGlucHV0X2J1ZmZlcnMgPQotICAgICAgICBKYXZhX01lZGlh
Q29kZWNWaWRlb0VuY29kZXJfZ2V0SW5wdXRCdWZmZXJzKAotICAgICAgICAgICAgam5pLCBqX21l
ZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkg
ewotICAgICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBnZXQgaW5wdXQgYnVmZmVycy4iOwotICAg
ICAgUHJvY2Vzc0hXRXJyb3IoZmFsc2UgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUg
Ki8pOwotICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0KLSAg
ICBpZiAoSXNOdWxsKGpuaSwgaW5wdXRfYnVmZmVycykpIHsKLSAgICAgIFByb2Nlc3NIV0Vycm9y
KGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICAgIHJldHVy
biBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQotCi0gICAgc3dpdGNoIChKYXZhX01l
ZGlhQ29kZWNWaWRlb0VuY29kZXJfZ2V0Q29sb3JGb3JtYXQoCi0gICAgICAgIGpuaSwgal9tZWRp
YV9jb2RlY192aWRlb19lbmNvZGVyXykpIHsKLSAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIw
UGxhbmFyOgotICAgICAgICBlbmNvZGVyX2ZvdXJjY18gPSBsaWJ5dXY6OkZPVVJDQ19ZVTEyOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hcjoK
LSAgICAgIGNhc2UgQ09MT1JfUUNPTV9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyOgotICAgICAgY2Fz
ZSBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm06Ci0gICAgICAgIGVu
Y29kZXJfZm91cmNjXyA9IGxpYnl1djo6Rk9VUkNDX05WMTI7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIldyb25nIGNvbG9yIGZv
cm1hdC4iOwotICAgICAgICBQcm9jZXNzSFdFcnJvcihmYWxzZSAvKiByZXNldF9pZl9mYWxsYmFj
a191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJS
T1I7Ci0gICAgfQotCi0gICAgUlRDX0NIRUNLKGlucHV0X2J1ZmZlcnNfLmVtcHR5KCkpCi0gICAg
ICAgIDw8ICJVbmV4cGVjdGVkIGRvdWJsZSBJbml0RW5jb2RlIHdpdGhvdXQgUmVsZWFzZSI7Ci0g
ICAgaW5wdXRfYnVmZmVyc18gPSBKYXZhVG9OYXRpdmVWZWN0b3I8U2NvcGVkSmF2YUdsb2JhbFJl
Zjxqb2JqZWN0Pj4oCi0gICAgICAgIGpuaSwgaW5wdXRfYnVmZmVycywgW10oSk5JRW52KiBlbnYs
IGNvbnN0IEphdmFSZWY8am9iamVjdD4mIG8pIHsKLSAgICAgICAgICByZXR1cm4gU2NvcGVkSmF2
YUdsb2JhbFJlZjxqb2JqZWN0PihlbnYsIG8pOwotICAgICAgICB9KTsKLSAgICBmb3IgKGNvbnN0
IFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4mIGJ1ZmZlciA6IGlucHV0X2J1ZmZlcnNfKSB7
Ci0gICAgICBpbnQ2NF90IHl1dl9idWZmZXJfY2FwYWNpdHkgPSBqbmktPkdldERpcmVjdEJ1ZmZl
ckNhcGFjaXR5KGJ1ZmZlci5vYmooKSk7Ci0gICAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkg
ewotICAgICAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIGdldCBkaXJlY3QgYnVmZmVyIGNhcGFj
aXR5LiI7Ci0gICAgICAgIFByb2Nlc3NIV0Vycm9yKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxiYWNr
X3VuYXZhaWxhYmxlICovKTsKLSAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJP
UjsKLSAgICAgIH0KLSAgICAgIFJUQ19DSEVDSyh5dXZfYnVmZmVyX2NhcGFjaXR5ID49IHl1dl9z
aXplXykgPDwgIkluc3VmZmljaWVudCBjYXBhY2l0eSI7Ci0gICAgfQotICB9Ci0KLSAgewotI2lm
IFJUQ19EQ0hFQ0tfSVNfT04KLSAgICBydGM6OkNyaXRTY29wZSBsb2NrKCZpbml0ZWRfY3JpdF8p
OwotI2VuZGlmCi0gICAgaW5pdGVkXyA9IHRydWU7Ci0gIH0KLSAgd2Vha19mYWN0b3J5Xy5yZXNl
dChuZXcgcnRjOjpXZWFrUHRyRmFjdG9yeTxNZWRpYUNvZGVjVmlkZW9FbmNvZGVyPih0aGlzKSk7
Ci0gIGVuY29kZV90YXNrXy5yZXNldChuZXcgRW5jb2RlVGFzayh3ZWFrX2ZhY3RvcnlfLT5HZXRX
ZWFrUHRyKCkpKTsKLQotICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1pbnQz
Ml90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkVuY29kZSgKLSAgICBjb25zdCBWaWRlb0ZyYW1l
JiBmcmFtZSwKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxWaWRlb0ZyYW1lVHlwZT4qIGZyYW1lX3R5
cGVzKSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZlbmNvZGVyX3F1ZXVlX2NoZWNrZXJfKTsKLSAg
aWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVD
X0ZBTExCQUNLX1NPRlRXQVJFOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJ
Zk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwot
ICBjb25zdCBpbnQ2NF90IGZyYW1lX2lucHV0X3RpbWVfbXMgPSBydGM6OlRpbWVNaWxsaXMoKTsK
LQotICBpZiAoIWluaXRlZF8pIHsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX1VOSU5J
VElBTElaRUQ7Ci0gIH0KLQotICBib29sIHNlbmRfa2V5X2ZyYW1lID0gZmFsc2U7Ci0gIGlmIChj
b2RlY19tb2RlXyA9PSBWaWRlb0NvZGVjTW9kZTo6a1JlYWx0aW1lVmlkZW8pIHsKLSAgICArK2Zy
YW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0X2tleV87Ci0gICAgaW50NjRfdCBub3dfbXMgPSBydGM6
OlRpbWVNaWxsaXMoKTsKLSAgICBpZiAobGFzdF9mcmFtZV9yZWNlaXZlZF9tc18gIT0gLTEgJiYK
LSAgICAgICAgKG5vd19tcyAtIGxhc3RfZnJhbWVfcmVjZWl2ZWRfbXNfKSA+IGtGcmFtZURpZmZU
aHJlc2hvbGRNcykgewotICAgICAgLy8gQWRkIGxpbWl0IHRvIHByZXZlbnQgdHJpZ2dlcmluZyBh
IGtleSBmb3IgZXZlcnkgZnJhbWUgZm9yIHZlcnkgbG93Ci0gICAgICAvLyBmcmFtZXJhdGVzIChl
LmcuIGlmIGZyYW1lIGRpZmYgPiBrRnJhbWVEaWZmVGhyZXNob2xkTXMpLgotICAgICAgaWYgKGZy
YW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0X2tleV8gPiBrTWluS2V5RnJhbWVJbnRlcnZhbCkgewot
ICAgICAgICBBTE9HRCA8PCAiU2VuZCBrZXksIGZyYW1lIGRpZmY6ICIgPDwgKG5vd19tcyAtIGxh
c3RfZnJhbWVfcmVjZWl2ZWRfbXNfKTsKLSAgICAgICAgc2VuZF9rZXlfZnJhbWUgPSB0cnVlOwot
ICAgICAgfQotICAgICAgZnJhbWVzX3JlY2VpdmVkX3NpbmNlX2xhc3Rfa2V5XyA9IDA7Ci0gICAg
fQotICAgIGxhc3RfZnJhbWVfcmVjZWl2ZWRfbXNfID0gbm93X21zOwotICB9Ci0KLSAgZnJhbWVz
X3JlY2VpdmVkXysrOwotICBpZiAoIURlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmkpKSB7Ci0gICAg
aWYgKCFQcm9jZXNzSFdFcnJvcih0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxl
ICovKSkgewotICAgICAgcmV0dXJuIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA/IFdFQlJUQ19WSURF
T19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyYW1l
c19lbmNvZGVkXyA8IGtNYXhFbmNvZGVkTG9nRnJhbWVzKSB7Ci0gICAgQUxPR0QgPDwgIkVuY29k
ZXIgZnJhbWUgaW4gIyAiIDw8IChmcmFtZXNfcmVjZWl2ZWRfIC0gMSkKLSAgICAgICAgICA8PCAi
LiBUUzogIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KGN1cnJlbnRfdGltZXN0YW1wX3VzXyAvIDEwMDAp
Ci0gICAgICAgICAgPDwgIi4gUTogIiA8PCBpbnB1dF9mcmFtZV9pbmZvc18uc2l6ZSgpIDw8ICIu
IEZwczogIiA8PCBsYXN0X3NldF9mcHNfCi0gICAgICAgICAgPDwgIi4gS2JwczogIiA8PCBsYXN0
X3NldF9iaXRyYXRlX2ticHNfOwotICB9Ci0KLSAgaWYgKGRyb3BfbmV4dF9pbnB1dF9mcmFtZV8p
IHsKLSAgICBBTE9HVyA8PCAiRW5jb2RlciBkcm9wIGZyYW1lIC0gZmFpbGVkIGNhbGxiYWNrLiI7
Ci0gICAgZHJvcF9uZXh0X2lucHV0X2ZyYW1lXyA9IGZhbHNlOwotICAgIGN1cnJlbnRfdGltZXN0
YW1wX3VzXyArPSBydGM6OmtOdW1NaWNyb3NlY3NQZXJTZWMgLyBsYXN0X3NldF9mcHNfOwotICAg
IGZyYW1lc19kcm9wcGVkX21lZGlhX2VuY29kZXJfKys7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURF
T19DT0RFQ19PSzsKLSAgfQotCi0gIFJUQ19DSEVDSyhmcmFtZV90eXBlcy0+c2l6ZSgpID09IDEp
IDw8ICJVbmV4cGVjdGVkIHN0cmVhbSBjb3VudCI7Ci0KLSAgLy8gQ2hlY2sgaWYgd2UgYWNjdW11
bGF0ZWQgdG9vIG1hbnkgZnJhbWVzIGluIGVuY29kZXIgaW5wdXQgYnVmZmVycyBhbmQgZHJvcAot
ICAvLyBmcmFtZSBpZiBzby4KLSAgaWYgKGlucHV0X2ZyYW1lX2luZm9zXy5zaXplKCkgPiBNQVhf
RU5DT0RFUl9RX1NJWkUpIHsKLSAgICBBTE9HRCA8PCAiQWxyZWFkeSAiIDw8IGlucHV0X2ZyYW1l
X2luZm9zXy5zaXplKCkKLSAgICAgICAgICA8PCAiIGZyYW1lcyBpbiB0aGUgcXVldWUsIGRyb3Bw
aW5nIgotICAgICAgICAgICAgICIuIFRTOiAiCi0gICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50
PihjdXJyZW50X3RpbWVzdGFtcF91c18gLyAxMDAwKQotICAgICAgICAgIDw8ICIuIEZwczogIiA8
PCBsYXN0X3NldF9mcHNfCi0gICAgICAgICAgPDwgIi4gQ29uc2VjdXRpdmUgZHJvcHM6ICIgPDwg
Y29uc2VjdXRpdmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc187Ci0gICAgY3VycmVudF90aW1lc3Rh
bXBfdXNfICs9IHJ0Yzo6a051bU1pY3Jvc2Vjc1BlclNlYyAvIGxhc3Rfc2V0X2Zwc187Ci0gICAg
Y29uc2VjdXRpdmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc18rKzsKLSAgICBpZiAoY29uc2VjdXRp
dmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc18gPj0KLSAgICAgICAgRU5DT0RFUl9TVEFMTF9GUkFN
RURST1BfVEhSRVNIT0xEKSB7Ci0gICAgICBBTE9HRSA8PCAiRW5jb2RlciBnb3Qgc3R1Y2suIjsK
LSAgICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uRW5jb2RlKCk7Ci0gICAgfQotICAgIGZyYW1l
c19kcm9wcGVkX21lZGlhX2VuY29kZXJfKys7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RF
Q19PSzsKLSAgfQotICBjb25zZWN1dGl2ZV9mdWxsX3F1ZXVlX2ZyYW1lX2Ryb3BzXyA9IDA7Ci0K
LSAgcnRjOjpzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWVCdWZmZXI+IGlucHV0X2J1ZmZlcihmcmFt
ZS52aWRlb19mcmFtZV9idWZmZXIoKSk7Ci0KLSAgVmlkZW9GcmFtZSBpbnB1dF9mcmFtZSA9IFZp
ZGVvRnJhbWU6OkJ1aWxkZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRf
dmlkZW9fZnJhbWVfYnVmZmVyKGlucHV0X2J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuc2V0X3RpbWVzdGFtcF9ydHAoZnJhbWUudGltZXN0YW1wKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLnNldF90aW1lc3RhbXBfbXMoZnJhbWUucmVuZGVyX3RpbWVf
bXMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0X3JvdGF0aW9uKGZyYW1l
LnJvdGF0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldF9pZChmcmFt
ZS5pZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwotCi0gIGlm
ICghTWF5YmVSZWNvbmZpZ3VyZUVuY29kZXIoam5pLCBpbnB1dF9mcmFtZSkpIHsKLSAgICBBTE9H
RSA8PCAiRmFpbGVkIHRvIHJlY29uZmlndXJlIGVuY29kZXIuIjsKLSAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0KLSAgY29uc3QgYm9vbCBrZXlfZnJhbWUgPQotICAg
ICAgZnJhbWVfdHlwZXMtPmZyb250KCkgIT0gVmlkZW9GcmFtZVR5cGU6OmtWaWRlb0ZyYW1lRGVs
dGEgfHwKLSAgICAgIHNlbmRfa2V5X2ZyYW1lOwotICBib29sIGVuY29kZV9zdGF0dXMgPSB0cnVl
OwotCi0gIGludCBqX2lucHV0X2J1ZmZlcl9pbmRleCA9IC0xOwotICBpZiAoIXVzZV9zdXJmYWNl
XykgewotICAgIGpfaW5wdXRfYnVmZmVyX2luZGV4ID0gSmF2YV9NZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyX2RlcXVldWVJbnB1dEJ1ZmZlcigKLSAgICAgICAgam5pLCBqX21lZGlhX2NvZGVjX3ZpZGVv
X2VuY29kZXJfKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0Ug
PDwgIkV4Y2VwdGlvbiBpbiBkZXF1ZXUgaW5wdXQgYnVmZmVyLiI7Ci0gICAgICByZXR1cm4gUHJv
Y2Vzc0hXRXJyb3JPbkVuY29kZSgpOwotICAgIH0KLSAgICBpZiAoal9pbnB1dF9idWZmZXJfaW5k
ZXggPT0gLTEpIHsKLSAgICAgIC8vIFZpZGVvIGNvZGVjIGZhbGxzIGJlaGluZCAtIG5vIGlucHV0
IGJ1ZmZlciBhdmFpbGFibGUuCi0gICAgICBBTE9HVyA8PCAiRW5jb2RlciBkcm9wIGZyYW1lIC0g
bm8gaW5wdXQgYnVmZmVycyBhdmFpbGFibGUiOwotICAgICAgaWYgKGZyYW1lc19yZWNlaXZlZF8g
PiAxKSB7Ci0gICAgICAgIGN1cnJlbnRfdGltZXN0YW1wX3VzXyArPSBydGM6OmtOdW1NaWNyb3Nl
Y3NQZXJTZWMgLyBsYXN0X3NldF9mcHNfOwotICAgICAgICBmcmFtZXNfZHJvcHBlZF9tZWRpYV9l
bmNvZGVyXysrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW5wdXQgYnVmZmVycyBhcmUg
bm90IHJlYWR5IGFmdGVyIGNvZGVjIGluaXRpYWxpemF0aW9uLCBIVyBpcyBzdGlsbAotICAgICAg
ICAvLyBhbGxvY2F0aW5nIHRobWUgLSB0aGlzIGlzIGV4cGVjdGVkIGFuZCBzaG91bGQgbm90IHJl
c3VsdCBpbiBkcm9wCi0gICAgICAgIC8vIGZyYW1lIHJlcG9ydC4KLSAgICAgICAgZnJhbWVzX3Jl
Y2VpdmVkXyA9IDA7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09L
OyAgLy8gVE9ETyhmaXNjaG1hbik6IHNlZSB3ZWJydGMgYnVnIDI4ODcuCi0gICAgfSBlbHNlIGlm
IChqX2lucHV0X2J1ZmZlcl9pbmRleCA9PSAtMikgewotICAgICAgcmV0dXJuIFByb2Nlc3NIV0Vy
cm9yT25FbmNvZGUoKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoaW5wdXRfZnJhbWUudmlkZW9fZnJh
bWVfYnVmZmVyKCktPnR5cGUoKSAhPQotICAgICAgVmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05h
dGl2ZSkgewotICAgIGVuY29kZV9zdGF0dXMgPQotICAgICAgICBFbmNvZGVCeXRlQnVmZmVyKGpu
aSwga2V5X2ZyYW1lLCBpbnB1dF9mcmFtZSwgal9pbnB1dF9idWZmZXJfaW5kZXgpOwotICB9IGVs
c2UgewotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2ZyYW1lID0gTmF0aXZlVG9K
YXZhVmlkZW9GcmFtZShqbmksIGZyYW1lKTsKLSAgICBlbmNvZGVfc3RhdHVzID0KLSAgICAgICAg
RW5jb2RlSmF2YUZyYW1lKGpuaSwga2V5X2ZyYW1lLCBqX2ZyYW1lLCBqX2lucHV0X2J1ZmZlcl9p
bmRleCk7Ci0gICAgUmVsZWFzZUphdmFWaWRlb0ZyYW1lKGpuaSwgal9mcmFtZSk7Ci0gIH0KLQot
ICBpZiAoIWVuY29kZV9zdGF0dXMpIHsKLSAgICBBTE9HRSA8PCAiRmFpbGVkIGVuY29kZSBmcmFt
ZSB3aXRoIHRpbWVzdGFtcDogIiA8PCBpbnB1dF9mcmFtZS50aW1lc3RhbXAoKTsKLSAgICByZXR1
cm4gUHJvY2Vzc0hXRXJyb3JPbkVuY29kZSgpOwotICB9Ci0KLSAgLy8gU2F2ZSBpbnB1dCBpbWFn
ZSB0aW1lc3RhbXBzIGZvciBsYXRlciBvdXRwdXQuCi0gIGlucHV0X2ZyYW1lX2luZm9zXy5lbXBs
YWNlX2JhY2soZnJhbWVfaW5wdXRfdGltZV9tcywgaW5wdXRfZnJhbWUudGltZXN0YW1wKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZnJhbWUucmVuZGVyX3RpbWVf
bXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9mcmFtZS5yb3Rh
dGlvbigpKTsKLQotICBsYXN0X2lucHV0X3RpbWVzdGFtcF9tc18gPQotICAgICAgY3VycmVudF90
aW1lc3RhbXBfdXNfIC8gcnRjOjprTnVtTWljcm9zZWNzUGVyTWlsbGlzZWM7Ci0KLSAgY3VycmVu
dF90aW1lc3RhbXBfdXNfICs9IHJ0Yzo6a051bU1pY3Jvc2Vjc1BlclNlYyAvIGxhc3Rfc2V0X2Zw
c187Ci0KLSAgLy8gU3RhcnQgdGhlIHBvbGxpbmcgbG9vcCBpZiBpdCBpcyBub3Qgc3RhcnRlZC4K
LSAgaWYgKGVuY29kZV90YXNrXykgewotICAgIFRhc2tRdWV1ZUJhc2U6OkN1cnJlbnQoKS0+UG9z
dERlbGF5ZWRUYXNrKHN0ZDo6bW92ZShlbmNvZGVfdGFza18pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNZWRpYUNvZGVjUG9sbE1zKTsKLSAgfQotCi0g
IGlmICghRGVsaXZlclBlbmRpbmdPdXRwdXRzKGpuaSkpIHsKLSAgICByZXR1cm4gUHJvY2Vzc0hX
RXJyb3JPbkVuY29kZSgpOwotICB9Ci0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19
Ci0KLWJvb2wgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6TWF5YmVSZWNvbmZpZ3VyZUVuY29kZXIo
Sk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFZpZGVvRnJhbWUmIGZyYW1lKSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09O
KCZlbmNvZGVyX3F1ZXVlX2NoZWNrZXJfKTsKLQotICBib29sIGlzX3RleHR1cmUgPSBJc1RleHR1
cmVGcmFtZShqbmksIGZyYW1lKTsKLSAgY29uc3QgYm9vbCByZWNvbmZpZ3VyZV9kdWVfdG9fZm9y
bWF0ID0gaXNfdGV4dHVyZSAhPSB1c2Vfc3VyZmFjZV87Ci0gIGNvbnN0IGJvb2wgcmVjb25maWd1
cmVfZHVlX3RvX3NpemUgPQotICAgICAgZnJhbWUud2lkdGgoKSAhPSB3aWR0aF8gfHwgZnJhbWUu
aGVpZ2h0KCkgIT0gaGVpZ2h0XzsKLQotICBpZiAocmVjb25maWd1cmVfZHVlX3RvX2Zvcm1hdCkg
ewotICAgIEFMT0dEIDw8ICJSZWNvbmZpZ3VyZSBlbmNvZGVyIGR1ZSB0byBmb3JtYXQgY2hhbmdl
LiAiCi0gICAgICAgICAgPDwgKHVzZV9zdXJmYWNlXyA/ICJSZWNvbmZpZ3VyaW5nIHRvIGVuY29k
ZSBmcm9tIGJ5dGUgYnVmZmVyLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIlJlY29u
ZmlndXJpbmcgdG8gZW5jb2RlIGZyb20gdGV4dHVyZS4iKTsKLSAgICBMb2dTdGF0aXN0aWNzKHRy
dWUpOwotICB9Ci0gIGlmIChyZWNvbmZpZ3VyZV9kdWVfdG9fc2l6ZSkgewotICAgIEFMT0dXIDw8
ICJSZWNvbmZpZ3VyZSBlbmNvZGVyIGR1ZSB0byBmcmFtZSByZXNvbHV0aW9uIGNoYW5nZSBmcm9t
ICIKLSAgICAgICAgICA8PCB3aWR0aF8gPDwgIiB4ICIgPDwgaGVpZ2h0XyA8PCAiIHRvICIgPDwg
ZnJhbWUud2lkdGgoKSA8PCAiIHggIgotICAgICAgICAgIDw8IGZyYW1lLmhlaWdodCgpOwotICAg
IExvZ1N0YXRpc3RpY3ModHJ1ZSk7Ci0gICAgd2lkdGhfID0gZnJhbWUud2lkdGgoKTsKLSAgICBo
ZWlnaHRfID0gZnJhbWUuaGVpZ2h0KCk7Ci0gIH0KLQotICBpZiAoIXJlY29uZmlndXJlX2R1ZV90
b19mb3JtYXQgJiYgIXJlY29uZmlndXJlX2R1ZV90b19zaXplKQotICAgIHJldHVybiB0cnVlOwot
Ci0gIFJlbGVhc2UoKTsKLQotICByZXR1cm4gSW5pdEVuY29kZUludGVybmFsKHdpZHRoXywgaGVp
Z2h0XywgMCwgMCwgaXNfdGV4dHVyZSkgPT0KLSAgICAgICAgIFdFQlJUQ19WSURFT19DT0RFQ19P
SzsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpJc1RleHR1cmVGcmFtZShKTklF
bnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmlkZW9GcmFtZSYgZnJhbWUpIHsKLSAgaWYgKGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigp
LT50eXBlKCkgIT0gVmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICByZXR1cm4gSmF2YV9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyX2lzVGV4
dHVyZUJ1ZmZlcigKLSAgICAgIGpuaSwgc3RhdGljX2Nhc3Q8QW5kcm9pZFZpZGVvQnVmZmVyKj4o
ZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCkuZ2V0KCkpCi0gICAgICAgICAgICAgICAtPnZpZGVv
X2ZyYW1lX2J1ZmZlcigpKTsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpFbmNv
ZGVCeXRlQnVmZmVyKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wga2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZpZGVvRnJhbWUmIGZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dF9idWZmZXJfaW5k
ZXgpIHsKLSAgUlRDX0RDSEVDS19SVU5fT04oJmVuY29kZXJfcXVldWVfY2hlY2tlcl8pOwotICBS
VENfQ0hFQ0soIXVzZV9zdXJmYWNlXyk7Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPEk0MjBCdWZm
ZXJJbnRlcmZhY2U+IGk0MjBfYnVmZmVyID0KLSAgICAgIGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZl
cigpLT5Ub0k0MjAoKTsKLSAgaWYgKCFGaWxsSW5wdXRCdWZmZXIoam5pLCBpbnB1dF9idWZmZXJf
aW5kZXgsIGk0MjBfYnVmZmVyLT5EYXRhWSgpLAotICAgICAgICAgICAgICAgICAgICAgICBpNDIw
X2J1ZmZlci0+U3RyaWRlWSgpLCBpNDIwX2J1ZmZlci0+RGF0YVUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgaTQyMF9idWZmZXItPlN0cmlkZVUoKSwgaTQyMF9idWZmZXItPkRhdGFWKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgIGk0MjBfYnVmZmVyLT5TdHJpZGVWKCkpKSB7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIGJvb2wgZW5jb2RlX3N0YXR1cyA9IEphdmFfTWVkaWFDb2RlY1Zp
ZGVvRW5jb2Rlcl9lbmNvZGVCdWZmZXIoCi0gICAgICBqbmksIGpfbWVkaWFfY29kZWNfdmlkZW9f
ZW5jb2Rlcl8sIGtleV9mcmFtZSwgaW5wdXRfYnVmZmVyX2luZGV4LAotICAgICAgeXV2X3NpemVf
LCBjdXJyZW50X3RpbWVzdGFtcF91c18pOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewot
ICAgIEFMT0dFIDw8ICJFeGNlcHRpb24gaW4gZW5jb2RlIGJ1ZmZlci4iOwotICAgIFByb2Nlc3NI
V0Vycm9yKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gZW5jb2RlX3N0YXR1czsKLX0KLQotYm9vbCBNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyOjpGaWxsSW5wdXRCdWZmZXIoSk5JRW52KiBqbmksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfYnVmZmVyX2lu
ZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf
dCBjb25zdCogYnVmZmVyX3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RyaWRlX3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IGNvbnN0KiBidWZmZXJfdSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGVfdSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY29uc3QqIGJ1ZmZlcl92LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmlkZV92KSB7
Ci0gIHVpbnQ4X3QqIHl1dl9idWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigKLSAg
ICAgIGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhpbnB1dF9idWZmZXJzX1tpbnB1dF9idWZm
ZXJfaW5kZXhdLm9iaigpKSk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxP
R0UgPDwgIkV4Y2VwdGlvbiBpbiBnZXQgZGlyZWN0IGJ1ZmZlciBhZGRyZXNzLiI7Ci0gICAgUHJv
Y2Vzc0hXRXJyb3IodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIFJUQ19DSEVDSyh5dXZfYnVmZmVyKSA8PCAiSW5kaXJl
Y3QgYnVmZmVyPz8iOwotCi0gIFJUQ19DSEVDSyghbGlieXV2OjpDb252ZXJ0RnJvbUk0MjAoYnVm
ZmVyX3ksIHN0cmlkZV95LCBidWZmZXJfdSwgc3RyaWRlX3UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyX3YsIHN0cmlkZV92LCB5dXZfYnVmZmVyLCB3aWR0aF8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhfLCBoZWlnaHRfLCBl
bmNvZGVyX2ZvdXJjY18pKQotICAgICAgPDwgIkNvbnZlcnRGcm9tSTQyMCBmYWlsZWQiOwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpFbmNvZGVKYXZh
RnJhbWUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGtleV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGZyYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0X2J1ZmZlcl9pbmRleCkg
ewotICBib29sIGVuY29kZV9zdGF0dXMgPSBKYXZhX01lZGlhQ29kZWNWaWRlb0VuY29kZXJfZW5j
b2RlRnJhbWUoCi0gICAgICBqbmksIGpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sIGpsb25n
RnJvbVBvaW50ZXIodGhpcyksIGtleV9mcmFtZSwKLSAgICAgIGZyYW1lLCBpbnB1dF9idWZmZXJf
aW5kZXgsIGN1cnJlbnRfdGltZXN0YW1wX3VzXyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkp
KSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBlbmNvZGUgZnJhbWUuIjsKLSAgICBQcm9j
ZXNzSFdFcnJvcih0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIGVuY29kZV9zdGF0dXM7Ci19Ci0KLWludDMy
X3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNr
KAotICAgIEVuY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjaykgewotICBSVENfRENIRUNLX1JV
Tl9PTigmZW5jb2Rlcl9xdWV1ZV9jaGVja2VyXyk7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3Vy
cmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2Zy
YW1lKGpuaSk7Ci0gIGNhbGxiYWNrXyA9IGNhbGxiYWNrOwotICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX09LOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlJlbGVhc2Uo
KSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZlbmNvZGVyX3F1ZXVlX2NoZWNrZXJfKTsKLSAgaWYg
KCFpbml0ZWRfKSB7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotICBK
TklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBBTE9HRCA8PCAi
RW5jb2RlclJlbGVhc2U6IEZyYW1lcyByZWNlaXZlZDogIiA8PCBmcmFtZXNfcmVjZWl2ZWRfCi0g
ICAgICAgIDw8ICIuIEVuY29kZWQ6ICIgPDwgZnJhbWVzX2VuY29kZWRfCi0gICAgICAgIDw8ICIu
IERyb3BwZWQ6ICIgPDwgZnJhbWVzX2Ryb3BwZWRfbWVkaWFfZW5jb2Rlcl87Ci0gIGVuY29kZV90
YXNrXy5yZXNldChudWxscHRyKTsKLSAgd2Vha19mYWN0b3J5Xy5yZXNldChudWxscHRyKTsKLSAg
U2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgaW5wdXRfYnVmZmVy
c18uY2xlYXIoKTsKLSAgSmF2YV9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyX3JlbGVhc2Uoam5pLCBq
X21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfKTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkp
IHsKLSAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIHJlbGVhc2UuIjsKLSAgICBQcm9jZXNzSFdF
cnJvcihmYWxzZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgfQotICB7Ci0jaWYgUlRDX0RDSEVDS19J
U19PTgotICAgIHJ0Yzo6Q3JpdFNjb3BlIGxvY2soJmluaXRlZF9jcml0Xyk7Ci0jZW5kaWYKLSAg
ICBpbml0ZWRfID0gZmFsc2U7Ci0gIH0KLSAgdXNlX3N1cmZhY2VfID0gZmFsc2U7Ci0gIEFMT0dE
IDw8ICJFbmNvZGVyUmVsZWFzZSBkb25lLiI7Ci0gIC8vIEl0J3MgbGVnYWwgdG8gbW92ZSB0aGUg
ZW5jb2RlciB0byBhbm90aGVyIHF1ZXVlIG5vdy4KLSAgZW5jb2Rlcl9xdWV1ZV9jaGVja2VyXy5E
ZXRhY2goKTsKLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotdm9pZCBNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyOjpTZXRSYXRlcyhjb25zdCBSYXRlQ29udHJvbFBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMpIHsKLSAgUlRDX0RDSEVDS19SVU5fT04oJmVuY29kZXJfcXVldWVfY2hlY2tl
cl8pOwotICBjb25zdCB1aW50MzJfdCBuZXdfYml0X3JhdGUgPSBwYXJhbWV0ZXJzLmJpdHJhdGUu
Z2V0X3N1bV9rYnBzKCk7Ci0gIGlmIChzd19mYWxsYmFja19yZXF1aXJlZF8pCi0gICAgcmV0dXJu
OwotICB1aW50MzJfdCBmcmFtZV9yYXRlID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBhcmFtZXRl
cnMuZnJhbWVyYXRlX2ZwcyArIDAuNSk7Ci0gIGZyYW1lX3JhdGUgPQotICAgICAgKGZyYW1lX3Jh
dGUgPCBNQVhfQUxMT1dFRF9WSURFT19GUFMpID8gZnJhbWVfcmF0ZSA6IE1BWF9BTExPV0VEX1ZJ
REVPX0ZQUzsKLSAgaWYgKGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc18gPT0gbmV3X2JpdF9yYXRlICYm
IGxhc3Rfc2V0X2Zwc18gPT0gZnJhbWVfcmF0ZSkgewotICAgIHJldHVybjsKLSAgfQotICBKTklF
bnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJl
ZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBpZiAobmV3X2JpdF9yYXRlID4gMCkgewot
ICAgIGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc18gPSBuZXdfYml0X3JhdGU7Ci0gIH0KLSAgaWYgKGZy
YW1lX3JhdGUgPiAwKSB7Ci0gICAgbGFzdF9zZXRfZnBzXyA9IGZyYW1lX3JhdGU7Ci0gIH0KLSAg
Ym9vbCByZXQgPSBKYXZhX01lZGlhQ29kZWNWaWRlb0VuY29kZXJfc2V0UmF0ZXMoCi0gICAgICBq
bmksIGpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sCi0gICAgICBydGM6OmRjaGVja2VkX2Nh
c3Q8aW50PihsYXN0X3NldF9iaXRyYXRlX2ticHNfKSwKLSAgICAgIHJ0Yzo6ZGNoZWNrZWRfY2Fz
dDxpbnQ+KGxhc3Rfc2V0X2Zwc18pKTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkgfHwgIXJl
dCkgewotICAgIFByb2Nlc3NIV0Vycm9yKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFp
bGFibGUgKi8pOwotICB9Ci19Ci0KLVZpZGVvRW5jb2Rlcjo6RW5jb2RlckluZm8gTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2Rlcjo6R2V0RW5jb2RlckluZm8oKSBjb25zdCB7Ci0gIHJldHVybiBlbmNvZGVy
X2luZm9fOwotfQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkRlbGl2ZXJQZW5kaW5n
T3V0cHV0cyhKTklFbnYqIGpuaSkgewotICBSVENfRENIRUNLX1JVTl9PTigmZW5jb2Rlcl9xdWV1
ZV9jaGVja2VyXyk7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBTY29wZWRKYXZhTG9jYWxSZWY8
am9iamVjdD4gal9vdXRwdXRfYnVmZmVyX2luZm8gPQotICAgICAgICBKYXZhX01lZGlhQ29kZWNW
aWRlb0VuY29kZXJfZGVxdWV1ZU91dHB1dEJ1ZmZlcigKLSAgICAgICAgICAgIGpuaSwgal9tZWRp
YV9jb2RlY192aWRlb19lbmNvZGVyXyk7Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsK
LSAgICAgIEFMT0dFIDw8ICJFeGNlcHRpb24gaW4gc2V0IGRlcXVldWUgb3V0cHV0IGJ1ZmZlci4i
OwotICAgICAgUHJvY2Vzc0hXRXJyb3IodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWls
YWJsZSAqLyk7Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0K
LSAgICBpZiAoSXNOdWxsKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8pKSB7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpbnQgb3V0cHV0X2J1ZmZlcl9pbmRleCA9Ci0gICAgICAgIEphdmFf
T3V0cHV0QnVmZmVySW5mb19nZXRJbmRleChqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvKTsKLSAg
ICBpZiAob3V0cHV0X2J1ZmZlcl9pbmRleCA9PSAtMSkgewotICAgICAgUHJvY2Vzc0hXRXJyb3Io
dHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gR2V0IGtleSBhbmQgY29uZmlnIGZyYW1lIGZsYWdzLgot
ICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX291dHB1dF9idWZmZXIgPQotICAgICAg
ICBKYXZhX091dHB1dEJ1ZmZlckluZm9fZ2V0QnVmZmVyKGpuaSwgal9vdXRwdXRfYnVmZmVyX2lu
Zm8pOwotICAgIGJvb2wga2V5X2ZyYW1lID0KLSAgICAgICAgSmF2YV9PdXRwdXRCdWZmZXJJbmZv
X2lzS2V5RnJhbWUoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbyk7Ci0KLSAgICAvLyBHZXQgZnJh
bWUgdGltZXN0YW1wcyBmcm9tIGEgcXVldWUgLSBmb3Igbm9uIGNvbmZpZyBmcmFtZXMgb25seS4K
LSAgICBpbnQ2NF90IGVuY29kaW5nX3N0YXJ0X3RpbWVfbXMgPSAwOwotICAgIGludDY0X3QgZnJh
bWVfZW5jb2RpbmdfdGltZV9tcyA9IDA7Ci0gICAgbGFzdF9vdXRwdXRfdGltZXN0YW1wX21zXyA9
Ci0gICAgICAgIEphdmFfT3V0cHV0QnVmZmVySW5mb19nZXRQcmVzZW50YXRpb25UaW1lc3RhbXBV
cyhqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqX291dHB1dF9idWZmZXJfaW5mbykgLwotICAgICAgICBydGM6OmtOdW1NaWNyb3Nl
Y3NQZXJNaWxsaXNlYzsKLSAgICBpZiAoIWlucHV0X2ZyYW1lX2luZm9zXy5lbXB0eSgpKSB7Ci0g
ICAgICBjb25zdCBJbnB1dEZyYW1lSW5mbyYgZnJhbWVfaW5mbyA9IGlucHV0X2ZyYW1lX2luZm9z
Xy5mcm9udCgpOwotICAgICAgb3V0cHV0X3RpbWVzdGFtcF8gPSBmcmFtZV9pbmZvLmZyYW1lX3Rp
bWVzdGFtcDsKLSAgICAgIG91dHB1dF9yZW5kZXJfdGltZV9tc18gPSBmcmFtZV9pbmZvLmZyYW1l
X3JlbmRlcl90aW1lX21zOwotICAgICAgb3V0cHV0X3JvdGF0aW9uXyA9IGZyYW1lX2luZm8ucm90
YXRpb247Ci0gICAgICBlbmNvZGluZ19zdGFydF90aW1lX21zID0gZnJhbWVfaW5mby5lbmNvZGVf
c3RhcnRfdGltZTsKLSAgICAgIGlucHV0X2ZyYW1lX2luZm9zXy5wb3BfZnJvbnQoKTsKLSAgICB9
Ci0KLSAgICAvLyBFeHRyYWN0IHBheWxvYWQuCi0gICAgc2l6ZV90IHBheWxvYWRfc2l6ZSA9IGpu
aS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoal9vdXRwdXRfYnVmZmVyLm9iaigpKTsKLSAgICB1
aW50OF90KiBwYXlsb2FkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oCi0gICAgICAgIGpu
aS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX291dHB1dF9idWZmZXIub2JqKCkpKTsKLSAgICBp
ZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBn
ZXQgZGlyZWN0IGJ1ZmZlciBhZGRyZXNzLiI7Ci0gICAgICBQcm9jZXNzSFdFcnJvcih0cnVlIC8q
IHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICAgIHJldHVybiBXRUJSVENf
VklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGJhY2sgLSByZXR1cm4gZW5j
b2RlZCBmcmFtZS4KLSAgICBjb25zdCBWaWRlb0NvZGVjVHlwZSBjb2RlY190eXBlID0gR2V0Q29k
ZWNUeXBlKCk7Ci0gICAgRW5jb2RlZEltYWdlQ2FsbGJhY2s6OlJlc3VsdCBjYWxsYmFja19yZXN1
bHQoCi0gICAgICAgIEVuY29kZWRJbWFnZUNhbGxiYWNrOjpSZXN1bHQ6Ok9LKTsKLSAgICBpZiAo
Y2FsbGJhY2tfKSB7Ci0gICAgICBhdXRvIGltYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxFbmNvZGVk
SW1hZ2U+KCk7Ci0gICAgICAvLyBUaGUgY29ycmVzcG9uZGluZyAoYW5kIGRlcHJlY2F0ZWQpIGph
dmEgY2xhc3NlcyBhcmUgbm90IHByZXBhcmVkIGZvcgotICAgICAgLy8gbGF0ZSBjYWxscyB0byBy
ZWxlYXNlT3V0cHV0QnVmZmVyLCBzbyB0byBrZWVwIHRoaW5ncyBzaW1wbGUsIG1ha2UgYQotICAg
ICAgLy8gY29weSBoZXJlLCBhbmQgY2FsbCByZWxlYXNlT3V0cHV0QnVmZmVyIGJlZm9yZSByZXR1
cm5pbmcuCi0gICAgICBpbWFnZS0+U2V0RW5jb2RlZERhdGEoRW5jb2RlZEltYWdlQnVmZmVyOjpD
cmVhdGUocGF5bG9hZCwgcGF5bG9hZF9zaXplKSk7Ci0gICAgICBpbWFnZS0+X2VuY29kZWRXaWR0
aCA9IHdpZHRoXzsKLSAgICAgIGltYWdlLT5fZW5jb2RlZEhlaWdodCA9IGhlaWdodF87Ci0gICAg
ICBpbWFnZS0+U2V0VGltZXN0YW1wKG91dHB1dF90aW1lc3RhbXBfKTsKLSAgICAgIGltYWdlLT5j
YXB0dXJlX3RpbWVfbXNfID0gb3V0cHV0X3JlbmRlcl90aW1lX21zXzsKLSAgICAgIGltYWdlLT5y
b3RhdGlvbl8gPSBvdXRwdXRfcm90YXRpb25fOwotICAgICAgaW1hZ2UtPmNvbnRlbnRfdHlwZV8g
PSAoY29kZWNfbW9kZV8gPT0gVmlkZW9Db2RlY01vZGU6OmtTY3JlZW5zaGFyaW5nKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBWaWRlb0NvbnRlbnRUeXBlOjpTQ1JFRU5TSEFS
RQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWaWRlb0NvbnRlbnRUeXBlOjpV
TlNQRUNJRklFRDsKLSAgICAgIGltYWdlLT50aW1pbmdfLmZsYWdzID0gVmlkZW9TZW5kVGltaW5n
OjprSW52YWxpZDsKLSAgICAgIGltYWdlLT5fZnJhbWVUeXBlID0gKGtleV9mcmFtZSA/IFZpZGVv
RnJhbWVUeXBlOjprVmlkZW9GcmFtZUtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogVmlkZW9GcmFtZVR5cGU6OmtWaWRlb0ZyYW1lRGVsdGEpOwotICAgICAgaW1hZ2Ut
Pl9jb21wbGV0ZUZyYW1lID0gdHJ1ZTsKLSAgICAgIENvZGVjU3BlY2lmaWNJbmZvIGluZm87Ci0g
ICAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0gICAgICBpbmZvLmNvZGVjVHlw
ZSA9IGNvZGVjX3R5cGU7Ci0gICAgICBpZiAoY29kZWNfdHlwZSA9PSBrVmlkZW9Db2RlY1ZQOCkg
ewotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4Lm5vblJlZmVyZW5jZSA9IGZhbHNlOwot
ICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LnRlbXBvcmFsSWR4ID0ga05vVGVtcG9yYWxJ
ZHg7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDgubGF5ZXJTeW5jID0gZmFsc2U7Ci0g
ICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDgua2V5SWR4ID0ga05vS2V5SWR4OwotICAgICAg
fSBlbHNlIGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVjVlA5KSB7Ci0gICAgICAgIGlmIChr
ZXlfZnJhbWUpIHsKLSAgICAgICAgICBnb2ZfaWR4XyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg
aW5mby5jb2RlY1NwZWNpZmljLlZQOS5pbnRlcl9waWNfcHJlZGljdGVkID0ga2V5X2ZyYW1lID8g
ZmFsc2UgOiB0cnVlOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LmZsZXhpYmxlX21v
ZGUgPSBmYWxzZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5zc19kYXRhX2F2YWls
YWJsZSA9IGtleV9mcmFtZSA/IHRydWUgOiBmYWxzZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNp
ZmljLlZQOS50ZW1wb3JhbF9pZHggPSBrTm9UZW1wb3JhbElkeDsKLSAgICAgICAgaW5mby5jb2Rl
Y1NwZWNpZmljLlZQOS50ZW1wb3JhbF91cF9zd2l0Y2ggPSB0cnVlOwotICAgICAgICBpbmZvLmNv
ZGVjU3BlY2lmaWMuVlA5LmludGVyX2xheWVyX3ByZWRpY3RlZCA9IGZhbHNlOwotICAgICAgICBp
bmZvLmNvZGVjU3BlY2lmaWMuVlA5LmdvZl9pZHggPQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
dWludDhfdD4oZ29mX2lkeF8rKyAlIGdvZl8ubnVtX2ZyYW1lc19pbl9nb2YpOwotICAgICAgICBp
bmZvLmNvZGVjU3BlY2lmaWMuVlA5Lm51bV9zcGF0aWFsX2xheWVycyA9IDE7Ci0gICAgICAgIGlu
Zm8uY29kZWNTcGVjaWZpYy5WUDkuZmlyc3RfZnJhbWVfaW5fcGljdHVyZSA9IHRydWU7Ci0gICAg
ICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuZW5kX29mX3BpY3R1cmUgPSB0cnVlOwotICAgICAg
ICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNwYXRpYWxfbGF5ZXJfcmVzb2x1dGlvbl9wcmVzZW50
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNzX2RhdGFfYXZh
aWxhYmxlKSB7Ci0gICAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5zcGF0aWFsX2xheWVy
X3Jlc29sdXRpb25fcHJlc2VudCA9IHRydWU7Ci0gICAgICAgICAgaW5mby5jb2RlY1NwZWNpZmlj
LlZQOS53aWR0aFswXSA9IHdpZHRoXzsKLSAgICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5
LmhlaWdodFswXSA9IGhlaWdodF87Ci0gICAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5n
b2YuQ29weUdvZkluZm9WUDkoZ29mXyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8g
R2VuZXJhdGUgYSBoZWFkZXIgZGVzY3JpYmluZyBhIHNpbmdsZSBmcmFnbWVudC4KLSAgICAgIFJU
UEZyYWdtZW50YXRpb25IZWFkZXIgaGVhZGVyOwotICAgICAgbWVtc2V0KCZoZWFkZXIsIDAsIHNp
emVvZihoZWFkZXIpKTsKLSAgICAgIGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVjVlA4IHx8
IGNvZGVjX3R5cGUgPT0ga1ZpZGVvQ29kZWNWUDkpIHsKLSAgICAgICAgaGVhZGVyLlZlcmlmeUFu
ZEFsbG9jYXRlRnJhZ21lbnRhdGlvbkhlYWRlcigxKTsKLSAgICAgICAgaGVhZGVyLmZyYWdtZW50
YXRpb25PZmZzZXRbMF0gPSAwOwotICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlvbkxlbmd0aFsw
XSA9IGltYWdlLT5zaXplKCk7Ci0gICAgICAgIGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVj
VlA4KSB7Ci0gICAgICAgICAgaW50IHFwOwotICAgICAgICAgIGlmICh2cDg6OkdldFFwKHBheWxv
YWQsIHBheWxvYWRfc2l6ZSwgJnFwKSkgewotICAgICAgICAgICAgY3VycmVudF9hY2NfcXBfICs9
IHFwOwotICAgICAgICAgICAgaW1hZ2UtPnFwXyA9IHFwOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVjVlA5KSB7Ci0gICAgICAgICAgaW50
IHFwOwotICAgICAgICAgIGlmICh2cDk6OkdldFFwKHBheWxvYWQsIHBheWxvYWRfc2l6ZSwgJnFw
KSkgewotICAgICAgICAgICAgY3VycmVudF9hY2NfcXBfICs9IHFwOwotICAgICAgICAgICAgaW1h
Z2UtPnFwXyA9IHFwOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChj
b2RlY190eXBlID09IGtWaWRlb0NvZGVjSDI2NCkgewotICAgICAgICBoMjY0X2JpdHN0cmVhbV9w
YXJzZXJfLlBhcnNlQml0c3RyZWFtKHBheWxvYWQsIHBheWxvYWRfc2l6ZSk7Ci0gICAgICAgIGlu
dCBxcDsKLSAgICAgICAgaWYgKGgyNjRfYml0c3RyZWFtX3BhcnNlcl8uR2V0TGFzdFNsaWNlUXAo
JnFwKSkgewotICAgICAgICAgIGN1cnJlbnRfYWNjX3FwXyArPSBxcDsKLSAgICAgICAgICBpbWFn
ZS0+cXBfID0gcXA7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIEguMjY0IHNlYXJjaCBmb3Ig
c3RhcnQgY29kZXMuCi0gICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEgyNjQ6Ok5hbHVJbmRleD4g
bmFsdV9pZHhzID0KLSAgICAgICAgICAgIEgyNjQ6OkZpbmROYWx1SW5kaWNlcyhwYXlsb2FkLCBw
YXlsb2FkX3NpemUpOwotICAgICAgICBpZiAobmFsdV9pZHhzLmVtcHR5KCkpIHsKLSAgICAgICAg
ICBBTE9HRSA8PCAiU3RhcnQgY29kZSBpcyBub3QgZm91bmQhIjsKLSAgICAgICAgICBBTE9HRSA8
PCAiRGF0YToiIDw8IGltYWdlLT5kYXRhKClbMF0gPDwgIiAiIDw8IGltYWdlLT5kYXRhKClbMV0g
PDwgIiAiCi0gICAgICAgICAgICAgICAgPDwgaW1hZ2UtPmRhdGEoKVsyXSA8PCAiICIgPDwgaW1h
Z2UtPmRhdGEoKVszXSA8PCAiICIKLSAgICAgICAgICAgICAgICA8PCBpbWFnZS0+ZGF0YSgpWzRd
IDw8ICIgIiA8PCBpbWFnZS0+ZGF0YSgpWzVdOwotICAgICAgICAgIFByb2Nlc3NIV0Vycm9yKHRy
dWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBoZWFkZXIuVmVyaWZ5QW5kQWxsb2NhdGVGcmFn
bWVudGF0aW9uSGVhZGVyKG5hbHVfaWR4cy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG5hbHVfaWR4cy5zaXplKCk7IGkrKykgewotICAgICAgICAgIGhlYWRlci5mcmFn
bWVudGF0aW9uT2Zmc2V0W2ldID0gbmFsdV9pZHhzW2ldLnBheWxvYWRfc3RhcnRfb2Zmc2V0Owot
ICAgICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uTGVuZ3RoW2ldID0gbmFsdV9pZHhzW2ldLnBh
eWxvYWRfc2l6ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjYWxsYmFja19yZXN1bHQg
PSBjYWxsYmFja18tPk9uRW5jb2RlZEltYWdlKCppbWFnZSwgJmluZm8sICZoZWFkZXIpOwotICAg
IH0KLQotICAgIC8vIFJldHVybiBvdXRwdXQgYnVmZmVyIGJhY2sgdG8gdGhlIGVuY29kZXIuCi0g
ICAgYm9vbCBzdWNjZXNzID0gSmF2YV9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyX3JlbGVhc2VPdXRw
dXRCdWZmZXIoCi0gICAgICAgIGpuaSwgal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywgb3V0
cHV0X2J1ZmZlcl9pbmRleCk7Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkgfHwgIXN1Y2Nl
c3MpIHsKLSAgICAgIFByb2Nlc3NIV0Vycm9yKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5h
dmFpbGFibGUgKi8pOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFByaW50
IHBlciBmcmFtZSBzdGF0aXN0aWNzLgotICAgIGlmIChlbmNvZGluZ19zdGFydF90aW1lX21zID4g
MCkgewotICAgICAgZnJhbWVfZW5jb2RpbmdfdGltZV9tcyA9IHJ0Yzo6VGltZU1pbGxpcygpIC0g
ZW5jb2Rpbmdfc3RhcnRfdGltZV9tczsKLSAgICB9Ci0gICAgaWYgKGZyYW1lc19lbmNvZGVkXyA8
IGtNYXhFbmNvZGVkTG9nRnJhbWVzKSB7Ci0gICAgICBpbnQgY3VycmVudF9sYXRlbmN5ID0gc3Rh
dGljX2Nhc3Q8aW50PihsYXN0X2lucHV0X3RpbWVzdGFtcF9tc18gLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9vdXRwdXRfdGltZXN0YW1wX21zXyk7
Ci0gICAgICBBTE9HRCA8PCAiRW5jb2RlciBmcmFtZSBvdXQgIyAiIDw8IGZyYW1lc19lbmNvZGVk
XwotICAgICAgICAgICAgPDwgIi4gS2V5OiAiIDw8IGtleV9mcmFtZSA8PCAiLiBTaXplOiAiIDw8
IHBheWxvYWRfc2l6ZQotICAgICAgICAgICAgPDwgIi4gVFM6ICIgPDwgc3RhdGljX2Nhc3Q8aW50
PihsYXN0X291dHB1dF90aW1lc3RhbXBfbXNfKQotICAgICAgICAgICAgPDwgIi4gTGF0ZW5jeTog
IiA8PCBjdXJyZW50X2xhdGVuY3kKLSAgICAgICAgICAgIDw8ICIuIEVuY1RpbWU6ICIgPDwgZnJh
bWVfZW5jb2RpbmdfdGltZV9tczsKLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxhdGUgYW5kIHByaW50
IGVuY29kaW5nIHN0YXRpc3RpY3MgLSBldmVyeSAzIHNlY29uZHMuCi0gICAgZnJhbWVzX2VuY29k
ZWRfKys7Ci0gICAgY3VycmVudF9mcmFtZXNfKys7Ci0gICAgY3VycmVudF9ieXRlc18gKz0gcGF5
bG9hZF9zaXplOwotICAgIGN1cnJlbnRfZW5jb2RpbmdfdGltZV9tc18gKz0gZnJhbWVfZW5jb2Rp
bmdfdGltZV9tczsKLSAgICBMb2dTdGF0aXN0aWNzKGZhbHNlKTsKLQotICAgIC8vIEVycm9ycyBp
biBjYWxsYmFja19yZXN1bHQgYXJlIGN1cnJlbnRseSBpZ25vcmVkLgotICAgIGlmIChjYWxsYmFj
a19yZXN1bHQuZHJvcF9uZXh0X2ZyYW1lKQotICAgICAgZHJvcF9uZXh0X2lucHV0X2ZyYW1lXyA9
IHRydWU7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlcjo6TG9nU3RhdGlzdGljcyhib29sIGZvcmNlX2xvZykgewotICBpbnQgc3RhdGlzdGljX3Rp
bWVfbXMgPSBydGM6OlRpbWVNaWxsaXMoKSAtIHN0YXRfc3RhcnRfdGltZV9tc187Ci0gIGlmICgo
c3RhdGlzdGljX3RpbWVfbXMgPj0ga01lZGlhQ29kZWNTdGF0aXN0aWNzSW50ZXJ2YWxNcyB8fCBm
b3JjZV9sb2cpICYmCi0gICAgICBzdGF0aXN0aWNfdGltZV9tcyA+IDApIHsKLSAgICAvLyBQcmV2
ZW50IGRpdmlzaW9uIGJ5IHplcm8uCi0gICAgaW50IGN1cnJlbnRfZnJhbWVzX2RpdmlkZXIgPSBj
dXJyZW50X2ZyYW1lc18gIT0gMCA/IGN1cnJlbnRfZnJhbWVzXyA6IDE7Ci0KLSAgICBpbnQgY3Vy
cmVudF9iaXRyYXRlID0gY3VycmVudF9ieXRlc18gKiA4IC8gc3RhdGlzdGljX3RpbWVfbXM7Ci0g
ICAgaW50IGN1cnJlbnRfZnBzID0KLSAgICAgICAgKGN1cnJlbnRfZnJhbWVzXyAqIDEwMDAgKyBz
dGF0aXN0aWNfdGltZV9tcyAvIDIpIC8gc3RhdGlzdGljX3RpbWVfbXM7Ci0gICAgQUxPR0QgPDwg
IkVuY29kZWQgZnJhbWVzOiAiIDw8IGZyYW1lc19lbmNvZGVkXwotICAgICAgICAgIDw8ICIuIEJp
dHJhdGU6ICIgPDwgY3VycmVudF9iaXRyYXRlCi0gICAgICAgICAgPDwgIiwgdGFyZ2V0OiAiIDw8
IGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc18KLSAgICAgICAgICA8PCAiIGticHMiCi0gICAgICAgICAg
ICAgIiwgZnBzOiAiCi0gICAgICAgICAgPDwgY3VycmVudF9mcHMgPDwgIiwgZW5jVGltZTogIgot
ICAgICAgICAgIDw8IChjdXJyZW50X2VuY29kaW5nX3RpbWVfbXNfIC8gY3VycmVudF9mcmFtZXNf
ZGl2aWRlcikKLSAgICAgICAgICA8PCAiLiBRUDogIiA8PCAoY3VycmVudF9hY2NfcXBfIC8gY3Vy
cmVudF9mcmFtZXNfZGl2aWRlcikKLSAgICAgICAgICA8PCAiIGZvciBsYXN0ICIgPDwgc3RhdGlz
dGljX3RpbWVfbXMgPDwgIiBtcy4iOwotICAgIHN0YXRfc3RhcnRfdGltZV9tc18gPSBydGM6OlRp
bWVNaWxsaXMoKTsKLSAgICBjdXJyZW50X2ZyYW1lc18gPSAwOwotICAgIGN1cnJlbnRfYnl0ZXNf
ID0gMDsKLSAgICBjdXJyZW50X2FjY19xcF8gPSAwOwotICAgIGN1cnJlbnRfZW5jb2RpbmdfdGlt
ZV9tc18gPSAwOwotICB9Ci19Ci0KLVZpZGVvRW5jb2Rlcjo6U2NhbGluZ1NldHRpbmdzCi1NZWRp
YUNvZGVjVmlkZW9FbmNvZGVyOjpHZXRTY2FsaW5nU2V0dGluZ3NJbnRlcm5hbCgpIGNvbnN0IHsK
LSAgaWYgKCFzY2FsZV8pCi0gICAgcmV0dXJuIFZpZGVvRW5jb2Rlcjo6U2NhbGluZ1NldHRpbmdz
OjprT2ZmOwotCi0gIGNvbnN0IFZpZGVvQ29kZWNUeXBlIGNvZGVjX3R5cGUgPSBHZXRDb2RlY1R5
cGUoKTsKLSAgaWYgKGZpZWxkX3RyaWFsOjpJc0VuYWJsZWQoa0N1c3RvbVFQVGhyZXNob2xkc0Zp
ZWxkVHJpYWwpKSB7Ci0gICAgc3RkOjpzdHJpbmcgZXhwZXJpbWVudF9zdHJpbmcgPQotICAgICAg
ICBmaWVsZF90cmlhbDo6RmluZEZ1bGxOYW1lKGtDdXN0b21RUFRocmVzaG9sZHNGaWVsZFRyaWFs
KTsKLSAgICBBTE9HRCA8PCAiUVAgY3VzdG9tIHRocmVzaG9sZHM6ICIgPDwgZXhwZXJpbWVudF9z
dHJpbmcgPDwgIiBmb3IgY29kZWMgIgotICAgICAgICAgIDw8IGNvZGVjX3R5cGU7Ci0gICAgaW50
IGxvd192cDhfcXBfdGhyZXNob2xkOwotICAgIGludCBoaWdoX3ZwOF9xcF90aHJlc2hvbGQ7Ci0g
ICAgaW50IGxvd19oMjY0X3FwX3RocmVzaG9sZDsKLSAgICBpbnQgaGlnaF9oMjY0X3FwX3RocmVz
aG9sZDsKLSAgICBpbnQgcGFyc2VkX3ZhbHVlcyA9IHNzY2FuZihleHBlcmltZW50X3N0cmluZy5j
X3N0cigpLCAiRW5hYmxlZC0ldSwldSwldSwldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmxvd192cDhfcXBfdGhyZXNob2xkLCAmaGlnaF92cDhfcXBfdGhyZXNob2xkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb3dfaDI2NF9xcF90aHJlc2hvbGQsICZoaWdo
X2gyNjRfcXBfdGhyZXNob2xkKTsKLSAgICBpZiAocGFyc2VkX3ZhbHVlcyA9PSA0KSB7Ci0gICAg
ICBSVENfQ0hFQ0tfR1QoaGlnaF92cDhfcXBfdGhyZXNob2xkLCBsb3dfdnA4X3FwX3RocmVzaG9s
ZCk7Ci0gICAgICBSVENfQ0hFQ0tfR1QobG93X3ZwOF9xcF90aHJlc2hvbGQsIDApOwotICAgICAg
UlRDX0NIRUNLX0dUKGhpZ2hfaDI2NF9xcF90aHJlc2hvbGQsIGxvd19oMjY0X3FwX3RocmVzaG9s
ZCk7Ci0gICAgICBSVENfQ0hFQ0tfR1QobG93X2gyNjRfcXBfdGhyZXNob2xkLCAwKTsKLSAgICAg
IGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVjVlA4KSB7Ci0gICAgICAgIHJldHVybiBWaWRl
b0VuY29kZXI6OlNjYWxpbmdTZXR0aW5ncyhsb3dfdnA4X3FwX3RocmVzaG9sZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hfdnA4X3FwX3RocmVzaG9s
ZCk7Ci0gICAgICB9IGVsc2UgaWYgKGNvZGVjX3R5cGUgPT0ga1ZpZGVvQ29kZWNIMjY0KSB7Ci0g
ICAgICAgIHJldHVybiBWaWRlb0VuY29kZXI6OlNjYWxpbmdTZXR0aW5ncyhsb3dfaDI2NF9xcF90
aHJlc2hvbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
aWdoX2gyNjRfcXBfdGhyZXNob2xkKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKGNvZGVj
X3R5cGUgPT0ga1ZpZGVvQ29kZWNWUDgpIHsKLSAgICAvLyBTYW1lIGFzIGluIHZwOF9pbXBsLmNj
LgotICAgIHN0YXRpYyBjb25zdCBpbnQga0xvd1ZwOFFwVGhyZXNob2xkID0gMjk7Ci0gICAgc3Rh
dGljIGNvbnN0IGludCBrSGlnaFZwOFFwVGhyZXNob2xkID0gOTU7Ci0KLSAgICByZXR1cm4gVmlk
ZW9FbmNvZGVyOjpTY2FsaW5nU2V0dGluZ3Moa0xvd1ZwOFFwVGhyZXNob2xkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSGlnaFZwOFFwVGhyZXNob2xkKTsKLSAg
fSBlbHNlIGlmIChjb2RlY190eXBlID09IGtWaWRlb0NvZGVjVlA5KSB7Ci0gICAgLy8gUVAgaXMg
b2J0YWluZWQgZnJvbSBWUDktYml0c3RyZWFtLCBzbyB0aGUgUVAgY29ycmVzcG9uZHMgdG8gdGhl
IGJpdHN0cmVhbQotICAgIC8vIHJhbmdlIG9mIFswLCAyNTVdIGFuZCBub3QgdGhlIHVzZXItbGV2
ZWwgcmFuZ2Ugb2YgWzAsNjNdLgotICAgIHN0YXRpYyBjb25zdCBpbnQga0xvd1ZwOVFwVGhyZXNo
b2xkID0gOTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBrSGlnaFZwOVFwVGhyZXNob2xkID0gMTg1
OwotCi0gICAgcmV0dXJuIFZpZGVvRW5jb2Rlcjo6U2NhbGluZ1NldHRpbmdzKGtMb3dWcDlRcFRo
cmVzaG9sZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0hpZ2hW
cDlRcFRocmVzaG9sZCk7Ci0gIH0gZWxzZSBpZiAoY29kZWNfdHlwZSA9PSBrVmlkZW9Db2RlY0gy
NjQpIHsKLSAgICAvLyBTYW1lIGFzIGluIGgyNjRfZW5jb2Rlcl9pbXBsLmNjLgotICAgIHN0YXRp
YyBjb25zdCBpbnQga0xvd0gyNjRRcFRocmVzaG9sZCA9IDI0OwotICAgIHN0YXRpYyBjb25zdCBp
bnQga0hpZ2hIMjY0UXBUaHJlc2hvbGQgPSAzNzsKLQotICAgIHJldHVybiBWaWRlb0VuY29kZXI6
OlNjYWxpbmdTZXR0aW5ncyhrTG93SDI2NFFwVGhyZXNob2xkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrSGlnaEgyNjRRcFRocmVzaG9sZCk7Ci0gIH0KLSAgcmV0
dXJuIFZpZGVvRW5jb2Rlcjo6U2NhbGluZ1NldHRpbmdzOjprT2ZmOwotfQotCi1zdGF0aWMgdm9p
ZCBKTklfTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcl9GaWxsSW5wdXRCdWZmZXIoCi0gICAgSk5JRW52
KiBqbmksCi0gICAgamxvbmcgbmF0aXZlX2VuY29kZXIsCi0gICAgamludCBpbnB1dF9idWZmZXIs
Ci0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2J1ZmZlcl95LAotICAgIGppbnQg
c3RyaWRlX3ksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2J1ZmZlcl91LAot
ICAgIGppbnQgc3RyaWRlX3UsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2J1
ZmZlcl92LAotICAgIGppbnQgc3RyaWRlX3YpIHsKLSAgdWludDhfdCogYnVmZmVyX3kgPQotICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2J1
ZmZlcl95Lm9iaigpKSk7Ci0gIHVpbnQ4X3QqIGJ1ZmZlcl91ID0KLSAgICAgIHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9idWZmZXJfdS5vYmooKSkp
OwotICB1aW50OF90KiBidWZmZXJfdiA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5p
LT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfYnVmZmVyX3Yub2JqKCkpKTsKLQotICBSVENfRENI
RUNLKGJ1ZmZlcl95KSA8PCAiR2V0RGlyZWN0QnVmZmVyQWRkcmVzcyByZXR1cm5lZCBudWxsLiBF
bnN1cmUgdGhhdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJnZXREYXRhWSByZXR1cm5z
IGEgZGlyZWN0IEJ5dGVCdWZmZXIuIjsKLSAgUlRDX0RDSEVDSyhidWZmZXJfdSkgPDwgIkdldERp
cmVjdEJ1ZmZlckFkZHJlc3MgcmV0dXJuZWQgbnVsbC4gRW5zdXJlIHRoYXQgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZ2V0RGF0YVUgcmV0dXJucyBhIGRpcmVjdCBCeXRlQnVmZmVyLiI7
Ci0gIFJUQ19EQ0hFQ0soYnVmZmVyX3YpIDw8ICJHZXREaXJlY3RCdWZmZXJBZGRyZXNzIHJldHVy
bmVkIG51bGwuIEVuc3VyZSB0aGF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImdldERh
dGFWIHJldHVybnMgYSBkaXJlY3QgQnl0ZUJ1ZmZlci4iOwotCi0gIHJlaW50ZXJwcmV0X2Nhc3Q8
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcio+KG5hdGl2ZV9lbmNvZGVyKQotICAgICAgLT5GaWxsSW5w
dXRCdWZmZXIoam5pLCBpbnB1dF9idWZmZXIsIGJ1ZmZlcl95LCBzdHJpZGVfeSwgYnVmZmVyX3Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGVfdSwgYnVmZmVyX3YsIHN0cmlkZV92KTsK
LX0KLQotc3RhdGljIGpsb25nIEpOSV9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyX0NyZWF0ZUVuY29k
ZXIoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBm
b3JtYXQsCi0gICAgamJvb2xlYW4gaGFzX2VnbF9jb250ZXh0KSB7Ci0gIFNjb3BlZExvY2FsUmVm
RnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGVudik7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKG5l
dyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKAotICAgICAgZW52LCBWaWRlb0NvZGVjSW5mb1RvU2Rw
VmlkZW9Gb3JtYXQoZW52LCBmb3JtYXQpLCBoYXNfZWdsX2NvbnRleHQpKTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9h
bmRyb2lkX21ldHJpY3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbWV0cmljcy5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmM5OThkNDQwN2JhMDdlZTE5MzkwZDUzYmFjM2Y5Zjg5Y2FjZmIx
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2Fu
ZHJvaWRfbWV0cmljcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX21ldHJpY3Nfam5pL01ldHJpY3Nfam5pLmgiCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUg
InNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJzeXN0ZW1fd3Jh
cHBlcnMvaW5jbHVkZS9tZXRyaWNzLmgiCi0KLS8vIEVuYWJsZXMgY29sbGVjdGlvbiBvZiBuYXRp
dmUgaGlzdG9ncmFtcyBhbmQgY3JlYXRpbmcgdGhlbS4KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFt
ZXNwYWNlIGpuaSB7Ci0KLXN0YXRpYyB2b2lkIEpOSV9NZXRyaWNzX0VuYWJsZShKTklFbnYqIGpu
aSkgewotICBtZXRyaWNzOjpFbmFibGUoKTsKLX0KLQotLy8gR2V0cyBhbmQgY2xlYXJzIG5hdGl2
ZSBoaXN0b2dyYW1zLgotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBKTklfTWV0
cmljc19HZXRBbmRSZXNldChKTklFbnYqIGpuaSkgewotICBTY29wZWRKYXZhTG9jYWxSZWY8am9i
amVjdD4gal9tZXRyaWNzID0gSmF2YV9NZXRyaWNzX0NvbnN0cnVjdG9yKGpuaSk7Ci0KLSAgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxtZXRyaWNzOjpTYW1wbGVJbmZvPj4g
aGlzdG9ncmFtczsKLSAgbWV0cmljczo6R2V0QW5kUmVzZXQoJmhpc3RvZ3JhbXMpOwotICBmb3Ig
KGNvbnN0IGF1dG8mIGt2IDogaGlzdG9ncmFtcykgewotICAgIC8vIENyZWF0ZSBhbmQgYWRkIHNh
bXBsZXMgdG8gfEhpc3RvZ3JhbUluZm98LgotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0
PiBqX2luZm8gPSBKYXZhX0hpc3RvZ3JhbUluZm9fQ29uc3RydWN0b3IoCi0gICAgICAgIGpuaSwg
a3Yuc2Vjb25kLT5taW4sIGt2LnNlY29uZC0+bWF4LAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGt2LnNlY29uZC0+YnVja2V0X2NvdW50KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzYW1wbGUg
OiBrdi5zZWNvbmQtPnNhbXBsZXMpIHsKLSAgICAgIEphdmFfSGlzdG9ncmFtSW5mb19hZGRTYW1w
bGUoam5pLCBqX2luZm8sIHNhbXBsZS5maXJzdCwgc2FtcGxlLnNlY29uZCk7Ci0gICAgfQotICAg
IC8vIEFkZCB8SGlzdG9ncmFtSW5mb3wgdG8gfE1ldHJpY3N8LgotICAgIFNjb3BlZEphdmFMb2Nh
bFJlZjxqc3RyaW5nPiBqX25hbWUgPSBOYXRpdmVUb0phdmFTdHJpbmcoam5pLCBrdi5maXJzdCk7
Ci0gICAgSmF2YV9NZXRyaWNzX2FkZChqbmksIGpfbWV0cmljcywgal9uYW1lLCBqX2luZm8pOwot
ICB9Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpOwotICByZXR1cm4gal9tZXRyaWNzOwotfQotCi19
ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
am5pL2FuZHJvaWRfbmV0d29ya19tb25pdG9yLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lkX25ldHdvcmtfbW9u
aXRvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhMjNhODZjYmFjZDY3Yjdj
M2ZkODU5ZWM2YjA0YTlkMTkxY2RkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbmV0d29ya19tb25pdG9yLmNjCisrKyAvZGV2L251
bGwKQEAgLTEsNDg2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbmV0d29ya19tb25pdG9yLmgiCi0KLSNpbmNsdWRlIDxk
bGZjbi5oPgotI2lmbmRlZiBSVExEX05PTE9BRAotLy8gVGhpcyB3YXMgYWRkZWQgaW4gTG9sbGlw
b3AgdG8gZGxmY24uaAotI2RlZmluZSBSVExEX05PTE9BRCA0Ci0jZW5kaWYKLQotI2luY2x1ZGUg
InJ0Y19iYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRl
ICJydGNfYmFzZS9pcF9hZGRyZXNzLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5oIgot
I2luY2x1ZGUgInJ0Y19iYXNlL3N0cmluZ3Mvc3RyaW5nX2J1aWxkZXIuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9nZW5lcmF0ZWRfYmFzZV9qbmkvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0X2pu
aS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9iYXNlX2puaS9OZXR3b3JrTW9u
aXRvcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5
cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotI2lu
Y2x1ZGUgInN5c3RlbV93cmFwcGVycy9pbmNsdWRlL2ZpZWxkX3RyaWFsLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLWVudW0gQW5kcm9pZFNka1ZlcnNpb24gewot
ICBTREtfVkVSU0lPTl9MT0xMSVBPUCA9IDIxLAotICBTREtfVkVSU0lPTl9NQVJTSE1BTExPVyA9
IDIzCi19OwotCi1zdGF0aWMgTmV0d29ya1R5cGUgR2V0TmV0d29ya1R5cGVGcm9tSmF2YSgKLSAg
ICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX25ldHdvcmtfdHlw
ZSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoam5pLCBqX25l
dHdvcmtfdHlwZSk7Ci0gIGlmIChlbnVtX25hbWUgPT0gIkNPTk5FQ1RJT05fVU5LTk9XTiIpIHsK
LSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfVU5LTk9XTjsKLSAgfQotICBpZiAoZW51
bV9uYW1lID09ICJDT05ORUNUSU9OX0VUSEVSTkVUIikgewotICAgIHJldHVybiBOZXR3b3JrVHlw
ZTo6TkVUV09SS19FVEhFUk5FVDsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9O
X1dJRkkiKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX1dJRkk7Ci0gIH0KLSAg
aWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl80RyIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5
cGU6Ok5FVFdPUktfNEc7Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl8zRyIp
IHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfM0c7Ci0gIH0KLSAgaWYgKGVudW1f
bmFtZSA9PSAiQ09OTkVDVElPTl8yRyIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdP
UktfMkc7Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl9VTktOT1dOX0NFTExV
TEFSIikgewotICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19VTktOT1dOX0NFTExVTEFS
OwotICB9Ci0gIGlmIChlbnVtX25hbWUgPT0gIkNPTk5FQ1RJT05fQkxVRVRPT1RIIikgewotICAg
IHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19CTFVFVE9PVEg7Ci0gIH0KLSAgaWYgKGVudW1f
bmFtZSA9PSAiQ09OTkVDVElPTl9WUE4iKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRX
T1JLX1ZQTjsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OX05PTkUiKSB7Ci0g
ICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX05PTkU7Ci0gIH0KLSAgUlRDX05PVFJFQUNI
RUQoKTsKLSAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX1VOS05PV047Ci19Ci0KLXN0YXRp
YyBydGM6OkFkYXB0ZXJUeXBlIEFkYXB0ZXJUeXBlRnJvbU5ldHdvcmtUeXBlKE5ldHdvcmtUeXBl
IG5ldHdvcmtfdHlwZSkgewotICBzd2l0Y2ggKG5ldHdvcmtfdHlwZSkgewotICAgIGNhc2UgTkVU
V09SS19VTktOT1dOOgotICAgICAgcmV0dXJuIHJ0Yzo6QURBUFRFUl9UWVBFX1VOS05PV047Ci0g
ICAgY2FzZSBORVRXT1JLX0VUSEVSTkVUOgotICAgICAgcmV0dXJuIHJ0Yzo6QURBUFRFUl9UWVBF
X0VUSEVSTkVUOwotICAgIGNhc2UgTkVUV09SS19XSUZJOgotICAgICAgcmV0dXJuIHJ0Yzo6QURB
UFRFUl9UWVBFX1dJRkk7Ci0gICAgY2FzZSBORVRXT1JLXzRHOgotICAgIGNhc2UgTkVUV09SS18z
RzoKLSAgICBjYXNlIE5FVFdPUktfMkc6Ci0gICAgY2FzZSBORVRXT1JLX1VOS05PV05fQ0VMTFVM
QVI6Ci0gICAgICByZXR1cm4gcnRjOjpBREFQVEVSX1RZUEVfQ0VMTFVMQVI7Ci0gICAgY2FzZSBO
RVRXT1JLX1ZQTjoKLSAgICBjYXNlIE5FVFdPUktfQkxVRVRPT1RIOgotICAgICAgLy8gVGhlcmUg
aXMgbm8gY29ycmVzcG9uZGluZyBtYXBwaW5nIGZvciBibHVldG9vdGggbmV0d29ya3MuCi0gICAg
ICAvLyBNYXAgaXQgdG8gVlBOIGZvciBub3cuCi0gICAgICByZXR1cm4gcnRjOjpBREFQVEVSX1RZ
UEVfVlBOOwotICAgIGRlZmF1bHQ6Ci0gICAgICBSVENfTk9UUkVBQ0hFRCgpIDw8ICJJbnZhbGlk
IG5ldHdvcmsgdHlwZSAiIDw8IG5ldHdvcmtfdHlwZTsKLSAgICAgIHJldHVybiBydGM6OkFEQVBU
RVJfVFlQRV9VTktOT1dOOwotICB9Ci19Ci0KLXN0YXRpYyBydGM6OklQQWRkcmVzcyBKYXZhVG9O
YXRpdmVJcEFkZHJlc3MoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2Jq
ZWN0PiYgal9pcF9hZGRyZXNzKSB7Ci0gIHN0ZDo6dmVjdG9yPGludDhfdD4gYWRkcmVzcyA9Ci0g
ICAgICBKYXZhVG9OYXRpdmVCeXRlQXJyYXkoam5pLCBKYXZhX0lQQWRkcmVzc19nZXRBZGRyZXNz
KGpuaSwgal9pcF9hZGRyZXNzKSk7Ci0gIHNpemVfdCBhZGRyZXNzX2xlbmd0aCA9IGFkZHJlc3Mu
c2l6ZSgpOwotICBpZiAoYWRkcmVzc19sZW5ndGggPT0gNCkgewotICAgIC8vIElQNAotICAgIHN0
cnVjdCBpbl9hZGRyIGlwNF9hZGRyOwotICAgIG1lbWNweSgmaXA0X2FkZHIuc19hZGRyLCBhZGRy
ZXNzLmRhdGEoKSwgNCk7Ci0gICAgcmV0dXJuIHJ0Yzo6SVBBZGRyZXNzKGlwNF9hZGRyKTsKLSAg
fQotICAvLyBJUDYKLSAgUlRDX0NIRUNLKGFkZHJlc3NfbGVuZ3RoID09IDE2KTsKLSAgc3RydWN0
IGluNl9hZGRyIGlwNl9hZGRyOwotICBtZW1jcHkoaXA2X2FkZHIuczZfYWRkciwgYWRkcmVzcy5k
YXRhKCksIGFkZHJlc3NfbGVuZ3RoKTsKLSAgcmV0dXJuIHJ0Yzo6SVBBZGRyZXNzKGlwNl9hZGRy
KTsKLX0KLQotc3RhdGljIE5ldHdvcmtJbmZvcm1hdGlvbiBHZXROZXR3b3JrSW5mb3JtYXRpb25G
cm9tSmF2YSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBq
X25ldHdvcmtfaW5mbykgewotICBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya19pbmZvOwotICBu
ZXR3b3JrX2luZm8uaW50ZXJmYWNlX25hbWUgPSBKYXZhVG9TdGRTdHJpbmcoCi0gICAgICBqbmks
IEphdmFfTmV0d29ya0luZm9ybWF0aW9uX2dldE5hbWUoam5pLCBqX25ldHdvcmtfaW5mbykpOwot
ICBuZXR3b3JrX2luZm8uaGFuZGxlID0gc3RhdGljX2Nhc3Q8TmV0d29ya0hhbmRsZT4oCi0gICAg
ICBKYXZhX05ldHdvcmtJbmZvcm1hdGlvbl9nZXRIYW5kbGUoam5pLCBqX25ldHdvcmtfaW5mbykp
OwotICBuZXR3b3JrX2luZm8udHlwZSA9IEdldE5ldHdvcmtUeXBlRnJvbUphdmEoCi0gICAgICBq
bmksIEphdmFfTmV0d29ya0luZm9ybWF0aW9uX2dldENvbm5lY3Rpb25UeXBlKGpuaSwgal9uZXR3
b3JrX2luZm8pKTsKLSAgbmV0d29ya19pbmZvLnVuZGVybHlpbmdfdHlwZV9mb3JfdnBuID0gR2V0
TmV0d29ya1R5cGVGcm9tSmF2YSgKLSAgICAgIGpuaSwgSmF2YV9OZXR3b3JrSW5mb3JtYXRpb25f
Z2V0VW5kZXJseWluZ0Nvbm5lY3Rpb25UeXBlRm9yVnBuKAotICAgICAgICAgICAgICAgam5pLCBq
X25ldHdvcmtfaW5mbykpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBqX2lw
X2FkZHJlc3NlcyA9Ci0gICAgICBKYXZhX05ldHdvcmtJbmZvcm1hdGlvbl9nZXRJcEFkZHJlc3Nl
cyhqbmksIGpfbmV0d29ya19pbmZvKTsKLSAgbmV0d29ya19pbmZvLmlwX2FkZHJlc3NlcyA9IEph
dmFUb05hdGl2ZVZlY3RvcjxydGM6OklQQWRkcmVzcz4oCi0gICAgICBqbmksIGpfaXBfYWRkcmVz
c2VzLCAmSmF2YVRvTmF0aXZlSXBBZGRyZXNzKTsKLSAgcmV0dXJuIG5ldHdvcmtfaW5mbzsKLX0K
LQotc3RhdGljIGJvb2wgQWRkcmVzc01hdGNoKGNvbnN0IHJ0Yzo6SVBBZGRyZXNzJiBpcDEsIGNv
bnN0IHJ0Yzo6SVBBZGRyZXNzJiBpcDIpIHsKLSAgaWYgKGlwMS5mYW1pbHkoKSAhPSBpcDIuZmFt
aWx5KCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKGlwMS5mYW1pbHkoKSA9PSBB
Rl9JTkVUKSB7Ci0gICAgcmV0dXJuIGlwMS5pcHY0X2FkZHJlc3MoKS5zX2FkZHIgPT0gaXAyLmlw
djRfYWRkcmVzcygpLnNfYWRkcjsKLSAgfQotICBpZiAoaXAxLmZhbWlseSgpID09IEFGX0lORVQ2
KSB7Ci0gICAgLy8gVGhlIGxhc3QgNjQtYml0cyBvZiBhbiBpcHY2IGFkZHJlc3MgYXJlIHRlbXBv
cmFyeSBhZGRyZXNzIGFuZCBpdCBjb3VsZAotICAgIC8vIGNoYW5nZSBvdmVyIHRpbWUuIFNvIHdl
IG9ubHkgY29tcGFyZSB0aGUgZmlyc3QgNjQtYml0cy4KLSAgICByZXR1cm4gbWVtY21wKGlwMS5p
cHY2X2FkZHJlc3MoKS5zNl9hZGRyLCBpcDIuaXB2Nl9hZGRyZXNzKCkuczZfYWRkciwKLSAgICAg
ICAgICAgICAgICAgIHNpemVvZihpbjZfYWRkcikgLyAyKSA9PSAwOwotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotTmV0d29ya0luZm9ybWF0aW9uOjpOZXR3b3JrSW5mb3JtYXRpb24oKSA9IGRl
ZmF1bHQ7Ci0KLU5ldHdvcmtJbmZvcm1hdGlvbjo6TmV0d29ya0luZm9ybWF0aW9uKGNvbnN0IE5l
dHdvcmtJbmZvcm1hdGlvbiYpID0gZGVmYXVsdDsKLQotTmV0d29ya0luZm9ybWF0aW9uOjpOZXR3
b3JrSW5mb3JtYXRpb24oTmV0d29ya0luZm9ybWF0aW9uJiYpID0gZGVmYXVsdDsKLQotTmV0d29y
a0luZm9ybWF0aW9uOjp+TmV0d29ya0luZm9ybWF0aW9uKCkgPSBkZWZhdWx0OwotCi1OZXR3b3Jr
SW5mb3JtYXRpb24mIE5ldHdvcmtJbmZvcm1hdGlvbjo6b3BlcmF0b3I9KGNvbnN0IE5ldHdvcmtJ
bmZvcm1hdGlvbiYpID0KLSAgICBkZWZhdWx0OwotCi1OZXR3b3JrSW5mb3JtYXRpb24mIE5ldHdv
cmtJbmZvcm1hdGlvbjo6b3BlcmF0b3I9KE5ldHdvcmtJbmZvcm1hdGlvbiYmKSA9Ci0gICAgZGVm
YXVsdDsKLQotc3RkOjpzdHJpbmcgTmV0d29ya0luZm9ybWF0aW9uOjpUb1N0cmluZygpIGNvbnN0
IHsKLSAgcnRjOjpTdHJpbmdCdWlsZGVyIHNzOwotICBzcyA8PCAiTmV0SW5mb1tuYW1lICIgPDwg
aW50ZXJmYWNlX25hbWUgPDwgIjsgaGFuZGxlICIgPDwgaGFuZGxlIDw8ICI7IHR5cGUgIgotICAg
ICA8PCB0eXBlOwotICBpZiAodHlwZSA9PSBORVRXT1JLX1ZQTikgewotICAgIHNzIDw8ICI7IHVu
ZGVybHlpbmdfdHlwZV9mb3JfdnBuICIgPDwgdW5kZXJseWluZ190eXBlX2Zvcl92cG47Ci0gIH0K
LSAgc3MgPDwgIjsgYWRkcmVzcyI7Ci0gIGZvciAoY29uc3QgcnRjOjpJUEFkZHJlc3MmIGFkZHJl
c3MgOiBpcF9hZGRyZXNzZXMpIHsKLSAgICBzcyA8PCAiICIgPDwgYWRkcmVzcy5Ub1N0cmluZygp
OwotICB9Ci0gIHNzIDw8ICJdIjsKLSAgcmV0dXJuIHNzLlJlbGVhc2UoKTsKLX0KLQotQW5kcm9p
ZE5ldHdvcmtNb25pdG9yOjpBbmRyb2lkTmV0d29ya01vbml0b3IoCi0gICAgSk5JRW52KiBlbnYs
Ci0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9hcHBsaWNhdGlvbl9jb250ZXh0KQotICAg
IDogYW5kcm9pZF9zZGtfaW50XyhKYXZhX05ldHdvcmtNb25pdG9yX2FuZHJvaWRTZGtJbnQoZW52
KSksCi0gICAgICBqX2FwcGxpY2F0aW9uX2NvbnRleHRfKGVudiwgal9hcHBsaWNhdGlvbl9jb250
ZXh0KSwKLSAgICAgIGpfbmV0d29ya19tb25pdG9yXyhlbnYsIEphdmFfTmV0d29ya01vbml0b3Jf
Z2V0SW5zdGFuY2UoZW52KSkge30KLQotQW5kcm9pZE5ldHdvcmtNb25pdG9yOjp+QW5kcm9pZE5l
dHdvcmtNb25pdG9yKCkgPSBkZWZhdWx0OwotCi12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6
U3RhcnQoKSB7Ci0gIFJUQ19DSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBp
ZiAoc3RhcnRlZF8pIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgc3RhcnRlZF8gPSB0cnVlOwotICBm
aW5kX25ldHdvcmtfaGFuZGxlX3dpdGhvdXRfaXB2Nl90ZW1wb3JhcnlfcGFydF8gPQotICAgICAg
d2VicnRjOjpmaWVsZF90cmlhbDo6SXNFbmFibGVkKAotICAgICAgICAgICJXZWJSVEMtRmluZE5l
dHdvcmtIYW5kbGVXaXRob3V0SXB2NlRlbXBvcmFyeVBhcnQiKTsKLQotICAvLyBUaGlzIGlzIGtp
bmQgb2YgbWFnaWMgYmVoYXZpb3IsIGJ1dCBkb2luZyB0aGlzIGFsbG93cyB0aGUgU29ja2V0U2Vy
dmVyIHRvCi0gIC8vIHVzZSB0aGlzIGFzIGEgTmV0d29ya0JpbmRlciB0byBiaW5kIHNvY2tldHMg
b24gYSBwYXJ0aWN1bGFyIG5ldHdvcmsgd2hlbgotICAvLyBpdCBjcmVhdGVzIHNvY2tldHMuCi0g
IHdvcmtlcl90aHJlYWQoKS0+c29ja2V0c2VydmVyKCktPnNldF9uZXR3b3JrX2JpbmRlcih0aGlz
KTsKLQotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBK
YXZhX05ldHdvcmtNb25pdG9yX3N0YXJ0TW9uaXRvcmluZygKLSAgICAgIGVudiwgal9uZXR3b3Jr
X21vbml0b3JfLCBqX2FwcGxpY2F0aW9uX2NvbnRleHRfLCBqbG9uZ0Zyb21Qb2ludGVyKHRoaXMp
KTsKLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6OlN0b3AoKSB7Ci0gIFJUQ19DSEVD
Syh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoIXN0YXJ0ZWRfKSB7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIHN0YXJ0ZWRfID0gZmFsc2U7Ci0gIGZpbmRfbmV0d29ya19oYW5kbGVf
d2l0aG91dF9pcHY2X3RlbXBvcmFyeV9wYXJ0XyA9IGZhbHNlOwotCi0gIC8vIE9uY2UgdGhlIG5l
dHdvcmsgbW9uaXRvciBzdG9wcywgaXQgd2lsbCBjbGVhciBhbGwgbmV0d29yayBpbmZvcm1hdGlv
biBhbmQKLSAgLy8gaXQgd29uJ3QgZmluZCB0aGUgbmV0d29yayBoYW5kbGUgdG8gYmluZCBhbnl3
YXkuCi0gIGlmICh3b3JrZXJfdGhyZWFkKCktPnNvY2tldHNlcnZlcigpLT5uZXR3b3JrX2JpbmRl
cigpID09IHRoaXMpIHsKLSAgICB3b3JrZXJfdGhyZWFkKCktPnNvY2tldHNlcnZlcigpLT5zZXRf
bmV0d29ya19iaW5kZXIobnVsbHB0cik7Ci0gIH0KLQotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1
cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBKYXZhX05ldHdvcmtNb25pdG9yX3N0b3BNb25pdG9y
aW5nKGVudiwgal9uZXR3b3JrX21vbml0b3JfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpsb25nRnJvbVBvaW50ZXIodGhpcykpOwotCi0gIG5ldHdvcmtfaGFuZGxlX2J5
X2FkZHJlc3NfLmNsZWFyKCk7Ci0gIG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfLmNsZWFyKCk7Ci19
Ci0KLS8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IHRha2VuIGZyb20gVURQU29ja2V0
UG9zaXg6OkJpbmRUb05ldHdvcmsgaW4KLS8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9t
aXVtL3NyYy9uZXQvdWRwL3VkcF9zb2NrZXRfcG9zaXguY2MKLXJ0Yzo6TmV0d29ya0JpbmRpbmdS
ZXN1bHQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpCaW5kU29ja2V0VG9OZXR3b3JrKAotICAgIGlu
dCBzb2NrZXRfZmQsCi0gICAgY29uc3QgcnRjOjpJUEFkZHJlc3MmIGFkZHJlc3MpIHsKLSAgUlRD
X0NIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0KLSAgLy8gQW5kcm9pZCBwcmlv
ciB0byBMb2xsaXBvcCBkaWRuJ3QgaGF2ZSBzdXBwb3J0IGZvciBiaW5kaW5nIHNvY2tldHMgdG8K
LSAgLy8gbmV0d29ya3MuIFRoaXMgbWF5IGFsc28gb2NjdXIgaWYgdGhlcmUgaXMgbm8gY29ubmVj
dGl2aXR5IG1hbmFnZXIKLSAgLy8gc2VydmljZS4KLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJy
ZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgY29uc3QgYm9vbCBuZXR3b3JrX2JpbmRpbmdfc3VwcG9y
dGVkID0KLSAgICAgIEphdmFfTmV0d29ya01vbml0b3JfbmV0d29ya0JpbmRpbmdTdXBwb3J0ZWQo
ZW52LCBqX25ldHdvcmtfbW9uaXRvcl8pOwotICBpZiAoIW5ldHdvcmtfYmluZGluZ19zdXBwb3J0
ZWQpIHsKLSAgICBSVENfTE9HKExTX1dBUk5JTkcpCi0gICAgICAgIDw8ICJCaW5kU29ja2V0VG9O
ZXR3b3JrIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSAiCi0gICAgICAgICAgICIo
QW5kcm9pZCBTREs6ICIKLSAgICAgICAgPDwgYW5kcm9pZF9zZGtfaW50XyA8PCAiKSI7Ci0gICAg
cmV0dXJuIHJ0Yzo6TmV0d29ya0JpbmRpbmdSZXN1bHQ6Ok5PVF9JTVBMRU1FTlRFRDsKLSAgfQot
Ci0gIGFic2w6Om9wdGlvbmFsPE5ldHdvcmtIYW5kbGU+IG5ldHdvcmtfaGFuZGxlID0KLSAgICAg
IEZpbmROZXR3b3JrSGFuZGxlRnJvbUFkZHJlc3MoYWRkcmVzcyk7Ci0gIGlmICghbmV0d29ya19o
YW5kbGUpIHsKLSAgICByZXR1cm4gcnRjOjpOZXR3b3JrQmluZGluZ1Jlc3VsdDo6QUREUkVTU19O
T1RfRk9VTkQ7Ci0gIH0KLQotICBpZiAoKm5ldHdvcmtfaGFuZGxlID09IDAgLyogTkVUV09SS19V
TlNQRUNJRklFRCAqLykgewotICAgIHJldHVybiBydGM6Ok5ldHdvcmtCaW5kaW5nUmVzdWx0OjpO
T1RfSU1QTEVNRU5URUQ7Ci0gIH0KLQotICBpbnQgcnYgPSAwOwotICBpZiAoYW5kcm9pZF9zZGtf
aW50XyA+PSBTREtfVkVSU0lPTl9NQVJTSE1BTExPVykgewotICAgIC8vIFNlZSBkZWNsYXJhdGlv
biBvZiBhbmRyb2lkX3NldHNvY2tuZXR3b3JrKCkgaGVyZToKLSAgICAvLyBodHRwOi8vYW5kcm9p
ZHhyZWYuY29tLzYuMC4wX3IxL3hyZWYvZGV2ZWxvcG1lbnQvbmRrL3BsYXRmb3Jtcy9hbmRyb2lk
LU0vaW5jbHVkZS9hbmRyb2lkL211bHRpbmV0d29yay5oIzY1Ci0gICAgLy8gRnVuY3Rpb24gY2Fu
bm90IGJlIGNhbGxlZCBkaXJlY3RseSBhcyBpdCB3aWxsIGNhdXNlIGFwcCB0byBmYWlsIHRvIGxv
YWQKLSAgICAvLyBvbiBwcmUtbWFyc2htYWxsb3cgZGV2aWNlcy4KLSAgICB0eXBlZGVmIGludCAo
Kk1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCkoTmV0d29ya0hhbmRsZSBuZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrZXQp
OwotICAgIHN0YXRpYyBNYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQgbWFyc2htYWxsb3dT
ZXROZXR3b3JrRm9yU29ja2V0OwotICAgIC8vIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLCBidXQg
d2UgYXJlIHJ1bm5pbmcgdGhpcyBvbmx5IG9uIHRoZSB3b3JrZXIKLSAgICAvLyB0aHJlYWQuCi0g
ICAgaWYgKCFtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQpIHsKLSAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nIGFuZHJvaWRfbmF0aXZlX2xpYl9wYXRoID0gImxpYmFuZHJvaWQuc28iOwotICAg
ICAgdm9pZCogbGliID0gZGxvcGVuKGFuZHJvaWRfbmF0aXZlX2xpYl9wYXRoLmNfc3RyKCksIFJU
TERfTk9XKTsKLSAgICAgIGlmIChsaWIgPT0gbnVsbHB0cikgewotICAgICAgICBSVENfTE9HKExT
X0VSUk9SKSA8PCAiTGlicmFyeSAiIDw8IGFuZHJvaWRfbmF0aXZlX2xpYl9wYXRoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8ICIgbm90IGZvdW5kISI7Ci0gICAgICAgIHJldHVybiBydGM6
Ok5ldHdvcmtCaW5kaW5nUmVzdWx0OjpOT1RfSU1QTEVNRU5URUQ7Ci0gICAgICB9Ci0gICAgICBt
YXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQgPQotICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8TWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0PigKLSAgICAgICAgICAgICAgZGxzeW0o
bGliLCAiYW5kcm9pZF9zZXRzb2NrbmV0d29yayIpKTsKLSAgICB9Ci0gICAgaWYgKCFtYXJzaG1h
bGxvd1NldE5ldHdvcmtGb3JTb2NrZXQpIHsKLSAgICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJT
eW1ib2wgbWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0IGlzIG5vdCBmb3VuZCI7Ci0gICAg
ICByZXR1cm4gcnRjOjpOZXR3b3JrQmluZGluZ1Jlc3VsdDo6Tk9UX0lNUExFTUVOVEVEOwotICAg
IH0KLSAgICBydiA9IG1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCgqbmV0d29ya19oYW5k
bGUsIHNvY2tldF9mZCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24g
QW5kcm9pZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBidXQgaXQgd29uJ3QKLSAgICAvLyBjaGFu
Z2UgYmVjYXVzZSBMb2xsaXBvcCBpcyBhbHJlYWR5IHJlbGVhc2VkLgotICAgIHR5cGVkZWYgaW50
ICgqTG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0KSh1bnNpZ25lZCBuZXQsIGludCBzb2NrZXQp
OwotICAgIHN0YXRpYyBMb2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQgbG9sbGlwb3BTZXROZXR3
b3JrRm9yU29ja2V0OwotICAgIC8vIFRoaXMgaXMgbm90IHRocmVhZHNhZmUsIGJ1dCB3ZSBhcmUg
cnVubmluZyB0aGlzIG9ubHkgb24gdGhlIHdvcmtlcgotICAgIC8vIHRocmVhZC4KLSAgICBpZiAo
IWxvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldCkgewotICAgICAgLy8gQW5kcm9pZCdzIG5ldGQg
Y2xpZW50IGxpYnJhcnkgc2hvdWxkIGFsd2F5cyBiZSBsb2FkZWQgaW4gb3VyIGFkZHJlc3MKLSAg
ICAgIC8vIHNwYWNlIGFzIGl0IHNoaW1zIGxpYmMgZnVuY3Rpb25zIGxpa2UgY29ubmVjdCgpLgot
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmV0X2xpYnJhcnlfcGF0aCA9ICJsaWJuZXRkX2NsaWVu
dC5zbyI7Ci0gICAgICAvLyBVc2UgUlRMRF9OT1cgdG8gbWF0Y2ggQW5kcm9pZCdzIHByaW9yIGxv
YWRpbmcgb2YgdGhlIGxpYnJhcnk6Ci0gICAgICAvLyBodHRwOi8vYW5kcm9pZHhyZWYuY29tLzYu
MC4wX3I1L3hyZWYvYmlvbmljL2xpYmMvYmlvbmljL05ldGRDbGllbnQuY3BwIzM3Ci0gICAgICAv
LyBVc2UgUlRMRF9OT0xPQUQgdG8gYXNzZXJ0IHRoYXQgdGhlIGxpYnJhcnkgaXMgYWxyZWFkeSBs
b2FkZWQgYW5kCi0gICAgICAvLyBhdm9pZCBkb2luZyBhbnkgZGlzayBJTy4KLSAgICAgIHZvaWQq
IGxpYiA9IGRsb3BlbihuZXRfbGlicmFyeV9wYXRoLmNfc3RyKCksIFJUTERfTk9XIHwgUlRMRF9O
T0xPQUQpOwotICAgICAgaWYgKGxpYiA9PSBudWxscHRyKSB7Ci0gICAgICAgIFJUQ19MT0coTFNf
RVJST1IpIDw8ICJMaWJyYXJ5ICIgPDwgbmV0X2xpYnJhcnlfcGF0aCA8PCAiIG5vdCBmb3VuZCEi
OwotICAgICAgICByZXR1cm4gcnRjOjpOZXR3b3JrQmluZGluZ1Jlc3VsdDo6Tk9UX0lNUExFTUVO
VEVEOwotICAgICAgfQotICAgICAgbG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0ID0KLSAgICAg
ICAgICByZWludGVycHJldF9jYXN0PExvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldD4oCi0gICAg
ICAgICAgICAgIGRsc3ltKGxpYiwgInNldE5ldHdvcmtGb3JTb2NrZXQiKSk7Ci0gICAgfQotICAg
IGlmICghbG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0KSB7Ci0gICAgICBSVENfTE9HKExTX0VS
Uk9SKSA8PCAiU3ltYm9sIGxvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldCBpcyBub3QgZm91bmQg
IjsKLSAgICAgIHJldHVybiBydGM6Ok5ldHdvcmtCaW5kaW5nUmVzdWx0OjpOT1RfSU1QTEVNRU5U
RUQ7Ci0gICAgfQotICAgIHJ2ID0gbG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0KCpuZXR3b3Jr
X2hhbmRsZSwgc29ja2V0X2ZkKTsKLSAgfQotCi0gIC8vIElmIHxuZXR3b3JrfCBoYXMgc2luY2Ug
ZGlzY29ubmVjdGVkLCB8cnZ8IHdpbGwgYmUgRU5PTkVULiBTdXJmYWNlIHRoaXMgYXMKLSAgLy8g
RVJSX05FVFdPUktfQ0hBTkdFRCwgcmF0aGVyIHRoYW4gTWFwU3lzdGVtRXJyb3IoRU5PTkVUKSB3
aGljaCBnaXZlcyBiYWNrCi0gIC8vIHRoZSBsZXNzIGRlc2NyaXB0aXZlIEVSUl9GQUlMRUQuCi0g
IGlmIChydiA9PSAwKSB7Ci0gICAgcmV0dXJuIHJ0Yzo6TmV0d29ya0JpbmRpbmdSZXN1bHQ6OlNV
Q0NFU1M7Ci0gIH0KLSAgaWYgKHJ2ID09IEVOT05FVCkgewotICAgIHJldHVybiBydGM6Ok5ldHdv
cmtCaW5kaW5nUmVzdWx0OjpORVRXT1JLX0NIQU5HRUQ7Ci0gIH0KLSAgcmV0dXJuIHJ0Yzo6TmV0
d29ya0JpbmRpbmdSZXN1bHQ6OkZBSUxVUkU7Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25p
dG9yOjpPbk5ldHdvcmtDb25uZWN0ZWQoCi0gICAgY29uc3QgTmV0d29ya0luZm9ybWF0aW9uJiBu
ZXR3b3JrX2luZm8pIHsKLSAgd29ya2VyX3RocmVhZCgpLT5JbnZva2U8dm9pZD4oCi0gICAgICBS
VENfRlJPTV9IRVJFLCBydGM6OkJpbmQoJkFuZHJvaWROZXR3b3JrTW9uaXRvcjo6T25OZXR3b3Jr
Q29ubmVjdGVkX3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgbmV0d29y
a19pbmZvKSk7Ci0gIC8vIEZpcmUgU2lnbmFsTmV0d29ya3NDaGFuZ2VkIHRvIHVwZGF0ZSB0aGUg
bGlzdCBvZiBuZXR3b3Jrcy4KLSAgT25OZXR3b3Jrc0NoYW5nZWQoKTsKLX0KLQotdm9pZCBBbmRy
b2lkTmV0d29ya01vbml0b3I6Ok9uTmV0d29ya0Nvbm5lY3RlZF93KAotICAgIGNvbnN0IE5ldHdv
cmtJbmZvcm1hdGlvbiYgbmV0d29ya19pbmZvKSB7Ci0gIFJUQ19MT0coTFNfSU5GTykgPDwgIk5l
dHdvcmsgY29ubmVjdGVkOiAiIDw8IG5ldHdvcmtfaW5mby5Ub1N0cmluZygpOwotICBhZGFwdGVy
X3R5cGVfYnlfbmFtZV9bbmV0d29ya19pbmZvLmludGVyZmFjZV9uYW1lXSA9Ci0gICAgICBBZGFw
dGVyVHlwZUZyb21OZXR3b3JrVHlwZShuZXR3b3JrX2luZm8udHlwZSk7Ci0gIGlmIChuZXR3b3Jr
X2luZm8udHlwZSA9PSBORVRXT1JLX1ZQTikgewotICAgIHZwbl91bmRlcmx5aW5nX2FkYXB0ZXJf
dHlwZV9ieV9uYW1lX1tuZXR3b3JrX2luZm8uaW50ZXJmYWNlX25hbWVdID0KLSAgICAgICAgQWRh
cHRlclR5cGVGcm9tTmV0d29ya1R5cGUobmV0d29ya19pbmZvLnVuZGVybHlpbmdfdHlwZV9mb3Jf
dnBuKTsKLSAgfQotICBuZXR3b3JrX2luZm9fYnlfaGFuZGxlX1tuZXR3b3JrX2luZm8uaGFuZGxl
XSA9IG5ldHdvcmtfaW5mbzsKLSAgZm9yIChjb25zdCBydGM6OklQQWRkcmVzcyYgYWRkcmVzcyA6
IG5ldHdvcmtfaW5mby5pcF9hZGRyZXNzZXMpIHsKLSAgICBuZXR3b3JrX2hhbmRsZV9ieV9hZGRy
ZXNzX1thZGRyZXNzXSA9IG5ldHdvcmtfaW5mby5oYW5kbGU7Ci0gIH0KLX0KLQotYWJzbDo6b3B0
aW9uYWw8TmV0d29ya0hhbmRsZT4KLUFuZHJvaWROZXR3b3JrTW9uaXRvcjo6RmluZE5ldHdvcmtI
YW5kbGVGcm9tQWRkcmVzcygKLSAgICBjb25zdCBydGM6OklQQWRkcmVzcyYgaXBfYWRkcmVzcykg
Y29uc3QgewotICBSVENfTE9HKExTX0lORk8pIDw8ICJGaW5kIG5ldHdvcmsgaGFuZGxlIGZvciBh
ZGRyZXNzOiAiCi0gICAgICAgICAgICAgICAgICAgPDwgaXBfYWRkcmVzcy5Ub1N0cmluZygpOwot
ICBpZiAoZmluZF9uZXR3b3JrX2hhbmRsZV93aXRob3V0X2lwdjZfdGVtcG9yYXJ5X3BhcnRfKSB7
Ci0gICAgZm9yIChhdXRvIGNvbnN0JiBpdGVyIDogbmV0d29ya19pbmZvX2J5X2hhbmRsZV8pIHsK
LSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHJ0Yzo6SVBBZGRyZXNzPiYgYWRkcmVzc2VzID0gaXRl
ci5zZWNvbmQuaXBfYWRkcmVzc2VzOwotICAgICAgYXV0byBhZGRyZXNzX2l0ID0gc3RkOjpmaW5k
X2lmKGFkZHJlc3Nlcy5iZWdpbigpLCBhZGRyZXNzZXMuZW5kKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW2lwX2FkZHJlc3NdKHJ0Yzo6SVBBZGRyZXNzIGFkZHJlc3Mp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRyZXNz
TWF0Y2goaXBfYWRkcmVzcywgYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICBpZiAoYWRkcmVzc19pdCAhPSBhZGRyZXNzZXMuZW5kKCkpIHsK
LSAgICAgICAgcmV0dXJuIGFic2w6Om1ha2Vfb3B0aW9uYWwoaXRlci5maXJzdCk7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBhYnNsOjpudWxsb3B0OwotICB9IGVsc2UgewotICAgIGF1dG8g
aXRlciA9IG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NfLmZpbmQoaXBfYWRkcmVzcyk7Ci0gICAg
aWYgKGl0ZXIgPT0gbmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc18uZW5kKCkpIHsKLSAgICAgIHJl
dHVybiBhYnNsOjpudWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gYWJzbDo6bWFrZV9vcHRpb25h
bChpdGVyLT5zZWNvbmQpOwotICB9Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpP
bk5ldHdvcmtEaXNjb25uZWN0ZWQoTmV0d29ya0hhbmRsZSBoYW5kbGUpIHsKLSAgUlRDX0xPRyhM
U19JTkZPKSA8PCAiTmV0d29yayBkaXNjb25uZWN0ZWQgZm9yIGhhbmRsZSAiIDw8IGhhbmRsZTsK
LSAgd29ya2VyX3RocmVhZCgpLT5JbnZva2U8dm9pZD4oCi0gICAgICBSVENfRlJPTV9IRVJFLAot
ICAgICAgcnRjOjpCaW5kKCZBbmRyb2lkTmV0d29ya01vbml0b3I6Ok9uTmV0d29ya0Rpc2Nvbm5l
Y3RlZF93LCB0aGlzLCBoYW5kbGUpKTsKLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6
Ok9uTmV0d29ya0Rpc2Nvbm5lY3RlZF93KE5ldHdvcmtIYW5kbGUgaGFuZGxlKSB7Ci0gIGF1dG8g
aXRlciA9IG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfLmZpbmQoaGFuZGxlKTsKLSAgaWYgKGl0ZXIg
IT0gbmV0d29ya19pbmZvX2J5X2hhbmRsZV8uZW5kKCkpIHsKLSAgICBmb3IgKGNvbnN0IHJ0Yzo6
SVBBZGRyZXNzJiBhZGRyZXNzIDogaXRlci0+c2Vjb25kLmlwX2FkZHJlc3NlcykgewotICAgICAg
bmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc18uZXJhc2UoYWRkcmVzcyk7Ci0gICAgfQotICAgIG5l
dHdvcmtfaW5mb19ieV9oYW5kbGVfLmVyYXNlKGl0ZXIpOwotICB9Ci19Ci0KLXZvaWQgQW5kcm9p
ZE5ldHdvcmtNb25pdG9yOjpTZXROZXR3b3JrSW5mb3MoCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8
TmV0d29ya0luZm9ybWF0aW9uPiYgbmV0d29ya19pbmZvcykgewotICBSVENfQ0hFQ0sodGhyZWFk
X2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgbmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc18uY2xl
YXIoKTsKLSAgbmV0d29ya19pbmZvX2J5X2hhbmRsZV8uY2xlYXIoKTsKLSAgUlRDX0xPRyhMU19J
TkZPKSA8PCAiQW5kcm9pZCBuZXR3b3JrIG1vbml0b3IgZm91bmQgIiA8PCBuZXR3b3JrX2luZm9z
LnNpemUoKQotICAgICAgICAgICAgICAgICAgIDw8ICIgbmV0d29ya3MiOwotICBmb3IgKE5ldHdv
cmtJbmZvcm1hdGlvbiBuZXR3b3JrIDogbmV0d29ya19pbmZvcykgewotICAgIE9uTmV0d29ya0Nv
bm5lY3RlZF93KG5ldHdvcmspOwotICB9Ci19Ci0KLXJ0Yzo6QWRhcHRlclR5cGUgQW5kcm9pZE5l
dHdvcmtNb25pdG9yOjpHZXRBZGFwdGVyVHlwZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgaWZf
bmFtZSkgewotICBhdXRvIGl0ZXIgPSBhZGFwdGVyX3R5cGVfYnlfbmFtZV8uZmluZChpZl9uYW1l
KTsKLSAgcnRjOjpBZGFwdGVyVHlwZSB0eXBlID0gKGl0ZXIgPT0gYWRhcHRlcl90eXBlX2J5X25h
bWVfLmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBydGM6OkFEQVBURVJf
VFlQRV9VTktOT1dOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZXItPnNlY29u
ZDsKLSAgaWYgKHR5cGUgPT0gcnRjOjpBREFQVEVSX1RZUEVfVU5LTk9XTikgewotICAgIFJUQ19M
T0coTFNfV0FSTklORykgPDwgIkdldCBhbiB1bmtub3duIHR5cGUgZm9yIHRoZSBpbnRlcmZhY2Ug
IiA8PCBpZl9uYW1lOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi1ydGM6OkFkYXB0ZXJUeXBl
IEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6R2V0VnBuVW5kZXJseWluZ0FkYXB0ZXJUeXBlKAotICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBpZl9uYW1lKSB7Ci0gIGF1dG8gaXRlciA9IHZwbl91bmRlcmx5
aW5nX2FkYXB0ZXJfdHlwZV9ieV9uYW1lXy5maW5kKGlmX25hbWUpOwotICBydGM6OkFkYXB0ZXJU
eXBlIHR5cGUgPSAoaXRlciA9PSB2cG5fdW5kZXJseWluZ19hZGFwdGVyX3R5cGVfYnlfbmFtZV8u
ZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJ0Yzo6QURBUFRFUl9UWVBF
X1VOS05PV04KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlci0+c2Vjb25kOwot
ICByZXR1cm4gdHlwZTsKLX0KLQotQW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeTo6QW5kcm9p
ZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgpCi0gICAgOiBqX2FwcGxpY2F0aW9uX2NvbnRleHRfKG51
bGxwdHIpIHt9Ci0KLUFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3Rvcnk6OkFuZHJvaWROZXR3b3Jr
TW9uaXRvckZhY3RvcnkoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgSmF2YVJlZjxqb2Jq
ZWN0PiYgal9hcHBsaWNhdGlvbl9jb250ZXh0KQotICAgIDogal9hcHBsaWNhdGlvbl9jb250ZXh0
XyhlbnYsIGpfYXBwbGljYXRpb25fY29udGV4dCkge30KLQotQW5kcm9pZE5ldHdvcmtNb25pdG9y
RmFjdG9yeTo6fkFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKSA9IGRlZmF1bHQ7Ci0KLXJ0
Yzo6TmV0d29ya01vbml0b3JJbnRlcmZhY2UqCi1BbmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5
OjpDcmVhdGVOZXR3b3JrTW9uaXRvcigpIHsKLSAgcmV0dXJuIG5ldyBBbmRyb2lkTmV0d29ya01v
bml0b3IoQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpfYXBwbGljYXRpb25fY29udGV4dF8pOwotfQotCi12b2lkIEFuZHJv
aWROZXR3b3JrTW9uaXRvcjo6Tm90aWZ5Q29ubmVjdGlvblR5cGVDaGFuZ2VkKAotICAgIEpOSUVu
diogZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfY2FsbGVyKSB7Ci0gIE9uTmV0
d29ya3NDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpOb3RpZnlP
ZkFjdGl2ZU5ldHdvcmtMaXN0KAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIGpfY2FsbGVyLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdEFycmF5PiYgal9u
ZXR3b3JrX2luZm9zKSB7Ci0gIHN0ZDo6dmVjdG9yPE5ldHdvcmtJbmZvcm1hdGlvbj4gbmV0d29y
a19pbmZvcyA9Ci0gICAgICBKYXZhVG9OYXRpdmVWZWN0b3I8TmV0d29ya0luZm9ybWF0aW9uPihl
bnYsIGpfbmV0d29ya19pbmZvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZHZXROZXR3b3JrSW5mb3JtYXRpb25Gcm9tSmF2YSk7Ci0gIFNldE5ldHdvcmtJ
bmZvcyhuZXR3b3JrX2luZm9zKTsKLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6Ok5v
dGlmeU9mTmV0d29ya0Nvbm5lY3QoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgSmF2YVJl
Zjxqb2JqZWN0PiYgal9jYWxsZXIsCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9uZXR3
b3JrX2luZm8pIHsKLSAgTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtfaW5mbyA9Ci0gICAgICBH
ZXROZXR3b3JrSW5mb3JtYXRpb25Gcm9tSmF2YShlbnYsIGpfbmV0d29ya19pbmZvKTsKLSAgT25O
ZXR3b3JrQ29ubmVjdGVkKG5ldHdvcmtfaW5mbyk7Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtN
b25pdG9yOjpOb3RpZnlPZk5ldHdvcmtEaXNjb25uZWN0KAotICAgIEpOSUVudiogZW52LAotICAg
IGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfY2FsbGVyLAotICAgIGpsb25nIG5ldHdvcmtfaGFu
ZGxlKSB7Ci0gIE9uTmV0d29ya0Rpc2Nvbm5lY3RlZChzdGF0aWNfY2FzdDxOZXR3b3JrSGFuZGxl
PihuZXR3b3JrX2hhbmRsZSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbmV0d29ya19tb25pdG9yLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2FuZHJvaWRfbmV0d29ya19tb25pdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgxNjQ3YmQzMDdiNGQxZWI5ZWY1MjZkZmJkODQ3YTE3ODgzZjdkYjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lkX25ldHdv
cmtfbW9uaXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9BTkRST0lEX05FVFdPUktfTU9O
SVRPUl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0FORFJPSURfTkVUV09SS19NT05J
VE9SX0hfCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImFic2wvdHlwZXMvb3B0aW9u
YWwuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9uZXR3b3JrX21vbml0b3IuaCIKLSNpbmNsdWRlICJy
dGNfYmFzZS90aHJlYWRfY2hlY2tlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkv
am5pX2hlbHBlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
dHlwZWRlZiBpbnQ2NF90IE5ldHdvcmtIYW5kbGU7Ci0KLS8vIGMrKyBlcXVpdmFsZW50IG9mIGph
dmEgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlLgotZW51bSBOZXR3b3Jr
VHlwZSB7Ci0gIE5FVFdPUktfVU5LTk9XTiwKLSAgTkVUV09SS19FVEhFUk5FVCwKLSAgTkVUV09S
S19XSUZJLAotICBORVRXT1JLXzRHLAotICBORVRXT1JLXzNHLAotICBORVRXT1JLXzJHLAotICBO
RVRXT1JLX1VOS05PV05fQ0VMTFVMQVIsCi0gIE5FVFdPUktfQkxVRVRPT1RILAotICBORVRXT1JL
X1ZQTiwKLSAgTkVUV09SS19OT05FCi19OwotCi0vLyBUaGUgaW5mb3JtYXRpb24gaXMgY29sbGVj
dGVkIGZyb20gQW5kcm9pZCBPUyBzbyB0aGF0IHRoZSBuYXRpdmUgY29kZSBjYW4gZ2V0Ci0vLyB0
aGUgbmV0d29yayB0eXBlIGFuZCBoYW5kbGUgKEFuZHJvaWQgbmV0d29yayBJRCkgZm9yIGVhY2gg
aW50ZXJmYWNlLgotc3RydWN0IE5ldHdvcmtJbmZvcm1hdGlvbiB7Ci0gIHN0ZDo6c3RyaW5nIGlu
dGVyZmFjZV9uYW1lOwotICBOZXR3b3JrSGFuZGxlIGhhbmRsZTsKLSAgTmV0d29ya1R5cGUgdHlw
ZTsKLSAgTmV0d29ya1R5cGUgdW5kZXJseWluZ190eXBlX2Zvcl92cG47Ci0gIHN0ZDo6dmVjdG9y
PHJ0Yzo6SVBBZGRyZXNzPiBpcF9hZGRyZXNzZXM7Ci0KLSAgTmV0d29ya0luZm9ybWF0aW9uKCk7
Ci0gIE5ldHdvcmtJbmZvcm1hdGlvbihjb25zdCBOZXR3b3JrSW5mb3JtYXRpb24mKTsKLSAgTmV0
d29ya0luZm9ybWF0aW9uKE5ldHdvcmtJbmZvcm1hdGlvbiYmKTsKLSAgfk5ldHdvcmtJbmZvcm1h
dGlvbigpOwotICBOZXR3b3JrSW5mb3JtYXRpb24mIG9wZXJhdG9yPShjb25zdCBOZXR3b3JrSW5m
b3JtYXRpb24mKTsKLSAgTmV0d29ya0luZm9ybWF0aW9uJiBvcGVyYXRvcj0oTmV0d29ya0luZm9y
bWF0aW9uJiYpOwotCi0gIHN0ZDo6c3RyaW5nIFRvU3RyaW5nKCkgY29uc3Q7Ci19OwotCi1jbGFz
cyBBbmRyb2lkTmV0d29ya01vbml0b3IgOiBwdWJsaWMgcnRjOjpOZXR3b3JrTW9uaXRvckJhc2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgcnRjOjpOZXR3b3JrQmluZGVy
SW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRvcihKTklFbnYqIGVu
diwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfYXBw
bGljYXRpb25fY29udGV4dCk7Ci0gIH5BbmRyb2lkTmV0d29ya01vbml0b3IoKSBvdmVycmlkZTsK
LQotICAvLyBUT0RPKHNha2FsKTogUmVtb3ZlIG9uY2UgZG93biBzdHJlYW0gZGVwZW5kZW5jaWVz
IGhhdmUgYmVlbiB1cGRhdGVkLgotICBzdGF0aWMgdm9pZCBTZXRBbmRyb2lkQ29udGV4dChKTklF
bnYqIGpuaSwgam9iamVjdCBjb250ZXh0KSB7fQotCi0gIHZvaWQgU3RhcnQoKSBvdmVycmlkZTsK
LSAgdm9pZCBTdG9wKCkgb3ZlcnJpZGU7Ci0KLSAgcnRjOjpOZXR3b3JrQmluZGluZ1Jlc3VsdCBC
aW5kU29ja2V0VG9OZXR3b3JrKAotICAgICAgaW50IHNvY2tldF9mZCwKLSAgICAgIGNvbnN0IHJ0
Yzo6SVBBZGRyZXNzJiBhZGRyZXNzKSBvdmVycmlkZTsKLSAgcnRjOjpBZGFwdGVyVHlwZSBHZXRB
ZGFwdGVyVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgaWZfbmFtZSkgb3ZlcnJpZGU7Ci0gIHJ0Yzo6
QWRhcHRlclR5cGUgR2V0VnBuVW5kZXJseWluZ0FkYXB0ZXJUeXBlKAotICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIGlmX25hbWUpIG92ZXJyaWRlOwotICB2b2lkIE9uTmV0d29ya0Nvbm5lY3RlZChj
b25zdCBOZXR3b3JrSW5mb3JtYXRpb24mIG5ldHdvcmtfaW5mbyk7Ci0gIHZvaWQgT25OZXR3b3Jr
RGlzY29ubmVjdGVkKE5ldHdvcmtIYW5kbGUgbmV0d29ya19oYW5kbGUpOwotICAvLyBBbHdheXMg
ZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXR3b3JrIHRocmVhZC4KLSAgdm9pZCBTZXRO
ZXR3b3JrSW5mb3MoY29uc3Qgc3RkOjp2ZWN0b3I8TmV0d29ya0luZm9ybWF0aW9uPiYgbmV0d29y
a19pbmZvcyk7Ci0KLSAgdm9pZCBOb3RpZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQoSk5JRW52KiBl
bnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfY2FsbGVyKTsKLSAgdm9pZCBOb3RpZnlPZk5ldHdvcmtDb25uZWN0KEpOSUVudiog
ZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0
PiYgal9jYWxsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX25ldHdvcmtfaW5mbyk7Ci0gIHZvaWQgTm90aWZ5T2ZOZXR3b3JrRGlzY29u
bmVjdChKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEphdmFSZWY8am9iamVjdD4mIGpfY2FsbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamxvbmcgbmV0d29ya19oYW5kbGUpOwotICB2b2lkIE5vdGlmeU9mQWN0aXZlTmV0d29y
a0xpc3QoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBKYXZhUmVmPGpvYmplY3Q+JiBqX2NhbGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdEFycmF5PiYgal9uZXR3b3JrX2luZm9zKTsKLQot
ICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nLgotICBhYnNsOjpvcHRpb25hbDxOZXR3b3JrSGFuZGxl
PiBGaW5kTmV0d29ya0hhbmRsZUZyb21BZGRyZXNzKAotICAgICAgY29uc3QgcnRjOjpJUEFkZHJl
c3MmIGFkZHJlc3MpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgdm9pZCBPbk5ldHdvcmtDb25uZWN0
ZWRfdyhjb25zdCBOZXR3b3JrSW5mb3JtYXRpb24mIG5ldHdvcmtfaW5mbyk7Ci0gIHZvaWQgT25O
ZXR3b3JrRGlzY29ubmVjdGVkX3coTmV0d29ya0hhbmRsZSBuZXR3b3JrX2hhbmRsZSk7Ci0KLSAg
Y29uc3QgaW50IGFuZHJvaWRfc2RrX2ludF87Ci0gIFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVj
dD4gal9hcHBsaWNhdGlvbl9jb250ZXh0XzsKLSAgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0
PiBqX25ldHdvcmtfbW9uaXRvcl87Ci0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tl
cl87Ci0gIGJvb2wgc3RhcnRlZF8gPSBmYWxzZTsKLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHJ0
Yzo6QWRhcHRlclR5cGU+IGFkYXB0ZXJfdHlwZV9ieV9uYW1lXzsKLSAgc3RkOjptYXA8c3RkOjpz
dHJpbmcsIHJ0Yzo6QWRhcHRlclR5cGU+IHZwbl91bmRlcmx5aW5nX2FkYXB0ZXJfdHlwZV9ieV9u
YW1lXzsKLSAgc3RkOjptYXA8cnRjOjpJUEFkZHJlc3MsIE5ldHdvcmtIYW5kbGU+IG5ldHdvcmtf
aGFuZGxlX2J5X2FkZHJlc3NfOwotICBzdGQ6Om1hcDxOZXR3b3JrSGFuZGxlLCBOZXR3b3JrSW5m
b3JtYXRpb24+IG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfOwotICBib29sIGZpbmRfbmV0d29ya19o
YW5kbGVfd2l0aG91dF9pcHY2X3RlbXBvcmFyeV9wYXJ0XzsKLX07Ci0KLWNsYXNzIEFuZHJvaWRO
ZXR3b3JrTW9uaXRvckZhY3RvcnkgOiBwdWJsaWMgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3Rvcnkg
ewotIHB1YmxpYzoKLSAgLy8gRGVwcmVjYXRlZC4gUGFzcyBpbiBhcHBsaWNhdGlvbiBjb250ZXh0
IHRvIHRoaXMgY2xhc3MuCi0gIEFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKTsKLQotICBB
bmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfYXBwbGljYXRpb25fY29u
dGV4dCk7Ci0KLSAgfkFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKSBvdmVycmlkZTsKLQot
ICBydGM6Ok5ldHdvcmtNb25pdG9ySW50ZXJmYWNlKiBDcmVhdGVOZXR3b3JrTW9uaXRvcigpIG92
ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBqX2Fw
cGxpY2F0aW9uX2NvbnRleHRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwotCi0vLyBUT0RPKG1hZ2plZCk6IFJlbW92ZSBvbmNlIGV4dGVybmFsIGNs
aWVudHMgYXJlIHVwZGF0ZWQuCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLXVzaW5nIHdlYnJ0
Yzo6am5pOjpBbmRyb2lkTmV0d29ya01vbml0b3I7Ci11c2luZyB3ZWJydGM6OmpuaTo6QW5kcm9p
ZE5ldHdvcmtNb25pdG9yRmFjdG9yeTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQot
I2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX0FORFJPSURfTkVUV09SS19NT05JVE9SX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfdmlkZW9fdHJhY2tfc291cmNlLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9h
bmRyb2lkX3ZpZGVvX3RyYWNrX3NvdXJjZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjg0NTVjOTFmYWNjN2JiOTNhY2Q5YWFiNDM2MjcxNzdmOWQxOTNjOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfdmlkZW9fdHJh
Y2tfc291cmNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hbmRyb2lkX3ZpZGVv
X3RyYWNrX3NvdXJjZS5oIgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVv
X2puaS9OYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZV9qbmkuaCIKLQotI2luY2x1ZGUgPHV0
aWxpdHk+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2Uv
bG9nZ2luZy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1uYW1l
c3BhY2UgewotLy8gTWVkaWFDb2RlYyB3YW50cyByZXNvbHV0aW9uIHRvIGJlIGRpdmlzaWJsZSBi
eSAyLgotY29uc3QgaW50IGtSZXF1aXJlZFJlc29sdXRpb25BbGlnbm1lbnQgPSAyOwotCi1WaWRl
b1JvdGF0aW9uIGppbnRUb1ZpZGVvUm90YXRpb24oamludCByb3RhdGlvbikgewotICBSVENfRENI
RUNLKHJvdGF0aW9uID09IDAgfHwgcm90YXRpb24gPT0gOTAgfHwgcm90YXRpb24gPT0gMTgwIHx8
Ci0gICAgICAgICAgICAgcm90YXRpb24gPT0gMjcwKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PFZp
ZGVvUm90YXRpb24+KHJvdGF0aW9uKTsKLX0KLQotYWJzbDo6b3B0aW9uYWw8c3RkOjpwYWlyPGlu
dCwgaW50Pj4gT3B0aW9uYWxBc3BlY3RSYXRpbyhqaW50IGpfd2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgal9oZWlnaHQp
IHsKLSAgaWYgKGpfd2lkdGggPiAwICYmIGpfaGVpZ2h0ID4gMCkKLSAgICByZXR1cm4gc3RkOjpw
YWlyPGludCwgaW50PihqX3dpZHRoLCBqX2hlaWdodCk7Ci0gIHJldHVybiBhYnNsOjpudWxsb3B0
OwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U6OkFuZHJv
aWRWaWRlb1RyYWNrU291cmNlKHJ0Yzo6VGhyZWFkKiBzaWduYWxpbmdfdGhyZWFkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpOSUVudiogam5pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNf
c2NyZWVuY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsaWduX3RpbWVzdGFtcHMpCi0gICAgOiBBZGFwdGVkVmlkZW9UcmFja1NvdXJj
ZShrUmVxdWlyZWRSZXNvbHV0aW9uQWxpZ25tZW50KSwKLSAgICAgIHNpZ25hbGluZ190aHJlYWRf
KHNpZ25hbGluZ190aHJlYWQpLAotICAgICAgaXNfc2NyZWVuY2FzdF8oaXNfc2NyZWVuY2FzdCks
Ci0gICAgICBhbGlnbl90aW1lc3RhbXBzXyhhbGlnbl90aW1lc3RhbXBzKSB7Ci0gIFJUQ19MT0co
TFNfSU5GTykgPDwgIkFuZHJvaWRWaWRlb1RyYWNrU291cmNlIGN0b3IiOwotfQotQW5kcm9pZFZp
ZGVvVHJhY2tTb3VyY2U6On5BbmRyb2lkVmlkZW9UcmFja1NvdXJjZSgpID0gZGVmYXVsdDsKLQot
Ym9vbCBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZTo6aXNfc2NyZWVuY2FzdCgpIGNvbnN0IHsKLSAg
cmV0dXJuIGlzX3NjcmVlbmNhc3RfLmxvYWQoKTsKLX0KLQotYWJzbDo6b3B0aW9uYWw8Ym9vbD4g
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U6Om5lZWRzX2Rlbm9pc2luZygpIGNvbnN0IHsKLSAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpTZXRTdGF0ZShK
TklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29s
ZWFuIGpfaXNfbGl2ZSkgewotICBjb25zdCBTb3VyY2VTdGF0ZSBzdGF0ZSA9IGpfaXNfbGl2ZSA/
IGtMaXZlIDoga0VuZGVkOwotICBpZiAoc3RhdGVfLmV4Y2hhbmdlKHN0YXRlKSAhPSBzdGF0ZSkg
ewotICAgIGlmIChydGM6OlRocmVhZDo6Q3VycmVudCgpID09IHNpZ25hbGluZ190aHJlYWRfKSB7
Ci0gICAgICBGaXJlT25DaGFuZ2VkKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFRPRE8oc2Fr
YWwpOiBJcyB0aGlzIGV2ZW4gbmVjZXNzYXJ5LCBkb2VzIEZpcmVPbkNoYW5nZWQgaGF2ZSB0byBi
ZQotICAgICAgLy8gY2FsbGVkIGZyb20gc2lnbmFsaW5nIHRocmVhZD8KLSAgICAgIHNpZ25hbGlu
Z190aHJlYWRfLT5Qb3N0VGFzaygKLSAgICAgICAgICBSVENfRlJPTV9IRVJFLAotICAgICAgICAg
IHJ0Yzo6QmluZCgKLSAgICAgICAgICAgICAgJkFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpGaXJl
T25DaGFuZ2VkLAotICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx3ZWJydGM6Ok5vdGlmaWVyPHdl
YnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZT4qPigKLSAgICAgICAgICAgICAgICAgIHRo
aXMpKSk7Ci0gICAgfQotICB9Ci19Ci0KLUFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpTb3VyY2VT
dGF0ZSBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZTo6c3RhdGUoKSBjb25zdCB7Ci0gIHJldHVybiBz
dGF0ZV8ubG9hZCgpOwotfQotCi1ib29sIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpyZW1vdGUo
KSBjb25zdCB7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZTo6U2V0SXNTY3JlZW5jYXN0KEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGpfaXNfc2NyZWVuY2FzdCkgewotICBp
c19zY3JlZW5jYXN0Xy5zdG9yZShqX2lzX3NjcmVlbmNhc3QpOwotfQotCi1TY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U6OkFkYXB0RnJhbWUoCi0gICAg
Sk5JRW52KiBlbnYsCi0gICAgamludCBqX3dpZHRoLAotICAgIGppbnQgal9oZWlnaHQsCi0gICAg
amludCBqX3JvdGF0aW9uLAotICAgIGpsb25nIGpfdGltZXN0YW1wX25zKSB7Ci0gIGNvbnN0IFZp
ZGVvUm90YXRpb24gcm90YXRpb24gPSBqaW50VG9WaWRlb1JvdGF0aW9uKGpfcm90YXRpb24pOwot
Ci0gIGNvbnN0IGludDY0X3QgY2FtZXJhX3RpbWVfdXMgPSBqX3RpbWVzdGFtcF9ucyAvIHJ0Yzo6
a051bU5hbm9zZWNzUGVyTWljcm9zZWM7Ci0gIGNvbnN0IGludDY0X3QgYWxpZ25lZF90aW1lc3Rh
bXBfbnMgPQotICAgICAgYWxpZ25fdGltZXN0YW1wc18gPyBydGM6OmtOdW1OYW5vc2Vjc1Blck1p
Y3Jvc2VjICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9hbGlnbmVy
Xy5UcmFuc2xhdGVUaW1lc3RhbXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FtZXJhX3RpbWVfdXMsIHJ0Yzo6VGltZU1pY3JvcygpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgOiBqX3RpbWVzdGFtcF9uczsKLQotICBpbnQgYWRhcHRlZF93aWR0aCA9IDA7Ci0gIGludCBh
ZGFwdGVkX2hlaWdodCA9IDA7Ci0gIGludCBjcm9wX3dpZHRoID0gMDsKLSAgaW50IGNyb3BfaGVp
Z2h0ID0gMDsKLSAgaW50IGNyb3BfeCA9IDA7Ci0gIGludCBjcm9wX3kgPSAwOwotICBib29sIGRy
b3A7Ci0KLSAgLy8gVE9ETyhtYWdqZWQpOiBNb3ZlIHRoaXMgbG9naWMgdG8gdXNlcnMgb2YgTmF0
aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UKLSAgLy8gaW5zdGVhZCwgaW4gb3JkZXIgdG8ga2Vl
cCB0aGlzIG5hdGl2ZSB3cmFwcGluZyBsYXllciBhcyB0aGluIGFzIHBvc3NpYmxlLgotICBpZiAo
cm90YXRpb24gJSAxODAgPT0gMCkgewotICAgIGRyb3AgPSAhcnRjOjpBZGFwdGVkVmlkZW9UcmFj
a1NvdXJjZTo6QWRhcHRGcmFtZSgKLSAgICAgICAgal93aWR0aCwgal9oZWlnaHQsIGNhbWVyYV90
aW1lX3VzLCAmYWRhcHRlZF93aWR0aCwgJmFkYXB0ZWRfaGVpZ2h0LAotICAgICAgICAmY3JvcF93
aWR0aCwgJmNyb3BfaGVpZ2h0LCAmY3JvcF94LCAmY3JvcF95KTsKLSAgfSBlbHNlIHsKLSAgICAv
LyBTd2FwIGFsbCB3aWR0aC9oZWlnaHQgYW5kIHgveS4KLSAgICBkcm9wID0gIXJ0Yzo6QWRhcHRl
ZFZpZGVvVHJhY2tTb3VyY2U6OkFkYXB0RnJhbWUoCi0gICAgICAgIGpfaGVpZ2h0LCBqX3dpZHRo
LCBjYW1lcmFfdGltZV91cywgJmFkYXB0ZWRfaGVpZ2h0LCAmYWRhcHRlZF93aWR0aCwKLSAgICAg
ICAgJmNyb3BfaGVpZ2h0LCAmY3JvcF93aWR0aCwgJmNyb3BfeSwgJmNyb3BfeCk7Ci0gIH0KLQot
ICByZXR1cm4gSmF2YV9OYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZV9jcmVhdGVGcmFtZUFk
YXB0YXRpb25QYXJhbWV0ZXJzKAotICAgICAgZW52LCBjcm9wX3gsIGNyb3BfeSwgY3JvcF93aWR0
aCwgY3JvcF9oZWlnaHQsIGFkYXB0ZWRfd2lkdGgsCi0gICAgICBhZGFwdGVkX2hlaWdodCwgYWxp
Z25lZF90aW1lc3RhbXBfbnMsIGRyb3ApOwotfQotCi12b2lkIEFuZHJvaWRWaWRlb1RyYWNrU291
cmNlOjpPbkZyYW1lQ2FwdHVyZWQoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgamludCBqX3JvdGF0
aW9uLAotICAgIGpsb25nIGpfdGltZXN0YW1wX25zLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVj
dD4mIGpfdmlkZW9fZnJhbWVfYnVmZmVyKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxWaWRlb0Zy
YW1lQnVmZmVyPiBidWZmZXIgPQotICAgICAgQW5kcm9pZFZpZGVvQnVmZmVyOjpDcmVhdGUoZW52
LCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcik7Ci0gIGNvbnN0IFZpZGVvUm90YXRpb24gcm90YXRpb24g
PSBqaW50VG9WaWRlb1JvdGF0aW9uKGpfcm90YXRpb24pOwotCi0gIC8vIEFkYXB0ZWRWaWRlb1Ry
YWNrU291cmNlIGhhbmRsZXMgYXBwbHlpbmcgcm90YXRpb24gZm9yIEk0MjAgZnJhbWVzLgotICBp
ZiAoYXBwbHlfcm90YXRpb24oKSAmJiByb3RhdGlvbiAhPSBrVmlkZW9Sb3RhdGlvbl8wKQotICAg
IGJ1ZmZlciA9IGJ1ZmZlci0+VG9JNDIwKCk7Ci0KLSAgT25GcmFtZShWaWRlb0ZyYW1lOjpCdWls
ZGVyKCkKLSAgICAgICAgICAgICAgLnNldF92aWRlb19mcmFtZV9idWZmZXIoYnVmZmVyKQotICAg
ICAgICAgICAgICAuc2V0X3JvdGF0aW9uKHJvdGF0aW9uKQotICAgICAgICAgICAgICAuc2V0X3Rp
bWVzdGFtcF91cyhqX3RpbWVzdGFtcF9ucyAvIHJ0Yzo6a051bU5hbm9zZWNzUGVyTWljcm9zZWMp
Ci0gICAgICAgICAgICAgIC5idWlsZCgpKTsKLX0KLQotdm9pZCBBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZTo6QWRhcHRPdXRwdXRGb3JtYXQoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgamludCBqX2xh
bmRzY2FwZV93aWR0aCwKLSAgICBqaW50IGpfbGFuZHNjYXBlX2hlaWdodCwKLSAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBqX21heF9sYW5kc2NhcGVfcGl4ZWxfY291bnQsCi0gICAgamludCBq
X3BvcnRyYWl0X3dpZHRoLAotICAgIGppbnQgal9wb3J0cmFpdF9oZWlnaHQsCi0gICAgY29uc3Qg
SmF2YVJlZjxqb2JqZWN0PiYgal9tYXhfcG9ydHJhaXRfcGl4ZWxfY291bnQsCi0gICAgY29uc3Qg
SmF2YVJlZjxqb2JqZWN0PiYgal9tYXhfZnBzKSB7Ci0gIHZpZGVvX2FkYXB0ZXIoKS0+T25PdXRw
dXRGb3JtYXRSZXF1ZXN0KAotICAgICAgT3B0aW9uYWxBc3BlY3RSYXRpbyhqX2xhbmRzY2FwZV93
aWR0aCwgal9sYW5kc2NhcGVfaGVpZ2h0KSwKLSAgICAgIEphdmFUb05hdGl2ZU9wdGlvbmFsSW50
KGVudiwgal9tYXhfbGFuZHNjYXBlX3BpeGVsX2NvdW50KSwKLSAgICAgIE9wdGlvbmFsQXNwZWN0
UmF0aW8oal9wb3J0cmFpdF93aWR0aCwgal9wb3J0cmFpdF9oZWlnaHQpLAotICAgICAgSmF2YVRv
TmF0aXZlT3B0aW9uYWxJbnQoZW52LCBqX21heF9wb3J0cmFpdF9waXhlbF9jb3VudCksCi0gICAg
ICBKYXZhVG9OYXRpdmVPcHRpb25hbEludChlbnYsIGpfbWF4X2ZwcykpOwotfQotCi19ICAvLyBu
YW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2Fu
ZHJvaWRfdmlkZW9fdHJhY2tfc291cmNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfdmlkZW9fdHJhY2tfc291
cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OGQzODBhMTFkOTZkMWFkZjk1
MWY3ZmUxZDNiNGU4NTFmYWE3NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9hbmRyb2lkX3ZpZGVvX3RyYWNrX3NvdXJjZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIEFQ
SV9BTkRST0lEX0pOSV9BTkRST0lEVklERU9UUkFDS1NPVVJDRV9IXwotI2RlZmluZSBBUElfQU5E
Uk9JRF9KTklfQU5EUk9JRFZJREVPVFJBQ0tTT1VSQ0VfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgot
Ci0jaW5jbHVkZSAiY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5oIgotI2lu
Y2x1ZGUgImNvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2LmgiCi0jaW5j
bHVkZSAibWVkaWEvYmFzZS9hZGFwdGVkX3ZpZGVvX3RyYWNrX3NvdXJjZS5oIgotI2luY2x1ZGUg
InJ0Y19iYXNlL2FzeW5jX2ludm9rZXIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIK
LSNpbmNsdWRlICJydGNfYmFzZS90aHJlYWQuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1lc3Rh
bXBfYWxpZ25lci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZnJhbWUu
aCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8gVGhpcyBjbGFz
cyBuZWVkcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEphdmEgY29ycmVzcG9u
ZGluZyBjbGFzcwotLy8gTmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuIFRoaXMgY2xhc3Mg
aXMgdGhyZWQgc2FmZSBhbmQgbWV0aG9kcyBjYW4gYmUKLS8vIGNhbGxlZCBmcm9tIGFueSB0aHJl
YWQsIGJ1dCBpZiBmcmFtZXMgQSwgQiwgLi4uLCBhcmUgc2VudCB0byBhZGFwdEZyYW1lKCksCi0v
LyB0aGUgYWRhcHRlZCBmcmFtZXMgYWRhcHRlZEEsIGFkYXB0ZWRCLCAuLi4sIG5lZWRzIHRvIGJl
IHBhc3NlZCBpbiB0aGUgc2FtZQotLy8gb3JkZXIgdG8gb25GcmFtZUNhcHR1cmVkKCkuCi1jbGFz
cyBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSA6IHB1YmxpYyBydGM6OkFkYXB0ZWRWaWRlb1RyYWNr
U291cmNlIHsKLSBwdWJsaWM6Ci0gIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlKHJ0Yzo6VGhyZWFk
KiBzaWduYWxpbmdfdGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGpu
aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19zY3JlZW5jYXN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFsaWduX3RpbWVzdGFtcHMpOwotICB+QW5kcm9pZFZp
ZGVvVHJhY2tTb3VyY2UoKSBvdmVycmlkZTsKLQotICBib29sIGlzX3NjcmVlbmNhc3QoKSBjb25z
dCBvdmVycmlkZTsKLQotICAvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgZW5jb2RlciBzaG91bGQgZGVu
b2lzZSB2aWRlbyBiZWZvcmUgZW5jb2RpbmcgaXQuCi0gIC8vIElmIGl0IGlzIG5vdCBzZXQsIHRo
ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB3aGljaCBpcyBkaWZmZXJlbnQKLSAgLy8g
ZGVwZW5kaW5nIG9uIHZpZGVvIGNvZGVjLgotICBhYnNsOjpvcHRpb25hbDxib29sPiBuZWVkc19k
ZW5vaXNpbmcoKSBjb25zdCBvdmVycmlkZTsKLQotICB2b2lkIFNldFN0YXRlKFNvdXJjZVN0YXRl
IHN0YXRlKTsKLQotICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gIGJv
b2wgcmVtb3RlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQg
YmUgY2FsbGVkIGJlZm9yZSBkZWxpdmVyaW5nIGFueSBmcmFtZSB0byBkZXRlcm1pbmUgaWYKLSAg
Ly8gdGhlIGZyYW1lIHNob3VsZCBiZSBkcm9wcGVkIG9yIHdoYXQgdGhlIGNyb3BwaW5nIGFuZCBz
Y2FsaW5nIHBhcmFtZXRlcnMKLSAgLy8gc2hvdWxkIGJlLiBUaGlzIGZ1bmN0aW9uIGlzIHRocmVh
ZCBzYWZlIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgLy8gVGhpcyBmdW5j
dGlvbiByZXR1cm5zCi0gIC8vIE5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLkZyYW1lQWRh
cHRhdGlvblBhcmFtZXRlcnMsIG9yIG51bGwgaWYgdGhlCi0gIC8vIGZyYW1lIHNob3VsZCBiZSBk
cm9wcGVkLgotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gQWRhcHRGcmFtZShKTklFbnYq
IGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBqX3dp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGpfaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGpfcm90
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpf
dGltZXN0YW1wX25zKTsKLQotICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGFuZCBwYXNzZXMg
dGhlIGZyYW1lIG9uIHRvIHRoZSByZXN0IG9mIHRoZSBDKysKLSAgLy8gV2ViUlRDIGxheWVyLiBO
b3RlIHRoYXQgR2V0RnJhbWVBZGFwdGF0aW9uUGFyYW1ldGVycygpIGlzIGV4cGVjdGVkIHRvIGJl
Ci0gIC8vIGNhbGxlZCBmaXJzdCBhbmQgdGhhdCB0aGUgZGVsaXZlcmVkIGZyYW1lIGNvbmZvcm1z
IHRvIHRob3NlIHBhcmFtZXRlcnMuCi0gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdGhyZWFkIHNhZmUg
YW5kIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgotICB2b2lkIE9uRnJhbWVDYXB0dXJl
ZChKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgamludCBqX3JvdGF0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBqX3RpbWVzdGFtcF9ucywKLSAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal92aWRlb19mcmFtZV9idWZmZXIp
OwotCi0gIHZvaWQgU2V0U3RhdGUoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgamJvb2xl
YW4gal9pc19saXZlKTsKLQotICB2b2lkIEFkYXB0T3V0cHV0Rm9ybWF0KEpOSUVudiogZW52LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgal9sYW5kc2NhcGVfd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgamludCBqX2xhbmRzY2FwZV9oZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9tYXhfbGFuZHNjYXBlX3BpeGVs
X2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgal9wb3J0cmFpdF93aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGpfcG9ydHJhaXRfaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfbWF4X3BvcnRyYWl0
X3BpeGVsX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfbWF4X2Zwcyk7Ci0KLSAgdm9pZCBTZXRJc1NjcmVlbmNhc3QoSk5JRW52KiBlbnYs
IGpib29sZWFuIGpfaXNfc2NyZWVuY2FzdCk7Ci0KLSBwcml2YXRlOgotICBydGM6OlRocmVhZCog
c2lnbmFsaW5nX3RocmVhZF87Ci0gIHN0ZDo6YXRvbWljPFNvdXJjZVN0YXRlPiBzdGF0ZV87Ci0g
IHN0ZDo6YXRvbWljPGJvb2w+IGlzX3NjcmVlbmNhc3RfOwotICBydGM6OlRpbWVzdGFtcEFsaWdu
ZXIgdGltZXN0YW1wX2FsaWduZXJfOwotICBjb25zdCBib29sIGFsaWduX3RpbWVzdGFtcHNfOwot
fTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5k
aWYgIC8vIEFQSV9BTkRST0lEX0pOSV9BTkRST0lEVklERU9UUkFDS1NPVVJDRV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9hdWRpb19kZXZpY2UvREVQUyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL0RFUFMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhM2FkZWU2ODc2YjMyMzhiZjM5MzAzODJmNGI3
MTZmMjBkYjZhYmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9hdWRpb19kZXZpY2UvREVQUworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAot
aW5jbHVkZV9ydWxlcyA9IFsKLSAgIitiYXNlL2FuZHJvaWQvam5pX2FuZHJvaWQuaCIsCi0gICIr
bW9kdWxlcy9hdWRpb19kZXZpY2UiLAotXQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2Uv
T1dORVJTIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvT1dORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5NTY2MmMxOTVjMGVlMTRjYzg3MzA2NTgwMDA2YmU3ZGZlZTUwOTJiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNl
L09XTkVSUworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWhlbnJpa2FAd2VicnRjLm9yZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3BsYXllci5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVk
aW9fZGV2aWNlL2FhdWRpb19wbGF5ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRlMWM3ZTMzNTMxMzM3MWM2MWQ1Mjg5NGE3YjdiMWNlYzZlNDIyOGYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlv
X3BsYXllci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoYykgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2Fh
dWRpb19wbGF5ZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImFwaS9hcnJh
eV92aWV3LmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvZmluZV9hdWRpb19idWZm
ZXIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9s
b2dnaW5nLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1uYW1lc3BhY2Ugam5pIHsKLQotZW51
bSBBdWRpb0RldmljZU1lc3NhZ2VUeXBlIDogdWludDMyX3QgewotICBrTWVzc2FnZU91dHB1dFN0
cmVhbURpc2Nvbm5lY3RlZCwKLX07Ci0KLUFBdWRpb1BsYXllcjo6QUF1ZGlvUGxheWVyKGNvbnN0
IEF1ZGlvUGFyYW1ldGVycyYgYXVkaW9fcGFyYW1ldGVycykKLSAgICA6IG1haW5fdGhyZWFkXyhy
dGM6OlRocmVhZDo6Q3VycmVudCgpKSwKLSAgICAgIGFhdWRpb18oYXVkaW9fcGFyYW1ldGVycywg
QUFVRElPX0RJUkVDVElPTl9PVVRQVVQsIHRoaXMpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiY3Rv
ciI7Ci0gIHRocmVhZF9jaGVja2VyX2FhdWRpb18uRGV0YWNoKCk7Ci19Ci0KLUFBdWRpb1BsYXll
cjo6fkFBdWRpb1BsYXllcigpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiZHRvciI7Ci0gIFJUQ19E
Q0hFQ0tfUlVOX09OKCZtYWluX3RocmVhZF9jaGVja2VyXyk7Ci0gIFRlcm1pbmF0ZSgpOwotICBS
VENfTE9HKElORk8pIDw8ICIjZGV0ZWN0ZWQgdW5kZXJydW5zOiAiIDw8IHVuZGVycnVuX2NvdW50
XzsKLX0KLQotaW50IEFBdWRpb1BsYXllcjo6SW5pdCgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAi
SW5pdCI7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZtYWluX3RocmVhZF9jaGVja2VyXyk7Ci0gIGlm
IChhYXVkaW9fLmF1ZGlvX3BhcmFtZXRlcnMoKS5jaGFubmVscygpID09IDIpIHsKLSAgICBSVENf
RExPRyhMU19XQVJOSU5HKSA8PCAiU3RlcmVvIG1vZGUgaXMgZW5hYmxlZCI7Ci0gIH0KLSAgcmV0
dXJuIDA7Ci19Ci0KLWludCBBQXVkaW9QbGF5ZXI6OlRlcm1pbmF0ZSgpIHsKLSAgUlRDX0xPRyhJ
TkZPKSA8PCAiVGVybWluYXRlIjsKLSAgUlRDX0RDSEVDS19SVU5fT04oJm1haW5fdGhyZWFkX2No
ZWNrZXJfKTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBBQXVkaW9Q
bGF5ZXI6OkluaXRQbGF5b3V0KCkgewotICBSVENfTE9HKElORk8pIDw8ICJJbml0UGxheW91dCI7
Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZtYWluX3RocmVhZF9jaGVja2VyXyk7Ci0gIFJUQ19EQ0hF
Q0soIWluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXBsYXlpbmdfKTsKLSAgaWYgKCFhYXVk
aW9fLkluaXQoKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBpbml0aWFsaXplZF8gPSB0cnVl
OwotICByZXR1cm4gMDsKLX0KLQotYm9vbCBBQXVkaW9QbGF5ZXI6OlBsYXlvdXRJc0luaXRpYWxp
emVkKCkgY29uc3QgewotICBSVENfRENIRUNLX1JVTl9PTigmbWFpbl90aHJlYWRfY2hlY2tlcl8p
OwotICByZXR1cm4gaW5pdGlhbGl6ZWRfOwotfQotCi1pbnQgQUF1ZGlvUGxheWVyOjpTdGFydFBs
YXlvdXQoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlN0YXJ0UGxheW91dCI7Ci0gIFJUQ19EQ0hF
Q0tfUlVOX09OKCZtYWluX3RocmVhZF9jaGVja2VyXyk7Ci0gIFJUQ19EQ0hFQ0soIXBsYXlpbmdf
KTsKLSAgaWYgKCFpbml0aWFsaXplZF8pIHsKLSAgICBSVENfRExPRyhMU19XQVJOSU5HKQotICAg
ICAgICA8PCAiUGxheW91dCBjYW4gbm90IHN0YXJ0IHNpbmNlIEluaXRQbGF5b3V0IG11c3Qgc3Vj
Y2VlZCBmaXJzdCI7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKGZpbmVfYXVkaW9fYnVmZmVy
XykgewotICAgIGZpbmVfYXVkaW9fYnVmZmVyXy0+UmVzZXRQbGF5b3V0KCk7Ci0gIH0KLSAgaWYg
KCFhYXVkaW9fLlN0YXJ0KCkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgdW5kZXJydW5fY291
bnRfID0gYWF1ZGlvXy54cnVuX2NvdW50KCk7Ci0gIGZpcnN0X2RhdGFfY2FsbGJhY2tfID0gdHJ1
ZTsKLSAgcGxheWluZ18gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQotaW50IEFBdWRpb1BsYXll
cjo6U3RvcFBsYXlvdXQoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlN0b3BQbGF5b3V0IjsKLSAg
UlRDX0RDSEVDS19SVU5fT04oJm1haW5fdGhyZWFkX2NoZWNrZXJfKTsKLSAgaWYgKCFpbml0aWFs
aXplZF8gfHwgIXBsYXlpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFhYXVkaW9f
LlN0b3AoKSkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJTdG9wUGxheW91dCBmYWlsZWQi
OwotICAgIHJldHVybiAtMTsKLSAgfQotICB0aHJlYWRfY2hlY2tlcl9hYXVkaW9fLkRldGFjaCgp
OwotICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgcGxheWluZ18gPSBmYWxzZTsKLSAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgQUF1ZGlvUGxheWVyOjpQbGF5aW5nKCkgY29uc3QgewotICBSVENfRENI
RUNLX1JVTl9PTigmbWFpbl90aHJlYWRfY2hlY2tlcl8pOwotICByZXR1cm4gcGxheWluZ187Ci19
Ci0KLXZvaWQgQUF1ZGlvUGxheWVyOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZl
ciogYXVkaW9CdWZmZXIpIHsKLSAgUlRDX0RMT0coSU5GTykgPDwgIkF0dGFjaEF1ZGlvQnVmZmVy
IjsKLSAgUlRDX0RDSEVDS19SVU5fT04oJm1haW5fdGhyZWFkX2NoZWNrZXJfKTsKLSAgYXVkaW9f
ZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb0J1ZmZlcjsKLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1
ZGlvX3BhcmFtZXRlcnMgPSBhYXVkaW9fLmF1ZGlvX3BhcmFtZXRlcnMoKTsKLSAgYXVkaW9fZGV2
aWNlX2J1ZmZlcl8tPlNldFBsYXlvdXRTYW1wbGVSYXRlKGF1ZGlvX3BhcmFtZXRlcnMuc2FtcGxl
X3JhdGUoKSk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRQbGF5b3V0Q2hhbm5lbHMoYXVk
aW9fcGFyYW1ldGVycy5jaGFubmVscygpKTsKLSAgUlRDX0NIRUNLKGF1ZGlvX2RldmljZV9idWZm
ZXJfKTsKLSAgLy8gQ3JlYXRlIGEgbW9kaWZpZWQgYXVkaW8gYnVmZmVyIGNsYXNzIHdoaWNoIGFs
bG93cyB1cyB0byBhc2sgZm9yIGFueSBudW1iZXIKLSAgLy8gb2Ygc2FtcGxlcyAoYW5kIG5vdCBv
bmx5IG11bHRpcGxlIG9mIDEwbXMpIHRvIG1hdGNoIHRoZSBvcHRpbWFsIGJ1ZmZlcgotICAvLyBz
aXplIHBlciBjYWxsYmFjayB1c2VkIGJ5IEFBdWRpby4KLSAgZmluZV9hdWRpb19idWZmZXJfID0g
c3RkOjptYWtlX3VuaXF1ZTxGaW5lQXVkaW9CdWZmZXI+KGF1ZGlvX2RldmljZV9idWZmZXJfKTsK
LX0KLQotYm9vbCBBQXVkaW9QbGF5ZXI6OlNwZWFrZXJWb2x1bWVJc0F2YWlsYWJsZSgpIHsKLSAg
cmV0dXJuIGZhbHNlOwotfQotCi1pbnQgQUF1ZGlvUGxheWVyOjpTZXRTcGVha2VyVm9sdW1lKHVp
bnQzMl90IHZvbHVtZSkgewotICByZXR1cm4gLTE7Ci19Ci0KLWFic2w6Om9wdGlvbmFsPHVpbnQz
Ml90PiBBQXVkaW9QbGF5ZXI6OlNwZWFrZXJWb2x1bWUoKSBjb25zdCB7Ci0gIHJldHVybiBhYnNs
OjpudWxsb3B0OwotfQotCi1hYnNsOjpvcHRpb25hbDx1aW50MzJfdD4gQUF1ZGlvUGxheWVyOjpN
YXhTcGVha2VyVm9sdW1lKCkgY29uc3QgewotICByZXR1cm4gYWJzbDo6bnVsbG9wdDsKLX0KLQot
YWJzbDo6b3B0aW9uYWw8dWludDMyX3Q+IEFBdWRpb1BsYXllcjo6TWluU3BlYWtlclZvbHVtZSgp
IGNvbnN0IHsKLSAgcmV0dXJuIGFic2w6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgQUF1ZGlvUGxheWVy
OjpPbkVycm9yQ2FsbGJhY2soYWF1ZGlvX3Jlc3VsdF90IGVycm9yKSB7Ci0gIFJUQ19MT0coTFNf
RVJST1IpIDw8ICJPbkVycm9yQ2FsbGJhY2s6ICIgPDwgQUF1ZGlvX2NvbnZlcnRSZXN1bHRUb1Rl
eHQoZXJyb3IpOwotICAvLyBUT0RPKGhlbnJpa2EpOiBpbnZlc3RpZ2F0ZSBpZiB3ZSBjYW4gdXNl
IGEgdGhyZWFkIGNoZWNrZXIgaGVyZS4gSW5pdGlhbAotICAvLyB0ZXN0cyBzaG93cyB0aGF0IHRo
aXMgY2FsbGJhY2sgY2FuIHNvbWV0aW1lcyBiZSBjYWxsZWQgb24gYSB1bmlxdWUgdGhyZWFkCi0g
IC8vIGJ1dCBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24gaXQgc2hvdWxkIGJlIG9uIHRo
ZSBzYW1lIHRocmVhZCBhcyB0aGUKLSAgLy8gZGF0YSBjYWxsYmFjay4KLSAgLy8gUlRDX0RDSEVD
S19SVU5fT04oJnRocmVhZF9jaGVja2VyX2FhdWRpb18pOwotICBpZiAoYWF1ZGlvXy5zdHJlYW1f
c3RhdGUoKSA9PSBBQVVESU9fU1RSRUFNX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewotICAgIC8vIFRo
ZSBzdHJlYW0gaXMgZGlzY29ubmVjdGVkIGFuZCBhbnkgYXR0ZW1wdCB0byB1c2UgaXQgd2lsbCBy
ZXR1cm4KLSAgICAvLyBBQVVESU9fRVJST1JfRElTQ09OTkVDVEVELgotICAgIFJUQ19MT0coV0FS
TklORykgPDwgIk91dHB1dCBzdHJlYW0gZGlzY29ubmVjdGVkIjsKLSAgICAvLyBBQXVkaW8gZG9j
dW1lbnRhdGlvbiBzdGF0ZXM6ICJZb3Ugc2hvdWxkIG5vdCBjbG9zZSBvciByZW9wZW4gdGhlIHN0
cmVhbQotICAgIC8vIGZyb20gdGhlIGNhbGxiYWNrLCB1c2UgYW5vdGhlciB0aHJlYWQgaW5zdGVh
ZCIuIEEgbWVzc2FnZSBpcyB0aGVyZWZvcmUKLSAgICAvLyBzZW50IHRvIHRoZSBtYWluIHRocmVh
ZCB0byBkbyB0aGUgcmVzdGFydCBvcGVyYXRpb24uCi0gICAgUlRDX0RDSEVDSyhtYWluX3RocmVh
ZF8pOwotICAgIG1haW5fdGhyZWFkXy0+UG9zdChSVENfRlJPTV9IRVJFLCB0aGlzLCBrTWVzc2Fn
ZU91dHB1dFN0cmVhbURpc2Nvbm5lY3RlZCk7Ci0gIH0KLX0KLQotYWF1ZGlvX2RhdGFfY2FsbGJh
Y2tfcmVzdWx0X3QgQUF1ZGlvUGxheWVyOjpPbkRhdGFDYWxsYmFjayh2b2lkKiBhdWRpb19kYXRh
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQzMl90IG51bV9mcmFtZXMpIHsKLSAgUlRDX0RDSEVDS19SVU5fT04oJnRocmVhZF9j
aGVja2VyX2FhdWRpb18pOwotICAvLyBMb2cgZGV2aWNlIGlkIGluIGZpcnN0IGRhdGEgY2FsbGJh
Y2sgdG8gZW5zdXJlIHRoYXQgYSB2YWxpZCBkZXZpY2UgaXMKLSAgLy8gdXRpbGl6ZWQuCi0gIGlm
IChmaXJzdF9kYXRhX2NhbGxiYWNrXykgewotICAgIFJUQ19MT0coSU5GTykgPDwgIi0tLSBGaXJz
dCBvdXRwdXQgZGF0YSBjYWxsYmFjazogIgotICAgICAgICAgICAgICAgICAgICAgImRldmljZSBp
ZD0iCi0gICAgICAgICAgICAgICAgICA8PCBhYXVkaW9fLmRldmljZV9pZCgpOwotICAgIGZpcnN0
X2RhdGFfY2FsbGJhY2tfID0gZmFsc2U7Ci0gIH0KLQotICAvLyBDaGVjayBpZiB0aGUgdW5kZXJy
dW4gY291bnQgaGFzIGluY3JlYXNlZC4gSWYgaXQgaGFzLCBpbmNyZWFzZSB0aGUgYnVmZmVyCi0g
IC8vIHNpemUgYnkgYWRkaW5nIHRoZSBzaXplIG9mIGEgYnVyc3QuIEl0IHdpbGwgcmVkdWNlIHRo
ZSByaXNrIG9mIHVuZGVycnVucwotICAvLyBhdCB0aGUgZXhwZW5zZSBvZiBhbiBpbmNyZWFzZWQg
bGF0ZW5jeS4KLSAgLy8gVE9ETyhoZW5yaWthKTogZW5hYmxlIHBvc3NpYmlsaXR5IHRvIGRpc2Fi
bGUgYW5kL29yIHR1bmUgdGhlIGFsZ29yaXRobS4KLSAgY29uc3QgaW50MzJfdCB1bmRlcnJ1bl9j
b3VudCA9IGFhdWRpb18ueHJ1bl9jb3VudCgpOwotICBpZiAodW5kZXJydW5fY291bnQgPiB1bmRl
cnJ1bl9jb3VudF8pIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiVW5kZXJydW4gZGV0ZWN0
ZWQ6ICIgPDwgdW5kZXJydW5fY291bnQ7Ci0gICAgdW5kZXJydW5fY291bnRfID0gdW5kZXJydW5f
Y291bnQ7Ci0gICAgYWF1ZGlvXy5JbmNyZWFzZU91dHB1dEJ1ZmZlclNpemUoKTsKLSAgfQotCi0g
IC8vIEVzdGltYXRlIGxhdGVuY3kgYmV0d2VlbiB3cml0aW5nIGFuIGF1ZGlvIGZyYW1lIHRvIHRo
ZSBvdXRwdXQgc3RyZWFtIGFuZAotICAvLyB0aGUgdGltZSB0aGF0IHNhbWUgZnJhbWUgaXMgcGxh
eWVkIG91dCBvbiB0aGUgb3V0cHV0IGF1ZGlvIGRldmljZS4KLSAgbGF0ZW5jeV9taWxsaXNfID0g
YWF1ZGlvXy5Fc3RpbWF0ZUxhdGVuY3lNaWxsaXMoKTsKLSAgLy8gVE9ETyhoZW5yaWthKTogdXNl
IGZvciBkZXZlbG9wbWVudCBvbmx5LgotICBpZiAoYWF1ZGlvXy5mcmFtZXNfd3JpdHRlbigpICUg
KDEwMDAgKiBhYXVkaW9fLmZyYW1lc19wZXJfYnVyc3QoKSkgPT0gMCkgewotICAgIFJUQ19ETE9H
KElORk8pIDw8ICJvdXRwdXQgbGF0ZW5jeTogIiA8PCBsYXRlbmN5X21pbGxpc18KLSAgICAgICAg
ICAgICAgICAgICA8PCAiLCBudW1fZnJhbWVzOiAiIDw8IG51bV9mcmFtZXM7Ci0gIH0KLQotICAv
LyBSZWFkIGF1ZGlvIGRhdGEgZnJvbSB0aGUgV2ViUlRDIHNvdXJjZSB1c2luZyB0aGUgRmluZUF1
ZGlvQnVmZmVyIG9iamVjdAotICAvLyBhbmQgd3JpdGUgdGhhdCBkYXRhIGludG8gfGF1ZGlvX2Rh
dGF8IHRvIGJlIHBsYXllZCBvdXQgYnkgQUF1ZGlvLgotICAvLyBQcmltZSBvdXRwdXQgd2l0aCB6
ZXJvcyBkdXJpbmcgYSBzaG9ydCBpbml0aWFsIHBoYXNlIHRvIGF2b2lkIGRpc3RvcnRpb24uCi0g
IC8vIFRPRE8oaGVucmlrYSk6IGRvIG1vcmUgd29yayB0byBmaWd1cmUgb3V0IG9mIGlmIHRoZSBp
bml0aWFsIGZvcmNlZCBzaWxlbmNlCi0gIC8vIHBlcmlvZCBpcyByZWFsbHkgbmVlZGVkLgotICBp
ZiAoYWF1ZGlvXy5mcmFtZXNfd3JpdHRlbigpIDwgNTAgKiBhYXVkaW9fLmZyYW1lc19wZXJfYnVy
c3QoKSkgewotICAgIGNvbnN0IHNpemVfdCBudW1fYnl0ZXMgPQotICAgICAgICBzaXplb2YoaW50
MTZfdCkgKiBhYXVkaW9fLnNhbXBsZXNfcGVyX2ZyYW1lKCkgKiBudW1fZnJhbWVzOwotICAgIG1l
bXNldChhdWRpb19kYXRhLCAwLCBudW1fYnl0ZXMpOwotICB9IGVsc2UgewotICAgIGZpbmVfYXVk
aW9fYnVmZmVyXy0+R2V0UGxheW91dERhdGEoCi0gICAgICAgIHJ0Yzo6TWFrZUFycmF5Vmlldyhz
dGF0aWNfY2FzdDxpbnQxNl90Kj4oYXVkaW9fZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBhYXVkaW9fLnNhbXBsZXNfcGVyX2ZyYW1lKCkgKiBudW1fZnJhbWVzKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihsYXRlbmN5X21pbGxpc18gKyAwLjUpKTsKLSAgfQotCi0gIC8vIFRP
RE8oaGVucmlrYSk6IHBvc3NpYmx5IGFkZCB0cmFjZSBoZXJlIHRvIGJlIGluY2x1ZGVkIGluIHN5
c3RyYWNlLgotICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL3By
b2ZpbGUvc3lzdHJhY2UtY29tbWFuZGxpbmUuaHRtbC4KLSAgcmV0dXJuIEFBVURJT19DQUxMQkFD
S19SRVNVTFRfQ09OVElOVUU7Ci19Ci0KLXZvaWQgQUF1ZGlvUGxheWVyOjpPbk1lc3NhZ2UocnRj
OjpNZXNzYWdlKiBtc2cpIHsKLSAgUlRDX0RDSEVDS19SVU5fT04oJm1haW5fdGhyZWFkX2NoZWNr
ZXJfKTsKLSAgc3dpdGNoIChtc2ctPm1lc3NhZ2VfaWQpIHsKLSAgICBjYXNlIGtNZXNzYWdlT3V0
cHV0U3RyZWFtRGlzY29ubmVjdGVkOgotICAgICAgSGFuZGxlU3RyZWFtRGlzY29ubmVjdGVkKCk7
Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12b2lkIEFBdWRpb1BsYXllcjo6SGFuZGxlU3RyZWFt
RGlzY29ubmVjdGVkKCkgewotICBSVENfRENIRUNLX1JVTl9PTigmbWFpbl90aHJlYWRfY2hlY2tl
cl8pOwotICBSVENfRExPRyhJTkZPKSA8PCAiSGFuZGxlU3RyZWFtRGlzY29ubmVjdGVkIjsKLSAg
aWYgKCFpbml0aWFsaXplZF8gfHwgIXBsYXlpbmdfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8v
IFBlcmZvcm0gYSByZXN0YXJ0IGJ5IGZpcnN0IGNsb3NpbmcgdGhlIGRpc2Nvbm5lY3RlZCBzdHJl
YW0gYW5kIHRoZW4gc3RhcnQKLSAgLy8gYSBuZXcgc3RyZWFtOyB0aGlzIHRpbWUgdXNpbmcgdGhl
IG5ldyAocHJlZmVycmVkKSBhdWRpbyBvdXRwdXQgZGV2aWNlLgotICBTdG9wUGxheW91dCgpOwot
ICBJbml0UGxheW91dCgpOwotICBTdGFydFBsYXlvdXQoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGpuaQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rl
dmljZS9hYXVkaW9fcGxheWVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hYXVkaW9fcGxheWVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MTQ2ZDBkNDc5MDY2Zjc3MDdiZDRhZTUz
ZmJkYjdkOGRkNDAzYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3BsYXllci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTUzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRS
T0lEX1NSQ19KTklfQVVESU9fREVWSUNFX0FBVURJT19QTEFZRVJfSF8KLSNkZWZpbmUgU0RLX0FO
RFJPSURfU1JDX0pOSV9BVURJT19ERVZJQ0VfQUFVRElPX1BMQVlFUl9IXwotCi0jaW5jbHVkZSA8
YWF1ZGlvL0FBdWRpby5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImFic2wvdHlw
ZXMvb3B0aW9uYWwuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZp
Y2VfYnVmZmVyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRp
b19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL21lc3NhZ2VfaGFuZGxlci5o
IgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVh
ZF9hbm5vdGF0aW9ucy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3dyYXBwZXIu
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hdWRpb19kZXZp
Y2VfbW9kdWxlLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1jbGFzcyBBdWRpb0RldmljZUJ1
ZmZlcjsKLWNsYXNzIEZpbmVBdWRpb0J1ZmZlcjsKLQotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIElt
cGxlbWVudHMgbG93LWxhdGVuY3kgMTYtYml0IG1vbm8gUENNIGF1ZGlvIG91dHB1dCBzdXBwb3J0
IGZvciBBbmRyb2lkCi0vLyB1c2luZyB0aGUgQyBiYXNlZCBBQXVkaW8gQVBJLgotLy8KLS8vIEFu
IGluc3RhbmNlIG11c3QgYmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkIG9uIG9uZSBhbmQgdGhlIHNh
bWUgdGhyZWFkLgotLy8gQWxsIHB1YmxpYyBtZXRob2RzIG11c3QgYWxzbyBiZSBjYWxsZWQgb24g
dGhlIHNhbWUgdGhyZWFkLiBBIHRocmVhZCBjaGVja2VyCi0vLyB3aWxsIERDSEVDSyBpZiBhbnkg
bWV0aG9kIGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRocmVhZC4gQXVkaW8gYnVmZmVycwotLy8g
YXJlIHJlcXVlc3RlZCBvbiBhIGRlZGljYXRlZCBoaWdoLXByaW9yaXR5IHRocmVhZCBvd25lZCBi
eSBBQXVkaW8uCi0vLwotLy8gVGhlIGV4aXN0aW5nIGRlc2lnbiBmb3JjZXMgdGhlIHVzZXIgdG8g
Y2FsbCBJbml0UGxheW91dCgpIGFmdGVyIFN0b3BQbGF5b3V0KCkKLS8vIHRvIGJlIGFibGUgdG8g
Y2FsbCBTdGFydFBsYXlvdXQoKSBhZ2Fpbi4gVGhpcyBpcyBpbiBsaW5lIHdpdGggaG93IHRoZSBK
YXZhLQotLy8gYmFzZWQgaW1wbGVtZW50YXRpb24gd29ya3MuCi0vLwotLy8gQW4gYXVkaW8gc3Ry
ZWFtIGNhbiBiZSBkaXNjb25uZWN0ZWQsIGUuZy4gd2hlbiBhbiBhdWRpbyBkZXZpY2UgaXMgcmVt
b3ZlZC4KLS8vIFRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCByZXN0YXJ0IHRoZSBhdWRpbyBzdHJl
YW0gdXNpbmcgdGhlIG5ldyBwcmVmZXJyZWQKLS8vIGRldmljZSBpZiBzdWNoIGFuIGV2ZW50IGhh
cHBlbnMuCi0vLwotLy8gQWxzbyBzdXBwb3J0cyBhdXRvbWF0aWMgYnVmZmVyLXNpemUgYWRqdXN0
bWVudCBiYXNlZCBvbiB1bmRlcnJ1biBkZXRlY3Rpb25zCi0vLyB3aGVyZSB0aGUgaW50ZXJuYWwg
QUF1ZGlvIGJ1ZmZlciBjYW4gYmUgaW5jcmVhc2VkIHdoZW4gbmVlZGVkLiBJdCB3aWxsCi0vLyBy
ZWR1Y2UgdGhlIHJpc2sgb2YgdW5kZXJydW5zICh+Z2xpdGNoZXMpIGF0IHRoZSBleHBlbnNlIG9m
IGFuIGluY3JlYXNlZAotLy8gbGF0ZW5jeS4KLWNsYXNzIEFBdWRpb1BsYXllciBmaW5hbCA6IHB1
YmxpYyBBdWRpb091dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBBQXVk
aW9PYnNlcnZlckludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBy
dGM6Ok1lc3NhZ2VIYW5kbGVyIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEFBdWRpb1BsYXllcihj
b25zdCBBdWRpb1BhcmFtZXRlcnMmIGF1ZGlvX3BhcmFtZXRlcnMpOwotICB+QUF1ZGlvUGxheWVy
KCkgb3ZlcnJpZGU7Ci0KLSAgaW50IEluaXQoKSBvdmVycmlkZTsKLSAgaW50IFRlcm1pbmF0ZSgp
IG92ZXJyaWRlOwotCi0gIGludCBJbml0UGxheW91dCgpIG92ZXJyaWRlOwotICBib29sIFBsYXlv
dXRJc0luaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgaW50IFN0YXJ0UGxheW91dCgp
IG92ZXJyaWRlOwotICBpbnQgU3RvcFBsYXlvdXQoKSBvdmVycmlkZTsKLSAgYm9vbCBQbGF5aW5n
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0Rldmlj
ZUJ1ZmZlciogYXVkaW9CdWZmZXIpIG92ZXJyaWRlOwotCi0gIC8vIE5vdCBpbXBsZW1lbnRlZCBp
biBBQXVkaW8uCi0gIGJvb2wgU3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0g
IGludCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkgb3ZlcnJpZGU7Ci0gIGFic2w6
Om9wdGlvbmFsPHVpbnQzMl90PiBTcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIGFi
c2w6Om9wdGlvbmFsPHVpbnQzMl90PiBNYXhTcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gIGFic2w6Om9wdGlvbmFsPHVpbnQzMl90PiBNaW5TcGVha2VyVm9sdW1lKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIEFBdWRpb09ic2VydmVySW50ZXJmYWNlIGltcGxl
bWVudGF0aW9uLgotCi0gIC8vIEZvciBhbiBvdXRwdXQgc3RyZWFtLCB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCByZW5kZXIgYW5kIHdyaXRlIHxudW1fZnJhbWVzfAotICAvLyBvZiBkYXRhIGluIHRoZSBz
dHJlYW1zIGN1cnJlbnQgZGF0YSBmb3JtYXQgdG8gdGhlIHxhdWRpb19kYXRhfCBidWZmZXIuCi0g
IC8vIENhbGxlZCBvbiBhIHJlYWwtdGltZSB0aHJlYWQgb3duZWQgYnkgQUF1ZGlvLgotICBhYXVk
aW9fZGF0YV9jYWxsYmFja19yZXN1bHRfdCBPbkRhdGFDYWxsYmFjayh2b2lkKiBhdWRpb19kYXRh
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IG51bV9mcmFtZXMpIG92ZXJyaWRlOwotICAvLyBBQXVkaW8gY2FsbHMgdGhpcyBmdW5jdGlvbnMg
aWYgYW55IGVycm9yIG9jY3VycyBvbiBhIGNhbGxiYWNrIHRocmVhZC4KLSAgLy8gQ2FsbGVkIG9u
IGEgcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBBQXVkaW8uCi0gIHZvaWQgT25FcnJvckNhbGxi
YWNrKGFhdWRpb19yZXN1bHRfdCBlcnJvcikgb3ZlcnJpZGU7Ci0KLSAgLy8gcnRjOjpNZXNzYWdl
SGFuZGxlciB1c2VkIGZvciByZXN0YXJ0IG1lc3NhZ2VzIGZyb20gdGhlIGVycm9yLWNhbGxiYWNr
Ci0gIC8vIHRocmVhZCB0byB0aGUgbWFpbiAoY3JlYXRpbmcpIHRocmVhZC4KLSAgdm9pZCBPbk1l
c3NhZ2UocnRjOjpNZXNzYWdlKiBtc2cpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgLy8gQ2xv
c2VzIHRoZSBleGlzdGluZyBzdHJlYW0gYW5kIHN0YXJ0cyBhIG5ldyBzdHJlYW0uCi0gIHZvaWQg
SGFuZGxlU3RyZWFtRGlzY29ubmVjdGVkKCk7Ci0KLSAgLy8gRW5zdXJlcyB0aGF0IG1ldGhvZHMg
YXJlIGNhbGxlZCBmcm9tIHRoZSBzYW1lIHRocmVhZCBhcyB0aGlzIG9iamVjdCBpcwotICAvLyBj
cmVhdGVkIG9uLgotICBydGM6OlRocmVhZENoZWNrZXIgbWFpbl90aHJlYWRfY2hlY2tlcl87Ci0K
LSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiBmaXJzdCBjYWxsIHRvIEFBdWRpb1BsYXllcjo6T25E
YXRhQ2FsbGJhY2sgZnJvbSBhCi0gIC8vIHJlYWwtdGltZSB0aHJlYWQgb3duZWQgYnkgQUF1ZGlv
LiBEZXRhY2hlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMKLSAgLy8gb2JqZWN0LgotICBy
dGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfYWF1ZGlvXzsKLQotICAvLyBUaGUgdGhy
ZWFkIG9uIHdoaWNoIHRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgb24uCi0gIHJ0Yzo6VGhyZWFkKiBt
YWluX3RocmVhZF87Ci0KLSAgLy8gV3JhcHMgYWxsIEFBdWRpbyByZXNvdXJjZXMuIENvbnRhaW5z
IGFuIG91dHB1dCBzdHJlYW0gdXNpbmcgdGhlIGRlZmF1bHQKLSAgLy8gb3V0cHV0IGF1ZGlvIGRl
dmljZS4gQ2FuIGJlIGFjY2Vzc2VkIG9uIGJvdGggdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUKLSAg
Ly8gcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBBQXVkaW8uIFNlZSBzZXBhcmF0ZSBBQXVkaW8g
ZG9jdW1lbnRhdGlvbiBhYm91dAotICAvLyB0aHJlYWQgc2FmZXR5LgotICBBQXVkaW9XcmFwcGVy
IGFhdWRpb187Ci0KLSAgLy8gRmluZUF1ZGlvQnVmZmVyIHRha2VzIGFuIEF1ZGlvRGV2aWNlQnVm
ZmVyIHdoaWNoIGRlbGl2ZXJzIGF1ZGlvIGRhdGEKLSAgLy8gaW4gY2h1bmtzIG9mIDEwbXMuIEl0
IHRoZW4gYWxsb3dzIGZvciB0aGlzIGRhdGEgdG8gYmUgcHVsbGVkIGluCi0gIC8vIGEgZmluZXIg
b3IgY29hcnNlciBncmFudWxhcml0eS4gSS5lLiBpbnRlcmFjdGluZyB3aXRoIHRoaXMgY2xhc3Mg
aW5zdGVhZAotICAvLyBvZiBkaXJlY3RseSB3aXRoIHRoZSBBdWRpb0RldmljZUJ1ZmZlciBvbmUg
Y2FuIGFzayBmb3IgYW55IG51bWJlciBvZgotICAvLyBhdWRpbyBkYXRhIHNhbXBsZXMuCi0gIC8v
IEV4YW1wbGU6IG5hdGl2ZSBidWZmZXIgc2l6ZSBjYW4gYmUgMTkyIGF1ZGlvIGZyYW1lcyBhdCA0
OGtIeiBzYW1wbGUgcmF0ZS4KLSAgLy8gV2ViUlRDIHdpbGwgcHJvdmlkZSA0ODAgYXVkaW8gZnJh
bWVzIHBlciAxMG1zIGJ1dCBBQXVkaW8gYXNrcyBmb3IgMTkyCi0gIC8vIGluIGVhY2ggY2FsbGJh
Y2sgKG9uY2UgZXZlcnkgNHRoIG1zKS4gVGhpcyBjbGFzcyBjYW4gdGhlbiBhc2sgZm9yIDE5MiBh
bmQKLSAgLy8gdGhlIEZpbmVBdWRpb0J1ZmZlciB3aWxsIGFzayBXZWJSVEMgZm9yIG5ldyBkYXRh
IGFwcHJveGltYXRlbHkgb25seSBldmVyeQotICAvLyBzZWNvbmQgY2FsbGJhY2sgYW5kIGFsc28g
Y2FjaGUgbm9uLXV0aWxpemVkIGF1ZGlvLgotICBzdGQ6OnVuaXF1ZV9wdHI8RmluZUF1ZGlvQnVm
ZmVyPiBmaW5lX2F1ZGlvX2J1ZmZlcl87Ci0KLSAgLy8gQ291bnRzIG51bWJlciBvZiBkZXRlY3Rl
ZCB1bmRlcnJ1biBldmVudHMgcmVwb3J0ZWQgYnkgQUF1ZGlvLgotICBpbnQzMl90IHVuZGVycnVu
X2NvdW50XyA9IDA7Ci0KLSAgLy8gVHJ1ZSBvbmx5IGZvciB0aGUgZmlyc3QgZGF0YSBjYWxsYmFj
ayBpbiBlYWNoIGF1ZGlvIHNlc3Npb24uCi0gIGJvb2wgZmlyc3RfZGF0YV9jYWxsYmFja18gPSB0
cnVlOwotCi0gIC8vIFJhdyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hB
dWRpb0J1ZmZlcigpLiBPd25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNs
YXNzIGFuZCBzZXQgYnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgotICBBdWRpb0Rldmlj
ZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1ZmZlcl8gUlRDX0dVQVJERURfQlkobWFpbl90aHJlYWRf
Y2hlY2tlcl8pID0KLSAgICAgIG51bGxwdHI7Ci0KLSAgYm9vbCBpbml0aWFsaXplZF8gUlRDX0dV
QVJERURfQlkobWFpbl90aHJlYWRfY2hlY2tlcl8pID0gZmFsc2U7Ci0gIGJvb2wgcGxheWluZ18g
UlRDX0dVQVJERURfQlkobWFpbl90aHJlYWRfY2hlY2tlcl8pID0gZmFsc2U7Ci0KLSAgLy8gRXN0
aW1hdGVkIGxhdGVuY3kgYmV0d2VlbiB3cml0aW5nIGFuIGF1ZGlvIGZyYW1lIHRvIHRoZSBvdXRw
dXQgc3RyZWFtIGFuZAotICAvLyB0aGUgdGltZSB0aGF0IHNhbWUgZnJhbWUgaXMgcGxheWVkIG91
dCBvbiB0aGUgb3V0cHV0IGF1ZGlvIGRldmljZS4KLSAgZG91YmxlIGxhdGVuY3lfbWlsbGlzXyBS
VENfR1VBUkRFRF9CWSh0aHJlYWRfY2hlY2tlcl9hYXVkaW9fKSA9IDA7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2Ugam5pCi0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtf
QU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BQVVESU9fUExBWUVSX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2F1ZGlvX2RldmljZS9hYXVkaW9fcmVjb3JkZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rldmlj
ZS9hYXVkaW9fcmVjb3JkZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YmVm
NGIxYmE4MGEyZGI0MTk0ZmQzODg3OTdmMjU3YWEwOGNjYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3JlY29y
ZGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlv
X3JlY29yZGVyLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJhcGkvYXJyYXlf
dmlldy5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2ZpbmVfYXVkaW9fYnVmZmVy
LmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9n
Z2luZy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RpbWVfdXRpbHMuaCIKLQotI2luY2x1ZGUgInN5
c3RlbV93cmFwcGVycy9pbmNsdWRlL3NsZWVwLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1u
YW1lc3BhY2Ugam5pIHsKLQotZW51bSBBdWRpb0RldmljZU1lc3NhZ2VUeXBlIDogdWludDMyX3Qg
ewotICBrTWVzc2FnZUlucHV0U3RyZWFtRGlzY29ubmVjdGVkLAotfTsKLQotQUF1ZGlvUmVjb3Jk
ZXI6OkFBdWRpb1JlY29yZGVyKGNvbnN0IEF1ZGlvUGFyYW1ldGVycyYgYXVkaW9fcGFyYW1ldGVy
cykKLSAgICA6IG1haW5fdGhyZWFkXyhydGM6OlRocmVhZDo6Q3VycmVudCgpKSwKLSAgICAgIGFh
dWRpb18oYXVkaW9fcGFyYW1ldGVycywgQUFVRElPX0RJUkVDVElPTl9JTlBVVCwgdGhpcykgewot
ICBSVENfTE9HKElORk8pIDw8ICJjdG9yIjsKLSAgdGhyZWFkX2NoZWNrZXJfYWF1ZGlvXy5EZXRh
Y2goKTsKLX0KLQotQUF1ZGlvUmVjb3JkZXI6On5BQXVkaW9SZWNvcmRlcigpIHsKLSAgUlRDX0xP
RyhJTkZPKSA8PCAiZHRvciI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVu
dCgpKTsKLSAgVGVybWluYXRlKCk7Ci0gIFJUQ19MT0coSU5GTykgPDwgImRldGVjdGVkIG93ZXJm
bG93czogIiA8PCBvdmVyZmxvd19jb3VudF87Ci19Ci0KLWludCBBQXVkaW9SZWNvcmRlcjo6SW5p
dCgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiSW5pdCI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgaWYgKGFhdWRpb18uYXVkaW9fcGFyYW1ldGVycygpLmNo
YW5uZWxzKCkgPT0gMikgewotICAgIFJUQ19ETE9HKExTX1dBUk5JTkcpIDw8ICJTdGVyZW8gbW9k
ZSBpcyBlbmFibGVkIjsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW50IEFBdWRpb1JlY29yZGVy
OjpUZXJtaW5hdGUoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlRlcm1pbmF0ZSI7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgU3RvcFJlY29yZGluZygpOwot
ICByZXR1cm4gMDsKLX0KLQotaW50IEFBdWRpb1JlY29yZGVyOjpJbml0UmVjb3JkaW5nKCkgewot
ICBSVENfTE9HKElORk8pIDw8ICJJbml0UmVjb3JkaW5nIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENfRENIRUNLKCFpbml0aWFsaXplZF8pOwotICBS
VENfRENIRUNLKCFyZWNvcmRpbmdfKTsKLSAgaWYgKCFhYXVkaW9fLkluaXQoKSkgewotICAgIHJl
dHVybiAtMTsKLSAgfQotICBpbml0aWFsaXplZF8gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQot
Ym9vbCBBQXVkaW9SZWNvcmRlcjo6UmVjb3JkaW5nSXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLSAg
cmV0dXJuIGluaXRpYWxpemVkXzsKLX0KLQotaW50IEFBdWRpb1JlY29yZGVyOjpTdGFydFJlY29y
ZGluZygpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiU3RhcnRSZWNvcmRpbmciOwotICBSVENfRENI
RUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJUQ19EQ0hFQ0soaW5pdGlhbGl6
ZWRfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkaW5nXyk7Ci0gIGlmIChmaW5lX2F1ZGlvX2J1ZmZl
cl8pIHsKLSAgICBmaW5lX2F1ZGlvX2J1ZmZlcl8tPlJlc2V0UGxheW91dCgpOwotICB9Ci0gIGlm
ICghYWF1ZGlvXy5TdGFydCgpKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIG92ZXJmbG93X2Nv
dW50XyA9IGFhdWRpb18ueHJ1bl9jb3VudCgpOwotICBmaXJzdF9kYXRhX2NhbGxiYWNrXyA9IHRy
dWU7Ci0gIHJlY29yZGluZ18gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQotaW50IEFBdWRpb1Jl
Y29yZGVyOjpTdG9wUmVjb3JkaW5nKCkgewotICBSVENfTE9HKElORk8pIDw8ICJTdG9wUmVjb3Jk
aW5nIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAo
IWluaXRpYWxpemVkXyB8fCAhcmVjb3JkaW5nXykgewotICAgIHJldHVybiAwOwotICB9Ci0gIGlm
ICghYWF1ZGlvXy5TdG9wKCkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgdGhyZWFkX2NoZWNr
ZXJfYWF1ZGlvXy5EZXRhY2goKTsKLSAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gIHJlY29yZGlu
Z18gPSBmYWxzZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQUF1ZGlvUmVjb3JkZXI6OlJlY29y
ZGluZygpIGNvbnN0IHsKLSAgcmV0dXJuIHJlY29yZGluZ187Ci19Ci0KLXZvaWQgQUF1ZGlvUmVj
b3JkZXI6OkF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcikg
ewotICBSVENfTE9HKElORk8pIDw8ICJBdHRhY2hBdWRpb0J1ZmZlciI7Ci0gIFJUQ19EQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBh
dWRpb0J1ZmZlcjsKLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1ZGlvX3BhcmFtZXRlcnMgPSBh
YXVkaW9fLmF1ZGlvX3BhcmFtZXRlcnMoKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJl
Y29yZGluZ1NhbXBsZVJhdGUoYXVkaW9fcGFyYW1ldGVycy5zYW1wbGVfcmF0ZSgpKTsKLSAgYXVk
aW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJlY29yZGluZ0NoYW5uZWxzKGF1ZGlvX3BhcmFtZXRlcnMu
Y2hhbm5lbHMoKSk7Ci0gIFJUQ19DSEVDSyhhdWRpb19kZXZpY2VfYnVmZmVyXyk7Ci0gIC8vIENy
ZWF0ZSBhIG1vZGlmaWVkIGF1ZGlvIGJ1ZmZlciBjbGFzcyB3aGljaCBhbGxvd3MgdXMgdG8gZGVs
aXZlciBhbnkgbnVtYmVyCi0gIC8vIG9mIHNhbXBsZXMgKGFuZCBub3Qgb25seSBtdWx0aXBsZXMg
b2YgMTBtcyB3aGljaCBXZWJSVEMgdXNlcykgdG8gbWF0Y2ggdGhlCi0gIC8vIG5hdGl2ZSBBQXVk
aW8gYnVmZmVyIHNpemUuCi0gIGZpbmVfYXVkaW9fYnVmZmVyXyA9IHN0ZDo6bWFrZV91bmlxdWU8
RmluZUF1ZGlvQnVmZmVyPihhdWRpb19kZXZpY2VfYnVmZmVyXyk7Ci19Ci0KLWJvb2wgQUF1ZGlv
UmVjb3JkZXI6OklzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBBQXVkaW9SZWNvcmRlcjo6SXNOb2lzZVN1cHByZXNzb3JT
dXBwb3J0ZWQoKSBjb25zdCB7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotaW50IEFBdWRpb1JlY29y
ZGVyOjpFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwg
IkVuYWJsZUJ1aWx0SW5BRUM6ICIgPDwgZW5hYmxlOwotICBSVENfTE9HKExTX0VSUk9SKSA8PCAi
Tm90IGltcGxlbWVudGVkIjsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgQUF1ZGlvUmVjb3JkZXI6
OkVuYWJsZUJ1aWx0SW5OUyhib29sIGVuYWJsZSkgewotICBSVENfTE9HKElORk8pIDw8ICJFbmFi
bGVCdWlsdEluTlM6ICIgPDwgZW5hYmxlOwotICBSVENfTE9HKExTX0VSUk9SKSA8PCAiTm90IGlt
cGxlbWVudGVkIjsKLSAgcmV0dXJuIC0xOwotfQotCi12b2lkIEFBdWRpb1JlY29yZGVyOjpPbkVy
cm9yQ2FsbGJhY2soYWF1ZGlvX3Jlc3VsdF90IGVycm9yKSB7Ci0gIFJUQ19MT0coTFNfRVJST1Ip
IDw8ICJPbkVycm9yQ2FsbGJhY2s6ICIgPDwgQUF1ZGlvX2NvbnZlcnRSZXN1bHRUb1RleHQoZXJy
b3IpOwotICAvLyBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyX2FhdWRpb18uSXNDdXJyZW50KCkp
OwotICBpZiAoYWF1ZGlvXy5zdHJlYW1fc3RhdGUoKSA9PSBBQVVESU9fU1RSRUFNX1NUQVRFX0RJ
U0NPTk5FQ1RFRCkgewotICAgIC8vIFRoZSBzdHJlYW0gaXMgZGlzY29ubmVjdGVkIGFuZCBhbnkg
YXR0ZW1wdCB0byB1c2UgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBBQVVESU9fRVJST1JfRElTQ09O
TkVDVEVELi4KLSAgICBSVENfTE9HKFdBUk5JTkcpIDw8ICJJbnB1dCBzdHJlYW0gZGlzY29ubmVj
dGVkID0+IHJlc3RhcnQgaXMgcmVxdWlyZWQiOwotICAgIC8vIEFBdWRpbyBkb2N1bWVudGF0aW9u
IHN0YXRlczogIllvdSBzaG91bGQgbm90IGNsb3NlIG9yIHJlb3BlbiB0aGUgc3RyZWFtCi0gICAg
Ly8gZnJvbSB0aGUgY2FsbGJhY2ssIHVzZSBhbm90aGVyIHRocmVhZCBpbnN0ZWFkIi4gQSBtZXNz
YWdlIGlzIHRoZXJlZm9yZQotICAgIC8vIHNlbnQgdG8gdGhlIG1haW4gdGhyZWFkIHRvIGRvIHRo
ZSByZXN0YXJ0IG9wZXJhdGlvbi4KLSAgICBSVENfRENIRUNLKG1haW5fdGhyZWFkXyk7Ci0gICAg
bWFpbl90aHJlYWRfLT5Qb3N0KFJUQ19GUk9NX0hFUkUsIHRoaXMsIGtNZXNzYWdlSW5wdXRTdHJl
YW1EaXNjb25uZWN0ZWQpOwotICB9Ci19Ci0KLS8vIFJlYWQgYW5kIHByb2Nlc3MgfG51bV9mcmFt
ZXN8IG9mIGRhdGEgZnJvbSB0aGUgfGF1ZGlvX2RhdGF8IGJ1ZmZlci4KLS8vIFRPRE8oaGVucmlr
YSk6IHBvc3NpYmx5IGFkZCB0cmFjZSBoZXJlIHRvIGJlIGluY2x1ZGVkIGluIHN5c3RyYWNlLgot
Ly8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9wcm9maWxlL3N5c3Ry
YWNlLWNvbW1hbmRsaW5lLmh0bWwuCi1hYXVkaW9fZGF0YV9jYWxsYmFja19yZXN1bHRfdCBBQXVk
aW9SZWNvcmRlcjo6T25EYXRhQ2FsbGJhY2soCi0gICAgdm9pZCogYXVkaW9fZGF0YSwKLSAgICBp
bnQzMl90IG51bV9mcmFtZXMpIHsKLSAgLy8gVE9ETyhoZW5yaWthKTogZmlndXJlIG91dCB3aHkg
d2Ugc29tZXRpbWVzIGhpdCB0aGlzIG9uZS4KLSAgLy8gUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tl
cl9hYXVkaW9fLklzQ3VycmVudCgpKTsKLSAgLy8gUlRDX0xPRyhJTkZPKSA8PCAiT25EYXRhQ2Fs
bGJhY2s6ICIgPDwgbnVtX2ZyYW1lczsKLSAgLy8gRHJhaW4gdGhlIGlucHV0IGJ1ZmZlciBhdCBm
aXJzdCBjYWxsYmFjayB0byBlbnN1cmUgdGhhdCBpdCBkb2VzIG5vdAotICAvLyBjb250YWluIGFu
eSBvbGQgZGF0YS4gV2lsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBsb3dlc3QgcG9zc2libGUgbGF0
ZW5jeQotICAvLyBpcyBvYnRhaW5lZC4KLSAgaWYgKGZpcnN0X2RhdGFfY2FsbGJhY2tfKSB7Ci0g
ICAgUlRDX0xPRyhJTkZPKSA8PCAiLS0tIEZpcnN0IGlucHV0IGRhdGEgY2FsbGJhY2s6ICIKLSAg
ICAgICAgICAgICAgICAgICAgICJkZXZpY2UgaWQ9IgotICAgICAgICAgICAgICAgICAgPDwgYWF1
ZGlvXy5kZXZpY2VfaWQoKTsKLSAgICBhYXVkaW9fLkNsZWFySW5wdXRTdHJlYW0oYXVkaW9fZGF0
YSwgbnVtX2ZyYW1lcyk7Ci0gICAgZmlyc3RfZGF0YV9jYWxsYmFja18gPSBmYWxzZTsKLSAgfQot
ICAvLyBDaGVjayBpZiB0aGUgb3ZlcmZsb3cgY291bnRlciBoYXMgaW5jcmVhc2VkIGFuZCBpZiBz
byBsb2cgYSB3YXJuaW5nLgotICAvLyBUT0RPKGhlbnJpa2EpOiBwb3NzaWJsZSBhZGQgVU1BIHN0
YXQgb3IgY2FwYWNpdHkgZXh0ZW5zaW9uLgotICBjb25zdCBpbnQzMl90IG92ZXJmbG93X2NvdW50
ID0gYWF1ZGlvXy54cnVuX2NvdW50KCk7Ci0gIGlmIChvdmVyZmxvd19jb3VudCA+IG92ZXJmbG93
X2NvdW50XykgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJPdmVyZmxvdyBkZXRlY3RlZDog
IiA8PCBvdmVyZmxvd19jb3VudDsKLSAgICBvdmVyZmxvd19jb3VudF8gPSBvdmVyZmxvd19jb3Vu
dDsKLSAgfQotICAvLyBFc3RpbWF0ZWQgdGltZSBiZXR3ZWVuIGFuIGF1ZGlvIGZyYW1lIHdhcyBy
ZWNvcmRlZCBieSB0aGUgaW5wdXQgZGV2aWNlIGFuZAotICAvLyBpdCBjYW4gcmVhZCBvbiB0aGUg
aW5wdXQgc3RyZWFtLgotICBsYXRlbmN5X21pbGxpc18gPSBhYXVkaW9fLkVzdGltYXRlTGF0ZW5j
eU1pbGxpcygpOwotICAvLyBUT0RPKGhlbnJpa2EpOiB1c2UgZm9yIGRldmVsb3BtZW50IG9ubHku
Ci0gIGlmIChhYXVkaW9fLmZyYW1lc19yZWFkKCkgJSAoMTAwMCAqIGFhdWRpb18uZnJhbWVzX3Bl
cl9idXJzdCgpKSA9PSAwKSB7Ci0gICAgUlRDX0RMT0coSU5GTykgPDwgImlucHV0IGxhdGVuY3k6
ICIgPDwgbGF0ZW5jeV9taWxsaXNfCi0gICAgICAgICAgICAgICAgICAgPDwgIiwgbnVtX2ZyYW1l
czogIiA8PCBudW1fZnJhbWVzOwotICB9Ci0gIC8vIENvcHkgcmVjb3JkZWQgYXVkaW8gaW4gfGF1
ZGlvX2RhdGF8IHRvIHRoZSBXZWJSVEMgc2luayB1c2luZyB0aGUKLSAgLy8gRmluZUF1ZGlvQnVm
ZmVyIG9iamVjdC4KLSAgZmluZV9hdWRpb19idWZmZXJfLT5EZWxpdmVyUmVjb3JkZWREYXRhKAot
ICAgICAgcnRjOjpNYWtlQXJyYXlWaWV3KHN0YXRpY19jYXN0PGNvbnN0IGludDE2X3QqPihhdWRp
b19kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhYXVkaW9fLnNhbXBsZXNfcGVyX2Zy
YW1lKCkgKiBudW1fZnJhbWVzKSwKLSAgICAgIHN0YXRpY19jYXN0PGludD4obGF0ZW5jeV9taWxs
aXNfICsgMC41KSk7Ci0KLSAgcmV0dXJuIEFBVURJT19DQUxMQkFDS19SRVNVTFRfQ09OVElOVUU7
Ci19Ci0KLXZvaWQgQUF1ZGlvUmVjb3JkZXI6Ok9uTWVzc2FnZShydGM6Ok1lc3NhZ2UqIG1zZykg
ewotICBSVENfRENIRUNLX1JVTl9PTigmdGhyZWFkX2NoZWNrZXJfKTsKLSAgc3dpdGNoIChtc2ct
Pm1lc3NhZ2VfaWQpIHsKLSAgICBjYXNlIGtNZXNzYWdlSW5wdXRTdHJlYW1EaXNjb25uZWN0ZWQ6
Ci0gICAgICBIYW5kbGVTdHJlYW1EaXNjb25uZWN0ZWQoKTsKLSAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiSW52YWxpZCBtZXNzYWdlIGlkOiAi
IDw8IG1zZy0+bWVzc2FnZV9pZDsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXZvaWQgQUF1ZGlv
UmVjb3JkZXI6OkhhbmRsZVN0cmVhbURpc2Nvbm5lY3RlZCgpIHsKLSAgUlRDX0RDSEVDS19SVU5f
T04oJnRocmVhZF9jaGVja2VyXyk7Ci0gIFJUQ19MT0coSU5GTykgPDwgIkhhbmRsZVN0cmVhbURp
c2Nvbm5lY3RlZCI7Ci0gIGlmICghaW5pdGlhbGl6ZWRfIHx8ICFyZWNvcmRpbmdfKSB7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIC8vIFBlcmZvcm0gYSByZXN0YXJ0IGJ5IGZpcnN0IGNsb3NpbmcgdGhl
IGRpc2Nvbm5lY3RlZCBzdHJlYW0gYW5kIHRoZW4gc3RhcnQKLSAgLy8gYSBuZXcgc3RyZWFtOyB0
aGlzIHRpbWUgdXNpbmcgdGhlIG5ldyAocHJlZmVycmVkKSBhdWRpbyBpbnB1dCBkZXZpY2UuCi0g
IC8vIFRPRE8oaGVucmlrYSk6IHJlc29sdmUgaXNzdWUgd2hlcmUgYSBvbmUgcmVzdGFydCBhdHRl
bXB0IGxlYWRzIHRvIGEgbG9uZwotICAvLyBzZXF1ZW5jZSBvZiBuZXcgY2FsbHMgdG8gT25FcnJv
ckNhbGxiYWNrKCkuCi0gIC8vIFNlZSBiLzczMTQ4OTc2IGZvciBkZXRhaWxzLgotICBTdG9wUmVj
b3JkaW5nKCk7Ci0gIEluaXRSZWNvcmRpbmcoKTsKLSAgU3RhcnRSZWNvcmRpbmcoKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGpuaQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2F1ZGlvX2RldmljZS9hYXVkaW9fcmVjb3JkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNl
L2FhdWRpb19yZWNvcmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWQwZmEy
ZDVjZTMzM2UxMThlNjQ5YmUzZmVkMGI2ZDhiZWE5MWY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRpb19yZWNvcmRl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfQVVESU9fREVWSUNFX0FBVURJT19SRUNP
UkRFUl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BQVVESU9f
UkVDT1JERVJfSF8KLQotI2luY2x1ZGUgPGFhdWRpby9BQXVkaW8uaD4KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0KLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfYnVmZmVy
LmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2Vf
ZGVmaW5lcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL21lc3NhZ2VfaGFuZGxlci5oIgotI2luY2x1
ZGUgInJ0Y19iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2Vy
LmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3dy
YXBwZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hdWRp
b19kZXZpY2VfbW9kdWxlLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1jbGFzcyBGaW5lQXVk
aW9CdWZmZXI7Ci1jbGFzcyBBdWRpb0RldmljZUJ1ZmZlcjsKLQotbmFtZXNwYWNlIGpuaSB7Ci0K
LS8vIEltcGxlbWVudHMgbG93LWxhdGVuY3kgMTYtYml0IG1vbm8gUENNIGF1ZGlvIGlucHV0IHN1
cHBvcnQgZm9yIEFuZHJvaWQKLS8vIHVzaW5nIHRoZSBDIGJhc2VkIEFBdWRpbyBBUEkuCi0vLwot
Ly8gQW4gaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgb24gb25lIGFuZCB0
aGUgc2FtZSB0aHJlYWQuCi0vLyBBbGwgcHVibGljIG1ldGhvZHMgbXVzdCBhbHNvIGJlIGNhbGxl
ZCBvbiB0aGUgc2FtZSB0aHJlYWQuIEEgdGhyZWFkIGNoZWNrZXIKLS8vIHdpbGwgUlRDX0RDSEVD
SyBpZiBhbnkgbWV0aG9kIGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRocmVhZC4gQXVkaW8gYnVm
ZmVycwotLy8gYXJlIGRlbGl2ZXJlZCBvbiBhIGRlZGljYXRlZCBoaWdoLXByaW9yaXR5IHRocmVh
ZCBvd25lZCBieSBBQXVkaW8uCi0vLwotLy8gVGhlIGV4aXN0aW5nIGRlc2lnbiBmb3JjZXMgdGhl
IHVzZXIgdG8gY2FsbCBJbml0UmVjb3JkaW5nKCkgYWZ0ZXIKLS8vIFN0b3BSZWNvcmRpbmcoKSB0
byBiZSBhYmxlIHRvIGNhbGwgU3RhcnRSZWNvcmRpbmcoKSBhZ2Fpbi4gVGhpcyBpcyBpbiBsaW5l
Ci0vLyB3aXRoIGhvdyB0aGUgSmF2YS0gYmFzZWQgaW1wbGVtZW50YXRpb24gd29ya3MuCi0vLwot
Ly8gVE9ETyhoZW5yaWthKTogYWRkIGNvbW1lbnRzIGFib3V0IGRldmljZSBjaGFuZ2VzIGFuZCBh
ZGFwdGl2ZSBidWZmZXIKLS8vIG1hbmFnZW1lbnQuCi1jbGFzcyBBQXVkaW9SZWNvcmRlciA6IHB1
YmxpYyBBdWRpb0lucHV0LAotICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgQUF1ZGlvT2Jz
ZXJ2ZXJJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBydGM6Ok1lc3Nh
Z2VIYW5kbGVyIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEFBdWRpb1JlY29yZGVyKGNvbnN0IEF1
ZGlvUGFyYW1ldGVycyYgYXVkaW9fcGFyYW1ldGVycyk7Ci0gIH5BQXVkaW9SZWNvcmRlcigpIG92
ZXJyaWRlOwotCi0gIGludCBJbml0KCkgb3ZlcnJpZGU7Ci0gIGludCBUZXJtaW5hdGUoKSBvdmVy
cmlkZTsKLQotICBpbnQgSW5pdFJlY29yZGluZygpIG92ZXJyaWRlOwotICBib29sIFJlY29yZGlu
Z0lzSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZTsKLQotICBpbnQgU3RhcnRSZWNvcmRpbmco
KSBvdmVycmlkZTsKLSAgaW50IFN0b3BSZWNvcmRpbmcoKSBvdmVycmlkZTsKLSAgYm9vbCBSZWNv
cmRpbmcoKSBjb25zdCBvdmVycmlkZTsKLQotICB2b2lkIEF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlv
RGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcikgb3ZlcnJpZGU7Ci0KLSAgLy8gVE9ETyhoZW5yaWth
KTogYWRkIHN1cHBvcnQgdXNpbmcgQUF1ZGlvIEFQSXMgd2hlbiBhdmFpbGFibGUuCi0gIGJvb2wg
SXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlOwotICBib29s
IElzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIGludCBFbmFi
bGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKSBvdmVycmlkZTsKLSAgaW50IEVuYWJsZUJ1aWx0SW5O
Uyhib29sIGVuYWJsZSkgb3ZlcnJpZGU7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIEFBdWRpb09ic2Vy
dmVySW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLgotCi0gIC8vIEZvciBhbiBpbnB1dCBzdHJlYW0s
IHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWQgfG51bV9mcmFtZXN8IG9mIHJlY29yZGVkCi0gIC8v
IGRhdGEsIGluIHRoZSBzdHJlYW0ncyBjdXJyZW50IGRhdGEgZm9ybWF0LCBmcm9tIHRoZSB8YXVk
aW9fZGF0YXwgYnVmZmVyLgotICAvLyBDYWxsZWQgb24gYSByZWFsLXRpbWUgdGhyZWFkIG93bmVk
IGJ5IEFBdWRpby4KLSAgYWF1ZGlvX2RhdGFfY2FsbGJhY2tfcmVzdWx0X3QgT25EYXRhQ2FsbGJh
Y2sodm9pZCogYXVkaW9fZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBudW1fZnJhbWVzKSBvdmVycmlkZTsKLQotICAvLyBBQXVkaW8g
Y2FsbHMgdGhpcyBmdW5jdGlvbiBpZiBhbnkgZXJyb3Igb2NjdXJzIG9uIGEgY2FsbGJhY2sgdGhy
ZWFkLgotICAvLyBDYWxsZWQgb24gYSByZWFsLXRpbWUgdGhyZWFkIG93bmVkIGJ5IEFBdWRpby4K
LSAgdm9pZCBPbkVycm9yQ2FsbGJhY2soYWF1ZGlvX3Jlc3VsdF90IGVycm9yKSBvdmVycmlkZTsK
LQotICAvLyBydGM6Ok1lc3NhZ2VIYW5kbGVyIHVzZWQgZm9yIHJlc3RhcnQgbWVzc2FnZXMuCi0g
IHZvaWQgT25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSogbXNnKSBvdmVycmlkZTsKLQotIHByaXZhdGU6
Ci0gIC8vIENsb3NlcyB0aGUgZXhpc3Rpbmcgc3RyZWFtIGFuZCBzdGFydHMgYSBuZXcgc3RyZWFt
LgotICB2b2lkIEhhbmRsZVN0cmVhbURpc2Nvbm5lY3RlZCgpOwotCi0gIC8vIEVuc3VyZXMgdGhh
dCBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgYXMgdGhpcyBvYmplY3Qg
aXMKLSAgLy8gY3JlYXRlZCBvbi4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2Vy
XzsKLQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8gQUF1ZGlvUGxheWVy
OjpPbkRhdGFDYWxsYmFjayBmcm9tIGEKLSAgLy8gcmVhbC10aW1lIHRocmVhZCBvd25lZCBieSBB
QXVkaW8uIERldGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcwotICAvLyBvYmplY3Qu
Ci0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl9hYXVkaW9fOwotCi0gIC8vIFRo
ZSB0aHJlYWQgb24gd2hpY2ggdGhpcyBvYmplY3QgaXMgY3JlYXRlZCBvbi4KLSAgcnRjOjpUaHJl
YWQqIG1haW5fdGhyZWFkXzsKLQotICAvLyBXcmFwcyBhbGwgQUF1ZGlvIHJlc291cmNlcy4gQ29u
dGFpbnMgYW4gaW5wdXQgc3RyZWFtIHVzaW5nIHRoZSBkZWZhdWx0Ci0gIC8vIGlucHV0IGF1ZGlv
IGRldmljZS4KLSAgQUF1ZGlvV3JhcHBlciBhYXVkaW9fOwotCi0gIC8vIFJhdyBwb2ludGVyIGhh
bmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hBdWRpb0J1ZmZlcigpLiBPd25lZCBieSB0aGUK
LSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNsYXNzIGFuZCBjYWxsZWQgYnkgQXVkaW9EZXZp
Y2VNb2R1bGU6OkNyZWF0ZSgpLgotICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1
ZmZlcl8gPSBudWxscHRyOwotCi0gIGJvb2wgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gIGJvb2wg
cmVjb3JkaW5nXyA9IGZhbHNlOwotCi0gIC8vIENvbnN1bWVzIGF1ZGlvIG9mIG5hdGl2ZSBidWZm
ZXIgc2l6ZSBhbmQgZmVlZHMgdGhlIFdlYlJUQyBsYXllciB3aXRoIDEwbXMKLSAgLy8gY2h1bmtz
IG9mIGF1ZGlvLgotICBzdGQ6OnVuaXF1ZV9wdHI8RmluZUF1ZGlvQnVmZmVyPiBmaW5lX2F1ZGlv
X2J1ZmZlcl87Ci0KLSAgLy8gQ291bnRzIG51bWJlciBvZiBkZXRlY3RlZCBvdmVyZmxvdyBldmVu
dHMgcmVwb3J0ZWQgYnkgQUF1ZGlvLgotICBpbnQzMl90IG92ZXJmbG93X2NvdW50XyA9IDA7Ci0K
LSAgLy8gRXN0aW1hdGVkIHRpbWUgYmV0d2VlbiBhbiBhdWRpbyBmcmFtZSB3YXMgcmVjb3JkZWQg
YnkgdGhlIGlucHV0IGRldmljZSBhbmQKLSAgLy8gaXQgY2FuIHJlYWQgb24gdGhlIGlucHV0IHN0
cmVhbS4KLSAgZG91YmxlIGxhdGVuY3lfbWlsbGlzXyA9IDA7Ci0KLSAgLy8gVHJ1ZSBvbmx5IGZv
ciB0aGUgZmlyc3QgZGF0YSBjYWxsYmFjayBpbiBlYWNoIGF1ZGlvIHNlc3Npb24uCi0gIGJvb2wg
Zmlyc3RfZGF0YV9jYWxsYmFja18gPSB0cnVlOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQot
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pO
SV9BVURJT19ERVZJQ0VfQUFVRElPX1JFQ09SREVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlv
X2RldmljZS9hYXVkaW9fd3JhcHBlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRpb193cmFw
cGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2U3MjBmZWMzMTllZGMxNzJi
NTFkZmE1MTJmMTUyOTA1OTEwNmJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRpb193cmFwcGVyLmNjCisrKyAvZGV2
L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3dyYXBwZXIuaCIKLQot
I2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9zdHJpbmdz
L3N0cmluZ19idWlsZGVyLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGltZV91dGlscy5oIgotCi0j
ZGVmaW5lIExPR19PTl9FUlJPUihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWF1ZGlv
X3Jlc3VsdF90IHJlc3VsdCA9IChvcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgaWYgKHJlc3VsdCAhPSBBQVVESU9fT0spIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBSVENfTE9HKExTX0VS
Uk9SKSA8PCAjb3AgPDwgIjogIiA8PCBBQXVkaW9fY29udmVydFJlc3VsdFRvVGV4dChyZXN1bHQp
OyBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVU
VVJOX09OX0VSUk9SKG9wLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYXVkaW9fcmVzdWx0X3Qg
cmVzdWx0ID0gKG9wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBpZiAocmVzdWx0ICE9IEFBVURJT19PSykgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICNv
cCA8PCAiOiAiIDw8IEFBdWRpb19jb252ZXJ0UmVzdWx0VG9UZXh0KHJlc3VsdCk7IFwKLSAgICAg
IHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSBqbmkgewotCi1uYW1lc3BhY2Ugewot
Ci1jb25zdCBjaGFyKiBEaXJlY3Rpb25Ub1N0cmluZyhhYXVkaW9fZGlyZWN0aW9uX3QgZGlyZWN0
aW9uKSB7Ci0gIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBBQVVESU9fRElSRUNUSU9O
X09VVFBVVDoKLSAgICAgIHJldHVybiAiT1VUUFVUIjsKLSAgICBjYXNlIEFBVURJT19ESVJFQ1RJ
T05fSU5QVVQ6Ci0gICAgICByZXR1cm4gIklOUFVUIjsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0
dXJuICJVTktOT1dOIjsKLSAgfQotfQotCi1jb25zdCBjaGFyKiBTaGFyaW5nTW9kZVRvU3RyaW5n
KGFhdWRpb19zaGFyaW5nX21vZGVfdCBtb2RlKSB7Ci0gIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgQUFVRElPX1NIQVJJTkdfTU9ERV9FWENMVVNJVkU6Ci0gICAgICByZXR1cm4gIkVYQ0xVU0lW
RSI7Ci0gICAgY2FzZSBBQVVESU9fU0hBUklOR19NT0RFX1NIQVJFRDoKLSAgICAgIHJldHVybiAi
U0hBUkVEIjsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuICJVTktOT1dOIjsKLSAgfQotfQot
Ci1jb25zdCBjaGFyKiBQZXJmb3JtYW5jZU1vZGVUb1N0cmluZyhhYXVkaW9fcGVyZm9ybWFuY2Vf
bW9kZV90IG1vZGUpIHsKLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBQVVESU9fUEVSRk9S
TUFOQ0VfTU9ERV9OT05FOgotICAgICAgcmV0dXJuICJOT05FIjsKLSAgICBjYXNlIEFBVURJT19Q
RVJGT1JNQU5DRV9NT0RFX1BPV0VSX1NBVklORzoKLSAgICAgIHJldHVybiAiUE9XRVJfU0FWSU5H
IjsKLSAgICBjYXNlIEFBVURJT19QRVJGT1JNQU5DRV9NT0RFX0xPV19MQVRFTkNZOgotICAgICAg
cmV0dXJuICJMT1dfTEFURU5DWSI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAiVU5LTk9X
TiI7Ci0gIH0KLX0KLQotY29uc3QgY2hhciogRm9ybWF0VG9TdHJpbmcoaW50MzJfdCBpZCkgewot
ICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBBQVVESU9fRk9STUFUX0lOVkFMSUQ6Ci0gICAgICBy
ZXR1cm4gIklOVkFMSUQiOwotICAgIGNhc2UgQUFVRElPX0ZPUk1BVF9VTlNQRUNJRklFRDoKLSAg
ICAgIHJldHVybiAiVU5TUEVDSUZJRUQiOwotICAgIGNhc2UgQUFVRElPX0ZPUk1BVF9QQ01fSTE2
OgotICAgICAgcmV0dXJuICJQQ01fSTE2IjsKLSAgICBjYXNlIEFBVURJT19GT1JNQVRfUENNX0ZM
T0FUOgotICAgICAgcmV0dXJuICJGTE9BVCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAi
VU5LTk9XTiI7Ci0gIH0KLX0KLQotdm9pZCBFcnJvckNhbGxiYWNrKEFBdWRpb1N0cmVhbSogc3Ry
ZWFtLAotICAgICAgICAgICAgICAgICAgIHZvaWQqIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAg
ICAgICBhYXVkaW9fcmVzdWx0X3QgZXJyb3IpIHsKLSAgUlRDX0RDSEVDSyh1c2VyX2RhdGEpOwot
ICBBQXVkaW9XcmFwcGVyKiBhYXVkaW9fd3JhcHBlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QUF1ZGlv
V3JhcHBlcio+KHVzZXJfZGF0YSk7Ci0gIFJUQ19MT0coV0FSTklORykgPDwgIkVycm9yQ2FsbGJh
Y2s6ICIKLSAgICAgICAgICAgICAgICAgICA8PCBEaXJlY3Rpb25Ub1N0cmluZyhhYXVkaW9fd3Jh
cHBlci0+ZGlyZWN0aW9uKCkpOwotICBSVENfRENIRUNLKGFhdWRpb193cmFwcGVyLT5vYnNlcnZl
cigpKTsKLSAgYWF1ZGlvX3dyYXBwZXItPm9ic2VydmVyKCktPk9uRXJyb3JDYWxsYmFjayhlcnJv
cik7Ci19Ci0KLWFhdWRpb19kYXRhX2NhbGxiYWNrX3Jlc3VsdF90IERhdGFDYWxsYmFjayhBQXVk
aW9TdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkKiB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCogYXVkaW9fZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90IG51bV9mcmFtZXMpIHsKLSAgUlRDX0RDSEVDSyh1c2VyX2Rh
dGEpOwotICBSVENfRENIRUNLKGF1ZGlvX2RhdGEpOwotICBBQXVkaW9XcmFwcGVyKiBhYXVkaW9f
d3JhcHBlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QUF1ZGlvV3JhcHBlcio+KHVzZXJfZGF0YSk7Ci0g
IFJUQ19EQ0hFQ0soYWF1ZGlvX3dyYXBwZXItPm9ic2VydmVyKCkpOwotICByZXR1cm4gYWF1ZGlv
X3dyYXBwZXItPm9ic2VydmVyKCktPk9uRGF0YUNhbGxiYWNrKGF1ZGlvX2RhdGEsIG51bV9mcmFt
ZXMpOwotfQotCi0vLyBXcmFwcyB0aGUgc3RyZWFtIGJ1aWxkZXIgb2JqZWN0IHRvIGVuc3VyZSB0
aGF0IGl0IGlzIHJlbGVhc2VkIHByb3Blcmx5IHdoZW4KLS8vIHRoZSBzdHJlYW0gYnVpbGRlciBn
b2VzIG91dCBvZiBzY29wZS4KLWNsYXNzIFNjb3BlZFN0cmVhbUJ1aWxkZXIgewotIHB1YmxpYzoK
LSAgU2NvcGVkU3RyZWFtQnVpbGRlcigpIHsKLSAgICBMT0dfT05fRVJST1IoQUF1ZGlvX2NyZWF0
ZVN0cmVhbUJ1aWxkZXIoJmJ1aWxkZXJfKSk7Ci0gICAgUlRDX0RDSEVDSyhidWlsZGVyXyk7Ci0g
IH0KLSAgflNjb3BlZFN0cmVhbUJ1aWxkZXIoKSB7Ci0gICAgaWYgKGJ1aWxkZXJfKSB7Ci0gICAg
ICBMT0dfT05fRVJST1IoQUF1ZGlvU3RyZWFtQnVpbGRlcl9kZWxldGUoYnVpbGRlcl8pKTsKLSAg
ICB9Ci0gIH0KLQotICBBQXVkaW9TdHJlYW1CdWlsZGVyKiBnZXQoKSBjb25zdCB7IHJldHVybiBi
dWlsZGVyXzsgfQotCi0gcHJpdmF0ZToKLSAgQUF1ZGlvU3RyZWFtQnVpbGRlciogYnVpbGRlcl8g
PSBudWxscHRyOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlCi0KLUFBdWRpb1dyYXBwZXI6OkFBdWRp
b1dyYXBwZXIoY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBhdWRpb19wYXJhbWV0ZXJzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhYXVkaW9fZGlyZWN0aW9uX3QgZGlyZWN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBQXVkaW9PYnNlcnZlckludGVyZmFjZSogb2JzZXJ2
ZXIpCi0gICAgOiBhdWRpb19wYXJhbWV0ZXJzXyhhdWRpb19wYXJhbWV0ZXJzKSwKLSAgICAgIGRp
cmVjdGlvbl8oZGlyZWN0aW9uKSwKLSAgICAgIG9ic2VydmVyXyhvYnNlcnZlcikgewotICBSVENf
TE9HKElORk8pIDw8ICJjdG9yIjsKLSAgUlRDX0RDSEVDSyhvYnNlcnZlcl8pOwotICBhYXVkaW9f
dGhyZWFkX2NoZWNrZXJfLkRldGFjaCgpOwotICBSVENfTE9HKElORk8pIDw8IGF1ZGlvX3BhcmFt
ZXRlcnNfLlRvU3RyaW5nKCk7Ci19Ci0KLUFBdWRpb1dyYXBwZXI6On5BQXVkaW9XcmFwcGVyKCkg
ewotICBSVENfTE9HKElORk8pIDw8ICJkdG9yIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tl
cl8uSXNDdXJyZW50KCkpOwotICBSVENfRENIRUNLKCFzdHJlYW1fKTsKLX0KLQotYm9vbCBBQXVk
aW9XcmFwcGVyOjpJbml0KCkgewotICBSVENfTE9HKElORk8pIDw8ICJJbml0IjsKLSAgUlRDX0RD
SEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICAvLyBDcmVhdGVzIGEgc3RyZWFt
IGJ1aWxkZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb3BlbiBhbiBhdWRpbyBzdHJlYW0uCi0gIFNj
b3BlZFN0cmVhbUJ1aWxkZXIgYnVpbGRlcjsKLSAgLy8gQ29uZmlndXJlcyB0aGUgc3RyZWFtIGJ1
aWxkZXIgdXNpbmcgYXVkaW8gcGFyYW1ldGVycyBnaXZlbiBhdCBjb25zdHJ1Y3Rpb24uCi0gIFNl
dFN0cmVhbUNvbmZpZ3VyYXRpb24oYnVpbGRlci5nZXQoKSk7Ci0gIC8vIE9wZW5zIGEgc3RyZWFt
IGJhc2VkIG9uIG9wdGlvbnMgaW4gdGhlIHN0cmVhbSBidWlsZGVyLgotICBpZiAoIU9wZW5TdHJl
YW0oYnVpbGRlci5nZXQoKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gRW5zdXJl
cyB0aGF0IHRoZSBvcGVuZWQgc3RyZWFtIGNvdWxkIGFjdGl2YXRlIHRoZSByZXF1ZXN0ZWQgc2V0
dGluZ3MuCi0gIGlmICghVmVyaWZ5U3RyZWFtQ29uZmlndXJhdGlvbigpKSB7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0gIC8vIE9wdGltaXplcyB0aGUgYnVmZmVyIHNjaGVtZSBmb3IgbG93ZXN0
IHBvc3NpYmxlIGxhdGVuY3kgYW5kIGNyZWF0ZXMKLSAgLy8gYWRkaXRpb25hbCBidWZmZXIgbG9n
aWMgdG8gbWF0Y2ggdGhlIDEwbXMgYnVmZmVyIHNpemUgdXNlZCBpbiBXZWJSVEMuCi0gIGlmICgh
T3B0aW1pemVCdWZmZXJzKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgTG9nU3RyZWFt
U3RhdGUoKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQUF1ZGlvV3JhcHBlcjo6U3RhcnQo
KSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlN0YXJ0IjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICAvLyBUT0RPKGhlbnJpa2EpOiB0aGlzIHN0YXRlIGNoZWNr
IG1pZ2h0IG5vdCBiZSBuZWVkZWQuCi0gIGFhdWRpb19zdHJlYW1fc3RhdGVfdCBjdXJyZW50X3N0
YXRlID0gQUF1ZGlvU3RyZWFtX2dldFN0YXRlKHN0cmVhbV8pOwotICBpZiAoY3VycmVudF9zdGF0
ZSAhPSBBQVVESU9fU1RSRUFNX1NUQVRFX09QRU4pIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8
PCAiSW52YWxpZCBzdGF0ZTogIgotICAgICAgICAgICAgICAgICAgICAgIDw8IEFBdWRpb19jb252
ZXJ0U3RyZWFtU3RhdGVUb1RleHQoY3VycmVudF9zdGF0ZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0gIC8vIEFzeW5jaHJvbm91cyByZXF1ZXN0IGZvciB0aGUgc3RyZWFtIHRvIHN0YXJ0Lgot
ICBSRVRVUk5fT05fRVJST1IoQUF1ZGlvU3RyZWFtX3JlcXVlc3RTdGFydChzdHJlYW1fKSwgZmFs
c2UpOwotICBMb2dTdHJlYW1TdGF0ZSgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBQXVk
aW9XcmFwcGVyOjpTdG9wKCkgewotICBSVENfTE9HKElORk8pIDw8ICJTdG9wOiAiIDw8IERpcmVj
dGlvblRvU3RyaW5nKGRpcmVjdGlvbigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8u
SXNDdXJyZW50KCkpOwotICAvLyBBc3luY2hyb25vdXMgcmVxdWVzdCBmb3IgdGhlIHN0cmVhbSB0
byBzdG9wLgotICBSRVRVUk5fT05fRVJST1IoQUF1ZGlvU3RyZWFtX3JlcXVlc3RTdG9wKHN0cmVh
bV8pLCBmYWxzZSk7Ci0gIENsb3NlU3RyZWFtKCk7Ci0gIGFhdWRpb190aHJlYWRfY2hlY2tlcl8u
RGV0YWNoKCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1kb3VibGUgQUF1ZGlvV3JhcHBlcjo6RXN0
aW1hdGVMYXRlbmN5TWlsbGlzKCkgY29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICBk
b3VibGUgbGF0ZW5jeV9taWxsaXMgPSAwLjA7Ci0gIGlmIChkaXJlY3Rpb24oKSA9PSBBQVVESU9f
RElSRUNUSU9OX0lOUFVUKSB7Ci0gICAgLy8gRm9yIGlucHV0IHN0cmVhbXMuIEJlc3QgZ3Vlc3Mg
d2UgY2FuIGRvIGlzIHRvIHVzZSB0aGUgY3VycmVudCBidXJzdCBzaXplCi0gICAgLy8gYXMgZGVs
YXkgZXN0aW1hdGUuCi0gICAgbGF0ZW5jeV9taWxsaXMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGZy
YW1lc19wZXJfYnVyc3QoKSkgLyBzYW1wbGVfcmF0ZSgpICoKLSAgICAgICAgICAgICAgICAgICAg
IHJ0Yzo6a051bU1pbGxpc2Vjc1BlclNlYzsKLSAgfSBlbHNlIHsKLSAgICBpbnQ2NF90IGV4aXN0
aW5nX2ZyYW1lX2luZGV4OwotICAgIGludDY0X3QgZXhpc3RpbmdfZnJhbWVfcHJlc2VudGF0aW9u
X3RpbWU7Ci0gICAgLy8gR2V0IHRoZSB0aW1lIGF0IHdoaWNoIGEgcGFydGljdWxhciBmcmFtZSB3
YXMgcHJlc2VudGVkIHRvIGF1ZGlvIGhhcmR3YXJlLgotICAgIGFhdWRpb19yZXN1bHRfdCByZXN1
bHQgPSBBQXVkaW9TdHJlYW1fZ2V0VGltZXN0YW1wKAotICAgICAgICBzdHJlYW1fLCBDTE9DS19N
T05PVE9OSUMsICZleGlzdGluZ19mcmFtZV9pbmRleCwKLSAgICAgICAgJmV4aXN0aW5nX2ZyYW1l
X3ByZXNlbnRhdGlvbl90aW1lKTsKLSAgICAvLyBSZXN1bHRzIGFyZSBvbmx5IHZhbGlkIHdoZW4g
dGhlIHN0cmVhbSBpcyBpbiBBQVVESU9fU1RSRUFNX1NUQVRFX1NUQVJURUQuCi0gICAgaWYgKHJl
c3VsdCA9PSBBQVVESU9fT0spIHsKLSAgICAgIC8vIEdldCB3cml0ZSBpbmRleCBmb3IgbmV4dCBh
dWRpbyBmcmFtZS4KLSAgICAgIGludDY0X3QgbmV4dF9mcmFtZV9pbmRleCA9IGZyYW1lc193cml0
dGVuKCk7Ci0gICAgICAvLyBOdW1iZXIgb2YgZnJhbWVzIGJldHdlZW4gbmV4dCBmcmFtZSBhbmQg
dGhlIGV4aXN0aW5nIGZyYW1lLgotICAgICAgaW50NjRfdCBmcmFtZV9pbmRleF9kZWx0YSA9IG5l
eHRfZnJhbWVfaW5kZXggLSBleGlzdGluZ19mcmFtZV9pbmRleDsKLSAgICAgIC8vIEFzc3VtZSB0
aGUgbmV4dCBmcmFtZSB3aWxsIGJlIHdyaXR0ZW4gbm93LgotICAgICAgaW50NjRfdCBuZXh0X2Zy
YW1lX3dyaXRlX3RpbWUgPSBydGM6OlRpbWVOYW5vcygpOwotICAgICAgLy8gQ2FsY3VsYXRlIHRp
bWUgd2hlbiBuZXh0IGZyYW1lIHdpbGwgYmUgcHJlc2VudGVkIHRvIHRoZSBoYXJkd2FyZSB0YWtp
bmcKLSAgICAgIC8vIHNhbXBsZSByYXRlIGludG8gYWNjb3VudC4KLSAgICAgIGludDY0X3QgZnJh
bWVfdGltZV9kZWx0YSA9Ci0gICAgICAgICAgKGZyYW1lX2luZGV4X2RlbHRhICogcnRjOjprTnVt
TmFub3NlY3NQZXJTZWMpIC8gc2FtcGxlX3JhdGUoKTsKLSAgICAgIGludDY0X3QgbmV4dF9mcmFt
ZV9wcmVzZW50YXRpb25fdGltZSA9Ci0gICAgICAgICAgZXhpc3RpbmdfZnJhbWVfcHJlc2VudGF0
aW9uX3RpbWUgKyBmcmFtZV90aW1lX2RlbHRhOwotICAgICAgLy8gRGVyaXZlIGEgbGF0ZW5jeSBl
c3RpbWF0ZSBnaXZlbiByZXN1bHRzIGFib3ZlLgotICAgICAgbGF0ZW5jeV9taWxsaXMgPSBzdGF0
aWNfY2FzdDxkb3VibGU+KG5leHRfZnJhbWVfcHJlc2VudGF0aW9uX3RpbWUgLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfZnJhbWVfd3JpdGVfdGltZSkg
LwotICAgICAgICAgICAgICAgICAgICAgICBydGM6OmtOdW1OYW5vc2Vjc1Blck1pbGxpc2VjOwot
ICAgIH0KLSAgfQotICByZXR1cm4gbGF0ZW5jeV9taWxsaXM7Ci19Ci0KLS8vIFJldHVybnMgbmV3
IGJ1ZmZlciBzaXplIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUgaWYgYnVmZmVyIHNpemUgY291
bGQgbm90Ci0vLyBiZSBpbmNyZWFzZWQuCi1ib29sIEFBdWRpb1dyYXBwZXI6OkluY3JlYXNlT3V0
cHV0QnVmZmVyU2l6ZSgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiSW5jcmVhc2VCdWZmZXJTaXpl
IjsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsKLSAgUlRDX0RDSEVDSyhhYXVkaW9fdGhyZWFkX2No
ZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDS19FUShkaXJlY3Rpb24oKSwgQUFVRElP
X0RJUkVDVElPTl9PVVRQVVQpOwotICBhYXVkaW9fcmVzdWx0X3QgYnVmZmVyX3NpemUgPSBBQXVk
aW9TdHJlYW1fZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKHN0cmVhbV8pOwotICAvLyBUcnkgdG8gaW5j
cmVhc2Ugc2l6ZSBvZiBidWZmZXIgd2l0aCBvbmUgYnVyc3QgdG8gcmVkdWNlIHJpc2sgb2YgdW5k
ZXJydW4uCi0gIGJ1ZmZlcl9zaXplICs9IGZyYW1lc19wZXJfYnVyc3QoKTsKLSAgLy8gVmVyaWZ5
IHRoYXQgdGhlIG5ldyBidWZmZXIgc2l6ZSBpcyBub3QgbGFyZ2VyIHRoYW4gbWF4IGNhcGFjaXR5
LgotICAvLyBUT0RPKGhlbnJpa2EpOiBrZWVwIHRyYWNrIG9mIGNhc2Ugd2hlbiB3ZSByZWFjaCB0
aGUgY2FwYWNpdHkgbGltaXQuCi0gIGNvbnN0IGludDMyX3QgbWF4X2J1ZmZlcl9zaXplID0gYnVm
ZmVyX2NhcGFjaXR5X2luX2ZyYW1lcygpOwotICBpZiAoYnVmZmVyX3NpemUgPiBtYXhfYnVmZmVy
X3NpemUpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiUmVxdWlyZWQgYnVmZmVyIHNpemUg
KCIgPDwgYnVmZmVyX3NpemUKLSAgICAgICAgICAgICAgICAgICAgICA8PCAiKSBpcyBoaWdoZXIg
dGhhbiBtYXg6ICIgPDwgbWF4X2J1ZmZlcl9zaXplOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICBSVENfTE9HKElORk8pIDw8ICJVcGRhdGluZyBidWZmZXIgc2l6ZSB0bzogIiA8PCBidWZmZXJf
c2l6ZQotICAgICAgICAgICAgICAgIDw8ICIgKG1heD0iIDw8IG1heF9idWZmZXJfc2l6ZSA8PCAi
KSI7Ci0gIGJ1ZmZlcl9zaXplID0gQUF1ZGlvU3RyZWFtX3NldEJ1ZmZlclNpemVJbkZyYW1lcyhz
dHJlYW1fLCBidWZmZXJfc2l6ZSk7Ci0gIGlmIChidWZmZXJfc2l6ZSA8IDApIHsKLSAgICBSVENf
TE9HKExTX0VSUk9SKSA8PCAiRmFpbGVkIHRvIGNoYW5nZSBidWZmZXIgc2l6ZTogIgotICAgICAg
ICAgICAgICAgICAgICAgIDw8IEFBdWRpb19jb252ZXJ0UmVzdWx0VG9UZXh0KGJ1ZmZlcl9zaXpl
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgUlRDX0xPRyhJTkZPKSA8PCAiQnVmZmVyIHNp
emUgY2hhbmdlZCB0bzogIiA8PCBidWZmZXJfc2l6ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgQUF1ZGlvV3JhcHBlcjo6Q2xlYXJJbnB1dFN0cmVhbSh2b2lkKiBhdWRpb19kYXRhLCBpbnQz
Ml90IG51bV9mcmFtZXMpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiQ2xlYXJJbnB1dFN0cmVhbSI7
Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIFJUQ19EQ0hFQ0soYWF1ZGlvX3RocmVhZF9jaGVj
a2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFJUQ19EQ0hFQ0tfRVEoZGlyZWN0aW9uKCksIEFBVURJT19E
SVJFQ1RJT05fSU5QVVQpOwotICBhYXVkaW9fcmVzdWx0X3QgY2xlYXJlZF9mcmFtZXMgPSAwOwot
ICBkbyB7Ci0gICAgY2xlYXJlZF9mcmFtZXMgPSBBQXVkaW9TdHJlYW1fcmVhZChzdHJlYW1fLCBh
dWRpb19kYXRhLCBudW1fZnJhbWVzLCAwKTsKLSAgfSB3aGlsZSAoY2xlYXJlZF9mcmFtZXMgPiAw
KTsKLX0KLQotQUF1ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UqIEFBdWRpb1dyYXBwZXI6Om9ic2VydmVy
KCkgY29uc3QgewotICByZXR1cm4gb2JzZXJ2ZXJfOwotfQotCi1BdWRpb1BhcmFtZXRlcnMgQUF1
ZGlvV3JhcHBlcjo6YXVkaW9fcGFyYW1ldGVycygpIGNvbnN0IHsKLSAgcmV0dXJuIGF1ZGlvX3Bh
cmFtZXRlcnNfOwotfQotCi1pbnQzMl90IEFBdWRpb1dyYXBwZXI6OnNhbXBsZXNfcGVyX2ZyYW1l
KCkgY29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFt
X2dldFNhbXBsZXNQZXJGcmFtZShzdHJlYW1fKTsKLX0KLQotaW50MzJfdCBBQXVkaW9XcmFwcGVy
OjpidWZmZXJfc2l6ZV9pbl9mcmFtZXMoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7
Ci0gIHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKHN0cmVhbV8pOwot
fQotCi1pbnQzMl90IEFBdWRpb1dyYXBwZXI6OmJ1ZmZlcl9jYXBhY2l0eV9pbl9mcmFtZXMoKSBj
b25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0
QnVmZmVyQ2FwYWNpdHlJbkZyYW1lcyhzdHJlYW1fKTsKLX0KLQotaW50MzJfdCBBQXVkaW9XcmFw
cGVyOjpkZXZpY2VfaWQoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIHJldHVy
biBBQXVkaW9TdHJlYW1fZ2V0RGV2aWNlSWQoc3RyZWFtXyk7Ci19Ci0KLWludDMyX3QgQUF1ZGlv
V3JhcHBlcjo6eHJ1bl9jb3VudCgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsKLSAg
cmV0dXJuIEFBdWRpb1N0cmVhbV9nZXRYUnVuQ291bnQoc3RyZWFtXyk7Ci19Ci0KLWludDMyX3Qg
QUF1ZGlvV3JhcHBlcjo6Zm9ybWF0KCkgY29uc3QgewotICBSVENfRENIRUNLKHN0cmVhbV8pOwot
ICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldEZvcm1hdChzdHJlYW1fKTsKLX0KLQotaW50MzJfdCBB
QXVkaW9XcmFwcGVyOjpzYW1wbGVfcmF0ZSgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyhzdHJlYW1f
KTsKLSAgcmV0dXJuIEFBdWRpb1N0cmVhbV9nZXRTYW1wbGVSYXRlKHN0cmVhbV8pOwotfQotCi1p
bnQzMl90IEFBdWRpb1dyYXBwZXI6OmNoYW5uZWxfY291bnQoKSBjb25zdCB7Ci0gIFJUQ19EQ0hF
Q0soc3RyZWFtXyk7Ci0gIHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0Q2hhbm5lbENvdW50KHN0cmVh
bV8pOwotfQotCi1pbnQzMl90IEFBdWRpb1dyYXBwZXI6OmZyYW1lc19wZXJfY2FsbGJhY2soKSBj
b25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0
RnJhbWVzUGVyRGF0YUNhbGxiYWNrKHN0cmVhbV8pOwotfQotCi1hYXVkaW9fc2hhcmluZ19tb2Rl
X3QgQUF1ZGlvV3JhcHBlcjo6c2hhcmluZ19tb2RlKCkgY29uc3QgewotICBSVENfRENIRUNLKHN0
cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldFNoYXJpbmdNb2RlKHN0cmVhbV8pOwot
fQotCi1hYXVkaW9fcGVyZm9ybWFuY2VfbW9kZV90IEFBdWRpb1dyYXBwZXI6OnBlcmZvcm1hbmNl
X21vZGUoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIHJldHVybiBBQXVkaW9T
dHJlYW1fZ2V0UGVyZm9ybWFuY2VNb2RlKHN0cmVhbV8pOwotfQotCi1hYXVkaW9fc3RyZWFtX3N0
YXRlX3QgQUF1ZGlvV3JhcHBlcjo6c3RyZWFtX3N0YXRlKCkgY29uc3QgewotICBSVENfRENIRUNL
KHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldFN0YXRlKHN0cmVhbV8pOwotfQot
Ci1pbnQ2NF90IEFBdWRpb1dyYXBwZXI6OmZyYW1lc193cml0dGVuKCkgY29uc3QgewotICBSVENf
RENIRUNLKHN0cmVhbV8pOwotICByZXR1cm4gQUF1ZGlvU3RyZWFtX2dldEZyYW1lc1dyaXR0ZW4o
c3RyZWFtXyk7Ci19Ci0KLWludDY0X3QgQUF1ZGlvV3JhcHBlcjo6ZnJhbWVzX3JlYWQoKSBjb25z
dCB7Ci0gIFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIHJldHVybiBBQXVkaW9TdHJlYW1fZ2V0RnJh
bWVzUmVhZChzdHJlYW1fKTsKLX0KLQotdm9pZCBBQXVkaW9XcmFwcGVyOjpTZXRTdHJlYW1Db25m
aWd1cmF0aW9uKEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIpIHsKLSAgUlRDX0xPRyhJTkZP
KSA8PCAiU2V0U3RyZWFtQ29uZmlndXJhdGlvbiI7Ci0gIFJUQ19EQ0hFQ0soYnVpbGRlcik7Ci0g
IFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgLy8gUmVxdWVzdCB1
c2FnZSBvZiBkZWZhdWx0IHByaW1hcnkgb3V0cHV0L2lucHV0IGRldmljZS4KLSAgLy8gVE9ETyho
ZW5yaWthKTogdmVyaWZ5IHRoYXQgZGVmYXVsdCBkZXZpY2UgZm9sbG93cyBKYXZhIEFQSXMuCi0g
IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL21lZGlh
L0F1ZGlvRGV2aWNlSW5mby5odG1sLgotICBBQXVkaW9TdHJlYW1CdWlsZGVyX3NldERldmljZUlk
KGJ1aWxkZXIsIEFBVURJT19VTlNQRUNJRklFRCk7Ci0gIC8vIFVzZSBwcmVmZXJyZWQgc2FtcGxl
IHJhdGUgZ2l2ZW4gYnkgdGhlIGF1ZGlvIHBhcmFtZXRlcnMuCi0gIEFBdWRpb1N0cmVhbUJ1aWxk
ZXJfc2V0U2FtcGxlUmF0ZShidWlsZGVyLCBhdWRpb19wYXJhbWV0ZXJzKCkuc2FtcGxlX3JhdGUo
KSk7Ci0gIC8vIFVzZSBwcmVmZXJyZWQgY2hhbm5lbCBjb25maWd1cmF0aW9uIGdpdmVuIGJ5IHRo
ZSBhdWRpbyBwYXJhbWV0ZXJzLgotICBBQXVkaW9TdHJlYW1CdWlsZGVyX3NldENoYW5uZWxDb3Vu
dChidWlsZGVyLCBhdWRpb19wYXJhbWV0ZXJzKCkuY2hhbm5lbHMoKSk7Ci0gIC8vIEFsd2F5cyB1
c2UgMTYtYml0IFBDTSBhdWRpbyBzYW1wbGUgZm9ybWF0LgotICBBQXVkaW9TdHJlYW1CdWlsZGVy
X3NldEZvcm1hdChidWlsZGVyLCBBQVVESU9fRk9STUFUX1BDTV9JMTYpOwotICAvLyBUT0RPKGhl
bnJpa2EpOiBpbnZlc3RpZ2F0ZSBlZmZlY3Qgb2YgdXNpbmcgQUFVRElPX1NIQVJJTkdfTU9ERV9F
WENMVVNJVkUuCi0gIC8vIEFzayBmb3IgZXhjbHVzaXZlIG1vZGUgc2luY2UgdGhpcyB3aWxsIGdp
dmUgdXMgdGhlIGxvd2VzdCBwb3NzaWJsZSBsYXRlbmN5LgotICAvLyBJZiBleGNsdXNpdmUgbW9k
ZSBpc24ndCBhdmFpbGFibGUsIHNoYXJlZCBtb2RlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgotICBB
QXVkaW9TdHJlYW1CdWlsZGVyX3NldFNoYXJpbmdNb2RlKGJ1aWxkZXIsIEFBVURJT19TSEFSSU5H
X01PREVfU0hBUkVEKTsKLSAgLy8gVXNlIHRoZSBkaXJlY3Rpb24gdGhhdCB3YXMgZ2l2ZW4gYXQg
Y29uc3RydWN0aW9uLgotICBBQXVkaW9TdHJlYW1CdWlsZGVyX3NldERpcmVjdGlvbihidWlsZGVy
LCBkaXJlY3Rpb25fKTsKLSAgLy8gVE9ETyhoZW5yaWthKTogaW52ZXN0aWdhdGUgcGVyZm9ybWFu
Y2UgdXNpbmcgZGlmZmVyZW50IHBlcmZvcm1hbmNlIG1vZGVzLgotICBBQXVkaW9TdHJlYW1CdWls
ZGVyX3NldFBlcmZvcm1hbmNlTW9kZShidWlsZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBQVVESU9fUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFURU5DWSk7Ci0g
IC8vIEdpdmVuIHRoYXQgV2ViUlRDIGFwcGxpY2F0aW9ucyByZXF1aXJlIGxvdyBsYXRlbmN5LCBv
dXIgYXVkaW8gc3RyZWFtIHVzZXMKLSAgLy8gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrIGZ1bmN0
aW9uIHRvIHRyYW5zZmVyIGRhdGEgdG8gYW5kIGZyb20gdGhlCi0gIC8vIGFwcGxpY2F0aW9uLiBB
QXVkaW8gZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIGluIGEgaGlnaGVyLXByaW9yaXR5IHRocmVhZCB0
aGF0Ci0gIC8vIGhhcyBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gIEFBdWRpb1N0cmVhbUJ1aWxkZXJf
c2V0RGF0YUNhbGxiYWNrKGJ1aWxkZXIsIERhdGFDYWxsYmFjaywgdGhpcyk7Ci0gIC8vIFJlcXVl
c3QgdGhhdCBBQXVkaW8gY2FsbHMgdGhpcyBmdW5jdGlvbnMgaWYgYW55IGVycm9yIG9jY3VycyBv
biBhIGNhbGxiYWNrCi0gIC8vIHRocmVhZC4KLSAgQUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXRFcnJv
ckNhbGxiYWNrKGJ1aWxkZXIsIEVycm9yQ2FsbGJhY2ssIHRoaXMpOwotfQotCi1ib29sIEFBdWRp
b1dyYXBwZXI6Ok9wZW5TdHJlYW0oQUF1ZGlvU3RyZWFtQnVpbGRlciogYnVpbGRlcikgewotICBS
VENfTE9HKElORk8pIDw8ICJPcGVuU3RyZWFtIjsKLSAgUlRDX0RDSEVDSyhidWlsZGVyKTsKLSAg
QUF1ZGlvU3RyZWFtKiBzdHJlYW0gPSBudWxscHRyOwotICBSRVRVUk5fT05fRVJST1IoQUF1ZGlv
U3RyZWFtQnVpbGRlcl9vcGVuU3RyZWFtKGJ1aWxkZXIsICZzdHJlYW0pLCBmYWxzZSk7Ci0gIHN0
cmVhbV8gPSBzdHJlYW07Ci0gIExvZ1N0cmVhbUNvbmZpZ3VyYXRpb24oKTsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgQUF1ZGlvV3JhcHBlcjo6Q2xvc2VTdHJlYW0oKSB7Ci0gIFJUQ19MT0co
SU5GTykgPDwgIkNsb3NlU3RyZWFtIjsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsKLSAgTE9HX09O
X0VSUk9SKEFBdWRpb1N0cmVhbV9jbG9zZShzdHJlYW1fKSk7Ci0gIHN0cmVhbV8gPSBudWxscHRy
OwotfQotCi12b2lkIEFBdWRpb1dyYXBwZXI6OkxvZ1N0cmVhbUNvbmZpZ3VyYXRpb24oKSB7Ci0g
IFJUQ19EQ0hFQ0soc3RyZWFtXyk7Ci0gIGNoYXIgc3NfYnVmWzEwMjRdOwotICBydGM6OlNpbXBs
ZVN0cmluZ0J1aWxkZXIgc3Moc3NfYnVmKTsKLSAgc3MgPDwgIlN0cmVhbSBDb25maWd1cmF0aW9u
OiAiOwotICBzcyA8PCAic2FtcGxlIHJhdGU9IiA8PCBzYW1wbGVfcmF0ZSgpIDw8ICIsIGNoYW5u
ZWxzPSIgPDwgY2hhbm5lbF9jb3VudCgpOwotICBzcyA8PCAiLCBzYW1wbGVzIHBlciBmcmFtZT0i
IDw8IHNhbXBsZXNfcGVyX2ZyYW1lKCk7Ci0gIHNzIDw8ICIsIGZvcm1hdD0iIDw8IEZvcm1hdFRv
U3RyaW5nKGZvcm1hdCgpKTsKLSAgc3MgPDwgIiwgc2hhcmluZyBtb2RlPSIgPDwgU2hhcmluZ01v
ZGVUb1N0cmluZyhzaGFyaW5nX21vZGUoKSk7Ci0gIHNzIDw8ICIsIHBlcmZvcm1hbmNlIG1vZGU9
IiA8PCBQZXJmb3JtYW5jZU1vZGVUb1N0cmluZyhwZXJmb3JtYW5jZV9tb2RlKCkpOwotICBzcyA8
PCAiLCBkaXJlY3Rpb249IiA8PCBEaXJlY3Rpb25Ub1N0cmluZyhkaXJlY3Rpb24oKSk7Ci0gIHNz
IDw8ICIsIGRldmljZSBpZD0iIDw8IEFBdWRpb1N0cmVhbV9nZXREZXZpY2VJZChzdHJlYW1fKTsK
LSAgc3MgPDwgIiwgZnJhbWVzIHBlciBjYWxsYmFjaz0iIDw8IGZyYW1lc19wZXJfY2FsbGJhY2so
KTsKLSAgUlRDX0xPRyhJTkZPKSA8PCBzcy5zdHIoKTsKLX0KLQotdm9pZCBBQXVkaW9XcmFwcGVy
OjpMb2dTdHJlYW1TdGF0ZSgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiQUF1ZGlvIHN0cmVhbSBz
dGF0ZTogIgotICAgICAgICAgICAgICAgIDw8IEFBdWRpb19jb252ZXJ0U3RyZWFtU3RhdGVUb1Rl
eHQoc3RyZWFtX3N0YXRlKCkpOwotfQotCi1ib29sIEFBdWRpb1dyYXBwZXI6OlZlcmlmeVN0cmVh
bUNvbmZpZ3VyYXRpb24oKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlZlcmlmeVN0cmVhbUNvbmZp
Z3VyYXRpb24iOwotICBSVENfRENIRUNLKHN0cmVhbV8pOwotICAvLyBUT0RPKGhlbnJpa2EpOiBz
aG91bGQgd2UgdmVyaWZ5IGRldmljZSBJRCBhcyB3ZWxsPwotICBpZiAoQUF1ZGlvU3RyZWFtX2dl
dFNhbXBsZVJhdGUoc3RyZWFtXykgIT0gYXVkaW9fcGFyYW1ldGVycygpLnNhbXBsZV9yYXRlKCkp
IHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiU3RyZWFtIHVuYWJsZSB0byB1c2UgcmVxdWVz
dGVkIHNhbXBsZSByYXRlIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKEFBdWRpb1N0
cmVhbV9nZXRDaGFubmVsQ291bnQoc3RyZWFtXykgIT0KLSAgICAgIHN0YXRpY19jYXN0PGludDMy
X3Q+KGF1ZGlvX3BhcmFtZXRlcnMoKS5jaGFubmVscygpKSkgewotICAgIFJUQ19MT0coTFNfRVJS
T1IpIDw8ICJTdHJlYW0gdW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgY2hhbm5lbCBjb3VudCI7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChBQXVkaW9TdHJlYW1fZ2V0Rm9ybWF0KHN0cmVh
bV8pICE9IEFBVURJT19GT1JNQVRfUENNX0kxNikgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8
ICJTdHJlYW0gdW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZm9ybWF0IjsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgaWYgKEFBdWRpb1N0cmVhbV9nZXRTaGFyaW5nTW9kZShzdHJlYW1fKSAhPSBB
QVVESU9fU0hBUklOR19NT0RFX1NIQVJFRCkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJT
dHJlYW0gdW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgc2hhcmluZyBtb2RlIjsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLSAgaWYgKEFBdWRpb1N0cmVhbV9nZXRQZXJmb3JtYW5jZU1vZGUoc3RyZWFt
XykgIT0KLSAgICAgIEFBVURJT19QRVJGT1JNQU5DRV9NT0RFX0xPV19MQVRFTkNZKSB7Ci0gICAg
UlRDX0xPRyhMU19FUlJPUikgPDwgIlN0cmVhbSB1bmFibGUgdG8gdXNlIHJlcXVlc3RlZCBwZXJm
b3JtYW5jZSBtb2RlIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKEFBdWRpb1N0cmVh
bV9nZXREaXJlY3Rpb24oc3RyZWFtXykgIT0gZGlyZWN0aW9uKCkpIHsKLSAgICBSVENfTE9HKExT
X0VSUk9SKSA8PCAiU3RyZWFtIGRpcmVjdGlvbiBjb3VsZCBub3QgYmUgc2V0IjsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKEFBdWRpb1N0cmVhbV9nZXRTYW1wbGVzUGVyRnJhbWUoc3Ry
ZWFtXykgIT0KLSAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KGF1ZGlvX3BhcmFtZXRlcnMoKS5j
aGFubmVscygpKSkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJJbnZhbGlkIG51bWJlciBv
ZiBzYW1wbGVzIHBlciBmcmFtZSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEFBdWRpb1dyYXBwZXI6Ok9wdGltaXplQnVmZmVycygpIHsKLSAgUlRD
X0xPRyhJTkZPKSA8PCAiT3B0aW1pemVCdWZmZXJzIjsKLSAgUlRDX0RDSEVDSyhzdHJlYW1fKTsK
LSAgLy8gTWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgY2FuIGJlIGZpbGxlZCB3aXRob3V0
IGJsb2NraW5nLgotICBSVENfTE9HKElORk8pIDw8ICJtYXggYnVmZmVyIGNhcGFjaXR5IGluIGZy
YW1lczogIgotICAgICAgICAgICAgICAgIDw8IGJ1ZmZlcl9jYXBhY2l0eV9pbl9mcmFtZXMoKTsK
LSAgLy8gUXVlcnkgdGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCB0aGUgYXBwbGljYXRpb24gc2hv
dWxkIHJlYWQgb3Igd3JpdGUgYXQKLSAgLy8gb25lIHRpbWUgZm9yIG9wdGltYWwgcGVyZm9ybWFu
Y2UuCi0gIGludDMyX3QgZnJhbWVzX3Blcl9idXJzdCA9IEFBdWRpb1N0cmVhbV9nZXRGcmFtZXNQ
ZXJCdXJzdChzdHJlYW1fKTsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiZnJhbWVzIHBlciBidXJzdCBm
b3Igb3B0aW1hbCBwZXJmb3JtYW5jZTogIgotICAgICAgICAgICAgICAgIDw8IGZyYW1lc19wZXJf
YnVyc3Q7Ci0gIGZyYW1lc19wZXJfYnVyc3RfID0gZnJhbWVzX3Blcl9idXJzdDsKLSAgaWYgKGRp
cmVjdGlvbigpID09IEFBVURJT19ESVJFQ1RJT05fSU5QVVQpIHsKLSAgICAvLyBUaGVyZSBpcyBu
byBwb2ludCBpbiBjYWxsaW5nIHNldEJ1ZmZlclNpemVJbkZyYW1lcygpIGZvciBpbnB1dCBzdHJl
YW1zCi0gICAgLy8gc2luY2UgaXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgcGVyZm9ybWFuY2UgKGxh
dGVuY3kgaW4gdGhpcyBjYXNlKS4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAvLyBTZXQgYnVm
ZmVyIHNpemUgdG8gc2FtZSBhcyBidXJzdCBzaXplIHRvIGd1YXJhbnRlZSBsb3dlc3QgcG9zc2li
bGUgbGF0ZW5jeS4KLSAgLy8gVGhpcyBzaXplIG1pZ2h0IGNoYW5nZSBmb3Igb3V0cHV0IHN0cmVh
bXMgaWYgdW5kZXJydW5zIGFyZSBkZXRlY3RlZCBhbmQKLSAgLy8gYXV0b21hdGljIGJ1ZmZlciBh
ZGp1c3RtZW50IGlzIGVuYWJsZWQuCi0gIEFBdWRpb1N0cmVhbV9zZXRCdWZmZXJTaXplSW5GcmFt
ZXMoc3RyZWFtXywgZnJhbWVzX3Blcl9idXJzdCk7Ci0gIGludDMyX3QgYnVmZmVyX3NpemUgPSBB
QXVkaW9TdHJlYW1fZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKHN0cmVhbV8pOwotICBpZiAoYnVmZmVy
X3NpemUgIT0gZnJhbWVzX3Blcl9idXJzdCkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJG
YWlsZWQgdG8gdXNlIG9wdGltYWwgYnVmZmVyIGJ1cnN0IHNpemUiOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICAvLyBNYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdGhhdCBjYW4gYmUgZmlsbGVk
IHdpdGhvdXQgYmxvY2tpbmcuCi0gIFJUQ19MT0coSU5GTykgPDwgImJ1ZmZlciBidXJzdCBzaXpl
IGluIGZyYW1lczogIiA8PCBidWZmZXJfc2l6ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBqbmkKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9hdWRpb19kZXZpY2UvYWF1ZGlvX3dyYXBwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2FhdWRp
b193cmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MDBhYjk4OGM4NjE3
MWYyODAyZTQwMDJjNjcxNmQ4ZDliMzlhNzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYWF1ZGlvX3dyYXBwZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxOCBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lm
bmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BQVVESU9fV1JBUFBFUl9IXwot
I2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BQVVESU9fV1JBUFBFUl9I
XwotCi0jaW5jbHVkZSA8YWF1ZGlvL0FBdWRpby5oPgotCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRp
b19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgInJ0Y19i
YXNlL3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1uYW1lc3BhY2Ug
am5pIHsKLQotLy8gQUF1ZGlvIGNhbGxiYWNrIGludGVyZmFjZSBmb3IgYXVkaW8gdHJhbnNwb3J0
IHRvL2Zyb20gdGhlIEFBdWRpbyBzdHJlYW0uCi0vLyBUaGUgaW50ZXJmYWNlIGFsc28gY29udGFp
bnMgYW4gZXJyb3IgY2FsbGJhY2sgbWV0aG9kIGZvciBub3RpZmljYXRpb25zIG9mCi0vLyBlLmcu
IGRldmljZSBjaGFuZ2VzLgotY2xhc3MgQUF1ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UgewotIHB1Ymxp
YzoKLSAgLy8gQXVkaW8gZGF0YSB3aWxsIGJlIHBhc3NlZCBpbiBvdXIgb3V0IG9mIHRoaXMgZnVu
Y3Rpb24gZGVwZW5kbmluZyBvbiB0aGUKLSAgLy8gZGlyZWN0aW9uIG9mIHRoZSBhdWRpbyBzdHJl
YW0uIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24gYQotICAvLyByZWFs
LXRpbWUgdGhyZWFkIG93bmVkIGJ5IEFBdWRpby4KLSAgdmlydHVhbCBhYXVkaW9fZGF0YV9jYWxs
YmFja19yZXN1bHRfdCBPbkRhdGFDYWxsYmFjayh2b2lkKiBhdWRpb19kYXRhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVt
X2ZyYW1lcykgPSAwOwotICAvLyBBQXVkaW8gd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb25zIGlmIGFu
eSBlcnJvciBvY2N1cnMgb24gYSBjYWxsYmFjayB0aHJlYWQuCi0gIC8vIEluIHJlc3BvbnNlLCB0
aGlzIGZ1bmN0aW9uIGNvdWxkIHNpZ25hbCBvciBsYXVuY2ggYW5vdGhlciB0aHJlYWQgdG8gcmVv
cGVuCi0gIC8vIGEgc3RyZWFtIG9uIGFub3RoZXIgZGV2aWNlLiBEbyBub3QgcmVvcGVuIHRoZSBz
dHJlYW0gaW4gdGhpcyBjYWxsYmFjay4KLSAgdmlydHVhbCB2b2lkIE9uRXJyb3JDYWxsYmFjayhh
YXVkaW9fcmVzdWx0X3QgZXJyb3IpID0gMDsKLQotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB+QUF1
ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UoKSB7fQotfTsKLQotLy8gVXRpbGl0eSBjbGFzcyB3aGljaCB3
cmFwcyB0aGUgQy1iYXNlZCBBQXVkaW8gQVBJIGludG8gYSBtb3JlIGhhbmR5IEMrKyBjbGFzcwot
Ly8gd2hlcmUgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzIChBQXVkaW9TdHJlYW1CdWlsZGVyIGFu
ZCBBQXVkaW9TdHJlYW0pIGFyZQotLy8gZW5jYXBzdWxhdGVkLiBVc2VyIG11c3Qgc2V0IHRoZSBk
aXJlY3Rpb24gKGluIG9yIG91dCkgYXQgY29uc3RydWN0aW9uIHNpbmNlCi0vLyBpdCBkZWZpbmVz
IHRoZSBzdHJlYW0gdHlwZSBhbmQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZGF0YSBmbG93IGluIHRo
ZQotLy8gQUF1ZGlvT2JzZXJ2ZXJJbnRlcmZhY2UuCi0vLwotLy8gQUF1ZGlvIGlzIGEgbmV3IEFu
ZHJvaWQgQyBBUEkgaW50cm9kdWNlZCBpbiB0aGUgQW5kcm9pZCBPICgyNikgcmVsZWFzZS4KLS8v
IEl0IGlzIGRlc2lnbmVkIGZvciBoaWdoLXBlcmZvcm1hbmNlIGF1ZGlvIGFwcGxpY2F0aW9ucyB0
aGF0IHJlcXVpcmUgbG93Ci0vLyBsYXRlbmN5LiBBcHBsaWNhdGlvbnMgY29tbXVuaWNhdGUgd2l0
aCBBQXVkaW8gYnkgcmVhZGluZyBhbmQgd3JpdGluZyBkYXRhCi0vLyB0byBzdHJlYW1zLgotLy8K
LS8vIEVhY2ggc3RyZWFtIGlzIGF0dGFjaGVkIHRvIGEgc2luZ2xlIGF1ZGlvIGRldmljZSwgd2hl
cmUgZWFjaCBhdWRpbyBkZXZpY2UKLS8vIGhhcyBhIHVuaXF1ZSBJRC4gVGhlIElEIGNhbiBiZSB1
c2VkIHRvIGJpbmQgYW4gYXVkaW8gc3RyZWFtIHRvIGEgc3BlY2lmaWMKLS8vIGF1ZGlvIGRldmlj
ZSBidXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBsZXRzIEFBdWRpbyBjaG9vc2UgdGhlIGRlZmF1bHQg
cHJpbWFyeQotLy8gZGV2aWNlIGluc3RlYWQgKGRldmljZSBzZWxlY3Rpb24gdGFrZXMgcGxhY2Ug
aW4gSmF2YSkuIEEgc3RyZWFtIGNhbiBvbmx5Ci0vLyBtb3ZlIGRhdGEgaW4gb25lIGRpcmVjdGlv
bi4gV2hlbiBhIHN0cmVhbSBpcyBvcGVuZWQsIEFuZHJvaWQgY2hlY2tzIHRvCi0vLyBlbnN1cmUg
dGhhdCB0aGUgYXVkaW8gZGV2aWNlIGFuZCBzdHJlYW0gZGlyZWN0aW9uIGFncmVlLgotY2xhc3Mg
QUF1ZGlvV3JhcHBlciB7Ci0gcHVibGljOgotICBBQXVkaW9XcmFwcGVyKGNvbnN0IEF1ZGlvUGFy
YW1ldGVycyYgYXVkaW9fcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICBhYXVkaW9fZGlyZWN0
aW9uX3QgZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgIEFBdWRpb09ic2VydmVySW50ZXJmYWNl
KiBvYnNlcnZlcik7Ci0gIH5BQXVkaW9XcmFwcGVyKCk7Ci0KLSAgYm9vbCBJbml0KCk7Ci0gIGJv
b2wgU3RhcnQoKTsKLSAgYm9vbCBTdG9wKCk7Ci0KLSAgLy8gRm9yIG91dHB1dCBzdHJlYW1zOiBl
c3RpbWF0ZXMgbGF0ZW5jeSBiZXR3ZWVuIHdyaXRpbmcgYW4gYXVkaW8gZnJhbWUgdG8KLSAgLy8g
dGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSB0aW1lIHRoYXQgc2FtZSBmcmFtZSBpcyBwbGF5ZWQg
b3V0IG9uIHRoZSBvdXRwdXQKLSAgLy8gYXVkaW8gZGV2aWNlLgotICAvLyBGb3IgaW5wdXQgc3Ry
ZWFtczogZXN0aW1hdGVzIGxhdGVuY3kgYmV0d2VlbiByZWFkaW5nIGFuIGF1ZGlvIGZyYW1lIGZy
b20KLSAgLy8gdGhlIGlucHV0IHN0cmVhbSBhbmQgdGhlIHRpbWUgdGhhdCBzYW1lIGZyYW1lIHdh
cyByZWNvcmRlZCBvbiB0aGUgaW5wdXQKLSAgLy8gYXVkaW8gZGV2aWNlLgotICBkb3VibGUgRXN0
aW1hdGVMYXRlbmN5TWlsbGlzKCkgY29uc3Q7Ci0KLSAgLy8gSW5jcmVhc2VzIHRoZSBpbnRlcm5h
bCBidWZmZXIgc2l6ZSBmb3Igb3V0cHV0IHN0cmVhbXMgYnkgb25lIGJ1cnN0IHNpemUgdG8KLSAg
Ly8gcmVkdWNlIHRoZSByaXNrIG9mIHVuZGVycnVucy4gQ2FuIGJlIHVzZWQgd2hpbGUgYSBzdHJl
YW0gaXMgYWN0aXZlLgotICBib29sIEluY3JlYXNlT3V0cHV0QnVmZmVyU2l6ZSgpOwotCi0gIC8v
IERyYWlucyB0aGUgcmVjb3JkaW5nIHN0cmVhbSBvZiBhbnkgZXhpc3RpbmcgZGF0YSBieSByZWFk
aW5nIGZyb20gaXQgdW50aWwKLSAgLy8gaXQncyBlbXB0eS4gQ2FuIGJlIHVzZWQgdG8gY2xlYXIg
b3V0IG9sZCBkYXRhIGJlZm9yZSBzdGFydGluZyBhIG5ldyBhdWRpbwotICAvLyBzZXNzaW9uLgot
ICB2b2lkIENsZWFySW5wdXRTdHJlYW0odm9pZCogYXVkaW9fZGF0YSwgaW50MzJfdCBudW1fZnJh
bWVzKTsKLQotICBBQXVkaW9PYnNlcnZlckludGVyZmFjZSogb2JzZXJ2ZXIoKSBjb25zdDsKLSAg
QXVkaW9QYXJhbWV0ZXJzIGF1ZGlvX3BhcmFtZXRlcnMoKSBjb25zdDsKLSAgaW50MzJfdCBzYW1w
bGVzX3Blcl9mcmFtZSgpIGNvbnN0OwotICBpbnQzMl90IGJ1ZmZlcl9zaXplX2luX2ZyYW1lcygp
IGNvbnN0OwotICBpbnQzMl90IGJ1ZmZlcl9jYXBhY2l0eV9pbl9mcmFtZXMoKSBjb25zdDsKLSAg
aW50MzJfdCBkZXZpY2VfaWQoKSBjb25zdDsKLSAgaW50MzJfdCB4cnVuX2NvdW50KCkgY29uc3Q7
Ci0gIGludDMyX3QgZm9ybWF0KCkgY29uc3Q7Ci0gIGludDMyX3Qgc2FtcGxlX3JhdGUoKSBjb25z
dDsKLSAgaW50MzJfdCBjaGFubmVsX2NvdW50KCkgY29uc3Q7Ci0gIGludDMyX3QgZnJhbWVzX3Bl
cl9jYWxsYmFjaygpIGNvbnN0OwotICBhYXVkaW9fc2hhcmluZ19tb2RlX3Qgc2hhcmluZ19tb2Rl
KCkgY29uc3Q7Ci0gIGFhdWRpb19wZXJmb3JtYW5jZV9tb2RlX3QgcGVyZm9ybWFuY2VfbW9kZSgp
IGNvbnN0OwotICBhYXVkaW9fc3RyZWFtX3N0YXRlX3Qgc3RyZWFtX3N0YXRlKCkgY29uc3Q7Ci0g
IGludDY0X3QgZnJhbWVzX3dyaXR0ZW4oKSBjb25zdDsKLSAgaW50NjRfdCBmcmFtZXNfcmVhZCgp
IGNvbnN0OwotICBhYXVkaW9fZGlyZWN0aW9uX3QgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aW9uXzsgfQotICBBQXVkaW9TdHJlYW0qIHN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIHN0
cmVhbV87IH0KLSAgaW50MzJfdCBmcmFtZXNfcGVyX2J1cnN0KCkgY29uc3QgeyByZXR1cm4gZnJh
bWVzX3Blcl9idXJzdF87IH0KLQotIHByaXZhdGU6Ci0gIHZvaWQgU2V0U3RyZWFtQ29uZmlndXJh
dGlvbihBQXVkaW9TdHJlYW1CdWlsZGVyKiBidWlsZGVyKTsKLSAgYm9vbCBPcGVuU3RyZWFtKEFB
dWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIpOwotICB2b2lkIENsb3NlU3RyZWFtKCk7Ci0gIHZv
aWQgTG9nU3RyZWFtQ29uZmlndXJhdGlvbigpOwotICB2b2lkIExvZ1N0cmVhbVN0YXRlKCk7Ci0g
IGJvb2wgVmVyaWZ5U3RyZWFtQ29uZmlndXJhdGlvbigpOwotICBib29sIE9wdGltaXplQnVmZmVy
cygpOwotCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87Ci0gIHJ0Yzo6VGhy
ZWFkQ2hlY2tlciBhYXVkaW9fdGhyZWFkX2NoZWNrZXJfOwotICBjb25zdCBBdWRpb1BhcmFtZXRl
cnMgYXVkaW9fcGFyYW1ldGVyc187Ci0gIGNvbnN0IGFhdWRpb19kaXJlY3Rpb25fdCBkaXJlY3Rp
b25fOwotICBBQXVkaW9PYnNlcnZlckludGVyZmFjZSogb2JzZXJ2ZXJfID0gbnVsbHB0cjsKLSAg
QUF1ZGlvU3RyZWFtKiBzdHJlYW1fID0gbnVsbHB0cjsKLSAgaW50MzJfdCBmcmFtZXNfcGVyX2J1
cnN0XyA9IDA7Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi0KLX0gIC8vIG5hbWVzcGFjZSB3
ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BQVVE
SU9fV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fY29tbW9u
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvam5pL2F1ZGlvX2RldmljZS9hdWRpb19jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZmRlY2YzODRjOTQ2ZTk3OTkwN2U5ZjY5N2JmYjk4YjE4NzFiODFhOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rl
dmljZS9hdWRpb19jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfQVVESU9fREVW
SUNFX0FVRElPX0NPTU1PTl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RF
VklDRV9BVURJT19DT01NT05fSF8KLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSBq
bmkgewotCi1jb25zdCBpbnQga0RlZmF1bHRTYW1wbGVSYXRlID0gNDQxMDA7Ci0vLyBEZWxheSBl
c3RpbWF0ZXMgZm9yIHRoZSB0d28gZGlmZmVyZW50IHN1cHBvcnRlZCBtb2Rlcy4gVGhlc2UgdmFs
dWVzIGFyZSBiYXNlZAotLy8gb24gcmVhbC10aW1lIHJvdW5kLXRyaXAgZGVsYXkgZXN0aW1hdGVz
IG9uIGEgbGFyZ2Ugc2V0IG9mIGRldmljZXMgYW5kIHRoZXkKLS8vIGFyZSBsb3dlciBib3VuZHMg
c2luY2UgdGhlIGZpbHRlciBsZW5ndGggaXMgMTI4IG1zLCBzbyB0aGUgQUVDIHdvcmtzIGZvcgot
Ly8gZGVsYXlzIGluIHRoZSByYW5nZSBbNTAsIH4xNzBdIG1zIGFuZCBbMTUwLCB+MjcwXSBtcy4g
Tm90ZSB0aGF0LCBpbiBtb3N0Ci0vLyBjYXNlcywgdGhlIGxvd2VzdCBkZWxheSBlc3RpbWF0ZSB3
aWxsIG5vdCBiZSB1dGlsaXplZCBzaW5jZSBkZXZpY2VzIHRoYXQKLS8vIHN1cHBvcnQgbG93LWxh
dGVuY3kgb3V0cHV0IGF1ZGlvIG9mdGVuIHN1cHBvcnRzIEhXIEFFQyBhcyB3ZWxsLgotY29uc3Qg
aW50IGtMb3dMYXRlbmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcyA9IDUwOwotY29u
c3QgaW50IGtIaWdoTGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMgPSAxNTA7
Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5k
aWYgIC8vIFNES19BTkRST0lEX1NSQ19KTklfQVVESU9fREVWSUNFX0FVRElPX0NPTU1PTl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX21vZHVsZS5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9tb2R1bGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGI0Y2IxODQxNzc4YWQ0NjNlOTMxM2QxNGYxZDc4OTNkMzA0NTEzYjguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19k
ZXZpY2UvYXVkaW9fZGV2aWNlX21vZHVsZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDY2NSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9q
bmkvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9tb2R1bGUuaCIKLQotI2luY2x1ZGUgPG1lbW9y
eT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiYXBpL3Rhc2tfcXVldWUvZGVmYXVs
dF90YXNrX3F1ZXVlX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJhcGkvdGFza19xdWV1ZS90YXNrX3F1
ZXVlX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZp
Y2VfYnVmZmVyLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAicnRj
X2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3JlZl9jb3VudGVkX29iamVjdC5o
IgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvZ2VuZXJhdGVkX2F1ZGlvX2RldmljZV9tb2R1bGVfYmFzZV9qbmkvV2ViUnRjQXVkaW9N
YW5hZ2VyX2puaS5oIgotI2luY2x1ZGUgInN5c3RlbV93cmFwcGVycy9pbmNsdWRlL21ldHJpY3Mu
aCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotbmFtZXNwYWNlIHsK
LQotLy8gVGhpcyBjbGFzcyBjb21iaW5lcyBhIGdlbmVyaWMgaW5zdGFuY2Ugb2YgYW4gQXVkaW9J
bnB1dCBhbmQgYSBnZW5lcmljCi0vLyBpbnN0YW5jZSBvZiBhbiBBdWRpb091dHB1dCB0byBjcmVh
dGUgYW4gQXVkaW9EZXZpY2VNb2R1bGUuIFRoaXMgaXMgbW9zdGx5Ci0vLyBkb25lIGJ5IGRlbGVn
YXRpbmcgdG8gdGhlIGF1ZGlvIGlucHV0L291dHB1dCB3aXRoIHNvbWUgZ2x1ZSBjb2RlLiBUaGlz
IGNsYXNzCi0vLyBhbHNvIGRpcmVjdGx5IGltcGxlbWVudHMgc29tZSBvZiB0aGUgQXVkaW9EZXZp
Y2VNb2R1bGUgbWV0aG9kcyB3aXRoIGR1bW15Ci0vLyBpbXBsZW1lbnRhdGlvbnMuCi0vLwotLy8g
QW4gaW5zdGFuY2UgY2FuIGJlIGNyZWF0ZWQgb24gYW55IHRocmVhZCwgYnV0IG11c3QgdGhlbiBi
ZSB1c2VkIG9uIG9uZSBhbmQKLS8vIHRoZSBzYW1lIHRocmVhZC4gQWxsIHB1YmxpYyBtZXRob2Rz
IG11c3QgYWxzbyBiZSBjYWxsZWQgb24gdGhlIHNhbWUgdGhyZWFkLgotLy8gQSB0aHJlYWQgY2hl
Y2tlciB3aWxsIFJUQ19EQ0hFQ0sgaWYgYW55IG1ldGhvZCBpcyBjYWxsZWQgb24gYW4gaW52YWxp
ZAotLy8gdGhyZWFkLgotLy8gVE9ETyhoZW5yaWthKTogaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFs
c28gc3VwcG9ydCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBBRE0KLS8vIGlzIGNvbnN0cnVjdGVkIG9u
IHRocmVhZCBUMSwgdXNlZCBvbiB0aHJlYWQgVDIgYW5kIGRlc3RydWN0ZWQgb24gVDIgb3IgVDMu
Ci0vLyBJZiBzbywgY2FyZSBtdXN0IGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IG9ubHkgVDIgaXMg
YSBDT00gdGhyZWFkLgotY2xhc3MgQW5kcm9pZEF1ZGlvRGV2aWNlTW9kdWxlIDogcHVibGljIEF1
ZGlvRGV2aWNlTW9kdWxlIHsKLSBwdWJsaWM6Ci0gIC8vIEZvciB1c2Ugd2l0aCBVTUEgbG9nZ2lu
Zy4gTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBoaXN0b2dyYW1zLnhtbCBpbgotICAvLyBDaHJv
bWUsIGxvY2F0ZWQgYXQKLSAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3Jj
L3Rvb2xzL21ldHJpY3MvaGlzdG9ncmFtcy9oaXN0b2dyYW1zLnhtbAotICBlbnVtIGNsYXNzIElu
aXRTdGF0dXMgewotICAgIE9LID0gMCwKLSAgICBQTEFZT1VUX0VSUk9SID0gMSwKLSAgICBSRUNP
UkRJTkdfRVJST1IgPSAyLAotICAgIE9USEVSX0VSUk9SID0gMywKLSAgICBOVU1fU1RBVFVTRVMg
PSA0Ci0gIH07Ci0KLSAgQW5kcm9pZEF1ZGlvRGV2aWNlTW9kdWxlKEF1ZGlvRGV2aWNlTW9kdWxl
OjpBdWRpb0xheWVyIGF1ZGlvX2xheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc19zdGVyZW9fcGxheW91dF9zdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzX3N0ZXJlb19yZWNvcmRfc3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDE2X3QgcGxheW91dF9kZWxheV9tcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0lucHV0PiBhdWRpb19pbnB1dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb091dHB1dD4gYXVkaW9fb3V0cHV0
KQotICAgICAgOiBhdWRpb19sYXllcl8oYXVkaW9fbGF5ZXIpLAotICAgICAgICBpc19zdGVyZW9f
cGxheW91dF9zdXBwb3J0ZWRfKGlzX3N0ZXJlb19wbGF5b3V0X3N1cHBvcnRlZCksCi0gICAgICAg
IGlzX3N0ZXJlb19yZWNvcmRfc3VwcG9ydGVkXyhpc19zdGVyZW9fcmVjb3JkX3N1cHBvcnRlZCks
Ci0gICAgICAgIHBsYXlvdXRfZGVsYXlfbXNfKHBsYXlvdXRfZGVsYXlfbXMpLAotICAgICAgICB0
YXNrX3F1ZXVlX2ZhY3RvcnlfKENyZWF0ZURlZmF1bHRUYXNrUXVldWVGYWN0b3J5KCkpLAotICAg
ICAgICBpbnB1dF8oc3RkOjptb3ZlKGF1ZGlvX2lucHV0KSksCi0gICAgICAgIG91dHB1dF8oc3Rk
Ojptb3ZlKGF1ZGlvX291dHB1dCkpLAotICAgICAgICBpbml0aWFsaXplZF8oZmFsc2UpIHsKLSAg
ICBSVENfQ0hFQ0soaW5wdXRfKTsKLSAgICBSVENfQ0hFQ0sob3V0cHV0Xyk7Ci0gICAgUlRDX0xP
RyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgdGhyZWFkX2NoZWNrZXJfLkRldGFjaCgpOwot
ICB9Ci0KLSAgfkFuZHJvaWRBdWRpb0RldmljZU1vZHVsZSgpIG92ZXJyaWRlIHsgUlRDX0xPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX187IH0KLQotICBpbnQzMl90IEFjdGl2ZUF1ZGlvTGF5ZXIoCi0g
ICAgICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciogYXVkaW9MYXllcikgY29uc3Qgb3Zl
cnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgICphdWRpb0xh
eWVyID0gYXVkaW9fbGF5ZXJfOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBSZWdp
c3RlckF1ZGlvQ2FsbGJhY2soQXVkaW9UcmFuc3BvcnQqIGF1ZGlvQ2FsbGJhY2spIG92ZXJyaWRl
IHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gYXVkaW9f
ZGV2aWNlX2J1ZmZlcl8tPlJlZ2lzdGVyQXVkaW9DYWxsYmFjayhhdWRpb0NhbGxiYWNrKTsKLSAg
fQotCi0gIGludDMyX3QgSW5pdCgpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9f
RlVOQ1RJT05fXzsKLSAgICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7
Ci0gICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPQotICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEF1
ZGlvRGV2aWNlQnVmZmVyPih0YXNrX3F1ZXVlX2ZhY3RvcnlfLmdldCgpKTsKLSAgICBBdHRhY2hB
dWRpb0J1ZmZlcigpOwotICAgIGlmIChpbml0aWFsaXplZF8pIHsKLSAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBJbml0U3RhdHVzIHN0YXR1czsKLSAgICBpZiAob3V0cHV0Xy0+SW5pdCgpICE9
IDApIHsKLSAgICAgIHN0YXR1cyA9IEluaXRTdGF0dXM6OlBMQVlPVVRfRVJST1I7Ci0gICAgfSBl
bHNlIGlmIChpbnB1dF8tPkluaXQoKSAhPSAwKSB7Ci0gICAgICBvdXRwdXRfLT5UZXJtaW5hdGUo
KTsKLSAgICAgIHN0YXR1cyA9IEluaXRTdGF0dXM6OlJFQ09SRElOR19FUlJPUjsKLSAgICB9IGVs
c2UgewotICAgICAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgICAgIHN0YXR1cyA9IEluaXRTdGF0
dXM6Ok9LOwotICAgIH0KLSAgICBSVENfSElTVE9HUkFNX0VOVU1FUkFUSU9OKCJXZWJSVEMuQXVk
aW8uSW5pdGlhbGl6YXRpb25SZXN1bHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihJbml0U3RhdHVzOjpOVU1fU1RBVFVTRVMpKTsKLSAgICBpZiAoc3Rh
dHVzICE9IEluaXRTdGF0dXM6Ok9LKSB7Ci0gICAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiQXVk
aW8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4iOwotICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgVGVybWluYXRlKCkgb3ZlcnJpZGUg
ewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGlmICghaW5pdGlhbGl6
ZWRfKQotICAgICAgcmV0dXJuIDA7Ci0gICAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXND
dXJyZW50KCkpOwotICAgIGludDMyX3QgZXJyID0gaW5wdXRfLT5UZXJtaW5hdGUoKTsKLSAgICBl
cnIgfD0gb3V0cHV0Xy0+VGVybWluYXRlKCk7Ci0gICAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0g
ICAgdGhyZWFkX2NoZWNrZXJfLkRldGFjaCgpOwotICAgIGF1ZGlvX2RldmljZV9idWZmZXJfLnJl
c2V0KG51bGxwdHIpOwotICAgIFJUQ19EQ0hFQ0tfRVEoZXJyLCAwKTsKLSAgICByZXR1cm4gZXJy
OwotICB9Ci0KLSAgYm9vbCBJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBSVENf
TE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiIgPDwgaW5pdGlhbGl6ZWRfOwotICAgIHJl
dHVybiBpbml0aWFsaXplZF87Ci0gIH0KLQotICBpbnQxNl90IFBsYXlvdXREZXZpY2VzKCkgb3Zl
cnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIFJUQ19MT0co
SU5GTykgPDwgIm91dHB1dDogIiA8PCAxOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgaW50MTZf
dCBSZWNvcmRpbmdEZXZpY2VzKCkgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19G
VU5DVElPTl9fOwotICAgIFJUQ19MT0coSU5GTykgPDwgIm91dHB1dDogIiA8PCAxOwotICAgIHJl
dHVybiAxOwotICB9Ci0KLSAgaW50MzJfdCBQbGF5b3V0RGV2aWNlTmFtZSh1aW50MTZfdCBpbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIG5hbWVba0FkbU1heERldmljZU5h
bWVTaXplXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGd1aWRba0FkbU1heEd1
aWRTaXplXSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxs
ZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgUmVjb3JkaW5nRGV2aWNlTmFt
ZSh1aW50MTZfdCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbmFt
ZVtrQWRtTWF4RGV2aWNlTmFtZVNpemVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciBndWlkW2tBZG1NYXhHdWlkU2l6ZV0pIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90
IFNldFBsYXlvdXREZXZpY2UodWludDE2X3QgaW5kZXgpIG92ZXJyaWRlIHsKLSAgICAvLyBPSyB0
byB1c2UgYnV0IGl0IGhhcyBubyBlZmZlY3QgY3VycmVudGx5IHNpbmNlIGRldmljZSBzZWxlY3Rp
b24gaXMKLSAgICAvLyBkb25lIHVzaW5nIEFuZG9pZCBBUElzIGluc3RlYWQuCi0gICAgUlRDX0xP
RyhJTkZPKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IGluZGV4IDw8ICIpIjsKLSAgICByZXR1
cm4gMDsKLSAgfQotCi0gIGludDMyX3QgU2V0UGxheW91dERldmljZSgKLSAgICAgIEF1ZGlvRGV2
aWNlTW9kdWxlOjpXaW5kb3dzRGV2aWNlVHlwZSBkZXZpY2UpIG92ZXJyaWRlIHsKLSAgICBGQVRB
TCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQot
ICBpbnQzMl90IFNldFJlY29yZGluZ0RldmljZSh1aW50MTZfdCBpbmRleCkgb3ZlcnJpZGUgewot
ICAgIC8vIE9LIHRvIHVzZSBidXQgaXQgaGFzIG5vIGVmZmVjdCBjdXJyZW50bHkgc2luY2UgZGV2
aWNlIHNlbGVjdGlvbiBpcwotICAgIC8vIGRvbmUgdXNpbmcgQW5kb2lkIEFQSXMgaW5zdGVhZC4K
LSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXyA8PCAiKCIgPDwgaW5kZXggPDwgIiki
OwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBTZXRSZWNvcmRpbmdEZXZpY2UoCi0g
ICAgICBBdWRpb0RldmljZU1vZHVsZTo6V2luZG93c0RldmljZVR5cGUgZGV2aWNlKSBvdmVycmlk
ZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJu
IC0xOwotICB9Ci0KLSAgaW50MzJfdCBQbGF5b3V0SXNBdmFpbGFibGUoYm9vbCogYXZhaWxhYmxl
KSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgKmF2
YWlsYWJsZSA9IHRydWU7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCAib3V0cHV0OiAiIDw8ICphdmFp
bGFibGU7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90IEluaXRQbGF5b3V0KCkgb3Zl
cnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGlmICghaW5p
dGlhbGl6ZWRfKQotICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChQbGF5b3V0SXNJbml0aWFsaXpl
ZCgpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaW50MzJfdCByZXN1bHQgPSBvdXRw
dXRfLT5Jbml0UGxheW91dCgpOwotICAgIFJUQ19MT0coSU5GTykgPDwgIm91dHB1dDogIiA8PCBy
ZXN1bHQ7Ci0gICAgUlRDX0hJU1RPR1JBTV9CT09MRUFOKCJXZWJSVEMuQXVkaW8uSW5pdFBsYXlv
dXRTdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQgPT0gMCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBib29sIFBsYXlvdXRJ
c0luaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19G
VU5DVElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLT5QbGF5b3V0SXNJbml0aWFsaXplZCgpOwot
ICB9Ci0KLSAgaW50MzJfdCBSZWNvcmRpbmdJc0F2YWlsYWJsZShib29sKiBhdmFpbGFibGUpIG92
ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICAqYXZhaWxh
YmxlID0gdHJ1ZTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6ICIgPDwgKmF2YWlsYWJs
ZTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgSW5pdFJlY29yZGluZygpIG92ZXJy
aWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBpZiAoIWluaXRp
YWxpemVkXykKLSAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUmVjb3JkaW5nSXNJbml0aWFsaXpl
ZCgpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaW50MzJfdCByZXN1bHQgPSBpbnB1
dF8tPkluaXRSZWNvcmRpbmcoKTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6ICIgPDwg
cmVzdWx0OwotICAgIFJUQ19ISVNUT0dSQU1fQk9PTEVBTigiV2ViUlRDLkF1ZGlvLkluaXRSZWNv
cmRpbmdTdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihyZXN1bHQgPT0gMCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBib29sIFJlY29y
ZGluZ0lzSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8
PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIGlucHV0Xy0+UmVjb3JkaW5nSXNJbml0aWFsaXpl
ZCgpOwotICB9Ci0KLSAgaW50MzJfdCBTdGFydFBsYXlvdXQoKSBvdmVycmlkZSB7Ci0gICAgUlRD
X0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFpbml0aWFsaXplZF8pCi0gICAg
ICByZXR1cm4gLTE7Ci0gICAgaWYgKFBsYXlpbmcoKSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGludDMyX3QgcmVzdWx0ID0gb3V0cHV0Xy0+U3RhcnRQbGF5b3V0KCk7Ci0gICAgUlRD
X0xPRyhJTkZPKSA8PCAib3V0cHV0OiAiIDw8IHJlc3VsdDsKLSAgICBSVENfSElTVE9HUkFNX0JP
T0xFQU4oIldlYlJUQy5BdWRpby5TdGFydFBsYXlvdXRTdWNjZXNzIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQgPT0gMCkpOwotICAgIGlmIChyZXN1
bHQgPT0gMCkgewotICAgICAgLy8gT25seSBzdGFydCBwbGF5aW5nIHRoZSBhdWRpbyBkZXZpY2Ug
YnVmZmVyIGlmIHN0YXJ0aW5nIHRoZSBhdWRpbwotICAgICAgLy8gb3V0cHV0IHN1Y2NlZWRlZC4K
LSAgICAgIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TdGFydFBsYXlvdXQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGludDMyX3QgU3RvcFBsYXlvdXQoKSBvdmVycmlkZSB7
Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFpbml0aWFsaXpl
ZF8pCi0gICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCFQbGF5aW5nKCkpCi0gICAgICByZXR1cm4g
MDsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdWRpb19kZXZpY2Vf
YnVmZmVyXy0+U3RvcFBsYXlvdXQoKTsKLSAgICBpbnQzMl90IHJlc3VsdCA9IG91dHB1dF8tPlN0
b3BQbGF5b3V0KCk7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCAib3V0cHV0OiAiIDw8IHJlc3VsdDsK
LSAgICBSVENfSElTVE9HUkFNX0JPT0xFQU4oIldlYlJUQy5BdWRpby5TdG9wUGxheW91dFN1Y2Nl
c3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCA9
PSAwKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGJvb2wgUGxheWluZygpIGNvbnN0
IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1
cm4gb3V0cHV0Xy0+UGxheWluZygpOwotICB9Ci0KLSAgaW50MzJfdCBTdGFydFJlY29yZGluZygp
IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBpZiAo
IWluaXRpYWxpemVkXykKLSAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUmVjb3JkaW5nKCkpIHsK
LSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpbnQzMl90IHJlc3VsdCA9IGlucHV0Xy0+U3Rh
cnRSZWNvcmRpbmcoKTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6ICIgPDwgcmVzdWx0
OwotICAgIFJUQ19ISVNUT0dSQU1fQk9PTEVBTigiV2ViUlRDLkF1ZGlvLlN0YXJ0UmVjb3JkaW5n
U3VjY2VzcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocmVz
dWx0ID09IDApKTsKLSAgICBpZiAocmVzdWx0ID09IDApIHsKLSAgICAgIC8vIE9ubHkgc3RhcnQg
cmVjb3JkaW5nIHRoZSBhdWRpbyBkZXZpY2UgYnVmZmVyIGlmIHN0YXJ0aW5nIHRoZSBhdWRpbwot
ICAgICAgLy8gaW5wdXQgc3VjY2VlZGVkLgotICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlN0
YXJ0UmVjb3JkaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBpbnQz
Ml90IFN0b3BSZWNvcmRpbmcoKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZV
TkNUSU9OX187Ci0gICAgaWYgKCFpbml0aWFsaXplZF8pCi0gICAgICByZXR1cm4gLTE7Ci0gICAg
aWYgKCFSZWNvcmRpbmcoKSkKLSAgICAgIHJldHVybiAwOwotICAgIGF1ZGlvX2RldmljZV9idWZm
ZXJfLT5TdG9wUmVjb3JkaW5nKCk7Ci0gICAgaW50MzJfdCByZXN1bHQgPSBpbnB1dF8tPlN0b3BS
ZWNvcmRpbmcoKTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6ICIgPDwgcmVzdWx0Owot
ICAgIFJUQ19ISVNUT0dSQU1fQk9PTEVBTigiV2ViUlRDLkF1ZGlvLlN0b3BSZWNvcmRpbmdTdWNj
ZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQg
PT0gMCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBib29sIFJlY29yZGluZygpIGNv
bnN0IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBy
ZXR1cm4gaW5wdXRfLT5SZWNvcmRpbmcoKTsKLSAgfQotCi0gIGludDMyX3QgSW5pdFNwZWFrZXIo
KSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0
dXJuIGluaXRpYWxpemVkXyA/IDAgOiAtMTsKLSAgfQotCi0gIGJvb2wgU3BlYWtlcklzSW5pdGlh
bGl6ZWQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9O
X187Ci0gICAgcmV0dXJuIGluaXRpYWxpemVkXzsKLSAgfQotCi0gIGludDMyX3QgSW5pdE1pY3Jv
cGhvbmUoKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0g
ICAgcmV0dXJuIGluaXRpYWxpemVkXyA/IDAgOiAtMTsKLSAgfQotCi0gIGJvb2wgTWljcm9waG9u
ZUlzSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBf
X0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIGluaXRpYWxpemVkXzsKLSAgfQotCi0gIGludDMyX3Qg
U3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKGJvb2wqIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAg
IFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGlmICghaW5pdGlhbGl6ZWRfKQot
ICAgICAgcmV0dXJuIC0xOwotICAgICphdmFpbGFibGUgPSBvdXRwdXRfLT5TcGVha2VyVm9sdW1l
SXNBdmFpbGFibGUoKTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6ICIgPDwgKmF2YWls
YWJsZTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgU2V0U3BlYWtlclZvbHVtZSh1
aW50MzJfdCB2b2x1bWUpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJ
T05fXzsKLSAgICBpZiAoIWluaXRpYWxpemVkXykKLSAgICAgIHJldHVybiAtMTsKLSAgICByZXR1
cm4gb3V0cHV0Xy0+U2V0U3BlYWtlclZvbHVtZSh2b2x1bWUpOwotICB9Ci0KLSAgaW50MzJfdCBT
cGVha2VyVm9sdW1lKHVpbnQzMl90KiBvdXRwdXRfdm9sdW1lKSBjb25zdCBvdmVycmlkZSB7Ci0g
ICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFpbml0aWFsaXplZF8p
Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgYWJzbDo6b3B0aW9uYWw8dWludDMyX3Q+IHZvbHVtZSA9
IG91dHB1dF8tPlNwZWFrZXJWb2x1bWUoKTsKLSAgICBpZiAoIXZvbHVtZSkKLSAgICAgIHJldHVy
biAtMTsKLSAgICAqb3V0cHV0X3ZvbHVtZSA9ICp2b2x1bWU7Ci0gICAgUlRDX0xPRyhJTkZPKSA8
PCAib3V0cHV0OiAiIDw8ICp2b2x1bWU7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90
IE1heFNwZWFrZXJWb2x1bWUodWludDMyX3QqIG91dHB1dF9tYXhfdm9sdW1lKSBjb25zdCBvdmVy
cmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFpbml0
aWFsaXplZF8pCi0gICAgICByZXR1cm4gLTE7Ci0gICAgYWJzbDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heF92b2x1bWUgPSBvdXRwdXRfLT5NYXhTcGVha2VyVm9sdW1lKCk7Ci0gICAgaWYgKCFtYXhf
dm9sdW1lKQotICAgICAgcmV0dXJuIC0xOwotICAgICpvdXRwdXRfbWF4X3ZvbHVtZSA9ICptYXhf
dm9sdW1lOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBNaW5TcGVha2VyVm9sdW1l
KHVpbnQzMl90KiBvdXRwdXRfbWluX3ZvbHVtZSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIFJUQ19M
T0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGlmICghaW5pdGlhbGl6ZWRfKQotICAgICAg
cmV0dXJuIC0xOwotICAgIGFic2w6Om9wdGlvbmFsPHVpbnQzMl90PiBtaW5fdm9sdW1lID0gb3V0
cHV0Xy0+TWluU3BlYWtlclZvbHVtZSgpOwotICAgIGlmICghbWluX3ZvbHVtZSkKLSAgICAgIHJl
dHVybiAtMTsKLSAgICAqb3V0cHV0X21pbl92b2x1bWUgPSAqbWluX3ZvbHVtZTsKLSAgICByZXR1
cm4gMDsKLSAgfQotCi0gIGludDMyX3QgTWljcm9waG9uZVZvbHVtZUlzQXZhaWxhYmxlKGJvb2wq
IGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9f
OwotICAgICphdmFpbGFibGUgPSBmYWxzZTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6
ICIgPDwgKmF2YWlsYWJsZTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFNldE1p
Y3JvcGhvbmVWb2x1bWUodWludDMyX3Qgdm9sdW1lKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IHZvbHVtZSA8PCAiKSI7Ci0gICAgRkFUQUwo
KSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAg
aW50MzJfdCBNaWNyb3Bob25lVm9sdW1lKHVpbnQzMl90KiB2b2x1bWUpIGNvbnN0IG92ZXJyaWRl
IHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBGQVRBTCgpIDw8ICJT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90
IE1heE1pY3JvcGhvbmVWb2x1bWUodWludDMyX3QqIG1heFZvbHVtZSkgY29uc3Qgb3ZlcnJpZGUg
ewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIEZBVEFMKCkgPDwgIlNo
b3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3Qg
TWluTWljcm9waG9uZVZvbHVtZSh1aW50MzJfdCogbWluVm9sdW1lKSBjb25zdCBvdmVycmlkZSB7
Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgRkFUQUwoKSA8PCAiU2hv
dWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBT
cGVha2VyTXV0ZUlzQXZhaWxhYmxlKGJvb2wqIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIFJU
Q19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZl
ciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU2V0U3BlYWtl
ck11dGUoYm9vbCBlbmFibGUpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVO
Q1RJT05fXyA8PCAiKCIgPDwgZW5hYmxlIDw8ICIpIjsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFNwZWFr
ZXJNdXRlKGJvb2wqIGVuYWJsZWQpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8p
IDw8IF9fRlVOQ1RJT05fXzsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IE1pY3JvcGhvbmVNdXRlSXNBdmFp
bGFibGUoYm9vbCogYXZhaWxhYmxlKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBf
X0ZVTkNUSU9OX187Ci0gICAgRkFUQUwoKSA8PCAiTm90IGltcGxlbWVudGVkIjsKLSAgICByZXR1
cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFNldE1pY3JvcGhvbmVNdXRlKGJvb2wgZW5hYmxlKSBv
dmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IGVu
YWJsZSA8PCAiKSI7Ci0gICAgRkFUQUwoKSA8PCAiTm90IGltcGxlbWVudGVkIjsKLSAgICByZXR1
cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IE1pY3JvcGhvbmVNdXRlKGJvb2wqIGVuYWJsZWQpIGNv
bnN0IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBG
QVRBTCgpIDw8ICJOb3QgaW1wbGVtZW50ZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlu
dDMyX3QgU3RlcmVvUGxheW91dElzQXZhaWxhYmxlKGJvb2wqIGF2YWlsYWJsZSkgY29uc3Qgb3Zl
cnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgICphdmFpbGFi
bGUgPSBpc19zdGVyZW9fcGxheW91dF9zdXBwb3J0ZWRfOwotICAgIFJUQ19MT0coSU5GTykgPDwg
Im91dHB1dDogIiA8PCAqYXZhaWxhYmxlOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJf
dCBTZXRTdGVyZW9QbGF5b3V0KGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IGVuYWJsZSA8PCAiKSI7Ci0gICAgLy8gQW5k
cm9pZCBkb2VzIG5vdCBzdXBwb3J0IGNoYW5nZXMgYmV0d2VlbiBtb25vIGFuZCBzdGVybyBvbiB0
aGUgZmx5LiBUaGUKLSAgICAvLyB1c2Ugb2Ygc3RlcmVvIG9yIG1vbm8gaXMgZGV0ZXJtaW5lZCBi
eSB0aGUgYXVkaW8gbGF5ZXIuIEl0IGlzIGFsbG93ZWQKLSAgICAvLyB0byBjYWxsIHRoaXMgbWV0
aG9kIGlmIHRoYXQgc2FtZSBzdGF0ZSBpcyBub3QgbW9kaWZpZWQuCi0gICAgYm9vbCBhdmFpbGFi
bGUgPSBpc19zdGVyZW9fcGxheW91dF9zdXBwb3J0ZWRfOwotICAgIGlmIChlbmFibGUgIT0gYXZh
aWxhYmxlKSB7Ci0gICAgICBSVENfTE9HKFdBUk5JTkcpIDw8ICJjaGFuZ2luZyBzdGVyZW8gcGxh
eW91dCBub3Qgc3VwcG9ydGVkIjsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJu
IDA7Ci0gIH0KLQotICBpbnQzMl90IFN0ZXJlb1BsYXlvdXQoYm9vbCogZW5hYmxlZCkgY29uc3Qg
b3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgICplbmFi
bGVkID0gaXNfc3RlcmVvX3BsYXlvdXRfc3VwcG9ydGVkXzsKLSAgICBSVENfTE9HKElORk8pIDw8
ICJvdXRwdXQ6ICIgPDwgKmVuYWJsZWQ7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90
IFN0ZXJlb1JlY29yZGluZ0lzQXZhaWxhYmxlKGJvb2wqIGF2YWlsYWJsZSkgY29uc3Qgb3ZlcnJp
ZGUgewotICAgIFJUQ19MT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgICphdmFpbGFibGUg
PSBpc19zdGVyZW9fcmVjb3JkX3N1cHBvcnRlZF87Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCAib3V0
cHV0OiAiIDw8ICphdmFpbGFibGU7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90IFNl
dFN0ZXJlb1JlY29yZGluZyhib29sIGVuYWJsZSkgb3ZlcnJpZGUgewotICAgIFJUQ19MT0coSU5G
TykgPDwgX19GVU5DVElPTl9fIDw8ICIoIiA8PCBlbmFibGUgPDwgIikiOwotICAgIC8vIEFuZHJv
aWQgZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2VzIGJldHdlZW4gbW9ubyBhbmQgc3Rlcm8gb24gdGhl
IGZseS4gVGhlCi0gICAgLy8gdXNlIG9mIHN0ZXJlbyBvciBtb25vIGlzIGRldGVybWluZWQgYnkg
dGhlIGF1ZGlvIGxheWVyLiBJdCBpcyBhbGxvd2VkCi0gICAgLy8gdG8gY2FsbCB0aGlzIG1ldGhv
ZCBpZiB0aGF0IHNhbWUgc3RhdGUgaXMgbm90IG1vZGlmaWVkLgotICAgIGJvb2wgYXZhaWxhYmxl
ID0gaXNfc3RlcmVvX3JlY29yZF9zdXBwb3J0ZWRfOwotICAgIGlmIChlbmFibGUgIT0gYXZhaWxh
YmxlKSB7Ci0gICAgICBSVENfTE9HKFdBUk5JTkcpIDw8ICJjaGFuZ2luZyBzdGVyZW8gcmVjb3Jk
aW5nIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLSAgfQotCi0gIGludDMyX3QgU3RlcmVvUmVjb3JkaW5nKGJvb2wqIGVuYWJsZWQpIGNvbnN0
IG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICAqZW5h
YmxlZCA9IGlzX3N0ZXJlb19yZWNvcmRfc3VwcG9ydGVkXzsKLSAgICBSVENfTE9HKElORk8pIDw8
ICJvdXRwdXQ6ICIgPDwgKmVuYWJsZWQ7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90
IFBsYXlvdXREZWxheSh1aW50MTZfdCogZGVsYXlfbXMpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAv
LyBCZXN0IGd1ZXNzIHdlIGNhbiBkbyBpcyB0byB1c2UgaGFsZiBvZiB0aGUgZXN0aW1hdGVkIHRv
dGFsIGRlbGF5LgotICAgICpkZWxheV9tcyA9IHBsYXlvdXRfZGVsYXlfbXNfIC8gMjsKLSAgICBS
VENfRENIRUNLX0dUKCpkZWxheV9tcywgMCk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBib3RoIHN1cHBvcnRzIGJ1aWx0IGluIEFFQyBhbmQg
dGhlIGRldmljZQotICAvLyBpcyBub3QgYmxhY2tsaXN0ZWQuCi0gIC8vIEN1cnJlbnRseSwgaWYg
T3BlblNMIEVTIGlzIHVzZWQgaW4gYm90aCBkaXJlY3Rpb25zLCB0aGlzIG1ldGhvZCB3aWxsIHN0
aWxsCi0gIC8vIHJlcG9ydCB0aGUgY29ycmVjdCB2YWx1ZSBhbmQgaXQgaGFzIHRoZSBjb3JyZWN0
IGVmZmVjdC4gQXMgYW4gZXhhbXBsZToKLSAgLy8gYSBkZXZpY2Ugc3VwcG9ydHMgYnVpbHQgaW4g
QUVDIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUuIExpYmppbmdsZQotICAvLyB3aWxsIHRo
ZW4gZGlzYWJsZSB0aGUgV2ViUlRDIGJhc2VkIEFFQyBhbmQgdGhhdCB3aWxsIHdvcmsgZm9yIGFs
bCBkZXZpY2VzCi0gIC8vIChtYWlubHkgTmV4dXMpIGV2ZW4gd2hlbiBPcGVuU0wgRVMgaXMgdXNl
ZCBmb3IgaW5wdXQgc2luY2Ugb3VyIGN1cnJlbnQKLSAgLy8gaW1wbGVtZW50YXRpb24gd2lsbCBl
bmFibGUgYnVpbHQtaW4gQUVDIGJ5IGRlZmF1bHQgYWxzbyBmb3IgT3BlblNMIEVTLgotICAvLyBU
aGUgb25seSAiYmFkIiB0aGluZyB0aGF0IGhhcHBlbnMgdG9kYXkgaXMgdGhhdCB3aGVuIExpYmpp
bmdsZSBjYWxscwotICAvLyBPcGVuU0xFU1JlY29yZGVyOjpFbmFibGVCdWlsdEluQUVDKCkgaXQg
d2lsbCBub3QgaGF2ZSBhbnkgcmVhbCBlZmZlY3QgYW5kCi0gIC8vIGEgIk5vdCBJbXBsZW1lbnRl
ZCIgbG9nIHdpbGwgYmUgZmlsZWQuIFRoaXMgbm9uLXBlcmZlY3Qgc3RhdGUgd2lsbCByZW1haW4K
LSAgLy8gdW50aWwgSSBoYXZlIGFkZGVkIGZ1bGwgc3VwcG9ydCBmb3IgYXVkaW8gZWZmZWN0cyBi
YXNlZCBvbiBPcGVuU0wgRVMgQVBJcy4KLSAgYm9vbCBCdWlsdEluQUVDSXNBdmFpbGFibGUoKSBj
b25zdCBvdmVycmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAg
aWYgKCFpbml0aWFsaXplZF8pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBpc0F2YWls
YWJsZSA9IGlucHV0Xy0+SXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpOwotICAgIFJU
Q19MT0coSU5GTykgPDwgIm91dHB1dDogIiA8PCBpc0F2YWlsYWJsZTsKLSAgICByZXR1cm4gaXNB
dmFpbGFibGU7Ci0gIH0KLQotICAvLyBOb3QgaW1wbGVtZW50ZWQgZm9yIGFueSBpbnB1dCBkZXZp
Y2Ugb24gQW5kcm9pZC4KLSAgYm9vbCBCdWlsdEluQUdDSXNBdmFpbGFibGUoKSBjb25zdCBvdmVy
cmlkZSB7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgUlRDX0xPRyhJ
TkZPKSA8PCAib3V0cHV0OiAiIDw8IGZhbHNlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0g
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGJvdGggc3VwcG9ydHMgYnVpbHQgaW4gTlMg
YW5kIHRoZSBkZXZpY2UKLSAgLy8gaXMgbm90IGJsYWNrbGlzdGVkLgotICAvLyBUT0RPKGhlbnJp
a2EpOiBhZGQgaW1wbGVtZW50YXRpb24gZm9yIE9wZW5TTCBFUyBiYXNlZCBhdWRpbyBhcyB3ZWxs
LgotICAvLyBJbiBhZGRpdGlvbiwgc2VlIGNvbW1lbnRzIGZvciBCdWlsdEluQUVDSXNBdmFpbGFi
bGUoKS4KLSAgYm9vbCBCdWlsdEluTlNJc0F2YWlsYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsKLSAg
ICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBpZiAoIWluaXRpYWxpemVkXykK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIGlzQXZhaWxhYmxlID0gaW5wdXRfLT5Jc05v
aXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpOwotICAgIFJUQ19MT0coSU5GTykgPDwgIm91dHB1dDog
IiA8PCBpc0F2YWlsYWJsZTsKLSAgICByZXR1cm4gaXNBdmFpbGFibGU7Ci0gIH0KLQotICAvLyBU
T0RPKGhlbnJpa2EpOiBhZGQgaW1wbGVtZW50YXRpb24gZm9yIE9wZW5TTCBFUyBiYXNlZCBhdWRp
byBhcyB3ZWxsLgotICBpbnQzMl90IEVuYWJsZUJ1aWx0SW5BRUMoYm9vbCBlbmFibGUpIG92ZXJy
aWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXyA8PCAiKCIgPDwgZW5hYmxl
IDw8ICIpIjsKLSAgICBpZiAoIWluaXRpYWxpemVkXykKLSAgICAgIHJldHVybiAtMTsKLSAgICBS
VENfQ0hFQ0soQnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkpIDw8ICJIVyBBRUMgaXMgbm90IGF2YWls
YWJsZSI7Ci0gICAgaW50MzJfdCByZXN1bHQgPSBpbnB1dF8tPkVuYWJsZUJ1aWx0SW5BRUMoZW5h
YmxlKTsKLSAgICBSVENfTE9HKElORk8pIDw8ICJvdXRwdXQ6ICIgPDwgcmVzdWx0OwotICAgIHJl
dHVybiByZXN1bHQ7Ci0gIH0KLQotICBpbnQzMl90IEVuYWJsZUJ1aWx0SW5BR0MoYm9vbCBlbmFi
bGUpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXyA8PCAiKCIg
PDwgZW5hYmxlIDw8ICIpIjsKLSAgICBGQVRBTCgpIDw8ICJIVyBBR0MgaXMgbm90IGF2YWlsYWJs
ZSI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxl
bWVudGF0aW9uIGZvciBPcGVuU0wgRVMgYmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgaW50MzJfdCBF
bmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIG92ZXJyaWRlIHsKLSAgICBSVENfTE9HKElORk8p
IDw8IF9fRlVOQ1RJT05fXyA8PCAiKCIgPDwgZW5hYmxlIDw8ICIpIjsKLSAgICBpZiAoIWluaXRp
YWxpemVkXykKLSAgICAgIHJldHVybiAtMTsKLSAgICBSVENfQ0hFQ0soQnVpbHRJbk5TSXNBdmFp
bGFibGUoKSkgPDwgIkhXIE5TIGlzIG5vdCBhdmFpbGFibGUiOwotICAgIGludDMyX3QgcmVzdWx0
ID0gaW5wdXRfLT5FbmFibGVCdWlsdEluTlMoZW5hYmxlKTsKLSAgICBSVENfTE9HKElORk8pIDw8
ICJvdXRwdXQ6ICIgPDwgcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBpbnQz
Ml90IEdldFBsYXlvdXRVbmRlcnJ1bkNvdW50KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIGlmICgh
aW5pdGlhbGl6ZWRfKQotICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBvdXRwdXRfLT5HZXRQ
bGF5b3V0VW5kZXJydW5Db3VudCgpOwotICB9Ci0KLSAgaW50MzJfdCBBdHRhY2hBdWRpb0J1ZmZl
cigpIHsKLSAgICBSVENfTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBvdXRwdXRfLT5B
dHRhY2hBdWRpb0J1ZmZlcihhdWRpb19kZXZpY2VfYnVmZmVyXy5nZXQoKSk7Ci0gICAgaW5wdXRf
LT5BdHRhY2hBdWRpb0J1ZmZlcihhdWRpb19kZXZpY2VfYnVmZmVyXy5nZXQoKSk7Ci0gICAgcmV0
dXJuIDA7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hl
Y2tlcl87Ci0KLSAgY29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5
ZXJfOwotICBjb25zdCBib29sIGlzX3N0ZXJlb19wbGF5b3V0X3N1cHBvcnRlZF87Ci0gIGNvbnN0
IGJvb2wgaXNfc3RlcmVvX3JlY29yZF9zdXBwb3J0ZWRfOwotICBjb25zdCB1aW50MTZfdCBwbGF5
b3V0X2RlbGF5X21zXzsKLSAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFRhc2tRdWV1ZUZhY3Rvcnk+
IHRhc2tfcXVldWVfZmFjdG9yeV87Ci0gIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0lucHV0
PiBpbnB1dF87Ci0gIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb091dHB1dD4gb3V0cHV0XzsK
LSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGV2aWNlQnVmZmVyPiBhdWRpb19kZXZpY2VfYnVmZmVy
XzsKLQotICBib29sIGluaXRpYWxpemVkXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1TY29w
ZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gR2V0QXVkaW9NYW5hZ2VyKEpOSUVudiogZW52LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpv
YmplY3Q+JiBqX2NvbnRleHQpIHsKLSAgcmV0dXJuIEphdmFfV2ViUnRjQXVkaW9NYW5hZ2VyX2dl
dEF1ZGlvTWFuYWdlcihlbnYsIGpfY29udGV4dCk7Ci19Ci0KLWludCBHZXREZWZhdWx0U2FtcGxl
UmF0ZShKTklFbnYqIGVudiwgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9hdWRpb19tYW5hZ2Vy
KSB7Ci0gIHJldHVybiBKYXZhX1dlYlJ0Y0F1ZGlvTWFuYWdlcl9nZXRTYW1wbGVSYXRlKGVudiwg
al9hdWRpb19tYW5hZ2VyKTsKLX0KLQotdm9pZCBHZXRBdWRpb1BhcmFtZXRlcnMoSk5JRW52KiBl
bnYsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2Nv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBq
X2F1ZGlvX21hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfc2FtcGxl
X3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0X3NhbXBsZV9yYXRlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc3RlcmVvX2lucHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCB1c2Vfc3RlcmVvX291dHB1dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEF1ZGlvUGFyYW1ldGVycyogaW5wdXRfcGFyYW1ldGVycywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEF1ZGlvUGFyYW1ldGVycyogb3V0cHV0X3BhcmFtZXRlcnMpIHsKLSAgY29uc3Qg
aW50IG91dHB1dF9jaGFubmVscyA9IHVzZV9zdGVyZW9fb3V0cHV0ID8gMiA6IDE7Ci0gIGNvbnN0
IGludCBpbnB1dF9jaGFubmVscyA9IHVzZV9zdGVyZW9faW5wdXQgPyAyIDogMTsKLSAgY29uc3Qg
c2l6ZV90IG91dHB1dF9idWZmZXJfc2l6ZSA9IEphdmFfV2ViUnRjQXVkaW9NYW5hZ2VyX2dldE91
dHB1dEJ1ZmZlclNpemUoCi0gICAgICBlbnYsIGpfY29udGV4dCwgal9hdWRpb19tYW5hZ2VyLCBv
dXRwdXRfc2FtcGxlX3JhdGUsIG91dHB1dF9jaGFubmVscyk7Ci0gIGNvbnN0IHNpemVfdCBpbnB1
dF9idWZmZXJfc2l6ZSA9IEphdmFfV2ViUnRjQXVkaW9NYW5hZ2VyX2dldElucHV0QnVmZmVyU2l6
ZSgKLSAgICAgIGVudiwgal9jb250ZXh0LCBqX2F1ZGlvX21hbmFnZXIsIGlucHV0X3NhbXBsZV9y
YXRlLCBpbnB1dF9jaGFubmVscyk7Ci0gIG91dHB1dF9wYXJhbWV0ZXJzLT5yZXNldChvdXRwdXRf
c2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG91dHB1dF9jaGFubmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG91dHB1dF9idWZmZXJfc2l6ZSkpOwotICBpbnB1dF9wYXJhbWV0ZXJzLT5y
ZXNldChpbnB1dF9zYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbnB1dF9jaGFubmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PHNpemVfdD4oaW5wdXRfYnVmZmVyX3NpemUpKTsKLSAgUlRDX0NIRUNLKGlu
cHV0X3BhcmFtZXRlcnMtPmlzX3ZhbGlkKCkpOwotICBSVENfQ0hFQ0sob3V0cHV0X3BhcmFtZXRl
cnMtPmlzX3ZhbGlkKCkpOwotfQotCi1ydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1
bGU+IENyZWF0ZUF1ZGlvRGV2aWNlTW9kdWxlRnJvbUlucHV0QW5kT3V0cHV0KAotICAgIEF1ZGlv
RGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGF1ZGlvX2xheWVyLAotICAgIGJvb2wgaXNfc3RlcmVv
X3BsYXlvdXRfc3VwcG9ydGVkLAotICAgIGJvb2wgaXNfc3RlcmVvX3JlY29yZF9zdXBwb3J0ZWQs
Ci0gICAgdWludDE2X3QgcGxheW91dF9kZWxheV9tcywKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVk
aW9JbnB1dD4gYXVkaW9faW5wdXQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvT3V0cHV0PiBh
dWRpb19vdXRwdXQpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gIHJldHVy
biBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PEFuZHJvaWRBdWRpb0RldmljZU1vZHVsZT4oCi0g
ICAgICBhdWRpb19sYXllciwgaXNfc3RlcmVvX3BsYXlvdXRfc3VwcG9ydGVkLCBpc19zdGVyZW9f
cmVjb3JkX3N1cHBvcnRlZCwKLSAgICAgIHBsYXlvdXRfZGVsYXlfbXMsIHN0ZDo6bW92ZShhdWRp
b19pbnB1dCksIHN0ZDo6bW92ZShhdWRpb19vdXRwdXQpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZp
Y2UvYXVkaW9fZGV2aWNlX21vZHVsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNl
X21vZHVsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTE4MzM2YzVhNWQ0MTU1
ZDEwZjNiZWUyYjFjY2VmZTE5YTczNmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9tb2R1bGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAx
OCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
I2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BVURJT19ERVZJQ0VfTU9E
VUxFX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfQVVESU9fREVWSUNFX0FVRElPX0RF
VklDRV9NT0RVTEVfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImFic2wvdHlw
ZXMvb3B0aW9uYWwuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1
ZGlvX2RldmljZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL3Njb3Bl
ZF9qYXZhX3JlZi5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotY2xhc3MgQXVkaW9EZXZpY2VC
dWZmZXI7Ci0KLW5hbWVzcGFjZSBqbmkgewotCi1jbGFzcyBBdWRpb0lucHV0IHsKLSBwdWJsaWM6
Ci0gIHZpcnR1YWwgfkF1ZGlvSW5wdXQoKSB7fQotCi0gIHZpcnR1YWwgaW50MzJfdCBJbml0KCkg
PSAwOwotICB2aXJ0dWFsIGludDMyX3QgVGVybWluYXRlKCkgPSAwOwotCi0gIHZpcnR1YWwgaW50
MzJfdCBJbml0UmVjb3JkaW5nKCkgPSAwOwotICB2aXJ0dWFsIGJvb2wgUmVjb3JkaW5nSXNJbml0
aWFsaXplZCgpIGNvbnN0ID0gMDsKLQotICB2aXJ0dWFsIGludDMyX3QgU3RhcnRSZWNvcmRpbmco
KSA9IDA7Ci0gIHZpcnR1YWwgaW50MzJfdCBTdG9wUmVjb3JkaW5nKCkgPSAwOwotICB2aXJ0dWFs
IGJvb2wgUmVjb3JkaW5nKCkgY29uc3QgPSAwOwotCi0gIHZpcnR1YWwgdm9pZCBBdHRhY2hBdWRp
b0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIpID0gMDsKLQotICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGF1ZGlvIGlucHV0IHN1cHBvcnRzIGJ1aWx0LWluIGF1ZGlvIGVmZmVj
dHMgZm9yIEFFQyBhbmQKLSAgLy8gTlMuCi0gIHZpcnR1YWwgYm9vbCBJc0Fjb3VzdGljRWNob0Nh
bmNlbGVyU3VwcG9ydGVkKCkgY29uc3QgPSAwOwotICB2aXJ0dWFsIGJvb2wgSXNOb2lzZVN1cHBy
ZXNzb3JTdXBwb3J0ZWQoKSBjb25zdCA9IDA7Ci0KLSAgdmlydHVhbCBpbnQzMl90IEVuYWJsZUJ1
aWx0SW5BRUMoYm9vbCBlbmFibGUpID0gMDsKLSAgdmlydHVhbCBpbnQzMl90IEVuYWJsZUJ1aWx0
SW5OUyhib29sIGVuYWJsZSkgPSAwOwotfTsKLQotY2xhc3MgQXVkaW9PdXRwdXQgewotIHB1Ymxp
YzoKLSAgdmlydHVhbCB+QXVkaW9PdXRwdXQoKSB7fQotCi0gIHZpcnR1YWwgaW50MzJfdCBJbml0
KCkgPSAwOwotICB2aXJ0dWFsIGludDMyX3QgVGVybWluYXRlKCkgPSAwOwotICB2aXJ0dWFsIGlu
dDMyX3QgSW5pdFBsYXlvdXQoKSA9IDA7Ci0gIHZpcnR1YWwgYm9vbCBQbGF5b3V0SXNJbml0aWFs
aXplZCgpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBpbnQzMl90IFN0YXJ0UGxheW91dCgpID0gMDsK
LSAgdmlydHVhbCBpbnQzMl90IFN0b3BQbGF5b3V0KCkgPSAwOwotICB2aXJ0dWFsIGJvb2wgUGxh
eWluZygpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBib29sIFNwZWFrZXJWb2x1bWVJc0F2YWlsYWJs
ZSgpID0gMDsKLSAgdmlydHVhbCBpbnQgU2V0U3BlYWtlclZvbHVtZSh1aW50MzJfdCB2b2x1bWUp
ID0gMDsKLSAgdmlydHVhbCBhYnNsOjpvcHRpb25hbDx1aW50MzJfdD4gU3BlYWtlclZvbHVtZSgp
IGNvbnN0ID0gMDsKLSAgdmlydHVhbCBhYnNsOjpvcHRpb25hbDx1aW50MzJfdD4gTWF4U3BlYWtl
clZvbHVtZSgpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBhYnNsOjpvcHRpb25hbDx1aW50MzJfdD4g
TWluU3BlYWtlclZvbHVtZSgpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEF0dGFjaEF1ZGlv
QnVmZmVyKEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcikgPSAwOwotICB2aXJ0dWFsIGlu
dCBHZXRQbGF5b3V0VW5kZXJydW5Db3VudCgpID0gMDsKLX07Ci0KLS8vIEV4dHJhY3QgYW4gYW5k
cm9pZC5tZWRpYS5BdWRpb01hbmFnZXIgZnJvbSBhbiBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dC4K
LVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBHZXRBdWRpb01hbmFnZXIoSk5JRW52KiBlbnYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFS
ZWY8am9iamVjdD4mIGpfY29udGV4dCk7Ci0KLS8vIEdldCBkZWZhdWx0IGF1ZGlvIHNhbXBsZSBy
YXRlIGJ5IHF1ZXJ5aW5nIGFuIGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyLgotaW50IEdldERl
ZmF1bHRTYW1wbGVSYXRlKEpOSUVudiogZW52LCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2F1
ZGlvX21hbmFnZXIpOwotCi0vLyBHZXQgYXVkaW8gaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJz
IGJhc2VkIG9uIGEgbnVtYmVyIG9mIHNldHRpbmdzLgotdm9pZCBHZXRBdWRpb1BhcmFtZXRlcnMo
Sk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmpl
Y3Q+JiBqX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpv
YmplY3Q+JiBqX2F1ZGlvX21hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRfc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0X3NhbXBs
ZV9yYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc3RlcmVvX2lucHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc3RlcmVvX291dHB1dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEF1ZGlvUGFyYW1ldGVycyogaW5wdXRfcGFyYW1ldGVycywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEF1ZGlvUGFyYW1ldGVycyogb3V0cHV0X3BhcmFtZXRlcnMpOwot
Ci0vLyBHbHVlIHRvZ2V0aGVyIGFuIGF1ZGlvIGlucHV0IGFuZCBhdWRpbyBvdXRwdXQgdG8gZ2V0
IGFuIEF1ZGlvRGV2aWNlTW9kdWxlLgotcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9k
dWxlPiBDcmVhdGVBdWRpb0RldmljZU1vZHVsZUZyb21JbnB1dEFuZE91dHB1dCgKLSAgICBBdWRp
b0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllciwKLSAgICBib29sIGlzX3N0ZXJl
b19wbGF5b3V0X3N1cHBvcnRlZCwKLSAgICBib29sIGlzX3N0ZXJlb19yZWNvcmRfc3VwcG9ydGVk
LAotICAgIHVpbnQxNl90IHBsYXlvdXRfZGVsYXlfbXMsCi0gICAgc3RkOjp1bmlxdWVfcHRyPEF1
ZGlvSW5wdXQ+IGF1ZGlvX2lucHV0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb091dHB1dD4g
YXVkaW9fb3V0cHV0KTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9BVURJT19ERVZJQ0VfQVVE
SU9fREVWSUNFX01PRFVMRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9f
cmVjb3JkX2puaS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX3JlY29yZF9qbmkuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YzI5MGMyZWUzOTgzNDlmYzI1ZDg4NzhjNTg4
ZTYyMzZkMDE5ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fcmVjb3JkX2puaS5jYworKysgL2Rldi9udWxsCkBA
IC0xLDI2NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9h
bmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX3JlY29yZF9qbmkuaCIKLQotI2luY2x1
ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAicnRjX2Jhc2UvYXJy
YXlzaXplLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAicnRjX2Jh
c2UvZm9ybWF0X21hY3Jvcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNs
dWRlICJydGNfYmFzZS9wbGF0Zm9ybV90aHJlYWQuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1l
X3V0aWxzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2phdmFfYXVkaW9fZGV2
aWNlX21vZHVsZV9uYXRpdmVfam5pL1dlYlJ0Y0F1ZGlvUmVjb3JkX2puaS5oIgotI2luY2x1ZGUg
InNkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1
ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJzeXN0ZW1f
d3JhcHBlcnMvaW5jbHVkZS9tZXRyaWNzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1uYW1l
c3BhY2Ugam5pIHsKLQotbmFtZXNwYWNlIHsKLS8vIFNjb3BlZCBjbGFzcyB3aGljaCBsb2dzIGl0
cyB0aW1lIG9mIGxpZmUgYXMgYSBVTUEgc3RhdGlzdGljLiBJdCBnZW5lcmF0ZXMKLS8vIGEgaGlz
dG9ncmFtIHdoaWNoIG1lYXN1cmVzIHRoZSB0aW1lIGl0IHRha2VzIGZvciBhIG1ldGhvZC9zY29w
ZSB0byBleGVjdXRlLgotY2xhc3MgU2NvcGVkSGlzdG9ncmFtVGltZXIgewotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgU2NvcGVkSGlzdG9ncmFtVGltZXIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCi0g
ICAgICA6IGhpc3RvZ3JhbV9uYW1lXyhuYW1lKSwgc3RhcnRfdGltZV9tc18ocnRjOjpUaW1lTWls
bGlzKCkpIHt9Ci0gIH5TY29wZWRIaXN0b2dyYW1UaW1lcigpIHsKLSAgICBjb25zdCBpbnQ2NF90
IGxpZmVfdGltZV9tcyA9IHJ0Yzo6VGltZVNpbmNlKHN0YXJ0X3RpbWVfbXNfKTsKLSAgICBSVENf
SElTVE9HUkFNX0NPVU5UU18xMDAwKGhpc3RvZ3JhbV9uYW1lXywgbGlmZV90aW1lX21zKTsKLSAg
ICBSVENfTE9HKElORk8pIDw8IGhpc3RvZ3JhbV9uYW1lXyA8PCAiOiAiIDw8IGxpZmVfdGltZV9t
czsKLSAgfQotCi0gcHJpdmF0ZToKLSAgY29uc3Qgc3RkOjpzdHJpbmcgaGlzdG9ncmFtX25hbWVf
OwotICBpbnQ2NF90IHN0YXJ0X3RpbWVfbXNfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlCi0KLVNj
b3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBBdWRpb1JlY29yZEpuaTo6Q3JlYXRlSmF2YVdlYlJ0
Y0F1ZGlvUmVjb3JkKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9iamVj
dD4mIGpfY29udGV4dCwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2F1ZGlvX21hbmFn
ZXIpIHsKLSAgcmV0dXJuIEphdmFfV2ViUnRjQXVkaW9SZWNvcmRfQ29uc3RydWN0b3IoZW52LCBq
X2NvbnRleHQsIGpfYXVkaW9fbWFuYWdlcik7Ci19Ci0KLUF1ZGlvUmVjb3JkSm5pOjpBdWRpb1Jl
Y29yZEpuaShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBdWRpb1BhcmFtZXRlcnMmIGF1ZGlvX3BhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRvdGFsX2RlbGF5X21zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfYXVkaW9fcmVjb3JkKQotICAgIDogal9h
dWRpb19yZWNvcmRfKGVudiwgal9hdWRpb19yZWNvcmQpLAotICAgICAgYXVkaW9fcGFyYW1ldGVy
c18oYXVkaW9fcGFyYW1ldGVycyksCi0gICAgICB0b3RhbF9kZWxheV9tc18odG90YWxfZGVsYXlf
bXMpLAotICAgICAgZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyhudWxscHRyKSwKLSAgICAgIGRpcmVj
dF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfKDApLAotICAgICAgZnJhbWVzX3Blcl9idWZmZXJf
KDApLAotICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSwKLSAgICAgIHJlY29yZGluZ18oZmFsc2Up
LAotICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8obnVsbHB0cikgewotICBSVENfTE9HKElORk8p
IDw8ICJjdG9yIjsKLSAgUlRDX0RDSEVDSyhhdWRpb19wYXJhbWV0ZXJzXy5pc192YWxpZCgpKTsK
LSAgSmF2YV9XZWJSdGNBdWRpb1JlY29yZF9zZXROYXRpdmVBdWRpb1JlY29yZChlbnYsIGpfYXVk
aW9fcmVjb3JkXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqbmk6Ompsb25nRnJvbVBvaW50ZXIodGhpcykpOwotICAvLyBEZXRhY2ggZnJvbSB0aGlzIHRo
cmVhZCBzaW5jZSBjb25zdHJ1Y3Rpb24gaXMgYWxsb3dlZCB0byBoYXBwZW4gb24gYQotICAvLyBk
aWZmZXJlbnQgdGhyZWFkLgotICB0aHJlYWRfY2hlY2tlcl8uRGV0YWNoKCk7Ci0gIHRocmVhZF9j
aGVja2VyX2phdmFfLkRldGFjaCgpOwotfQotCi1BdWRpb1JlY29yZEpuaTo6fkF1ZGlvUmVjb3Jk
Sm5pKCkgewotICBSVENfTE9HKElORk8pIDw8ICJkdG9yIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBUZXJtaW5hdGUoKTsKLX0KLQotaW50MzJfdCBBdWRp
b1JlY29yZEpuaTo6SW5pdCgpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiSW5pdCI7Ci0gIGVudl8g
PSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICByZXR1cm4gMDsKLX0KLQotaW50MzJfdCBBdWRpb1JlY29y
ZEpuaTo6VGVybWluYXRlKCkgewotICBSVENfTE9HKElORk8pIDw8ICJUZXJtaW5hdGUiOwotICBS
VENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFN0b3BSZWNvcmRpbmco
KTsKLSAgdGhyZWFkX2NoZWNrZXJfLkRldGFjaCgpOwotICByZXR1cm4gMDsKLX0KLQotaW50MzJf
dCBBdWRpb1JlY29yZEpuaTo6SW5pdFJlY29yZGluZygpIHsKLSAgUlRDX0xPRyhJTkZPKSA8PCAi
SW5pdFJlY29yZGluZyI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgaWYgKGluaXRpYWxpemVkXykgewotICAgIC8vIEFscmVhZHkgaW5pdGlhbGl6ZWQuCi0g
ICAgcmV0dXJuIDA7Ci0gIH0KLSAgUlRDX0RDSEVDSyghcmVjb3JkaW5nXyk7Ci0gIFNjb3BlZEhp
c3RvZ3JhbVRpbWVyIHRpbWVyKCJXZWJSVEMuQXVkaW8uSW5pdFJlY29yZGluZ0R1cmF0aW9uTXMi
KTsKLQotICBpbnQgZnJhbWVzX3Blcl9idWZmZXIgPSBKYXZhX1dlYlJ0Y0F1ZGlvUmVjb3JkX2lu
aXRSZWNvcmRpbmcoCi0gICAgICBlbnZfLCBqX2F1ZGlvX3JlY29yZF8sIGF1ZGlvX3BhcmFtZXRl
cnNfLnNhbXBsZV9yYXRlKCksCi0gICAgICBzdGF0aWNfY2FzdDxpbnQ+KGF1ZGlvX3BhcmFtZXRl
cnNfLmNoYW5uZWxzKCkpKTsKLSAgaWYgKGZyYW1lc19wZXJfYnVmZmVyIDwgMCkgewotICAgIGRp
cmVjdF9idWZmZXJfYWRkcmVzc18gPSBudWxscHRyOwotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8
ICJJbml0UmVjb3JkaW5nIGZhaWxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGZyYW1lc19w
ZXJfYnVmZmVyXyA9IHN0YXRpY19jYXN0PHNpemVfdD4oZnJhbWVzX3Blcl9idWZmZXIpOwotICBS
VENfTE9HKElORk8pIDw8ICJmcmFtZXNfcGVyX2J1ZmZlcjogIiA8PCBmcmFtZXNfcGVyX2J1ZmZl
cl87Ci0gIGNvbnN0IHNpemVfdCBieXRlc19wZXJfZnJhbWUgPSBhdWRpb19wYXJhbWV0ZXJzXy5j
aGFubmVscygpICogc2l6ZW9mKGludDE2X3QpOwotICBSVENfQ0hFQ0tfRVEoZGlyZWN0X2J1ZmZl
cl9jYXBhY2l0eV9pbl9ieXRlc18sCi0gICAgICAgICAgICAgICBmcmFtZXNfcGVyX2J1ZmZlcl8g
KiBieXRlc19wZXJfZnJhbWUpOwotICBSVENfQ0hFQ0tfRVEoZnJhbWVzX3Blcl9idWZmZXJfLCBh
dWRpb19wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpOwotICBpbml0aWFsaXpl
ZF8gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQotYm9vbCBBdWRpb1JlY29yZEpuaTo6UmVjb3Jk
aW5nSXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLSAgcmV0dXJuIGluaXRpYWxpemVkXzsKLX0KLQot
aW50MzJfdCBBdWRpb1JlY29yZEpuaTo6U3RhcnRSZWNvcmRpbmcoKSB7Ci0gIFJUQ19MT0coSU5G
TykgPDwgIlN0YXJ0UmVjb3JkaW5nIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXND
dXJyZW50KCkpOwotICBpZiAocmVjb3JkaW5nXykgewotICAgIC8vIEFscmVhZHkgcmVjb3JkaW5n
LgotICAgIHJldHVybiAwOwotICB9Ci0gIGlmICghaW5pdGlhbGl6ZWRfKSB7Ci0gICAgUlRDX0RM
T0coTFNfV0FSTklORykKLSAgICAgICAgPDwgIlJlY29yZGluZyBjYW4gbm90IHN0YXJ0IHNpbmNl
IEluaXRSZWNvcmRpbmcgbXVzdCBzdWNjZWVkIGZpcnN0IjsKLSAgICByZXR1cm4gMDsKLSAgfQot
ICBTY29wZWRIaXN0b2dyYW1UaW1lciB0aW1lcigiV2ViUlRDLkF1ZGlvLlN0YXJ0UmVjb3JkaW5n
RHVyYXRpb25NcyIpOwotICBpZiAoIUphdmFfV2ViUnRjQXVkaW9SZWNvcmRfc3RhcnRSZWNvcmRp
bmcoZW52Xywgal9hdWRpb19yZWNvcmRfKSkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJT
dGFydFJlY29yZGluZyBmYWlsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotICByZWNvcmRpbmdf
ID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OlN0b3BS
ZWNvcmRpbmcoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIlN0b3BSZWNvcmRpbmciOwotICBSVENf
RENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmICghaW5pdGlhbGl6ZWRf
IHx8ICFyZWNvcmRpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgLy8gQ2hlY2sgaWYgdGhl
IGF1ZGlvIHNvdXJjZSBtYXRjaGVkIHRoZSBhY3RpdmF0ZWQgcmVjb3JkaW5nIHNlc3Npb24gYnV0
IG9ubHkKLSAgLy8gaWYgYSB2YWxpZCByZXN1bHRzIGV4aXN0cyB0byBhdm9pZCBpbnZhbGlkIHN0
YXRpc3RpY3MuCi0gIGlmIChKYXZhX1dlYlJ0Y0F1ZGlvUmVjb3JkX2lzQXVkaW9Db25maWdWZXJp
ZmllZChlbnZfLCBqX2F1ZGlvX3JlY29yZF8pKSB7Ci0gICAgY29uc3QgYm9vbCBzZXNzaW9uX3dh
c19vayA9Ci0gICAgICAgIEphdmFfV2ViUnRjQXVkaW9SZWNvcmRfaXNBdWRpb1NvdXJjZU1hdGNo
aW5nUmVjb3JkaW5nU2Vzc2lvbigKLSAgICAgICAgICAgIGVudl8sIGpfYXVkaW9fcmVjb3JkXyk7
Ci0gICAgUlRDX0hJU1RPR1JBTV9CT09MRUFOKCJXZWJSVEMuQXVkaW8uU291cmNlTWF0Y2hlc1Jl
Y29yZGluZ1Nlc3Npb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3dhc19v
ayk7Ci0gICAgUlRDX0xPRyhJTkZPKSA8PCAiSElTVE9HUkFNKFdlYlJUQy5BdWRpby5Tb3VyY2VN
YXRjaGVzUmVjb3JkaW5nU2Vzc2lvbik6ICIKLSAgICAgICAgICAgICAgICAgIDw8IHNlc3Npb25f
d2FzX29rOwotICB9Ci0gIGlmICghSmF2YV9XZWJSdGNBdWRpb1JlY29yZF9zdG9wUmVjb3JkaW5n
KGVudl8sIGpfYXVkaW9fcmVjb3JkXykpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiU3Rv
cFJlY29yZGluZyBmYWlsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotICAvLyBJZiB3ZSBkb24n
dCBkZXRhY2ggaGVyZSwgd2Ugd2lsbCBoaXQgYSBSVENfRENIRUNLIGluIE9uRGF0YUlzUmVjb3Jk
ZWQoKQotICAvLyBuZXh0IHRpbWUgU3RhcnRSZWNvcmRpbmcoKSBpcyBjYWxsZWQgc2luY2UgaXQg
d2lsbCBjcmVhdGUgYSBuZXcgSmF2YQotICAvLyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2VyX2ph
dmFfLkRldGFjaCgpOwotICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgcmVjb3JkaW5nXyA9IGZh
bHNlOwotICBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfID0gbnVsbHB0cjsKLSAgcmV0dXJuIDA7Ci19
Ci0KLWJvb2wgQXVkaW9SZWNvcmRKbmk6OlJlY29yZGluZygpIGNvbnN0IHsKLSAgcmV0dXJuIHJl
Y29yZGluZ187Ci19Ci0KLXZvaWQgQXVkaW9SZWNvcmRKbmk6OkF0dGFjaEF1ZGlvQnVmZmVyKEF1
ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcikgewotICBSVENfTE9HKElORk8pIDw8ICJBdHRh
Y2hBdWRpb0J1ZmZlciI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb0J1ZmZlcjsKLSAgY29uc3QgaW50IHNh
bXBsZV9yYXRlX2h6ID0gYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKTsKLSAgUlRDX0xP
RyhJTkZPKSA8PCAiU2V0UmVjb3JkaW5nU2FtcGxlUmF0ZSgiIDw8IHNhbXBsZV9yYXRlX2h6IDw8
ICIpIjsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJlY29yZGluZ1NhbXBsZVJhdGUoc2Ft
cGxlX3JhdGVfaHopOwotICBjb25zdCBzaXplX3QgY2hhbm5lbHMgPSBhdWRpb19wYXJhbWV0ZXJz
Xy5jaGFubmVscygpOwotICBSVENfTE9HKElORk8pIDw8ICJTZXRSZWNvcmRpbmdDaGFubmVscygi
IDw8IGNoYW5uZWxzIDw8ICIpIjsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJlY29yZGlu
Z0NoYW5uZWxzKGNoYW5uZWxzKTsKLX0KLQotYm9vbCBBdWRpb1JlY29yZEpuaTo6SXNBY291c3Rp
Y0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICByZXR1cm4gSmF2YV9XZWJSdGNBdWRpb1JlY29yZF9pc0Fj
b3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKAotICAgICAgZW52Xywgal9hdWRpb19yZWNvcmRf
KTsKLX0KLQotYm9vbCBBdWRpb1JlY29yZEpuaTo6SXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQo
KSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAg
cmV0dXJuIEphdmFfV2ViUnRjQXVkaW9SZWNvcmRfaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQo
ZW52XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgal9hdWRpb19yZWNvcmRfKTsKLX0KLQotaW50MzJfdCBBdWRpb1JlY29yZEpuaTo6
RW5hYmxlQnVpbHRJbkFFQyhib29sIGVuYWJsZSkgewotICBSVENfTE9HKElORk8pIDw8ICJFbmFi
bGVCdWlsdEluQUVDKCIgPDwgZW5hYmxlIDw8ICIpIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uSXNDdXJyZW50KCkpOwotICByZXR1cm4gSmF2YV9XZWJSdGNBdWRpb1JlY29yZF9lbmFi
bGVCdWlsdEluQUVDKGVudl8sIGpfYXVkaW9fcmVjb3JkXywgZW5hYmxlKQotICAgICAgICAgICAg
ID8gMAotICAgICAgICAgICAgIDogLTE7Ci19Ci0KLWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OkVu
YWJsZUJ1aWx0SW5OUyhib29sIGVuYWJsZSkgewotICBSVENfTE9HKElORk8pIDw8ICJFbmFibGVC
dWlsdEluTlMoIiA8PCBlbmFibGUgPDwgIikiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
Xy5Jc0N1cnJlbnQoKSk7Ci0gIHJldHVybiBKYXZhX1dlYlJ0Y0F1ZGlvUmVjb3JkX2VuYWJsZUJ1
aWx0SW5OUyhlbnZfLCBqX2F1ZGlvX3JlY29yZF8sIGVuYWJsZSkKLSAgICAgICAgICAgICA/IDAK
LSAgICAgICAgICAgICA6IC0xOwotfQotCi12b2lkIEF1ZGlvUmVjb3JkSm5pOjpDYWNoZURpcmVj
dEJ1ZmZlckFkZHJlc3MoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVm
PGpvYmplY3Q+JiBqX2NhbGxlciwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGJ5
dGVfYnVmZmVyKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgIk9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRy
ZXNzIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENf
RENIRUNLKCFkaXJlY3RfYnVmZmVyX2FkZHJlc3NfKTsKLSAgZGlyZWN0X2J1ZmZlcl9hZGRyZXNz
XyA9IGVudi0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhieXRlX2J1ZmZlci5vYmooKSk7Ci0gIGps
b25nIGNhcGFjaXR5ID0gZW52LT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShieXRlX2J1ZmZlci5v
YmooKSk7Ci0gIFJUQ19MT0coSU5GTykgPDwgImRpcmVjdCBidWZmZXIgY2FwYWNpdHk6ICIgPDwg
Y2FwYWNpdHk7Ci0gIGRpcmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihjYXBhY2l0eSk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBh
IGhpZ2gtcHJpb3JpdHkgdGhyZWFkIGZyb20gSmF2YS4gVGhlIG5hbWUgb2YKLS8vIHRoZSB0aHJl
YWQgaXMgJ0F1ZGlvUmVjb3JkVGhyZWFkJy4KLXZvaWQgQXVkaW9SZWNvcmRKbmk6OkRhdGFJc1Jl
Y29yZGVkKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2NhbGxlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpIHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl9qYXZhXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmICghYXVkaW9fZGV2aWNlX2J1ZmZlcl8pIHsK
LSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiQXR0YWNoQXVkaW9CdWZmZXIgaGFzIG5vdCBiZWVu
IGNhbGxlZCI7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRS
ZWNvcmRlZEJ1ZmZlcihkaXJlY3RfYnVmZmVyX2FkZHJlc3NfLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgLy8gV2UgcHJv
dmlkZSBvbmUgKGNvbWJpbmVkKSBmaXhlZCBkZWxheSBlc3RpbWF0ZSBmb3IgdGhlIEFQTSBhbmQg
dXNlIHRoZQotICAvLyB8cGxheURlbGF5TXN8IHBhcmFtZXRlciBvbmx5LiBDb21wb25lbnRzIGxp
a2UgdGhlIEFFQyBvbmx5IHNlZXMgdGhlIHN1bQotICAvLyBvZiB8cGxheURlbGF5TXN8IGFuZCB8
cmVjRGVsYXlNc3wsIGhlbmNlIHRoZSBkaXN0cmlidXRpb25zIGRvZXMgbm90IG1hdHRlci4KLSAg
YXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFZRRURhdGEodG90YWxfZGVsYXlfbXNfLCAwKTsKLSAg
aWYgKGF1ZGlvX2RldmljZV9idWZmZXJfLT5EZWxpdmVyUmVjb3JkZWREYXRhKCkgPT0gLTEpIHsK
LSAgICBSVENfTE9HKElORk8pIDw8ICJBdWRpb0RldmljZUJ1ZmZlcjo6RGVsaXZlclJlY29yZGVk
RGF0YSBmYWlsZWQiOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fcmVjb3Jk
X2puaS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fcmVjb3JkX2puaS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3NTc4ZjgzOTQ4NGRiYmE2MjdlNjQwYWEwMjY2ZTAyODJiNDNk
MTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
YXVkaW9fZGV2aWNlL2F1ZGlvX3JlY29yZF9qbmkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNf
Sk5JX0FVRElPX0RFVklDRV9BVURJT19SRUNPUkRfSk5JX0hfCi0jZGVmaW5lIFNES19BTkRST0lE
X1NSQ19KTklfQVVESU9fREVWSUNFX0FVRElPX1JFQ09SRF9KTklfSF8KLQotI2luY2x1ZGUgPGpu
aS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNl
L2F1ZGlvX2RldmljZV9idWZmZXIuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9p
bmNsdWRlL2F1ZGlvX2RldmljZV9kZWZpbmVzLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGhyZWFk
X2NoZWNrZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9h
dWRpb19kZXZpY2VfbW9kdWxlLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1uYW1lc3BhY2Ug
am5pIHsKLQotLy8gSW1wbGVtZW50cyAxNi1iaXQgbW9ubyBQQ00gYXVkaW8gaW5wdXQgc3VwcG9y
dCBmb3IgQW5kcm9pZCB1c2luZyB0aGUgSmF2YQotLy8gQXVkaW9SZWNvcmQgaW50ZXJmYWNlLiBN
b3N0IG9mIHRoZSB3b3JrIGlzIGRvbmUgYnkgaXRzIEphdmEgY291bnRlcnBhcnQgaW4KLS8vIFdl
YlJ0Y0F1ZGlvUmVjb3JkLmphdmEuIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBhbmQgbGl2ZXMgb24g
YSB0aHJlYWQgaW4KLS8vIEMrKy1sYW5kLCBidXQgcmVjb3JkZWQgYXVkaW8gYnVmZmVycyBhcmUg
ZGVsaXZlcmVkIG9uIGEgaGlnaC1wcmlvcml0eQotLy8gdGhyZWFkIG1hbmFnZWQgYnkgdGhlIEph
dmEgY2xhc3MuCi0vLwotLy8gVGhlIEphdmEgY2xhc3MgbWFrZXMgdXNlIG9mIEF1ZGlvRWZmZWN0
IGZlYXR1cmVzIChtYWlubHkgQUVDKSB3aGljaCBhcmUKLS8vIGZpcnN0IGF2YWlsYWJsZSBpbiBK
ZWxseSBCZWFuLiBJZiBpdCBpcyBpbnN0YW50aWF0ZWQgcnVubmluZyBhZ2FpbnN0IGVhcmxpZXIK
LS8vIFNES3MsIHRoZSBBRUMgcHJvdmlkZWQgYnkgdGhlIEFQTSBpbiBXZWJSVEMgbXVzdCBiZSB1
c2VkIGFuZCBlbmFibGVkCi0vLyBzZXBhcmF0ZWx5IGluc3RlYWQuCi0vLwotLy8gQW4gaW5zdGFu
Y2UgY2FuIGJlIGNyZWF0ZWQgb24gYW55IHRocmVhZCwgYnV0IG11c3QgdGhlbiBiZSB1c2VkIG9u
IG9uZSBhbmQKLS8vIHRoZSBzYW1lIHRocmVhZC4gQWxsIHB1YmxpYyBtZXRob2RzIG11c3QgYWxz
byBiZSBjYWxsZWQgb24gdGhlIHNhbWUgdGhyZWFkLiBBCi0vLyB0aHJlYWQgY2hlY2tlciB3aWxs
IFJUQ19EQ0hFQ0sgaWYgYW55IG1ldGhvZCBpcyBjYWxsZWQgb24gYW4gaW52YWxpZCB0aHJlYWQu
Ci0vLwotLy8gVGhpcyBjbGFzcyB1c2VzIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCB0byBh
dHRhY2ggdG8gYSBKYXZhIFZNIGlmIG5lZWRlZC4KLS8vIEFkZGl0aW9uYWwgdGhyZWFkIGNoZWNr
aW5nIGd1YXJhbnRlZXMgdGhhdCBubyBvdGhlciAocG9zc2libHkgbm9uIGF0dGFjaGVkKQotLy8g
dGhyZWFkIGlzIHVzZWQuCi1jbGFzcyBBdWRpb1JlY29yZEpuaSA6IHB1YmxpYyBBdWRpb0lucHV0
IHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gQ3JlYXRl
SmF2YVdlYlJ0Y0F1ZGlvUmVjb3JkKAotICAgICAgSk5JRW52KiBlbnYsCi0gICAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBqX2NvbnRleHQsCi0gICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+
JiBqX2F1ZGlvX21hbmFnZXIpOwotCi0gIEF1ZGlvUmVjb3JkSm5pKEpOSUVudiogZW52LAotICAg
ICAgICAgICAgICAgICBjb25zdCBBdWRpb1BhcmFtZXRlcnMmIGF1ZGlvX3BhcmFtZXRlcnMsCi0g
ICAgICAgICAgICAgICAgIGludCB0b3RhbF9kZWxheV9tcywKLSAgICAgICAgICAgICAgICAgY29u
c3QgSmF2YVJlZjxqb2JqZWN0PiYgal93ZWJydGNfYXVkaW9fcmVjb3JkKTsKLSAgfkF1ZGlvUmVj
b3JkSm5pKCkgb3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBJbml0KCkgb3ZlcnJpZGU7Ci0gIGludDMy
X3QgVGVybWluYXRlKCkgb3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBJbml0UmVjb3JkaW5nKCkgb3Zl
cnJpZGU7Ci0gIGJvb2wgUmVjb3JkaW5nSXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gIGludDMyX3QgU3RhcnRSZWNvcmRpbmcoKSBvdmVycmlkZTsKLSAgaW50MzJfdCBTdG9wUmVj
b3JkaW5nKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUmVjb3JkaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIp
IG92ZXJyaWRlOwotCi0gIGJvb2wgSXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIGNv
bnN0IG92ZXJyaWRlOwotICBib29sIElzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKSBvdmVy
cmlkZTsKLSAgaW50MzJfdCBFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIG92ZXJyaWRlOwot
Ci0gIC8vIENhbGxlZCBmcm9tIEphdmEgc2lkZSBzbyB3ZSBjYW4gY2FjaGUgdGhlIGFkZHJlc3Mg
b2YgdGhlIEphdmEtbWFuZ2VkCi0gIC8vIHxieXRlX2J1ZmZlcnwgaW4gfGRpcmVjdF9idWZmZXJf
YWRkcmVzc198LiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyCi0gIC8vIGlzIGFsc28gc3RvcmVkIGlu
IHxkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzX3wuCi0gIC8vIFRoaXMgbWV0aG9kIHdp
bGwgYmUgY2FsbGVkIGJ5IHRoZSBXZWJSdGNBdWRpb1JlY29yZCBjb25zdHJ1Y3RvciwgaS5lLiwK
LSAgLy8gb24gdGhlIHNhbWUgdGhyZWFkIHRoYXQgdGhpcyBvYmplY3QgaXMgY3JlYXRlZCBvbi4K
LSAgdm9pZCBDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoSk5JRW52KiBlbnYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9jYWxs
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxq
b2JqZWN0PiYgYnl0ZV9idWZmZXIpOwotCi0gIC8vIENhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhl
IEphdmEgYmFzZWQgV2ViUnRjQXVkaW9SZWNvcmQgb2JqZWN0IHdoZW4KLSAgLy8gcmVjb3JkaW5n
IGhhcyBzdGFydGVkLiBFYWNoIGNhbGwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIHxsZW5ndGh8
IG5ldwotICAvLyBieXRlcyByZWNvcmRlZCBpbiB0aGUgbWVtb3J5IGFyZWEgfGRpcmVjdF9idWZm
ZXJfYWRkcmVzc198IGFuZCBpdCBpcwotICAvLyBub3cgdGltZSB0byBzZW5kIHRoZXNlIHRvIHRo
ZSBjb25zdW1lci4KLSAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGEgaGlnaC1wcmlvcml0
eSB0aHJlYWQgZnJvbSBKYXZhLiBUaGUgbmFtZSBvZgotICAvLyB0aGUgdGhyZWFkIGlzICdBdWRp
b1JlY29yZFRocmVhZCcuCi0gIHZvaWQgRGF0YUlzUmVjb3JkZWQoSk5JRW52KiBlbnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2NhbGxlciwK
LSAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKTsKLQotIHByaXZhdGU6Ci0gIC8vIFN0
b3JlcyB0aHJlYWQgSUQgaW4gY29uc3RydWN0b3IuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJl
YWRfY2hlY2tlcl87Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiBmaXJzdCBjYWxsIHRvIE9u
RGF0YUlzUmVjb3JkZWQoKSBmcm9tIGhpZ2gtcHJpb3JpdHkKLSAgLy8gdGhyZWFkIGluIEphdmEu
IERldGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBvYmplY3QuCi0gIHJ0Yzo6VGhy
ZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl9qYXZhXzsKLQotICAvLyBXcmFwcyB0aGUgSmF2YSBz
cGVjaWZpYyBwYXJ0cyBvZiB0aGUgQXVkaW9SZWNvcmRKbmkgY2xhc3MuCi0gIEpOSUVudiogZW52
XyA9IG51bGxwdHI7Ci0gIFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4gal9hdWRpb19yZWNv
cmRfOwotCi0gIGNvbnN0IEF1ZGlvUGFyYW1ldGVycyBhdWRpb19wYXJhbWV0ZXJzXzsKLQotICAv
LyBEZWxheSBlc3RpbWF0ZSBvZiB0aGUgdG90YWwgcm91bmQtdHJpcCBkZWxheSAoaW5wdXQgKyBv
dXRwdXQpLgotICAvLyBGaXhlZCB2YWx1ZSBzZXQgb25jZSBpbiBBdHRhY2hBdWRpb0J1ZmZlcigp
IGFuZCBpdCBjYW4gdGFrZSBvbmUgb3V0IG9mIHR3bwotICAvLyBwb3NzaWJsZSB2YWx1ZXMuIFNl
ZSBhdWRpb19jb21tb24uaCBmb3IgZGV0YWlscy4KLSAgY29uc3QgaW50IHRvdGFsX2RlbGF5X21z
XzsKLQotICAvLyBDYWNoZWQgY29weSBvZiBhZGRyZXNzIHRvIGRpcmVjdCBhdWRpbyBidWZmZXIg
b3duZWQgYnkgfGpfYXVkaW9fcmVjb3JkX3wuCi0gIHZvaWQqIGRpcmVjdF9idWZmZXJfYWRkcmVz
c187Ci0KLSAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkaXJlY3QgYXVkaW8gYnVmZmVyIG93
bmVkIGJ5IHxqX2F1ZGlvX3JlY29yZF98LgotICBzaXplX3QgZGlyZWN0X2J1ZmZlcl9jYXBhY2l0
eV9pbl9ieXRlc187Ci0KLSAgLy8gTnVtYmVyIGF1ZGlvIGZyYW1lcyBwZXIgYXVkaW8gYnVmZmVy
LiBFYWNoIGF1ZGlvIGZyYW1lIGNvcnJlc3BvbmRzIHRvCi0gIC8vIG9uZSBzYW1wbGUgb2YgUENN
IG1vbm8gZGF0YSBhdCAxNiBiaXRzIHBlciBzYW1wbGUuIEhlbmNlLCBlYWNoIGF1ZGlvCi0gIC8v
IGZyYW1lIGNvbnRhaW5zIDIgYnl0ZXMgKGdpdmVuIHRoYXQgdGhlIEphdmEgbGF5ZXIgb25seSBz
dXBwb3J0cyBtb25vKS4KLSAgLy8gRXhhbXBsZTogNDgwIGZvciA0ODAwMCBIeiBvciA0NDEgZm9y
IDQ0MTAwIEh6LgotICBzaXplX3QgZnJhbWVzX3Blcl9idWZmZXJfOwotCi0gIGJvb2wgaW5pdGlh
bGl6ZWRfOwotCi0gIGJvb2wgcmVjb3JkaW5nXzsKLQotICAvLyBSYXcgcG9pbnRlciBoYW5kbGUg
cHJvdmlkZWQgdG8gdXMgaW4gQXR0YWNoQXVkaW9CdWZmZXIoKS4gT3duZWQgYnkgdGhlCi0gIC8v
IEF1ZGlvRGV2aWNlTW9kdWxlSW1wbCBjbGFzcyBhbmQgY2FsbGVkIGJ5IEF1ZGlvRGV2aWNlTW9k
dWxlOjpDcmVhdGUoKS4KLSAgQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2RldmljZV9idWZmZXJf
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0K
LSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9BVURJT19ERVZJQ0VfQVVESU9fUkVDT1JE
X0pOSV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fdHJhY2tfam5pLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fdHJhY2tfam5pLmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4ZjBhMDQxNzExMDM3Y2MyZjRiZGMyNDIxN2QzODM4MGVlYzQxNjI0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9f
ZGV2aWNlL2F1ZGlvX3RyYWNrX2puaS5jYworKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkv
YXVkaW9fZGV2aWNlL2F1ZGlvX3RyYWNrX2puaS5oIgotCi0jaW5jbHVkZSA8dXRpbGl0eT4KLQot
I2luY2x1ZGUgInJ0Y19iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNr
cy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNpbmNsdWRlICJydGNf
YmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvcGxhdGZvcm1fdGhyZWFkLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2phdmFfYXVkaW9fZGV2aWNlX21vZHVsZV9u
YXRpdmVfam5pL1dlYlJ0Y0F1ZGlvVHJhY2tfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQv
c3JjL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgInN5c3RlbV93cmFwcGVycy9pbmNsdWRl
L2ZpZWxkX3RyaWFsLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1uYW1lc3BhY2Ugam5pIHsK
LQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEF1ZGlvVHJhY2tKbmk6OkNyZWF0ZUphdmFX
ZWJSdGNBdWRpb1RyYWNrKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfY29udGV4dCwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2F1ZGlvX21h
bmFnZXIpIHsKLSAgcmV0dXJuIEphdmFfV2ViUnRjQXVkaW9UcmFja19Db25zdHJ1Y3RvcihlbnYs
IGpfY29udGV4dCwgal9hdWRpb19tYW5hZ2VyKTsKLX0KLQotQXVkaW9UcmFja0puaTo6QXVkaW9U
cmFja0puaShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QXVkaW9QYXJhbWV0ZXJzJiBhdWRpb19wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3dlYnJ0Y19hdWRpb190cmFjaykKLSAg
ICA6IGpfYXVkaW9fdHJhY2tfKGVudiwgal93ZWJydGNfYXVkaW9fdHJhY2spLAotICAgICAgYXVk
aW9fcGFyYW1ldGVyc18oYXVkaW9fcGFyYW1ldGVycyksCi0gICAgICBkaXJlY3RfYnVmZmVyX2Fk
ZHJlc3NfKG51bGxwdHIpLAotICAgICAgZGlyZWN0X2J1ZmZlcl9jYXBhY2l0eV9pbl9ieXRlc18o
MCksCi0gICAgICBmcmFtZXNfcGVyX2J1ZmZlcl8oMCksCi0gICAgICBpbml0aWFsaXplZF8oZmFs
c2UpLAotICAgICAgcGxheWluZ18oZmFsc2UpLAotICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8o
bnVsbHB0cikgewotICBSVENfTE9HKElORk8pIDw8ICJjdG9yIjsKLSAgUlRDX0RDSEVDSyhhdWRp
b19wYXJhbWV0ZXJzXy5pc192YWxpZCgpKTsKLSAgSmF2YV9XZWJSdGNBdWRpb1RyYWNrX3NldE5h
dGl2ZUF1ZGlvVHJhY2soZW52LCBqX2F1ZGlvX3RyYWNrXywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgam5pOjpqbG9uZ0Zyb21Qb2ludGVyKHRoaXMpKTsKLSAg
Ly8gRGV0YWNoIGZyb20gdGhpcyB0aHJlYWQgc2luY2UgY29uc3RydWN0aW9uIGlzIGFsbG93ZWQg
dG8gaGFwcGVuIG9uIGEKLSAgLy8gZGlmZmVyZW50IHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJf
LkRldGFjaCgpOwotICB0aHJlYWRfY2hlY2tlcl9qYXZhXy5EZXRhY2goKTsKLX0KLQotQXVkaW9U
cmFja0puaTo6fkF1ZGlvVHJhY2tKbmkoKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwgImR0b3IiOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFRlcm1pbmF0ZSgp
OwotfQotCi1pbnQzMl90IEF1ZGlvVHJhY2tKbmk6OkluaXQoKSB7Ci0gIFJUQ19MT0coSU5GTykg
PDwgIkluaXQiOwotICBlbnZfID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgcmV0dXJuIDA7Ci19Ci0K
LWludDMyX3QgQXVkaW9UcmFja0puaTo6VGVybWluYXRlKCkgewotICBSVENfTE9HKElORk8pIDw8
ICJUZXJtaW5hdGUiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7
Ci0gIFN0b3BQbGF5b3V0KCk7Ci0gIHRocmVhZF9jaGVja2VyXy5EZXRhY2goKTsKLSAgcmV0dXJu
IDA7Ci19Ci0KLWludDMyX3QgQXVkaW9UcmFja0puaTo6SW5pdFBsYXlvdXQoKSB7Ci0gIFJUQ19M
T0coSU5GTykgPDwgIkluaXRQbGF5b3V0IjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8u
SXNDdXJyZW50KCkpOwotICBpZiAoaW5pdGlhbGl6ZWRfKSB7Ci0gICAgLy8gQWxyZWFkeSBpbml0
aWFsaXplZC4KLSAgICByZXR1cm4gMDsKLSAgfQotICBSVENfRENIRUNLKCFwbGF5aW5nXyk7Ci0g
IGRvdWJsZSBidWZmZXJfc2l6ZV9mYWN0b3IgPQotICAgICAgc3RydG9kKHdlYnJ0Yzo6ZmllbGRf
dHJpYWw6OkZpbmRGdWxsTmFtZSgKLSAgICAgICAgICAgICAgICAgIldlYlJUQy1BdWRpb0Rldmlj
ZVBsYXlvdXRCdWZmZXJTaXplRmFjdG9yIikKLSAgICAgICAgICAgICAgICAgLmNfc3RyKCksCi0g
ICAgICAgICAgICAgbnVsbHB0cik7Ci0gIGlmIChidWZmZXJfc2l6ZV9mYWN0b3IgPT0gMCkKLSAg
ICBidWZmZXJfc2l6ZV9mYWN0b3IgPSAxLjA7Ci0gIGlmICghSmF2YV9XZWJSdGNBdWRpb1RyYWNr
X2luaXRQbGF5b3V0KAotICAgICAgICAgIGVudl8sIGpfYXVkaW9fdHJhY2tfLCBhdWRpb19wYXJh
bWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYXVkaW9f
cGFyYW1ldGVyc18uY2hhbm5lbHMoKSksIGJ1ZmZlcl9zaXplX2ZhY3RvcikpIHsKLSAgICBSVENf
TE9HKExTX0VSUk9SKSA8PCAiSW5pdFBsYXlvdXQgZmFpbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0g
IH0KLSAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQXVkaW9U
cmFja0puaTo6UGxheW91dElzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0gIHJldHVybiBpbml0aWFs
aXplZF87Ci19Ci0KLWludDMyX3QgQXVkaW9UcmFja0puaTo6U3RhcnRQbGF5b3V0KCkgewotICBS
VENfTE9HKElORk8pIDw8ICJTdGFydFBsYXlvdXQiOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmIChwbGF5aW5nXykgewotICAgIC8vIEFscmVhZHkgcGxh
eWluZy4KLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWluaXRpYWxpemVkXykgewotICAgIFJU
Q19ETE9HKExTX1dBUk5JTkcpCi0gICAgICAgIDw8ICJQbGF5b3V0IGNhbiBub3Qgc3RhcnQgc2lu
Y2UgSW5pdFBsYXlvdXQgbXVzdCBzdWNjZWVkIGZpcnN0IjsKLSAgICByZXR1cm4gMDsKLSAgfQot
ICBpZiAoIUphdmFfV2ViUnRjQXVkaW9UcmFja19zdGFydFBsYXlvdXQoZW52Xywgal9hdWRpb190
cmFja18pKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIlN0YXJ0UGxheW91dCBmYWlsZWQi
OwotICAgIHJldHVybiAtMTsKLSAgfQotICBwbGF5aW5nXyA9IHRydWU7Ci0gIHJldHVybiAwOwot
fQotCi1pbnQzMl90IEF1ZGlvVHJhY2tKbmk6OlN0b3BQbGF5b3V0KCkgewotICBSVENfTE9HKElO
Rk8pIDw8ICJTdG9wUGxheW91dCI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3Vy
cmVudCgpKTsKLSAgaWYgKCFpbml0aWFsaXplZF8gfHwgIXBsYXlpbmdfKSB7Ci0gICAgcmV0dXJu
IDA7Ci0gIH0KLSAgaWYgKCFKYXZhX1dlYlJ0Y0F1ZGlvVHJhY2tfc3RvcFBsYXlvdXQoZW52Xywg
al9hdWRpb190cmFja18pKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIlN0b3BQbGF5b3V0
IGZhaWxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIC8vIElmIHdlIGRvbid0IGRldGFjaCBo
ZXJlLCB3ZSB3aWxsIGhpdCBhIFJUQ19EQ0hFQ0sgbmV4dCB0aW1lIFN0YXJ0UGxheW91dCgpCi0g
IC8vIGlzIGNhbGxlZCBzaW5jZSBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBKYXZhIHRocmVhZC4KLSAg
dGhyZWFkX2NoZWNrZXJfamF2YV8uRGV0YWNoKCk7Ci0gIGluaXRpYWxpemVkXyA9IGZhbHNlOwot
ICBwbGF5aW5nXyA9IGZhbHNlOwotICBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfID0gbnVsbHB0cjsK
LSAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQXVkaW9UcmFja0puaTo6UGxheWluZygpIGNvbnN0IHsK
LSAgcmV0dXJuIHBsYXlpbmdfOwotfQotCi1ib29sIEF1ZGlvVHJhY2tKbmk6OlNwZWFrZXJWb2x1
bWVJc0F2YWlsYWJsZSgpIHsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5p
OjpTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkgewotICBSVENfTE9HKElORk8pIDw8
ICJTZXRTcGVha2VyVm9sdW1lKCIgPDwgdm9sdW1lIDw8ICIpIjsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICByZXR1cm4gSmF2YV9XZWJSdGNBdWRpb1RyYWNr
X3NldFN0cmVhbVZvbHVtZShlbnZfLCBqX2F1ZGlvX3RyYWNrXywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih2b2x1bWUpKQot
ICAgICAgICAgICAgID8gMAotICAgICAgICAgICAgIDogLTE7Ci19Ci0KLWFic2w6Om9wdGlvbmFs
PHVpbnQzMl90PiBBdWRpb1RyYWNrSm5pOjpNYXhTcGVha2VyVm9sdW1lKCkgY29uc3QgewotICBS
VENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIHJldHVybiBKYXZhX1dl
YlJ0Y0F1ZGlvVHJhY2tfZ2V0U3RyZWFtTWF4Vm9sdW1lKGVudl8sIGpfYXVkaW9fdHJhY2tfKTsK
LX0KLQotYWJzbDo6b3B0aW9uYWw8dWludDMyX3Q+IEF1ZGlvVHJhY2tKbmk6Ok1pblNwZWFrZXJW
b2x1bWUoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWFic2w6Om9wdGlvbmFsPHVpbnQzMl90PiBBdWRpb1RyYWNr
Sm5pOjpTcGVha2VyVm9sdW1lKCkgY29uc3QgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
Xy5Jc0N1cnJlbnQoKSk7Ci0gIGNvbnN0IHVpbnQzMl90IHZvbHVtZSA9Ci0gICAgICBKYXZhX1dl
YlJ0Y0F1ZGlvVHJhY2tfZ2V0U3RyZWFtVm9sdW1lKGVudl8sIGpfYXVkaW9fdHJhY2tfKTsKLSAg
UlRDX0xPRyhJTkZPKSA8PCAiU3BlYWtlclZvbHVtZTogIiA8PCB2b2x1bWU7Ci0gIHJldHVybiB2
b2x1bWU7Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5pOjpHZXRQbGF5b3V0VW5kZXJydW5Db3VudCgp
IHsKLSAgcmV0dXJuIEphdmFfV2ViUnRjQXVkaW9UcmFja19HZXRQbGF5b3V0VW5kZXJydW5Db3Vu
dChlbnZfLCBqX2F1ZGlvX3RyYWNrXyk7Ci19Ci0KLS8vIFRPRE8oaGVucmlrYSk6IHBvc3NpYmx5
IGFkZCBzdGVyZW8gc3VwcG9ydC4KLXZvaWQgQXVkaW9UcmFja0puaTo6QXR0YWNoQXVkaW9CdWZm
ZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVmZmVyKSB7Ci0gIFJUQ19MT0coSU5GTykgPDwg
IkF0dGFjaEF1ZGlvQnVmZmVyIjsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJy
ZW50KCkpOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXyA9IGF1ZGlvQnVmZmVyOwotICBjb25zdCBp
bnQgc2FtcGxlX3JhdGVfaHogPSBhdWRpb19wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpOwotICBS
VENfTE9HKElORk8pIDw8ICJTZXRQbGF5b3V0U2FtcGxlUmF0ZSgiIDw8IHNhbXBsZV9yYXRlX2h6
IDw8ICIpIjsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFBsYXlvdXRTYW1wbGVSYXRlKHNh
bXBsZV9yYXRlX2h6KTsKLSAgY29uc3Qgc2l6ZV90IGNoYW5uZWxzID0gYXVkaW9fcGFyYW1ldGVy
c18uY2hhbm5lbHMoKTsKLSAgUlRDX0xPRyhJTkZPKSA8PCAiU2V0UGxheW91dENoYW5uZWxzKCIg
PDwgY2hhbm5lbHMgPDwgIikiOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0UGxheW91dENo
YW5uZWxzKGNoYW5uZWxzKTsKLX0KLQotdm9pZCBBdWRpb1RyYWNrSm5pOjpDYWNoZURpcmVjdEJ1
ZmZlckFkZHJlc3MoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpv
YmplY3Q+JiBieXRlX2J1ZmZlcikgewotICBSVENfTE9HKElORk8pIDw8ICJPbkNhY2hlRGlyZWN0
QnVmZmVyQWRkcmVzcyI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgUlRDX0RDSEVDSyghZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyk7Ci0gIGRpcmVjdF9idWZm
ZXJfYWRkcmVzc18gPSBlbnYtPkdldERpcmVjdEJ1ZmZlckFkZHJlc3MoYnl0ZV9idWZmZXIub2Jq
KCkpOwotICBqbG9uZyBjYXBhY2l0eSA9IGVudi0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoYnl0
ZV9idWZmZXIub2JqKCkpOwotICBSVENfTE9HKElORk8pIDw8ICJkaXJlY3QgYnVmZmVyIGNhcGFj
aXR5OiAiIDw8IGNhcGFjaXR5OwotICBkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXyA9
IHN0YXRpY19jYXN0PHNpemVfdD4oY2FwYWNpdHkpOwotICBjb25zdCBzaXplX3QgYnl0ZXNfcGVy
X2ZyYW1lID0gYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKSAqIHNpemVvZihpbnQxNl90KTsK
LSAgZnJhbWVzX3Blcl9idWZmZXJfID0gZGlyZWN0X2J1ZmZlcl9jYXBhY2l0eV9pbl9ieXRlc18g
LyBieXRlc19wZXJfZnJhbWU7Ci0gIFJUQ19MT0coSU5GTykgPDwgImZyYW1lc19wZXJfYnVmZmVy
OiAiIDw8IGZyYW1lc19wZXJfYnVmZmVyXzsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgZnJvbSBKYXZhLiBUaGUgbmFtZSBvZgotLy8gdGhl
IHRocmVhZCBpcyAnQXVkaW9SZWNvcmRUcmFjaycuCi12b2lkIEF1ZGlvVHJhY2tKbmk6OkdldFBs
YXlvdXREYXRhKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgbGVuZ3RoKSB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfamF2YV8uSXND
dXJyZW50KCkpOwotICBjb25zdCBzaXplX3QgYnl0ZXNfcGVyX2ZyYW1lID0gYXVkaW9fcGFyYW1l
dGVyc18uY2hhbm5lbHMoKSAqIHNpemVvZihpbnQxNl90KTsKLSAgUlRDX0RDSEVDS19FUShmcmFt
ZXNfcGVyX2J1ZmZlcl8sIGxlbmd0aCAvIGJ5dGVzX3Blcl9mcmFtZSk7Ci0gIGlmICghYXVkaW9f
ZGV2aWNlX2J1ZmZlcl8pIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiQXR0YWNoQXVkaW9C
dWZmZXIgaGFzIG5vdCBiZWVuIGNhbGxlZCI7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIFB1bGwg
ZGVjb2RlZCBkYXRhIChpbiAxNi1iaXQgUENNIGZvcm1hdCkgZnJvbSBqaXR0ZXIgYnVmZmVyLgot
ICBpbnQgc2FtcGxlcyA9IGF1ZGlvX2RldmljZV9idWZmZXJfLT5SZXF1ZXN0UGxheW91dERhdGEo
ZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgaWYgKHNhbXBsZXMgPD0gMCkgewotICAgIFJUQ19MT0co
TFNfRVJST1IpIDw8ICJBdWRpb0RldmljZUJ1ZmZlcjo6UmVxdWVzdFBsYXlvdXREYXRhIGZhaWxl
ZCI7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJUQ19EQ0hFQ0tfRVEoc2FtcGxlcywgZnJhbWVzX3Bl
cl9idWZmZXJfKTsKLSAgLy8gQ29weSBkZWNvZGVkIGRhdGEgaW50byBjb21tb24gYnl0ZSBidWZm
ZXIgdG8gZW5zdXJlIHRoYXQgaXQgY2FuIGJlCi0gIC8vIHdyaXR0ZW4gdG8gdGhlIEphdmEgYmFz
ZWQgYXVkaW8gdHJhY2suCi0gIHNhbXBsZXMgPSBhdWRpb19kZXZpY2VfYnVmZmVyXy0+R2V0UGxh
eW91dERhdGEoZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyk7Ci0gIFJUQ19EQ0hFQ0tfRVEobGVuZ3Ro
LCBieXRlc19wZXJfZnJhbWUgKiBzYW1wbGVzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQot
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9h
dWRpb190cmFja19qbmkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX3RyYWNrX2puaS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2QwNjAwMzNmZDdmNTEwZWVjNDQ5MmYzNWNm
Y2JkOTk4MzJkYjEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1ZGlvX3RyYWNrX2puaS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRS
T0lEX1NSQ19KTklfQVVESU9fREVWSUNFX0FVRElPX1RSQUNLX0pOSV9IXwotI2RlZmluZSBTREtf
QU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9BVURJT19UUkFDS19KTklfSF8KLQotI2luY2x1
ZGUgPGpuaS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImFic2wvdHlwZXMvb3B0
aW9uYWwuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfYnVm
ZmVyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZp
Y2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fY29tbW9uLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX21v
ZHVsZS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIElt
cGxlbWVudHMgMTYtYml0IG1vbm8gUENNIGF1ZGlvIG91dHB1dCBzdXBwb3J0IGZvciBBbmRyb2lk
IHVzaW5nIHRoZSBKYXZhCi0vLyBBdWRpb1RyYWNrIGludGVyZmFjZS4gTW9zdCBvZiB0aGUgd29y
ayBpcyBkb25lIGJ5IGl0cyBKYXZhIGNvdW50ZXJwYXJ0IGluCi0vLyBXZWJSdGNBdWRpb1RyYWNr
LmphdmEuIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBhbmQgbGl2ZXMgb24gYSB0aHJlYWQgaW4KLS8v
IEMrKy1sYW5kLCBidXQgZGVjb2RlZCBhdWRpbyBidWZmZXJzIGFyZSByZXF1ZXN0ZWQgb24gYSBo
aWdoLXByaW9yaXR5Ci0vLyB0aHJlYWQgbWFuYWdlZCBieSB0aGUgSmF2YSBjbGFzcy4KLS8vCi0v
LyBBbiBpbnN0YW5jZSBjYW4gYmUgY3JlYXRlZCBvbiBhbnkgdGhyZWFkLCBidXQgbXVzdCB0aGVu
IGJlIHVzZWQgb24gb25lIGFuZAotLy8gdGhlIHNhbWUgdGhyZWFkLiBBbGwgcHVibGljIG1ldGhv
ZHMgbXVzdCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQuIEEKLS8vIHRocmVhZCBj
aGVja2VyIHdpbGwgUlRDX0RDSEVDSyBpZiBhbnkgbWV0aG9kIGlzIGNhbGxlZCBvbiBhbiBpbnZh
bGlkIHRocmVhZAotLy8KLS8vIFRoaXMgY2xhc3MgdXNlcyBBdHRhY2hDdXJyZW50VGhyZWFkSWZO
ZWVkZWQgdG8gYXR0YWNoIHRvIGEgSmF2YSBWTSBpZiBuZWVkZWQuCi0vLyBBZGRpdGlvbmFsIHRo
cmVhZCBjaGVja2luZyBndWFyYW50ZWVzIHRoYXQgbm8gb3RoZXIgKHBvc3NpYmx5IG5vbiBhdHRh
Y2hlZCkKLS8vIHRocmVhZCBpcyB1c2VkLgotY2xhc3MgQXVkaW9UcmFja0puaSA6IHB1YmxpYyBB
dWRpb091dHB1dCB7Ci0gcHVibGljOgotICBzdGF0aWMgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmpl
Y3Q+IENyZWF0ZUphdmFXZWJSdGNBdWRpb1RyYWNrKAotICAgICAgSk5JRW52KiBlbnYsCi0gICAg
ICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2NvbnRleHQsCi0gICAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX2F1ZGlvX21hbmFnZXIpOwotCi0gIEF1ZGlvVHJhY2tKbmkoSk5JRW52KiBl
bnYsCi0gICAgICAgICAgICAgICAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBhdWRpb19wYXJhbWV0
ZXJzLAotICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfd2VicnRjX2F1
ZGlvX3RyYWNrKTsKLSAgfkF1ZGlvVHJhY2tKbmkoKSBvdmVycmlkZTsKLQotICBpbnQzMl90IElu
aXQoKSBvdmVycmlkZTsKLSAgaW50MzJfdCBUZXJtaW5hdGUoKSBvdmVycmlkZTsKLQotICBpbnQz
Ml90IEluaXRQbGF5b3V0KCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUGxheW91dElzSW5pdGlhbGl6ZWQo
KSBjb25zdCBvdmVycmlkZTsKLQotICBpbnQzMl90IFN0YXJ0UGxheW91dCgpIG92ZXJyaWRlOwot
ICBpbnQzMl90IFN0b3BQbGF5b3V0KCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUGxheWluZygpIGNvbnN0
IG92ZXJyaWRlOwotCi0gIGJvb2wgU3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKCkgb3ZlcnJpZGU7
Ci0gIGludCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkgb3ZlcnJpZGU7Ci0gIGFi
c2w6Om9wdGlvbmFsPHVpbnQzMl90PiBTcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
IGFic2w6Om9wdGlvbmFsPHVpbnQzMl90PiBNYXhTcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gIGFic2w6Om9wdGlvbmFsPHVpbnQzMl90PiBNaW5TcGVha2VyVm9sdW1lKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gIGludCBHZXRQbGF5b3V0VW5kZXJydW5Db3VudCgpIG92ZXJyaWRlOwotCi0g
IHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVmZmVyKSBv
dmVycmlkZTsKLQotICAvLyBDYWxsZWQgZnJvbSBKYXZhIHNpZGUgc28gd2UgY2FuIGNhY2hlIHRo
ZSBhZGRyZXNzIG9mIHRoZSBKYXZhLW1hbmdlZAotICAvLyB8Ynl0ZV9idWZmZXJ8IGluIHxkaXJl
Y3RfYnVmZmVyX2FkZHJlc3NffC4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgotICAvLyBpcyBhbHNv
IHN0b3JlZCBpbiB8ZGlyZWN0X2J1ZmZlcl9jYXBhY2l0eV9pbl9ieXRlc198LgotICAvLyBDYWxs
ZWQgb24gdGhlIHNhbWUgdGhyZWFkIGFzIHRoZSBjcmVhdGluZyB0aHJlYWQuCi0gIHZvaWQgQ2Fj
aGVEaXJlY3RCdWZmZXJBZGRyZXNzKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGJ5dGVfYnVmZmVyKTsKLSAg
Ly8gQ2FsbGVkIHBlcmlvZGljYWxseSBieSB0aGUgSmF2YSBiYXNlZCBXZWJSdGNBdWRpb1RyYWNr
IG9iamVjdCB3aGVuCi0gIC8vIHBsYXlvdXQgaGFzIHN0YXJ0ZWQuIEVhY2ggY2FsbCBpbmRpY2F0
ZXMgdGhhdCB8bGVuZ3RofCBuZXcgYnl0ZXMgc2hvdWxkCi0gIC8vIGJlIHdyaXR0ZW4gdG8gdGhl
IG1lbW9yeSBhcmVhIHxkaXJlY3RfYnVmZmVyX2FkZHJlc3NffCBmb3IgcGxheW91dC4KLSAgLy8g
VGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgZnJvbSBKYXZh
LiBUaGUgbmFtZSBvZgotICAvLyB0aGUgdGhyZWFkIGlzICdBdWRpb1RyYWNrVGhyZWFkJy4KLSAg
dm9pZCBHZXRQbGF5b3V0RGF0YShKTklFbnYqIGVudiwgc2l6ZV90IGxlbmd0aCk7Ci0KLSBwcml2
YXRlOgotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGNvbnN0cnVjdG9yLgotICBydGM6OlRocmVh
ZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gIC8vIFN0b3JlcyB0aHJlYWQgSUQgaW4gZmly
c3QgY2FsbCB0byBPbkdldFBsYXlvdXREYXRhKCkgZnJvbSBoaWdoLXByaW9yaXR5Ci0gIC8vIHRo
cmVhZCBpbiBKYXZhLiBEZXRhY2hlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgb2JqZWN0
LgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfamF2YV87Ci0KLSAgLy8gV3Jh
cHMgdGhlIEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvVHJhY2tKbmkgY2xhc3MuCi0g
IEpOSUVudiogZW52XyA9IG51bGxwdHI7Ci0gIFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4g
al9hdWRpb190cmFja187Ci0KLSAgLy8gQ29udGFpbnMgYXVkaW8gcGFyYW1ldGVycyBwcm92aWRl
ZCB0byB0aGlzIGNsYXNzIGF0IGNvbnN0cnVjdGlvbiBieSB0aGUKLSAgLy8gQXVkaW9NYW5hZ2Vy
LgotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMgYXVkaW9fcGFyYW1ldGVyc187Ci0KLSAgLy8gQ2Fj
aGVkIGNvcHkgb2YgYWRkcmVzcyB0byBkaXJlY3QgYXVkaW8gYnVmZmVyIG93bmVkIGJ5IHxqX2F1
ZGlvX3RyYWNrX3wuCi0gIHZvaWQqIGRpcmVjdF9idWZmZXJfYWRkcmVzc187Ci0KLSAgLy8gTnVt
YmVyIG9mIGJ5dGVzIGluIHRoZSBkaXJlY3QgYXVkaW8gYnVmZmVyIG93bmVkIGJ5IHxqX2F1ZGlv
X3RyYWNrX3wuCi0gIHNpemVfdCBkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXzsKLQot
ICAvLyBOdW1iZXIgb2YgYXVkaW8gZnJhbWVzIHBlciBhdWRpbyBidWZmZXIuIEVhY2ggYXVkaW8g
ZnJhbWUgY29ycmVzcG9uZHMgdG8KLSAgLy8gb25lIHNhbXBsZSBvZiBQQ00gbW9ubyBkYXRhIGF0
IDE2IGJpdHMgcGVyIHNhbXBsZS4gSGVuY2UsIGVhY2ggYXVkaW8KLSAgLy8gZnJhbWUgY29udGFp
bnMgMiBieXRlcyAoZ2l2ZW4gdGhhdCB0aGUgSmF2YSBsYXllciBvbmx5IHN1cHBvcnRzIG1vbm8p
LgotICAvLyBFeGFtcGxlOiA0ODAgZm9yIDQ4MDAwIEh6IG9yIDQ0MSBmb3IgNDQxMDAgSHouCi0g
IHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcl87Ci0KLSAgYm9vbCBpbml0aWFsaXplZF87Ci0KLSAg
Ym9vbCBwbGF5aW5nXzsKLQotICAvLyBSYXcgcG9pbnRlciBoYW5kbGUgcHJvdmlkZWQgdG8gdXMg
aW4gQXR0YWNoQXVkaW9CdWZmZXIoKS4gT3duZWQgYnkgdGhlCi0gIC8vIEF1ZGlvRGV2aWNlTW9k
dWxlSW1wbCBjbGFzcyBhbmQgY2FsbGVkIGJ5IEF1ZGlvRGV2aWNlTW9kdWxlOjpDcmVhdGUoKS4K
LSAgLy8gVGhlIEF1ZGlvRGV2aWNlQnVmZmVyIGlzIGEgbWVtYmVyIG9mIHRoZSBBdWRpb0Rldmlj
ZU1vZHVsZUltcGwgaW5zdGFuY2UKLSAgLy8gYW5kIHRoZXJlZm9yZSBvdXRsaXZlcyB0aGlzIG9i
amVjdC4KLSAgQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2RldmljZV9idWZmZXJfOwotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIGpuaQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAg
Ly8gU0RLX0FORFJPSURfU1JDX0pOSV9BVURJT19ERVZJQ0VfQVVESU9fVFJBQ0tfSk5JX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9qYXZhX2F1ZGlvX2RldmljZV9tb2R1bGUuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2F1ZGlvX2RldmljZS9qYXZhX2F1ZGlvX2RldmljZV9tb2R1bGUuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjM2NiZTRiYmUyNmU5ZmYxMWUwN2U5NmY2ODgyZWU1YWRi
ZjI3ZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9hdWRpb19kZXZpY2UvamF2YV9hdWRpb19kZXZpY2VfbW9kdWxlLmNjCisrKyAvZGV2L251bGwK
QEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfamF2YV9hdWRpb19qbmkvSmF2
YUF1ZGlvRGV2aWNlTW9kdWxlX2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkv
YXVkaW9fZGV2aWNlL2F1ZGlvX3JlY29yZF9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9z
cmMvam5pL2F1ZGlvX2RldmljZS9hdWRpb190cmFja19qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNw
YWNlIGpuaSB7Ci0KLXN0YXRpYyBqbG9uZyBKTklfSmF2YUF1ZGlvRGV2aWNlTW9kdWxlX0NyZWF0
ZUF1ZGlvRGV2aWNlTW9kdWxlKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFQYXJh
bVJlZjxqb2JqZWN0PiYgal9jb250ZXh0LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0
PiYgal9hdWRpb19tYW5hZ2VyLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal93
ZWJydGNfYXVkaW9fcmVjb3JkLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal93
ZWJydGNfYXVkaW9fdHJhY2ssCi0gICAgaW50IGlucHV0X3NhbXBsZV9yYXRlLAotICAgIGludCBv
dXRwdXRfc2FtcGxlX3JhdGUsCi0gICAgamJvb2xlYW4gal91c2Vfc3RlcmVvX2lucHV0LAotICAg
IGpib29sZWFuIGpfdXNlX3N0ZXJlb19vdXRwdXQpIHsKLSAgQXVkaW9QYXJhbWV0ZXJzIGlucHV0
X3BhcmFtZXRlcnM7Ci0gIEF1ZGlvUGFyYW1ldGVycyBvdXRwdXRfcGFyYW1ldGVyczsKLSAgR2V0
QXVkaW9QYXJhbWV0ZXJzKGVudiwgal9jb250ZXh0LCBqX2F1ZGlvX21hbmFnZXIsIGlucHV0X3Nh
bXBsZV9yYXRlLAotICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NhbXBsZV9yYXRlLCBqX3Vz
ZV9zdGVyZW9faW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICBqX3VzZV9zdGVyZW9fb3V0cHV0
LCAmaW5wdXRfcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICZvdXRwdXRfcGFyYW1l
dGVycyk7Ci0gIGF1dG8gYXVkaW9faW5wdXQgPSBzdGQ6Om1ha2VfdW5pcXVlPEF1ZGlvUmVjb3Jk
Sm5pPigKLSAgICAgIGVudiwgaW5wdXRfcGFyYW1ldGVycywga0hpZ2hMYXRlbmN5TW9kZURlbGF5
RXN0aW1hdGVJbk1pbGxpc2Vjb25kcywKLSAgICAgIGpfd2VicnRjX2F1ZGlvX3JlY29yZCk7Ci0g
IGF1dG8gYXVkaW9fb3V0cHV0ID0gc3RkOjptYWtlX3VuaXF1ZTxBdWRpb1RyYWNrSm5pPihlbnYs
IG91dHB1dF9wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgal93ZWJydGNfYXVkaW9fdHJhY2spOwotICByZXR1cm4gamxvbmdG
cm9tUG9pbnRlcihDcmVhdGVBdWRpb0RldmljZU1vZHVsZUZyb21JbnB1dEFuZE91dHB1dCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEph
dmFBdWRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfdXNlX3N0ZXJlb19pbnB1
dCwgal91c2Vfc3RlcmVvX291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtI
aWdoTGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoYXVkaW9faW5wdXQpLCBzdGQ6Om1vdmUoYXVkaW9f
b3V0cHV0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCkpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2F1ZGlvX2RldmljZS9vcGVuc2xlc19jb21tb24uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rldmlj
ZS9vcGVuc2xlc19jb21tb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YzNh
ZTlmN2ExMGE2NTRiY2EzYTA3MTA3YjRhMzZlZDcxNjk3MjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfY29t
bW9uLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNs
ZXNfY29tbW9uLmgiCi0KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTLmg+Ci0KLSNpbmNsdWRlICJy
dGNfYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSBqbmkgewotCi0vLyBSZXR1cm5zIGEgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIGdpdmVuIGFuIGludGVnZXIgU0xfUkVTVUxUX1hYWCBjb2RlLgotLy8g
VGhlIG1hcHBpbmcgY2FuIGJlIGZvdW5kIGluIDxTTEVTL09wZW5TTEVTLmg+LgotY29uc3QgY2hh
ciogR2V0U0xFcnJvclN0cmluZyhzaXplX3QgY29kZSkgewotICBzdGF0aWMgY29uc3QgY2hhciog
c2xfZXJyb3Jfc3RyaW5nc1tdID0gewotICAgICAgIlNMX1JFU1VMVF9TVUNDRVNTIiwgICAgICAg
ICAgICAgICAgIC8vIDAKLSAgICAgICJTTF9SRVNVTFRfUFJFQ09ORElUSU9OU19WSU9MQVRFRCIs
ICAvLyAxCi0gICAgICAiU0xfUkVTVUxUX1BBUkFNRVRFUl9JTlZBTElEIiwgICAgICAgLy8gMgot
ICAgICAgIlNMX1JFU1VMVF9NRU1PUllfRkFJTFVSRSIsICAgICAgICAgIC8vIDMKLSAgICAgICJT
TF9SRVNVTFRfUkVTT1VSQ0VfRVJST1IiLCAgICAgICAgICAvLyA0Ci0gICAgICAiU0xfUkVTVUxU
X1JFU09VUkNFX0xPU1QiLCAgICAgICAgICAgLy8gNQotICAgICAgIlNMX1JFU1VMVF9JT19FUlJP
UiIsICAgICAgICAgICAgICAgIC8vIDYKLSAgICAgICJTTF9SRVNVTFRfQlVGRkVSX0lOU1VGRklD
SUVOVCIsICAgICAvLyA3Ci0gICAgICAiU0xfUkVTVUxUX0NPTlRFTlRfQ09SUlVQVEVEIiwgICAg
ICAgLy8gOAotICAgICAgIlNMX1JFU1VMVF9DT05URU5UX1VOU1VQUE9SVEVEIiwgICAgIC8vIDkK
LSAgICAgICJTTF9SRVNVTFRfQ09OVEVOVF9OT1RfRk9VTkQiLCAgICAgICAvLyAxMAotICAgICAg
IlNMX1JFU1VMVF9QRVJNSVNTSU9OX0RFTklFRCIsICAgICAgIC8vIDExCi0gICAgICAiU0xfUkVT
VUxUX0ZFQVRVUkVfVU5TVVBQT1JURUQiLCAgICAgLy8gMTIKLSAgICAgICJTTF9SRVNVTFRfSU5U
RVJOQUxfRVJST1IiLCAgICAgICAgICAvLyAxMwotICAgICAgIlNMX1JFU1VMVF9VTktOT1dOX0VS
Uk9SIiwgICAgICAgICAgIC8vIDE0Ci0gICAgICAiU0xfUkVTVUxUX09QRVJBVElPTl9BQk9SVEVE
IiwgICAgICAgLy8gMTUKLSAgICAgICJTTF9SRVNVTFRfQ09OVFJPTF9MT1NUIiwgICAgICAgICAg
ICAvLyAxNgotICB9OwotCi0gIGlmIChjb2RlID49IGFycmF5c2l6ZShzbF9lcnJvcl9zdHJpbmdz
KSkgewotICAgIHJldHVybiAiU0xfUkVTVUxUX1VOS05PV05fRVJST1IiOwotICB9Ci0gIHJldHVy
biBzbF9lcnJvcl9zdHJpbmdzW2NvZGVdOwotfQotCi1TTERhdGFGb3JtYXRfUENNIENyZWF0ZVBD
TUNvbmZpZ3VyYXRpb24oc2l6ZV90IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgYml0c19wZXJfc2FtcGxlKSB7Ci0gIFJUQ19DSEVDS19F
UShiaXRzX3Blcl9zYW1wbGUsIFNMX1BDTVNBTVBMRUZPUk1BVF9GSVhFRF8xNik7Ci0gIFNMRGF0
YUZvcm1hdF9QQ00gZm9ybWF0OwotICBmb3JtYXQuZm9ybWF0VHlwZSA9IFNMX0RBVEFGT1JNQVRf
UENNOwotICBmb3JtYXQubnVtQ2hhbm5lbHMgPSBzdGF0aWNfY2FzdDxTTHVpbnQzMj4oY2hhbm5l
bHMpOwotICAvLyBOb3RlIHRoYXQsIHRoZSB1bml0IG9mIHNhbXBsZSByYXRlIGlzIGFjdHVhbGx5
IGluIG1pbGxpSGVydHogYW5kIG5vdCBIZXJ0ei4KLSAgc3dpdGNoIChzYW1wbGVfcmF0ZSkgewot
ICAgIGNhc2UgODAwMDoKLSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdS
QVRFXzg7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE2MDAwOgotICAgICAgZm9ybWF0LnNhbXBs
ZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfMTY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDIy
MDUwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfMjJfMDU7
Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDMyMDAwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQZXJT
ZWMgPSBTTF9TQU1QTElOR1JBVEVfMzI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQ0MTAwOgot
ICAgICAgZm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfNDRfMTsKLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgNDgwMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNlYyA9IFNM
X1NBTVBMSU5HUkFURV80ODsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNjQwMDA6Ci0gICAgICBm
b3JtYXQuc2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5HUkFURV82NDsKLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgODgyMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5H
UkFURV84OF8yOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA5NjAwMDoKLSAgICAgIGZvcm1hdC5z
YW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzk2OwotICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIFJUQ19DSEVDSyhmYWxzZSkgPDwgIlVuc3VwcG9ydGVkIHNhbXBsZSByYXRl
OiAiIDw8IHNhbXBsZV9yYXRlOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgZm9ybWF0LmJpdHNQZXJT
YW1wbGUgPSBTTF9QQ01TQU1QTEVGT1JNQVRfRklYRURfMTY7Ci0gIGZvcm1hdC5jb250YWluZXJT
aXplID0gU0xfUENNU0FNUExFRk9STUFUX0ZJWEVEXzE2OwotICBmb3JtYXQuZW5kaWFubmVzcyA9
IFNMX0JZVEVPUkRFUl9MSVRUTEVFTkRJQU47Ci0gIGlmIChmb3JtYXQubnVtQ2hhbm5lbHMgPT0g
MSkgewotICAgIGZvcm1hdC5jaGFubmVsTWFzayA9IFNMX1NQRUFLRVJfRlJPTlRfQ0VOVEVSOwot
ICB9IGVsc2UgaWYgKGZvcm1hdC5udW1DaGFubmVscyA9PSAyKSB7Ci0gICAgZm9ybWF0LmNoYW5u
ZWxNYXNrID0gU0xfU1BFQUtFUl9GUk9OVF9MRUZUIHwgU0xfU1BFQUtFUl9GUk9OVF9SSUdIVDsK
LSAgfSBlbHNlIHsKLSAgICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbnN1cHBvcnRlZCBudW1iZXIg
b2YgY2hhbm5lbHM6ICIKLSAgICAgICAgICAgICAgICAgICAgIDw8IGZvcm1hdC5udW1DaGFubmVs
czsKLSAgfQotICByZXR1cm4gZm9ybWF0OwotfQotCi1PcGVuU0xFbmdpbmVNYW5hZ2VyOjpPcGVu
U0xFbmdpbmVNYW5hZ2VyKCkgewotICB0aHJlYWRfY2hlY2tlcl8uRGV0YWNoKCk7Ci19Ci0KLU9w
ZW5TTEVuZ2luZU1hbmFnZXI6On5PcGVuU0xFbmdpbmVNYW5hZ2VyKCkgPSBkZWZhdWx0OwotCi1T
TE9iamVjdEl0ZiBPcGVuU0xFbmdpbmVNYW5hZ2VyOjpHZXRPcGVuU0xFbmdpbmUoKSB7Ci0gIFJU
Q19MT0coSU5GTykgPDwgIkdldE9wZW5TTEVuZ2luZSI7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgLy8gT3BlblNMIEVTIGZvciBBbmRyb2lkIG9ubHkgc3Vw
cG9ydHMgYSBzaW5nbGUgZW5naW5lIHBlciBhcHBsaWNhdGlvbi4KLSAgLy8gSWYgb25lIGFscmVh
ZHkgaGFzIGJlZW4gY3JlYXRlZCwgcmV0dXJuIGV4aXN0aW5nIG9iamVjdCBpbnN0ZWFkIG9mCi0g
IC8vIGNyZWF0aW5nIGEgbmV3LgotICBpZiAoZW5naW5lX29iamVjdF8uR2V0KCkgIT0gbnVsbHB0
cikgewotICAgIFJUQ19MT0coV0FSTklORykgPDwgIlRoZSBPcGVuU0wgRVMgZW5naW5lIG9iamVj
dCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQiOwotICAgIHJldHVybiBlbmdpbmVfb2JqZWN0Xy5H
ZXQoKTsKLSAgfQotICAvLyBDcmVhdGUgdGhlIGVuZ2luZSBvYmplY3QgaW4gdGhyZWFkIHNhZmUg
bW9kZS4KLSAgY29uc3QgU0xFbmdpbmVPcHRpb24gb3B0aW9uW10gPSB7Ci0gICAgICB7U0xfRU5H
SU5FT1BUSU9OX1RIUkVBRFNBRkUsIHN0YXRpY19jYXN0PFNMdWludDMyPihTTF9CT09MRUFOX1RS
VUUpfX07Ci0gIFNMcmVzdWx0IHJlc3VsdCA9Ci0gICAgICBzbENyZWF0ZUVuZ2luZShlbmdpbmVf
b2JqZWN0Xy5SZWNlaXZlKCksIDEsIG9wdGlvbiwgMCwgTlVMTCwgTlVMTCk7Ci0gIGlmIChyZXN1
bHQgIT0gU0xfUkVTVUxUX1NVQ0NFU1MpIHsKLSAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAic2xD
cmVhdGVFbmdpbmUoKSBmYWlsZWQ6ICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBHZXRTTEVy
cm9yU3RyaW5nKHJlc3VsdCk7Ci0gICAgZW5naW5lX29iamVjdF8uUmVzZXQoKTsKLSAgICByZXR1
cm4gbnVsbHB0cjsKLSAgfQotICAvLyBSZWFsaXplIHRoZSBTTCBFbmdpbmUgaW4gc3luY2hyb25v
dXMgbW9kZS4KLSAgcmVzdWx0ID0gZW5naW5lX29iamVjdF8tPlJlYWxpemUoZW5naW5lX29iamVj
dF8uR2V0KCksIFNMX0JPT0xFQU5fRkFMU0UpOwotICBpZiAocmVzdWx0ICE9IFNMX1JFU1VMVF9T
VUNDRVNTKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIlJlYWxpemUoKSBmYWlsZWQ6ICIg
PDwgR2V0U0xFcnJvclN0cmluZyhyZXN1bHQpOwotICAgIGVuZ2luZV9vYmplY3RfLlJlc2V0KCk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgLy8gRmluYWxseSByZXR1cm4gdGhlIFNMT2Jq
ZWN0SXRmIGludGVyZmFjZSBvZiB0aGUgZW5naW5lIG9iamVjdC4KLSAgcmV0dXJuIGVuZ2luZV9v
YmplY3RfLkdldCgpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi0KLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX2NvbW1vbi5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDYwNWRkZmMwZWI1ZjViNGFmN2M1ZmE0NWFiZDRkODg2ZWZiY2YwM2EuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19k
ZXZpY2Uvb3BlbnNsZXNfY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX0FVRElP
X0RFVklDRV9PUEVOU0xFU19DT01NT05fSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfU1JDX0pOSV9B
VURJT19ERVZJQ0VfT1BFTlNMRVNfQ09NTU9OX0hfCi0KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVT
Lmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSNpbmNsdWRlICJhcGkvcmVmX2NvdW50ZWRfYmFz
ZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2xv
Z2dpbmcuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aHJlYWRfY2hlY2tlci5oIgotCi1uYW1lc3Bh
Y2Ugd2VicnRjIHsKLQotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIFJldHVybnMgYSBzdHJpbmcgcmVw
cmVzZW50YXRpb24gZ2l2ZW4gYW4gaW50ZWdlciBTTF9SRVNVTFRfWFhYIGNvZGUuCi0vLyBUaGUg
bWFwcGluZyBjYW4gYmUgZm91bmQgaW4gPFNMRVMvT3BlblNMRVMuaD4uCi1jb25zdCBjaGFyKiBH
ZXRTTEVycm9yU3RyaW5nKHNpemVfdCBjb2RlKTsKLQotLy8gQ29uZmlndXJlcyBhbiBTTF9EQVRB
Rk9STUFUX1BDTSBzdHJ1Y3R1cmUgYmFzZWQgb24gbmF0aXZlIGF1ZGlvIHBhcmFtZXRlcnMuCi1T
TERhdGFGb3JtYXRfUENNIENyZWF0ZVBDTUNvbmZpZ3VyYXRpb24oc2l6ZV90IGNoYW5uZWxzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYW1wbGVfcmF0ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYml0c19wZXJf
c2FtcGxlKTsKLQotLy8gSGVscGVyIGNsYXNzIGZvciB1c2luZyBTTE9iamVjdEl0ZiBpbnRlcmZh
Y2VzLgotdGVtcGxhdGUgPHR5cGVuYW1lIFNMVHlwZSwgdHlwZW5hbWUgU0xEZXJlZlR5cGU+Ci1j
bGFzcyBTY29wZWRTTE9iamVjdCB7Ci0gcHVibGljOgotICBTY29wZWRTTE9iamVjdCgpIDogb2Jq
XyhudWxscHRyKSB7fQotCi0gIH5TY29wZWRTTE9iamVjdCgpIHsgUmVzZXQoKTsgfQotCi0gIFNM
VHlwZSogUmVjZWl2ZSgpIHsKLSAgICBSVENfRENIRUNLKCFvYmpfKTsKLSAgICByZXR1cm4gJm9i
al87Ci0gIH0KLQotICBTTERlcmVmVHlwZSBvcGVyYXRvci0+KCkgeyByZXR1cm4gKm9ial87IH0K
LQotICBTTFR5cGUgR2V0KCkgY29uc3QgeyByZXR1cm4gb2JqXzsgfQotCi0gIHZvaWQgUmVzZXQo
KSB7Ci0gICAgaWYgKG9ial8pIHsKLSAgICAgICgqb2JqXyktPkRlc3Ryb3kob2JqXyk7Ci0gICAg
ICBvYmpfID0gbnVsbHB0cjsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFNMVHlwZSBvYmpf
OwotfTsKLQotdHlwZWRlZiBTY29wZWRTTE9iamVjdDxTTE9iamVjdEl0ZiwgY29uc3QgU0xPYmpl
Y3RJdGZfKj4gU2NvcGVkU0xPYmplY3RJdGY7Ci0KLS8vIENyZWF0ZXMgYW5kIHJlYWxpemVzIHRo
ZSBtYWluIChnbG9iYWwpIE9wZW4gU0wgZW5naW5lIG9iamVjdCBhbmQgcmV0dXJucwotLy8gYSBy
ZWZlcmVuY2UgdG8gaXQuIFRoZSBlbmdpbmUgb2JqZWN0IGlzIG9ubHkgY3JlYXRlZCBhdCB0aGUg
Zmlyc3QgY2FsbAotLy8gc2luY2UgT3BlblNMIEVTIGZvciBBbmRyb2lkIG9ubHkgc3VwcG9ydHMg
YSBzaW5nbGUgZW5naW5lIHBlciBhcHBsaWNhdGlvbi4KLS8vIFN1YnNlcXVlbnQgY2FsbHMgcmV0
dXJucyB0aGUgYWxyZWFkeSBjcmVhdGVkIGVuZ2luZS4KLS8vIE5vdGU6IFRoaXMgY2xhc3MgbXVz
dCBiZSB1c2VkIHNpbmdsZSB0aHJlYWRlZCBhbmQgdGhpcyBpcyBlbmZvcmNlZCBieSBhCi0vLyB0
aHJlYWQgY2hlY2tlci4KLWNsYXNzIE9wZW5TTEVuZ2luZU1hbmFnZXIgOiBwdWJsaWMgcnRjOjpS
ZWZDb3VudGVkQmFzZSB7Ci0gcHVibGljOgotICBPcGVuU0xFbmdpbmVNYW5hZ2VyKCk7Ci0gIH5P
cGVuU0xFbmdpbmVNYW5hZ2VyKCkgb3ZlcnJpZGU7Ci0gIFNMT2JqZWN0SXRmIEdldE9wZW5TTEVu
Z2luZSgpOwotCi0gcHJpdmF0ZToKLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2Vy
XzsKLSAgLy8gVGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBlbnRyeSBwb2ludCBvZiB0aGUgT3Bl
blNMIEVTIEFQSS4KLSAgLy8gQWZ0ZXIgY3JlYXRpbmcgdGhlIGVuZ2luZSBvYmplY3QsIHRoZSBh
cHBsaWNhdGlvbiBjYW4gb2J0YWluIHRoaXMgb2JqZWN04oCYcwotICAvLyBTTEVuZ2luZUl0ZiBp
bnRlcmZhY2UuIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGNyZWF0aW9uIG1ldGhvZHMgZm9yIGFs
bAotICAvLyB0aGUgb3RoZXIgb2JqZWN0IHR5cGVzIGluIHRoZSBBUEkuIE5vbmUgb2YgdGhlc2Ug
aW50ZXJmYWNlIGFyZSByZWFsaXplZAotICAvLyBieSB0aGlzIGNsYXNzLiBJdCBvbmx5IHByb3Zp
ZGVzIGFjY2VzcyB0byB0aGUgZ2xvYmFsIGVuZ2luZSBvYmplY3QuCi0gIFNjb3BlZFNMT2JqZWN0
SXRmIGVuZ2luZV9vYmplY3RfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotCi19ICAvLyBu
YW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9BVURJT19E
RVZJQ0VfT1BFTlNMRVNfQ09NTU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9v
cGVuc2xlc19wbGF5ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2RldmljZS9vcGVuc2xlc19wbGF5ZXIuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOTJhY2NmMTZjZmIwZTZlOTNkNzVmMzFk
NWMyMDhjZTBlZmRiYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfcGxheWVyLmNjCisrKyAvZGV2L251bGwK
QEAgLTEsNDQ2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2Rr
L2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfcGxheWVyLmgiCi0KLSNpbmNs
dWRlIDxhbmRyb2lkL2xvZy5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgImFwaS9h
cnJheV92aWV3LmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvZmluZV9hdWRpb19i
dWZmZXIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJydGNf
YmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9mb3JtYXRfbWFjcm9zLmgiCi0jaW5j
bHVkZSAicnRjX2Jhc2UvcGxhdGZvcm1fdGhyZWFkLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGlt
ZV91dGlscy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL2F1
ZGlvX2NvbW1vbi5oIgotCi0jZGVmaW5lIFRBRyAiT3BlblNMRVNQbGF5ZXIiCi0jZGVmaW5lIEFM
T0dWKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19WRVJCT1NFLCBUQUcsIF9f
VkFfQVJHU19fKQotI2RlZmluZSBBTE9HRCguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9J
RF9MT0dfREVCVUcsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dFKC4uLikgX19hbmRy
b2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZp
bmUgQUxPR1coLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1dBUk4sIFRBRywg
X19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dJKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRS
T0lEX0xPR19JTkZPLCBUQUcsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIFJFVFVSTl9PTl9FUlJP
UihvcCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTTHJlc3VsdCBl
cnIgPSAob3ApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGVy
ciAhPSBTTF9SRVNVTFRfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
QUxPR0UoIiVzIGZhaWxlZDogJXMiLCAjb3AsIEdldFNMRXJyb3JTdHJpbmcoZXJyKSk7IFwKLSAg
ICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICB9IHdoaWxlICgwKQotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotbmFtZXNwYWNlIGpu
aSB7Ci0KLU9wZW5TTEVTUGxheWVyOjpPcGVuU0xFU1BsYXllcigKLSAgICBjb25zdCBBdWRpb1Bh
cmFtZXRlcnMmIGF1ZGlvX3BhcmFtZXRlcnMsCi0gICAgcnRjOjpzY29wZWRfcmVmcHRyPE9wZW5T
TEVuZ2luZU1hbmFnZXI+IGVuZ2luZV9tYW5hZ2VyKQotICAgIDogYXVkaW9fcGFyYW1ldGVyc18o
YXVkaW9fcGFyYW1ldGVycyksCi0gICAgICBhdWRpb19kZXZpY2VfYnVmZmVyXyhudWxscHRyKSwK
LSAgICAgIGluaXRpYWxpemVkXyhmYWxzZSksCi0gICAgICBwbGF5aW5nXyhmYWxzZSksCi0gICAg
ICBidWZmZXJfaW5kZXhfKDApLAotICAgICAgZW5naW5lX21hbmFnZXJfKHN0ZDo6bW92ZShlbmdp
bmVfbWFuYWdlcikpLAotICAgICAgZW5naW5lXyhudWxscHRyKSwKLSAgICAgIHBsYXllcl8obnVs
bHB0ciksCi0gICAgICBzaW1wbGVfYnVmZmVyX3F1ZXVlXyhudWxscHRyKSwKLSAgICAgIHZvbHVt
ZV8obnVsbHB0ciksCi0gICAgICBsYXN0X3BsYXlfdGltZV8oMCkgewotICBBTE9HRCgiY3Rvclt0
aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIC8vIFVzZSBuYXRpdmUgYXVkaW8g
b3V0cHV0IHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIGF1ZGlvIG1hbmFnZXIgYW5kCi0gIC8v
IGRlZmluZSB0aGUgUENNIGZvcm1hdCBzdHJ1Y3R1cmUuCi0gIHBjbV9mb3JtYXRfID0gQ3JlYXRl
UENNQ29uZmlndXJhdGlvbihhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3Jh
dGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhcmFt
ZXRlcnNfLmJpdHNfcGVyX3NhbXBsZSgpKTsKLSAgLy8gRGV0YWNoIGZyb20gdGhpcyB0aHJlYWQg
c2luY2Ugd2Ugd2FudCB0byB1c2UgdGhlIGNoZWNrZXIgdG8gdmVyaWZ5IGNhbGxzCi0gIC8vIGZy
b20gdGhlIGludGVybmFsICBhdWRpbyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2VyX29wZW5zbGVz
Xy5EZXRhY2goKTsKLX0KLQotT3BlblNMRVNQbGF5ZXI6On5PcGVuU0xFU1BsYXllcigpIHsKLSAg
QUxPR0QoImR0b3JbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRocmVhZElkKCkpOwotICBSVENfRENI
RUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIFRlcm1pbmF0ZSgpOwotICBEZXN0
cm95QXVkaW9QbGF5ZXIoKTsKLSAgRGVzdHJveU1peCgpOwotICBlbmdpbmVfID0gbnVsbHB0cjsK
LSAgUlRDX0RDSEVDSyghZW5naW5lXyk7Ci0gIFJUQ19EQ0hFQ0soIW91dHB1dF9taXhfLkdldCgp
KTsKLSAgUlRDX0RDSEVDSyghcGxheWVyXyk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZmZXJf
cXVldWVfKTsKLSAgUlRDX0RDSEVDSyghdm9sdW1lXyk7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXll
cjo6SW5pdCgpIHsKLSAgQUxPR0QoIkluaXRbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRocmVhZElk
KCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmIChh
dWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpID09IDIpIHsKLSAgICBBTE9HVygiU3RlcmVvIG1v
ZGUgaXMgZW5hYmxlZCIpOwotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNQbGF5
ZXI6OlRlcm1pbmF0ZSgpIHsKLSAgQUxPR0QoIlRlcm1pbmF0ZVt0aWQ9JWRdIiwgcnRjOjpDdXJy
ZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgp
KTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXll
cjo6SW5pdFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJJbml0UGxheW91dFt0aWQ9JWRdIiwgcnRjOjpD
dXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVu
dCgpKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSyghcGxheWlu
Z18pOwotICBpZiAoIU9idGFpbkVuZ2luZUludGVyZmFjZSgpKSB7Ci0gICAgQUxPR0UoIkZhaWxl
ZCB0byBvYnRhaW4gU0wgRW5naW5lIGludGVyZmFjZSIpOwotICAgIHJldHVybiAtMTsKLSAgfQot
ICBDcmVhdGVNaXgoKTsKLSAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgYnVmZmVyX2luZGV4XyA9
IDA7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIE9wZW5TTEVTUGxheWVyOjpQbGF5b3V0SXNJbml0
aWFsaXplZCgpIGNvbnN0IHsKLSAgcmV0dXJuIGluaXRpYWxpemVkXzsKLX0KLQotaW50IE9wZW5T
TEVTUGxheWVyOjpTdGFydFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJTdGFydFBsYXlvdXRbdGlkPSVk
XSIsIHJ0Yzo6Q3VycmVudFRocmVhZElkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
Xy5Jc0N1cnJlbnQoKSk7Ci0gIFJUQ19EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVD
SyghcGxheWluZ18pOwotICBpZiAoZmluZV9hdWRpb19idWZmZXJfKSB7Ci0gICAgZmluZV9hdWRp
b19idWZmZXJfLT5SZXNldFBsYXlvdXQoKTsKLSAgfQotICAvLyBUaGUgbnVtYmVyIG9mIGxvd2Vy
IGxhdGVuY3kgYXVkaW8gcGxheWVycyBpcyBsaW1pdGVkLCBoZW5jZSB3ZSBjcmVhdGUgdGhlCi0g
IC8vIGF1ZGlvIHBsYXllciBpbiBTdGFydCgpIGFuZCBkZXN0cm95IGl0IGluIFN0b3AoKS4KLSAg
Q3JlYXRlQXVkaW9QbGF5ZXIoKTsKLSAgLy8gRmlsbCB1cCBhdWRpbyBidWZmZXJzIHRvIGF2b2lk
IGluaXRpYWwgZ2xpdGNoIGFuZCB0byBlbnN1cmUgdGhhdCBwbGF5YmFjawotICAvLyBzdGFydHMg
d2hlbiBtb2RlIGlzIGxhdGVyIGNoYW5nZWQgdG8gU0xfUExBWVNUQVRFX1BMQVlJTkcuCi0gIC8v
IFRPRE8oaGVucmlrYSk6IHdlIGNhbiBzYXZlIHNvbWUgZGVsYXkgYnkgb25seSBtYWtpbmcgb25l
IGNhbGwgdG8KLSAgLy8gRW5xdWV1ZVBsYXlvdXREYXRhLiBNb3N0IGxpa2VseSBub3Qgd29ydGgg
dGhlIHJpc2sgb2YgYWRkaW5nIGEgZ2xpdGNoLgotICBsYXN0X3BsYXlfdGltZV8gPSBydGM6OlRp
bWUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtT2ZPcGVuU0xFU0J1ZmZlcnM7ICsraSkg
ewotICAgIEVucXVldWVQbGF5b3V0RGF0YSh0cnVlKTsKLSAgfQotICAvLyBTdGFydCBzdHJlYW1p
bmcgZGF0YSBieSBzZXR0aW5nIHRoZSBwbGF5IHN0YXRlIHRvIFNMX1BMQVlTVEFURV9QTEFZSU5H
LgotICAvLyBGb3IgYSBwbGF5ZXIgb2JqZWN0LCB3aGVuIHRoZSBvYmplY3QgaXMgaW4gdGhlIFNM
X1BMQVlTVEFURV9QTEFZSU5HCi0gIC8vIHN0YXRlLCBhZGRpbmcgYnVmZmVycyB3aWxsIGltcGxp
Y2l0bHkgc3RhcnQgcGxheWJhY2suCi0gIFJFVFVSTl9PTl9FUlJPUigoKnBsYXllcl8pLT5TZXRQ
bGF5U3RhdGUocGxheWVyXywgU0xfUExBWVNUQVRFX1BMQVlJTkcpLCAtMSk7Ci0gIHBsYXlpbmdf
ID0gKEdldFBsYXlTdGF0ZSgpID09IFNMX1BMQVlTVEFURV9QTEFZSU5HKTsKLSAgUlRDX0RDSEVD
SyhwbGF5aW5nXyk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNQbGF5ZXI6OlN0b3BQ
bGF5b3V0KCkgewotICBBTE9HRCgiU3RvcFBsYXlvdXRbdGlkPSVkXSIsIHJ0Yzo6Q3VycmVudFRo
cmVhZElkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0g
IGlmICghaW5pdGlhbGl6ZWRfIHx8ICFwbGF5aW5nXykgewotICAgIHJldHVybiAwOwotICB9Ci0g
IC8vIFN0b3AgcGxheWluZyBieSBzZXR0aW5nIHRoZSBwbGF5IHN0YXRlIHRvIFNMX1BMQVlTVEFU
RV9TVE9QUEVELgotICBSRVRVUk5fT05fRVJST1IoKCpwbGF5ZXJfKS0+U2V0UGxheVN0YXRlKHBs
YXllcl8sIFNMX1BMQVlTVEFURV9TVE9QUEVEKSwgLTEpOwotICAvLyBDbGVhciB0aGUgYnVmZmVy
IHF1ZXVlIHRvIGZsdXNoIG91dCBhbnkgcmVtYWluaW5nIGRhdGEuCi0gIFJFVFVSTl9PTl9FUlJP
UigoKnNpbXBsZV9idWZmZXJfcXVldWVfKS0+Q2xlYXIoc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pLCAt
MSk7Ci0jaWYgUlRDX0RDSEVDS19JU19PTgotICAvLyBWZXJpZnkgdGhhdCB0aGUgYnVmZmVyIHF1
ZXVlIGlzIGluIGZhY3QgY2xlYXJlZCBhcyBpdCBzaG91bGQuCi0gIFNMQW5kcm9pZFNpbXBsZUJ1
ZmZlclF1ZXVlU3RhdGUgYnVmZmVyX3F1ZXVlX3N0YXRlOwotICAoKnNpbXBsZV9idWZmZXJfcXVl
dWVfKS0+R2V0U3RhdGUoc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sICZidWZmZXJfcXVldWVfc3RhdGUp
OwotICBSVENfRENIRUNLX0VRKDAsIGJ1ZmZlcl9xdWV1ZV9zdGF0ZS5jb3VudCk7Ci0gIFJUQ19E
Q0hFQ0tfRVEoMCwgYnVmZmVyX3F1ZXVlX3N0YXRlLmluZGV4KTsKLSNlbmRpZgotICAvLyBUaGUg
bnVtYmVyIG9mIGxvd2VyIGxhdGVuY3kgYXVkaW8gcGxheWVycyBpcyBsaW1pdGVkLCBoZW5jZSB3
ZSBjcmVhdGUgdGhlCi0gIC8vIGF1ZGlvIHBsYXllciBpbiBTdGFydCgpIGFuZCBkZXN0cm95IGl0
IGluIFN0b3AoKS4KLSAgRGVzdHJveUF1ZGlvUGxheWVyKCk7Ci0gIHRocmVhZF9jaGVja2VyX29w
ZW5zbGVzXy5EZXRhY2goKTsKLSAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gIHBsYXlpbmdfID0g
ZmFsc2U7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIE9wZW5TTEVTUGxheWVyOjpQbGF5aW5nKCkg
Y29uc3QgewotICByZXR1cm4gcGxheWluZ187Ci19Ci0KLWJvb2wgT3BlblNMRVNQbGF5ZXI6OlNw
ZWFrZXJWb2x1bWVJc0F2YWlsYWJsZSgpIHsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgT3Bl
blNMRVNQbGF5ZXI6OlNldFNwZWFrZXJWb2x1bWUodWludDMyX3Qgdm9sdW1lKSB7Ci0gIHJldHVy
biAtMTsKLX0KLQotYWJzbDo6b3B0aW9uYWw8dWludDMyX3Q+IE9wZW5TTEVTUGxheWVyOjpTcGVh
a2VyVm9sdW1lKCkgY29uc3QgewotICByZXR1cm4gYWJzbDo6bnVsbG9wdDsKLX0KLQotYWJzbDo6
b3B0aW9uYWw8dWludDMyX3Q+IE9wZW5TTEVTUGxheWVyOjpNYXhTcGVha2VyVm9sdW1lKCkgY29u
c3QgewotICByZXR1cm4gYWJzbDo6bnVsbG9wdDsKLX0KLQotYWJzbDo6b3B0aW9uYWw8dWludDMy
X3Q+IE9wZW5TTEVTUGxheWVyOjpNaW5TcGVha2VyVm9sdW1lKCkgY29uc3QgewotICByZXR1cm4g
YWJzbDo6bnVsbG9wdDsKLX0KLQotdm9pZCBPcGVuU0xFU1BsYXllcjo6QXR0YWNoQXVkaW9CdWZm
ZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVmZmVyKSB7Ci0gIEFMT0dEKCJBdHRhY2hBdWRp
b0J1ZmZlciIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0g
IGF1ZGlvX2RldmljZV9idWZmZXJfID0gYXVkaW9CdWZmZXI7Ci0gIGNvbnN0IGludCBzYW1wbGVf
cmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCk7Ci0gIEFMT0dEKCJTZXRQ
bGF5b3V0U2FtcGxlUmF0ZSglZCkiLCBzYW1wbGVfcmF0ZV9oeik7Ci0gIGF1ZGlvX2RldmljZV9i
dWZmZXJfLT5TZXRQbGF5b3V0U2FtcGxlUmF0ZShzYW1wbGVfcmF0ZV9oeik7Ci0gIGNvbnN0IHNp
emVfdCBjaGFubmVscyA9IGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7Ci0gIEFMT0dEKCJT
ZXRQbGF5b3V0Q2hhbm5lbHMoJSIgUlRDX1BSSXVTICIpIiwgY2hhbm5lbHMpOwotICBhdWRpb19k
ZXZpY2VfYnVmZmVyXy0+U2V0UGxheW91dENoYW5uZWxzKGNoYW5uZWxzKTsKLSAgUlRDX0NIRUNL
KGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgQWxsb2NhdGVEYXRhQnVmZmVycygpOwotfQotCi12
b2lkIE9wZW5TTEVTUGxheWVyOjpBbGxvY2F0ZURhdGFCdWZmZXJzKCkgewotICBBTE9HRCgiQWxs
b2NhdGVEYXRhQnVmZmVycyIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJl
bnQoKSk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZmZXJfcXVldWVfKTsKLSAgUlRDX0NIRUNL
KGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgLy8gQ3JlYXRlIGEgbW9kaWZpZWQgYXVkaW8gYnVm
ZmVyIGNsYXNzIHdoaWNoIGFsbG93cyB1cyB0byBhc2sgZm9yIGFueSBudW1iZXIKLSAgLy8gb2Yg
c2FtcGxlcyAoYW5kIG5vdCBvbmx5IG11bHRpcGxlIG9mIDEwbXMpIHRvIG1hdGNoIHRoZSBuYXRp
dmUgT3BlblNMIEVTCi0gIC8vIGJ1ZmZlciBzaXplLiBUaGUgbmF0aXZlIGJ1ZmZlciBzaXplIGNv
cnJlc3BvbmRzIHRvIHRoZQotICAvLyBQUk9QRVJUWV9PVVRQVVRfRlJBTUVTX1BFUl9CVUZGRVIg
cHJvcGVydHkgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBhdWRpbwotICAvLyBmcmFtZXMgdGhhdCB0
aGUgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikgYnVmZmVyIGNhbiBob2xkLiBJdCBp
cwotICAvLyByZWNvbW1lbmRlZCB0byBjb25zdHJ1Y3QgYXVkaW8gYnVmZmVycyBzbyB0aGF0IHRo
ZXkgY29udGFpbiBhbiBleGFjdAotICAvLyBtdWx0aXBsZSBvZiB0aGlzIG51bWJlci4gSWYgc28s
IGNhbGxiYWNrcyB3aWxsIG9jY3VyIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLAotICAvLyB3aGljaCBy
ZWR1Y2VzIGppdHRlci4KLSAgY29uc3Qgc2l6ZV90IGJ1ZmZlcl9zaXplX2luX3NhbXBsZXMgPQot
ICAgICAgYXVkaW9fcGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSAqIGF1ZGlvX3BhcmFt
ZXRlcnNfLmNoYW5uZWxzKCk7Ci0gIEFMT0dEKCJuYXRpdmUgYnVmZmVyIHNpemU6ICUiIFJUQ19Q
Ukl1UywgYnVmZmVyX3NpemVfaW5fc2FtcGxlcyk7Ci0gIEFMT0dEKCJuYXRpdmUgYnVmZmVyIHNp
emUgaW4gbXM6ICUuMmYiLAotICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCdWZmZXJTaXpl
SW5NaWxsaXNlY29uZHMoKSk7Ci0gIGZpbmVfYXVkaW9fYnVmZmVyXyA9IHN0ZDo6bWFrZV91bmlx
dWU8RmluZUF1ZGlvQnVmZmVyPihhdWRpb19kZXZpY2VfYnVmZmVyXyk7Ci0gIC8vIEFsbG9jYXRl
ZCBtZW1vcnkgZm9yIGF1ZGlvIGJ1ZmZlcnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bU9m
T3BlblNMRVNCdWZmZXJzOyArK2kpIHsKLSAgICBhdWRpb19idWZmZXJzX1tpXS5yZXNldChuZXcg
U0xpbnQxNltidWZmZXJfc2l6ZV9pbl9zYW1wbGVzXSk7Ci0gIH0KLX0KLQotYm9vbCBPcGVuU0xF
U1BsYXllcjo6T2J0YWluRW5naW5lSW50ZXJmYWNlKCkgewotICBBTE9HRCgiT2J0YWluRW5naW5l
SW50ZXJmYWNlIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsK
LSAgaWYgKGVuZ2luZV8pCi0gICAgcmV0dXJuIHRydWU7Ci0gIC8vIEdldCBhY2Nlc3MgdG8gKG9y
IGNyZWF0ZSBpZiBub3QgYWxyZWFkeSBleGlzdGluZykgdGhlIGdsb2JhbCBPcGVuU0wgRW5naW5l
Ci0gIC8vIG9iamVjdC4KLSAgU0xPYmplY3RJdGYgZW5naW5lX29iamVjdCA9IGVuZ2luZV9tYW5h
Z2VyXy0+R2V0T3BlblNMRW5naW5lKCk7Ci0gIGlmIChlbmdpbmVfb2JqZWN0ID09IG51bGxwdHIp
IHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIE9wZW5TTCBlbmdpbmUi
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gR2V0IHRoZSBTTCBFbmdpbmUgSW50ZXJm
YWNlIHdoaWNoIGlzIGltcGxpY2l0LgotICBSRVRVUk5fT05fRVJST1IoCi0gICAgICAoKmVuZ2lu
ZV9vYmplY3QpLT5HZXRJbnRlcmZhY2UoZW5naW5lX29iamVjdCwgU0xfSUlEX0VOR0lORSwgJmVu
Z2luZV8pLAotICAgICAgZmFsc2UpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcGVuU0xF
U1BsYXllcjo6Q3JlYXRlTWl4KCkgewotICBBTE9HRCgiQ3JlYXRlTWl4Iik7Ci0gIFJUQ19EQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyhlbmdpbmVfKTsK
LSAgaWYgKG91dHB1dF9taXhfLkdldCgpKQotICAgIHJldHVybiB0cnVlOwotCi0gIC8vIENyZWF0
ZSB0aGUgb3VwdXQgbWl4IG9uIHRoZSBlbmdpbmUgb2JqZWN0LiBObyBpbnRlcmZhY2VzIHdpbGwg
YmUgdXNlZC4KLSAgUkVUVVJOX09OX0VSUk9SKCgqZW5naW5lXyktPkNyZWF0ZU91dHB1dE1peChl
bmdpbmVfLCBvdXRwdXRfbWl4Xy5SZWNlaXZlKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciksCi0gICAgICAgICAgICAg
ICAgICBmYWxzZSk7Ci0gIFJFVFVSTl9PTl9FUlJPUihvdXRwdXRfbWl4Xy0+UmVhbGl6ZShvdXRw
dXRfbWl4Xy5HZXQoKSwgU0xfQk9PTEVBTl9GQUxTRSksCi0gICAgICAgICAgICAgICAgICBmYWxz
ZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIE9wZW5TTEVTUGxheWVyOjpEZXN0cm95TWl4
KCkgewotICBBTE9HRCgiRGVzdHJveU1peCIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2Vy
Xy5Jc0N1cnJlbnQoKSk7Ci0gIGlmICghb3V0cHV0X21peF8uR2V0KCkpCi0gICAgcmV0dXJuOwot
ICBvdXRwdXRfbWl4Xy5SZXNldCgpOwotfQotCi1ib29sIE9wZW5TTEVTUGxheWVyOjpDcmVhdGVB
dWRpb1BsYXllcigpIHsKLSAgQUxPR0QoIkNyZWF0ZUF1ZGlvUGxheWVyIik7Ci0gIFJUQ19EQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyhvdXRwdXRfbWl4
Xy5HZXQoKSk7Ci0gIGlmIChwbGF5ZXJfb2JqZWN0Xy5HZXQoKSkKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgUlRDX0RDSEVDSyghcGxheWVyXyk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZmZXJfcXVl
dWVfKTsKLSAgUlRDX0RDSEVDSyghdm9sdW1lXyk7Ci0KLSAgLy8gc291cmNlOiBBbmRyb2lkIFNp
bXBsZSBCdWZmZXIgUXVldWUgRGF0YSBMb2NhdG9yIGlzIHNvdXJjZS4KLSAgU0xEYXRhTG9jYXRv
cl9BbmRyb2lkU2ltcGxlQnVmZmVyUXVldWUgc2ltcGxlX2J1ZmZlcl9xdWV1ZSA9IHsKLSAgICAg
IFNMX0RBVEFMT0NBVE9SX0FORFJPSURTSU1QTEVCVUZGRVJRVUVVRSwKLSAgICAgIHN0YXRpY19j
YXN0PFNMdWludDMyPihrTnVtT2ZPcGVuU0xFU0J1ZmZlcnMpfTsKLSAgU0xEYXRhU291cmNlIGF1
ZGlvX3NvdXJjZSA9IHsmc2ltcGxlX2J1ZmZlcl9xdWV1ZSwgJnBjbV9mb3JtYXRffTsKLQotICAv
LyBzaW5rOiBPdXRwdXRNaXgtYmFzZWQgZGF0YSBpcyBzaW5rLgotICBTTERhdGFMb2NhdG9yX091
dHB1dE1peCBsb2NhdG9yX291dHB1dF9taXggPSB7U0xfREFUQUxPQ0FUT1JfT1VUUFVUTUlYLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X21p
eF8uR2V0KCl9OwotICBTTERhdGFTaW5rIGF1ZGlvX3NpbmsgPSB7JmxvY2F0b3Jfb3V0cHV0X21p
eCwgbnVsbHB0cn07Ci0KLSAgLy8gRGVmaW5lIGludGVyZmFjZXMgdGhhdCB3ZSBpbmRlbmQgdG8g
dXNlIGFuZCByZWFsaXplLgotICBjb25zdCBTTEludGVyZmFjZUlEIGludGVyZmFjZV9pZHNbXSA9
IHtTTF9JSURfQU5EUk9JRENPTkZJR1VSQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNMX0lJRF9CVUZGRVJRVUVVRSwgU0xfSUlEX1ZPTFVNRX07Ci0gIGNv
bnN0IFNMYm9vbGVhbiBpbnRlcmZhY2VfcmVxdWlyZWRbXSA9IHtTTF9CT09MRUFOX1RSVUUsIFNM
X0JPT0xFQU5fVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNMX0JPT0xFQU5fVFJVRX07Ci0KLSAgLy8gQ3JlYXRlIHRoZSBhdWRpbyBwbGF5ZXIgb24gdGhl
IGVuZ2luZSBpbnRlcmZhY2UuCi0gIFJFVFVSTl9PTl9FUlJPUigKLSAgICAgICgqZW5naW5lXykt
PkNyZWF0ZUF1ZGlvUGxheWVyKAotICAgICAgICAgIGVuZ2luZV8sIHBsYXllcl9vYmplY3RfLlJl
Y2VpdmUoKSwgJmF1ZGlvX3NvdXJjZSwgJmF1ZGlvX3NpbmssCi0gICAgICAgICAgYXJyYXlzaXpl
KGludGVyZmFjZV9pZHMpLCBpbnRlcmZhY2VfaWRzLCBpbnRlcmZhY2VfcmVxdWlyZWQpLAotICAg
ICAgZmFsc2UpOwotCi0gIC8vIFVzZSB0aGUgQW5kcm9pZCBjb25maWd1cmF0aW9uIGludGVyZmFj
ZSB0byBzZXQgcGxhdGZvcm0tc3BlY2lmaWMKLSAgLy8gcGFyYW1ldGVycy4gU2hvdWxkIGJlIGRv
bmUgYmVmb3JlIHBsYXllciBpcyByZWFsaXplZC4KLSAgU0xBbmRyb2lkQ29uZmlndXJhdGlvbkl0
ZiBwbGF5ZXJfY29uZmlnOwotICBSRVRVUk5fT05fRVJST1IoCi0gICAgICBwbGF5ZXJfb2JqZWN0
Xy0+R2V0SW50ZXJmYWNlKHBsYXllcl9vYmplY3RfLkdldCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTTF9JSURfQU5EUk9JRENPTkZJR1VSQVRJT04sICZwbGF5ZXJfY29u
ZmlnKSwKLSAgICAgIGZhbHNlKTsKLSAgLy8gU2V0IGF1ZGlvIHBsYXllciBjb25maWd1cmF0aW9u
IHRvIFNMX0FORFJPSURfU1RSRUFNX1ZPSUNFIHdoaWNoCi0gIC8vIGNvcnJlc3BvbmRzIHRvIGFu
ZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLgotICBTTGludDMyIHN0
cmVhbV90eXBlID0gU0xfQU5EUk9JRF9TVFJFQU1fVk9JQ0U7Ci0gIFJFVFVSTl9PTl9FUlJPUigK
LSAgICAgICgqcGxheWVyX2NvbmZpZykKLSAgICAgICAgICAtPlNldENvbmZpZ3VyYXRpb24ocGxh
eWVyX2NvbmZpZywgU0xfQU5EUk9JRF9LRVlfU1RSRUFNX1RZUEUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzdHJlYW1fdHlwZSwgc2l6ZW9mKFNMaW50MzIpKSwKLSAgICAgIGZhbHNl
KTsKLQotICAvLyBSZWFsaXplIHRoZSBhdWRpbyBwbGF5ZXIgb2JqZWN0IGFmdGVyIGNvbmZpZ3Vy
YXRpb24gaGFzIGJlZW4gc2V0LgotICBSRVRVUk5fT05fRVJST1IoCi0gICAgICBwbGF5ZXJfb2Jq
ZWN0Xy0+UmVhbGl6ZShwbGF5ZXJfb2JqZWN0Xy5HZXQoKSwgU0xfQk9PTEVBTl9GQUxTRSksIGZh
bHNlKTsKLQotICAvLyBHZXQgdGhlIFNMUGxheUl0ZiBpbnRlcmZhY2Ugb24gdGhlIGF1ZGlvIHBs
YXllci4KLSAgUkVUVVJOX09OX0VSUk9SKAotICAgICAgcGxheWVyX29iamVjdF8tPkdldEludGVy
ZmFjZShwbGF5ZXJfb2JqZWN0Xy5HZXQoKSwgU0xfSUlEX1BMQVksICZwbGF5ZXJfKSwKLSAgICAg
IGZhbHNlKTsKLQotICAvLyBHZXQgdGhlIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGlu
dGVyZmFjZSBvbiB0aGUgYXVkaW8gcGxheWVyLgotICBSRVRVUk5fT05fRVJST1IoCi0gICAgICBw
bGF5ZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNlKHBsYXllcl9vYmplY3RfLkdldCgpLCBTTF9JSURf
QlVGRkVSUVVFVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaW1wbGVf
YnVmZmVyX3F1ZXVlXyksCi0gICAgICBmYWxzZSk7Ci0KLSAgLy8gUmVnaXN0ZXIgY2FsbGJhY2sg
bWV0aG9kIGZvciB0aGUgQW5kcm9pZCBTaW1wbGUgQnVmZmVyIFF1ZXVlIGludGVyZmFjZS4KLSAg
Ly8gVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgbmF0aXZlIGF1ZGlvIGxheWVy
IG5lZWRzIGF1ZGlvIGRhdGEuCi0gIFJFVFVSTl9PTl9FUlJPUigoKnNpbXBsZV9idWZmZXJfcXVl
dWVfKQotICAgICAgICAgICAgICAgICAgICAgIC0+UmVnaXN0ZXJDYWxsYmFjayhzaW1wbGVfYnVm
ZmVyX3F1ZXVlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lt
cGxlQnVmZmVyUXVldWVDYWxsYmFjaywgdGhpcyksCi0gICAgICAgICAgICAgICAgICBmYWxzZSk7
Ci0KLSAgLy8gR2V0IHRoZSBTTFZvbHVtZUl0ZiBpbnRlcmZhY2Ugb24gdGhlIGF1ZGlvIHBsYXll
ci4KLSAgUkVUVVJOX09OX0VSUk9SKHBsYXllcl9vYmplY3RfLT5HZXRJbnRlcmZhY2UocGxheWVy
X29iamVjdF8uR2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNMX0lJRF9WT0xVTUUsICZ2b2x1bWVfKSwKLSAgICAgICAgICAgICAgICAgIGZhbHNl
KTsKLQotICAvLyBUT0RPKGhlbnJpa2EpOiBtaWdodCBub3QgYmUgcmVxdWlyZWQgdG8gc2V0IHZv
bHVtZSB0byBtYXggaGVyZSBzaW5jZSBpdAotICAvLyBzZWVtcyB0byBiZSBkZWZhdWx0IG9uIG1v
c3QgZGV2aWNlcy4gTWlnaHQgYmUgcmVxdWlyZWQgZm9yIHVuaXQgdGVzdHMuCi0gIC8vIFJFVFVS
Tl9PTl9FUlJPUigoKnZvbHVtZV8pLT5TZXRWb2x1bWVMZXZlbCh2b2x1bWVfLCAwKSwgZmFsc2Up
OwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIE9wZW5TTEVTUGxheWVyOjpEZXN0cm95QXVk
aW9QbGF5ZXIoKSB7Ci0gIEFMT0dEKCJEZXN0cm95QXVkaW9QbGF5ZXIiKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBpZiAoIXBsYXllcl9vYmplY3RfLkdl
dCgpKQotICAgIHJldHVybjsKLSAgKCpzaW1wbGVfYnVmZmVyX3F1ZXVlXykKLSAgICAgIC0+UmVn
aXN0ZXJDYWxsYmFjayhzaW1wbGVfYnVmZmVyX3F1ZXVlXywgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
IHBsYXllcl9vYmplY3RfLlJlc2V0KCk7Ci0gIHBsYXllcl8gPSBudWxscHRyOwotICBzaW1wbGVf
YnVmZmVyX3F1ZXVlXyA9IG51bGxwdHI7Ci0gIHZvbHVtZV8gPSBudWxscHRyOwotfQotCi0vLyBz
dGF0aWMKLXZvaWQgT3BlblNMRVNQbGF5ZXI6OlNpbXBsZUJ1ZmZlclF1ZXVlQ2FsbGJhY2soCi0g
ICAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJdGYgY2FsbGVyLAotICAgIHZvaWQqIGNvbnRl
eHQpIHsKLSAgT3BlblNMRVNQbGF5ZXIqIHN0cmVhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlblNM
RVNQbGF5ZXIqPihjb250ZXh0KTsKLSAgc3RyZWFtLT5GaWxsQnVmZmVyUXVldWUoKTsKLX0KLQot
dm9pZCBPcGVuU0xFU1BsYXllcjo6RmlsbEJ1ZmZlclF1ZXVlKCkgewotICBSVENfRENIRUNLKHRo
cmVhZF9jaGVja2VyX29wZW5zbGVzXy5Jc0N1cnJlbnQoKSk7Ci0gIFNMdWludDMyIHN0YXRlID0g
R2V0UGxheVN0YXRlKCk7Ci0gIGlmIChzdGF0ZSAhPSBTTF9QTEFZU1RBVEVfUExBWUlORykgewot
ICAgIEFMT0dXKCJCdWZmZXIgY2FsbGJhY2sgaW4gbm9uLXBsYXlpbmcgc3RhdGUhIik7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIEVucXVldWVQbGF5b3V0RGF0YShmYWxzZSk7Ci19Ci0KLXZvaWQgT3Bl
blNMRVNQbGF5ZXI6OkVucXVldWVQbGF5b3V0RGF0YShib29sIHNpbGVuY2UpIHsKLSAgLy8gQ2hl
Y2sgZGVsdGEgdGltZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGNhbGxiYWNrcyBhbmQgcHJvdmlk
ZSBhIHdhcm5pbmcKLSAgLy8gaWYgaXQgYmVjb21lcyB2ZXJ5IGxhcmdlLgotICAvLyBUT0RPKGhl
bnJpa2EpOiB1c2luZyAxNTBtcyBhcyB1cHBlciBsaW1pdCBidXQgdGhpcyB2YWx1ZSBpcyByYXRo
ZXIgcmFuZG9tLgotICBjb25zdCB1aW50MzJfdCBjdXJyZW50X3RpbWUgPSBydGM6OlRpbWUoKTsK
LSAgY29uc3QgdWludDMyX3QgZGlmZiA9IGN1cnJlbnRfdGltZSAtIGxhc3RfcGxheV90aW1lXzsK
LSAgaWYgKGRpZmYgPiAxNTApIHsKLSAgICBBTE9HVygiQmFkIE9wZW5TTCBFUyBwbGF5b3V0IHRp
bWluZywgZFQ9JXUgW21zXSIsIGRpZmYpOwotICB9Ci0gIGxhc3RfcGxheV90aW1lXyA9IGN1cnJl
bnRfdGltZTsKLSAgU0xpbnQ4KiBhdWRpb19wdHI4ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
U0xpbnQ4Kj4oYXVkaW9fYnVmZmVyc19bYnVmZmVyX2luZGV4X10uZ2V0KCkpOwotICBpZiAoc2ls
ZW5jZSkgewotICAgIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAg
ICAvLyBBdm9pZCBhY3F1aXJpbmcgcmVhbCBhdWRpbyBkYXRhIGZyb20gV2ViUlRDIGFuZCBmaWxs
IHRoZSBidWZmZXIgd2l0aAotICAgIC8vIHplcm9zIGluc3RlYWQuIFVzZWQgdG8gcHJpbWUgdGhl
IGJ1ZmZlciB3aXRoIHNpbGVuY2UgYW5kIHRvIGF2b2lkIGFza2luZwotICAgIC8vIGZvciBhdWRp
byBkYXRhIGZyb20gdHdvIGRpZmZlcmVudCB0aHJlYWRzLgotICAgIG1lbXNldChhdWRpb19wdHI4
LCAwLCBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgfSBlbHNlIHsK
LSAgICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyX29wZW5zbGVzXy5Jc0N1cnJlbnQoKSk7Ci0g
ICAgLy8gUmVhZCBhdWRpbyBkYXRhIGZyb20gdGhlIFdlYlJUQyBzb3VyY2UgdXNpbmcgdGhlIEZp
bmVBdWRpb0J1ZmZlciBvYmplY3QKLSAgICAvLyB0byBhZGp1c3QgZm9yIGRpZmZlcmVuY2VzIGlu
IGJ1ZmZlciBzaXplIGJldHdlZW4gV2ViUlRDICgxMG1zKSBhbmQgbmF0aXZlCi0gICAgLy8gT3Bl
blNMIEVTLiBVc2UgaGFyZGNvZGVkIGRlbGF5IGVzdGltYXRlIHNpbmNlIE9wZW5TTCBFUyBkb2Vz
IG5vdCBzdXBwb3J0Ci0gICAgLy8gZGVsYXkgZXN0aW1hdGlvbi4KLSAgICBmaW5lX2F1ZGlvX2J1
ZmZlcl8tPkdldFBsYXlvdXREYXRhKAotICAgICAgICBydGM6OkFycmF5VmlldzxpbnQxNl90Pihh
dWRpb19idWZmZXJzX1tidWZmZXJfaW5kZXhfXS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSAqCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVs
cygpKSwKLSAgICAgICAgMjUpOwotICB9Ci0gIC8vIEVucXVldWUgdGhlIGRlY29kZWQgYXVkaW8g
YnVmZmVyIGZvciBwbGF5YmFjay4KLSAgU0xyZXN1bHQgZXJyID0gKCpzaW1wbGVfYnVmZmVyX3F1
ZXVlXykKLSAgICAgICAgICAgICAgICAgICAgIC0+RW5xdWV1ZShzaW1wbGVfYnVmZmVyX3F1ZXVl
XywgYXVkaW9fcHRyOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXJh
bWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgaWYgKFNMX1JFU1VMVF9TVUNDRVNTICE9
IGVycikgewotICAgIEFMT0dFKCJFbnF1ZXVlIGZhaWxlZDogJWQiLCBlcnIpOwotICB9Ci0gIGJ1
ZmZlcl9pbmRleF8gPSAoYnVmZmVyX2luZGV4XyArIDEpICUga051bU9mT3BlblNMRVNCdWZmZXJz
OwotfQotCi1TTHVpbnQzMiBPcGVuU0xFU1BsYXllcjo6R2V0UGxheVN0YXRlKCkgY29uc3Qgewot
ICBSVENfRENIRUNLKHBsYXllcl8pOwotICBTTHVpbnQzMiBzdGF0ZTsKLSAgU0xyZXN1bHQgZXJy
ID0gKCpwbGF5ZXJfKS0+R2V0UGxheVN0YXRlKHBsYXllcl8sICZzdGF0ZSk7Ci0gIGlmIChTTF9S
RVNVTFRfU1VDQ0VTUyAhPSBlcnIpIHsKLSAgICBBTE9HRSgiR2V0UGxheVN0YXRlIGZhaWxlZDog
JWQiLCBlcnIpOwotICB9Ci0gIHJldHVybiBzdGF0ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpu
aQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rldmlj
ZS9vcGVuc2xlc19wbGF5ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX3BsYXllci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmE0OWY5ODZmOGVmNDMyMzljNDBmYmFk
ZWViMWQyNTM0NjJjZmRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX3BsYXllci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19B
TkRST0lEX1NSQ19KTklfQVVESU9fREVWSUNFX09QRU5TTEVTX1BMQVlFUl9IXwotI2RlZmluZSBT
REtfQU5EUk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9PUEVOU0xFU19QTEFZRVJfSF8KLQotI2lu
Y2x1ZGUgPFNMRVMvT3BlblNMRVMuaD4KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJvaWQu
aD4KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJvaWRDb25maWd1cmF0aW9uLmg+Ci0KLSNp
bmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSAiYWJzbC90eXBlcy9vcHRpb25hbC5oIgotI2luY2x1
ZGUgImFwaS9zY29wZWRfcmVmcHRyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2Uv
YXVkaW9fZGV2aWNlX2J1ZmZlci5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2Zp
bmVfYXVkaW9fYnVmZmVyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVk
ZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RocmVhZF9jaGVj
a2VyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVkaW9f
Y29tbW9uLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2UvYXVk
aW9fZGV2aWNlX21vZHVsZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9f
ZGV2aWNlL29wZW5zbGVzX2NvbW1vbi5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotY2xhc3Mg
RmluZUF1ZGlvQnVmZmVyOwotCi1uYW1lc3BhY2Ugam5pIHsKLQotLy8gSW1wbGVtZW50cyAxNi1i
aXQgbW9ubyBQQ00gYXVkaW8gb3V0cHV0IHN1cHBvcnQgZm9yIEFuZHJvaWQgdXNpbmcgdGhlCi0v
LyBDIGJhc2VkIE9wZW5TTCBFUyBBUEkuIE5vIGNhbGxzIGZyb20gQy9DKysgdG8gSmF2YSB1c2lu
ZyBKTkkgaXMgZG9uZS4KLS8vCi0vLyBBbiBpbnN0YW5jZSBjYW4gYmUgY3JlYXRlZCBvbiBhbnkg
dGhyZWFkLCBidXQgbXVzdCB0aGVuIGJlIHVzZWQgb24gb25lIGFuZAotLy8gdGhlIHNhbWUgdGhy
ZWFkLiBBbGwgcHVibGljIG1ldGhvZHMgbXVzdCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0
aHJlYWQuIEEKLS8vIHRocmVhZCBjaGVja2VyIHdpbGwgUlRDX0RDSEVDSyBpZiBhbnkgbWV0aG9k
IGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRocmVhZC4KLS8vIERlY29kZWQgYXVkaW8gYnVmZmVy
cyBhcmUgcmVxdWVzdGVkIG9uIGEgZGVkaWNhdGVkIGludGVybmFsIHRocmVhZCBtYW5hZ2VkIGJ5
Ci0vLyB0aGUgT3BlblNMIEVTIGxheWVyLgotLy8KLS8vIFRoZSBleGlzdGluZyBkZXNpZ24gZm9y
Y2VzIHRoZSB1c2VyIHRvIGNhbGwgSW5pdFBsYXlvdXQoKSBhZnRlciBTdG9wbGF5b3V0KCkKLS8v
IHRvIGJlIGFibGUgdG8gY2FsbCBTdGFydFBsYXlvdXQoKSBhZ2Fpbi4gVGhpcyBpcyBpbmxpbmUg
d2l0aCBob3cgdGhlIEphdmEtCi0vLyBiYXNlZCBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4KLS8vCi0v
LyBPcGVuU0wgRVMgaXMgYSBuYXRpdmUgQyBBUEkgd2hpY2ggaGF2ZSBubyBEYWx2aWstcmVsYXRl
ZCBvdmVyaGVhZCBzdWNoIGFzCi0vLyBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGFuZCBpdCBz
dXBwb3J0cyByZWR1Y2VkIGF1ZGlvIG91dHB1dCBsYXRlbmN5LgotLy8gSWYgdGhlIGRldmljZSBk
b2Vzbid0IGNsYWltIHRoaXMgZmVhdHVyZSBidXQgc3VwcG9ydHMgQVBJIGxldmVsIDkgKEFuZHJv
aWQKLS8vIHBsYXRmb3JtIHZlcnNpb24gMi4zKSBvciBsYXRlciwgdGhlbiB3ZSBjYW4gc3RpbGwg
dXNlIHRoZSBPcGVuU0wgRVMgQVBJcyBidXQKLS8vIHRoZSBvdXRwdXQgbGF0ZW5jeSBtYXkgYmUg
aGlnaGVyLgotY2xhc3MgT3BlblNMRVNQbGF5ZXIgOiBwdWJsaWMgQXVkaW9PdXRwdXQgewotIHB1
YmxpYzoKLSAgLy8gQmVnaW5uaW5nIHdpdGggQVBJIGxldmVsIDE3IChBbmRyb2lkIDQuMiksIGEg
YnVmZmVyIGNvdW50IG9mIDIgb3IgbW9yZSBpcwotICAvLyByZXF1aXJlZCBmb3IgbG93ZXIgbGF0
ZW5jeS4gQmVnaW5uaW5nIHdpdGggQVBJIGxldmVsIDE4IChBbmRyb2lkIDQuMyksIGEKLSAgLy8g
YnVmZmVyIGNvdW50IG9mIDEgaXMgc3VmZmljaWVudCBmb3IgbG93ZXIgbGF0ZW5jeS4gSW4gYWRk
aXRpb24sIHRoZSBidWZmZXIKLSAgLy8gc2l6ZSBhbmQgc2FtcGxlIHJhdGUgbXVzdCBiZSBjb21w
YXRpYmxlIHdpdGggdGhlIGRldmljZSdzIG5hdGl2ZSBvdXRwdXQKLSAgLy8gY29uZmlndXJhdGlv
biBwcm92aWRlZCB2aWEgdGhlIGF1ZGlvIG1hbmFnZXIgYXQgY29uc3RydWN0aW9uLgotICAvLyBU
T0RPKGhlbnJpa2EpOiBwZXJoYXBzIHNldCB0aGlzIHZhbHVlIGR5bmFtaWNhbGx5IGJhc2VkIG9u
IE9TIHZlcnNpb24uCi0gIHN0YXRpYyBjb25zdCBpbnQga051bU9mT3BlblNMRVNCdWZmZXJzID0g
MjsKLQotICBPcGVuU0xFU1BsYXllcihjb25zdCBBdWRpb1BhcmFtZXRlcnMmIGF1ZGlvX3BhcmFt
ZXRlcnMsCi0gICAgICAgICAgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxPcGVuU0xFbmdpbmVN
YW5hZ2VyPiBlbmdpbmVfbWFuYWdlcik7Ci0gIH5PcGVuU0xFU1BsYXllcigpIG92ZXJyaWRlOwot
Ci0gIGludCBJbml0KCkgb3ZlcnJpZGU7Ci0gIGludCBUZXJtaW5hdGUoKSBvdmVycmlkZTsKLQot
ICBpbnQgSW5pdFBsYXlvdXQoKSBvdmVycmlkZTsKLSAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXpl
ZCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gIGludCBTdGFydFBsYXlvdXQoKSBvdmVycmlkZTsKLSAg
aW50IFN0b3BQbGF5b3V0KCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUGxheWluZygpIGNvbnN0IG92ZXJy
aWRlOwotCi0gIGJvb2wgU3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gIGlu
dCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkgb3ZlcnJpZGU7Ci0gIGFic2w6Om9w
dGlvbmFsPHVpbnQzMl90PiBTcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIGFic2w6
Om9wdGlvbmFsPHVpbnQzMl90PiBNYXhTcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
IGFic2w6Om9wdGlvbmFsPHVpbnQzMl90PiBNaW5TcGVha2VyVm9sdW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9C
dWZmZXIpIG92ZXJyaWRlOwotCi0gIGludCBHZXRQbGF5b3V0VW5kZXJydW5Db3VudCgpIG92ZXJy
aWRlIHsgcmV0dXJuIC0xOyB9Ci0KLSBwcml2YXRlOgotICAvLyBUaGVzZSBjYWxsYmFjayBtZXRo
b2RzIGFyZSBjYWxsZWQgd2hlbiBkYXRhIGlzIHJlcXVpcmVkIGZvciBwbGF5b3V0LgotICAvLyBU
aGV5IGFyZSBib3RoIGNhbGxlZCBmcm9tIGFuIGludGVybmFsICJPcGVuU0wgRVMgdGhyZWFkIiB3
aGljaCBpcyBub3QKLSAgLy8gYXR0YWNoZWQgdG8gdGhlIERhbHZpayBWTS4KLSAgc3RhdGljIHZv
aWQgU2ltcGxlQnVmZmVyUXVldWVDYWxsYmFjayhTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZUl0
ZiBjYWxsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog
Y29udGV4dCk7Ci0gIHZvaWQgRmlsbEJ1ZmZlclF1ZXVlKCk7Ci0gIC8vIFJlYWRzIGF1ZGlvIGRh
dGEgaW4gUENNIGZvcm1hdCB1c2luZyB0aGUgQXVkaW9EZXZpY2VCdWZmZXIuCi0gIC8vIENhbiBi
ZSBjYWxsZWQgYm90aCBvbiB0aGUgbWFpbiB0aHJlYWQgKGR1cmluZyBTdGFydCgpKSBhbmQgZnJv
bSB0aGUKLSAgLy8gaW50ZXJuYWwgYXVkaW8gdGhyZWFkIHdoaWxlIG91dHB1dCBzdHJlYW1pbmcg
aXMgYWN0aXZlLgotICAvLyBJZiB0aGUgfHNpbGVuY2V8IGZsYWcgaXMgc2V0LCB0aGUgYXVkaW8g
aXMgZmlsbGVkIHdpdGggemVyb3MgaW5zdGVhZCBvZgotICAvLyBhc2tpbmcgdGhlIFdlYlJUQyBs
YXllciBmb3IgcmVhbCBhdWRpbyBkYXRhLiBUaGlzIHByb2NlZHVyZSBpcyBhbHNvIGtub3duCi0g
IC8vIGFzIGF1ZGlvIHByaW1pbmcuCi0gIHZvaWQgRW5xdWV1ZVBsYXlvdXREYXRhKGJvb2wgc2ls
ZW5jZSk7Ci0KLSAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciBhdWRpbyBidWZmZXJzIHdoaWNoIHdp
bGwgYmUgdXNlZCB0byByZW5kZXIgYXVkaW8KLSAgLy8gdmlhIHRoZSBTTEFuZHJvaWRTaW1wbGVC
dWZmZXJRdWV1ZUl0ZiBpbnRlcmZhY2UuCi0gIHZvaWQgQWxsb2NhdGVEYXRhQnVmZmVycygpOwot
Ci0gIC8vIE9idGFpbmVzIHRoZSBTTCBFbmdpbmUgSW50ZXJmYWNlIGZyb20gdGhlIGV4aXN0aW5n
IGdsb2JhbCBFbmdpbmUgb2JqZWN0LgotICAvLyBUaGUgaW50ZXJmYWNlIGV4cG9zZXMgY3JlYXRp
b24gbWV0aG9kcyBvZiBhbGwgdGhlIE9wZW5TTCBFUyBvYmplY3QgdHlwZXMuCi0gIC8vIFRoaXMg
bWV0aG9kIGRlZmluZXMgdGhlIHxlbmdpbmVffCBtZW1iZXIgdmFyaWFibGUuCi0gIGJvb2wgT2J0
YWluRW5naW5lSW50ZXJmYWNlKCk7Ci0KLSAgLy8gQ3JlYXRlcy9kZXN0cm95cyB0aGUgb3V0cHV0
IG1peCBvYmplY3QuCi0gIGJvb2wgQ3JlYXRlTWl4KCk7Ci0gIHZvaWQgRGVzdHJveU1peCgpOwot
Ci0gIC8vIENyZWF0ZXMvZGVzdHJveXMgdGhlIGF1ZGlvIHBsYXllciBhbmQgdGhlIHNpbXBsZS1i
dWZmZXIgb2JqZWN0LgotICAvLyBBbHNvIGNyZWF0ZXMgdGhlIHZvbHVtZSBvYmplY3QuCi0gIGJv
b2wgQ3JlYXRlQXVkaW9QbGF5ZXIoKTsKLSAgdm9pZCBEZXN0cm95QXVkaW9QbGF5ZXIoKTsKLQot
ICBTTHVpbnQzMiBHZXRQbGF5U3RhdGUoKSBjb25zdDsKLQotICAvLyBFbnN1cmVzIHRoYXQgbWV0
aG9kcyBhcmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgdGhyZWFkIGFzIHRoaXMgb2JqZWN0IGlzCi0g
IC8vIGNyZWF0ZWQgb24uCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87Ci0K
LSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiBmaXJzdCBjYWxsIHRvIFNpbXBsZUJ1ZmZlclF1ZXVl
Q2FsbGJhY2soKSBmcm9tIGludGVybmFsCi0gIC8vIG5vbi1hcHBsaWNhdGlvbiB0aHJlYWQgd2hp
Y2ggaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBEYWx2aWsgSlZNLgotICAvLyBEZXRhY2hlZCBkdXJp
bmcgY29uc3RydWN0aW9uIG9mIHRoaXMgb2JqZWN0LgotICBydGM6OlRocmVhZENoZWNrZXIgdGhy
ZWFkX2NoZWNrZXJfb3BlbnNsZXNfOwotCi0gIGNvbnN0IEF1ZGlvUGFyYW1ldGVycyBhdWRpb19w
YXJhbWV0ZXJzXzsKLQotICAvLyBSYXcgcG9pbnRlciBoYW5kbGUgcHJvdmlkZWQgdG8gdXMgaW4g
QXR0YWNoQXVkaW9CdWZmZXIoKS4gT3duZWQgYnkgdGhlCi0gIC8vIEF1ZGlvRGV2aWNlTW9kdWxl
SW1wbCBjbGFzcyBhbmQgY2FsbGVkIGJ5IEF1ZGlvRGV2aWNlTW9kdWxlOjpDcmVhdGUoKS4KLSAg
QXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2RldmljZV9idWZmZXJfOwotCi0gIGJvb2wgaW5pdGlh
bGl6ZWRfOwotICBib29sIHBsYXlpbmdfOwotCi0gIC8vIFBDTS10eXBlIGZvcm1hdCBkZWZpbml0
aW9uLgotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCBmb3IgU0xBbmRyb2lkRGF0YUZv
cm1hdF9QQ01fRVggKGFuZHJvaWQtMjEpIGlmCi0gIC8vIDMyLWJpdCBmbG9hdCByZXByZXNlbnRh
dGlvbiBpcyBuZWVkZWQuCi0gIFNMRGF0YUZvcm1hdF9QQ00gcGNtX2Zvcm1hdF87Ci0KLSAgLy8g
UXVldWUgb2YgYXVkaW8gYnVmZmVycyB0byBiZSB1c2VkIGJ5IHRoZSBwbGF5ZXIgb2JqZWN0IGZv
ciByZW5kZXJpbmcKLSAgLy8gYXVkaW8uCi0gIHN0ZDo6dW5pcXVlX3B0cjxTTGludDE2W10+IGF1
ZGlvX2J1ZmZlcnNfW2tOdW1PZk9wZW5TTEVTQnVmZmVyc107Ci0KLSAgLy8gRmluZUF1ZGlvQnVm
ZmVyIHRha2VzIGFuIEF1ZGlvRGV2aWNlQnVmZmVyIHdoaWNoIGRlbGl2ZXJzIGF1ZGlvIGRhdGEK
LSAgLy8gaW4gY2h1bmtzIG9mIDEwbXMuIEl0IHRoZW4gYWxsb3dzIGZvciB0aGlzIGRhdGEgdG8g
YmUgcHVsbGVkIGluCi0gIC8vIGEgZmluZXIgb3IgY29hcnNlciBncmFudWxhcml0eS4gSS5lLiBp
bnRlcmFjdGluZyB3aXRoIHRoaXMgY2xhc3MgaW5zdGVhZAotICAvLyBvZiBkaXJlY3RseSB3aXRo
IHRoZSBBdWRpb0RldmljZUJ1ZmZlciBvbmUgY2FuIGFzayBmb3IgYW55IG51bWJlciBvZgotICAv
LyBhdWRpbyBkYXRhIHNhbXBsZXMuCi0gIC8vIEV4YW1wbGU6IG5hdGl2ZSBidWZmZXIgc2l6ZSBj
YW4gYmUgMTkyIGF1ZGlvIGZyYW1lcyBhdCA0OGtIeiBzYW1wbGUgcmF0ZS4KLSAgLy8gV2ViUlRD
IHdpbGwgcHJvdmlkZSA0ODAgYXVkaW8gZnJhbWVzIHBlciAxMG1zIGJ1dCBPcGVuU0wgRVMgYXNr
cyBmb3IgMTkyCi0gIC8vIGluIGVhY2ggY2FsbGJhY2sgKG9uZSBldmVyeSA0dGggbXMpLiBUaGlz
IGNsYXNzIGNhbiB0aGVuIGFzayBmb3IgMTkyIGFuZAotICAvLyB0aGUgRmluZUF1ZGlvQnVmZmVy
IHdpbGwgYXNrIFdlYlJUQyBmb3IgbmV3IGRhdGEgYXBwcm94aW1hdGVseSBvbmx5IGV2ZXJ5Ci0g
IC8vIHNlY29uZCBjYWxsYmFjayBhbmQgYWxzbyBjYWNoZSBub24tdXRpbGl6ZWQgYXVkaW8uCi0g
IHN0ZDo6dW5pcXVlX3B0cjxGaW5lQXVkaW9CdWZmZXI+IGZpbmVfYXVkaW9fYnVmZmVyXzsKLQot
ICAvLyBLZWVwcyB0cmFjayBvZiBhY3RpdmUgYXVkaW8gYnVmZmVyICduJyBpbiB0aGUgYXVkaW9f
YnVmZmVyc19bbl0gcXVldWUuCi0gIC8vIEV4YW1wbGUgKGtOdW1PZk9wZW5TTEVTQnVmZmVycyA9
IDIpOiBjb3VudHMgMCwgMSwgMCwgMSwgLi4uCi0gIGludCBidWZmZXJfaW5kZXhfOwotCi0gIGNv
bnN0IHJ0Yzo6c2NvcGVkX3JlZnB0cjxPcGVuU0xFbmdpbmVNYW5hZ2VyPiBlbmdpbmVfbWFuYWdl
cl87Ci0gIC8vIFRoaXMgaW50ZXJmYWNlIGV4cG9zZXMgY3JlYXRpb24gbWV0aG9kcyBmb3IgYWxs
IHRoZSBPcGVuU0wgRVMgb2JqZWN0IHR5cGVzLgotICAvLyBJdCBpcyB0aGUgT3BlblNMIEVTIEFQ
SSBlbnRyeSBwb2ludC4KLSAgU0xFbmdpbmVJdGYgZW5naW5lXzsKLQotICAvLyBPdXRwdXQgbWl4
IG9iamVjdCB0byBiZSB1c2VkIGJ5IHRoZSBwbGF5ZXIgb2JqZWN0LgotICBTY29wZWRTTE9iamVj
dEl0ZiBvdXRwdXRfbWl4XzsKLQotICAvLyBUaGUgYXVkaW8gcGxheWVyIG1lZGlhIG9iamVjdCBw
bGF5cyBvdXQgYXVkaW8gdG8gdGhlIHNwZWFrZXJzLiBJdCBhbHNvCi0gIC8vIHN1cHBvcnRzIHZv
bHVtZSBjb250cm9sLgotICBTY29wZWRTTE9iamVjdEl0ZiBwbGF5ZXJfb2JqZWN0XzsKLQotICAv
LyBUaGlzIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQgb24gdGhlIGF1ZGlvIHBsYXllciBhbmQgaXQg
Y29udHJvbHMgdGhlIHN0YXRlCi0gIC8vIG9mIHRoZSBhdWRpbyBwbGF5ZXIuCi0gIFNMUGxheUl0
ZiBwbGF5ZXJfOwotCi0gIC8vIFRoZSBBbmRyb2lkIFNpbXBsZSBCdWZmZXIgUXVldWUgaW50ZXJm
YWNlIGlzIHN1cHBvcnRlZCBvbiB0aGUgYXVkaW8gcGxheWVyCi0gIC8vIGFuZCBpdCBwcm92aWRl
cyBtZXRob2RzIHRvIHNlbmQgYXVkaW8gZGF0YSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGF1ZGlv
Ci0gIC8vIHBsYXllciBmb3IgcmVuZGVyaW5nLgotICBTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1
ZUl0ZiBzaW1wbGVfYnVmZmVyX3F1ZXVlXzsKLQotICAvLyBUaGlzIGludGVyZmFjZSBleHBvc2Vz
IGNvbnRyb2xzIGZvciBtYW5pcHVsYXRpbmcgdGhlIG9iamVjdOKAmXMgYXVkaW8gdm9sdW1lCi0g
IC8vIHByb3BlcnRpZXMuIFRoaXMgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCBvbiB0aGUgQXVkaW8g
UGxheWVyIG9iamVjdC4KLSAgU0xWb2x1bWVJdGYgdm9sdW1lXzsKLQotICAvLyBMYXN0IHRpbWUg
dGhlIE9wZW5TTCBFUyBsYXllciBhc2tlZCBmb3IgYXVkaW8gZGF0YSB0byBwbGF5IG91dC4KLSAg
dWludDMyX3QgbGFzdF9wbGF5X3RpbWVfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotCi19
ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9B
VURJT19ERVZJQ0VfT1BFTlNMRVNfUExBWUVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2F1ZGlvX2Rl
dmljZS9vcGVuc2xlc19yZWNvcmRlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX3Jl
Y29yZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmViMmRlOWIwMGQ5NmQ5
Nzc4NTMxNmFkODg5YjQ2OTM2NDgwOTg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX3JlY29yZGVyLmNjCisr
KyAvZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfcmVjb3Jk
ZXIuaCIKLQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aW5jbHVkZSAiYXBpL2FycmF5X3ZpZXcuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9maW5lX2F1ZGlvX2J1ZmZlci5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2FycmF5c2l6ZS5oIgot
I2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2Zvcm1hdF9t
YWNyb3MuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9wbGF0Zm9ybV90aHJlYWQuaCIKLSNpbmNsdWRl
ICJydGNfYmFzZS90aW1lX3V0aWxzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9h
dWRpb19kZXZpY2UvYXVkaW9fY29tbW9uLmgiCi0KLSNkZWZpbmUgVEFHICJPcGVuU0xFU1JlY29y
ZGVyIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0df
VkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR0QoLi4uKSBfX2FuZHJvaWRf
bG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBB
TE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsIFRBRywgX19W
QV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lE
X0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HSSguLi4pIF9fYW5kcm9p
ZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBfX1ZBX0FSR1NfXykKLQotI2RlZmlu
ZSBMT0dfT05fRVJST1Iob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBbXShTTHJlc3VsdCBlcnIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGlmIChlcnIgIT0gU0xfUkVTVUxUX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgQUxPR0UoIiVzOiVkICVzIGZhaWxlZDogJXMiLCBfX0ZJTEVfXywg
X19MSU5FX18sICNvcCwgXAotICAgICAgICAgICAgR2V0U0xFcnJvclN0cmluZyhlcnIpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBmYWxzZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9KG9wKQotCi1uYW1l
c3BhY2Ugd2VicnRjIHsKLQotbmFtZXNwYWNlIGpuaSB7Ci0KLU9wZW5TTEVTUmVjb3JkZXI6Ok9w
ZW5TTEVTUmVjb3JkZXIoCi0gICAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBhdWRpb19wYXJhbWV0
ZXJzLAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxPcGVuU0xFbmdpbmVNYW5hZ2VyPiBlbmdpbmVf
bWFuYWdlcikKLSAgICA6IGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX3BhcmFtZXRlcnMpLAotICAg
ICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8obnVsbHB0ciksCi0gICAgICBpbml0aWFsaXplZF8oZmFs
c2UpLAotICAgICAgcmVjb3JkaW5nXyhmYWxzZSksCi0gICAgICBlbmdpbmVfbWFuYWdlcl8oc3Rk
Ojptb3ZlKGVuZ2luZV9tYW5hZ2VyKSksCi0gICAgICBlbmdpbmVfKG51bGxwdHIpLAotICAgICAg
cmVjb3JkZXJfKG51bGxwdHIpLAotICAgICAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8obnVsbHB0ciks
Ci0gICAgICBidWZmZXJfaW5kZXhfKDApLAotICAgICAgbGFzdF9yZWNfdGltZV8oMCkgewotICBB
TE9HRCgiY3Rvclt0aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIC8vIERldGFj
aCBmcm9tIHRoaXMgdGhyZWFkIHNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoZSBjaGVja2VyIHRvIHZl
cmlmeSBjYWxscwotICAvLyBmcm9tIHRoZSBpbnRlcm5hbCAgYXVkaW8gdGhyZWFkLgotICB0aHJl
YWRfY2hlY2tlcl9vcGVuc2xlc18uRGV0YWNoKCk7Ci0gIC8vIFVzZSBuYXRpdmUgYXVkaW8gb3V0
cHV0IHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIGF1ZGlvIG1hbmFnZXIgYW5kCi0gIC8vIGRl
ZmluZSB0aGUgUENNIGZvcm1hdCBzdHJ1Y3R1cmUuCi0gIHBjbV9mb3JtYXRfID0gQ3JlYXRlUENN
Q29uZmlndXJhdGlvbihhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhcmFtZXRl
cnNfLmJpdHNfcGVyX3NhbXBsZSgpKTsKLX0KLQotT3BlblNMRVNSZWNvcmRlcjo6fk9wZW5TTEVT
UmVjb3JkZXIoKSB7Ci0gIEFMT0dEKCJkdG9yW3RpZD0lZF0iLCBydGM6OkN1cnJlbnRUaHJlYWRJ
ZCgpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBUZXJt
aW5hdGUoKTsKLSAgRGVzdHJveUF1ZGlvUmVjb3JkZXIoKTsKLSAgZW5naW5lXyA9IG51bGxwdHI7
Ci0gIFJUQ19EQ0hFQ0soIWVuZ2luZV8pOwotICBSVENfRENIRUNLKCFyZWNvcmRlcl8pOwotICBS
VENfRENIRUNLKCFzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29y
ZGVyOjpJbml0KCkgewotICBBTE9HRCgiSW5pdFt0aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFk
SWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgaWYg
KGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCkgPT0gMikgewotICAgIEFMT0dEKCJTdGVyZW8g
bW9kZSBpcyBlbmFibGVkIik7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1Jl
Y29yZGVyOjpUZXJtaW5hdGUoKSB7Ci0gIEFMT0dEKCJUZXJtaW5hdGVbdGlkPSVkXSIsIHJ0Yzo6
Q3VycmVudFRocmVhZElkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJl
bnQoKSk7Ci0gIFN0b3BSZWNvcmRpbmcoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xF
U1JlY29yZGVyOjpJbml0UmVjb3JkaW5nKCkgewotICBBTE9HRCgiSW5pdFJlY29yZGluZ1t0aWQ9
JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RD
SEVDSyghcmVjb3JkaW5nXyk7Ci0gIGlmICghT2J0YWluRW5naW5lSW50ZXJmYWNlKCkpIHsKLSAg
ICBBTE9HRSgiRmFpbGVkIHRvIG9idGFpbiBTTCBFbmdpbmUgaW50ZXJmYWNlIik7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0gIENyZWF0ZUF1ZGlvUmVjb3JkZXIoKTsKLSAgaW5pdGlhbGl6ZWRfID0g
dHJ1ZTsKLSAgYnVmZmVyX2luZGV4XyA9IDA7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIE9wZW5T
TEVTUmVjb3JkZXI6OlJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0gIHJldHVybiBp
bml0aWFsaXplZF87Ci19Ci0KLWludCBPcGVuU0xFU1JlY29yZGVyOjpTdGFydFJlY29yZGluZygp
IHsKLSAgQUxPR0QoIlN0YXJ0UmVjb3JkaW5nW3RpZD0lZF0iLCBydGM6OkN1cnJlbnRUaHJlYWRJ
ZCgpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENf
RENIRUNLKGluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGluZ18pOwotICBpZiAo
ZmluZV9hdWRpb19idWZmZXJfKSB7Ci0gICAgZmluZV9hdWRpb19idWZmZXJfLT5SZXNldFJlY29y
ZCgpOwotICB9Ci0gIC8vIEFkZCBidWZmZXJzIHRvIHRoZSBxdWV1ZSBiZWZvcmUgY2hhbmdpbmcg
c3RhdGUgdG8gU0xfUkVDT1JEU1RBVEVfUkVDT1JESU5HCi0gIC8vIHRvIGVuc3VyZSB0aGF0IHJl
Y29yZGluZyBzdGFydHMgYXMgc29vbiBhcyB0aGUgc3RhdGUgaXMgbW9kaWZpZWQuIE9uIHNvbWUK
LSAgLy8gZGV2aWNlcywgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWU6OkNsZWFyKCkgdXNlZCBp
biBTdG9wKCkgZG9lcyBub3QgZmx1c2gKLSAgLy8gdGhlIGJ1ZmZlcnMgYXMgaW50ZW5kZWQgYW5k
IHdlIHRoZXJlZm9yZSBjaGVjayB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMKLSAgLy8gYWxyZWFkeSBx
dWV1ZWQgZmlyc3QuIEVucXVldWUoKSBjYW4gcmV0dXJuIFNMX1JFU1VMVF9CVUZGRVJfSU5TVUZG
SUNJRU5UCi0gIC8vIG90aGVyd2lzZS4KLSAgaW50IG51bV9idWZmZXJzX2luX3F1ZXVlID0gR2V0
QnVmZmVyQ291bnQoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtT2ZPcGVuU0xFU0J1ZmZl
cnMgLSBudW1fYnVmZmVyc19pbl9xdWV1ZTsgKytpKSB7Ci0gICAgaWYgKCFFbnF1ZXVlQXVkaW9C
dWZmZXIoKSkgewotICAgICAgcmVjb3JkaW5nXyA9IGZhbHNlOwotICAgICAgcmV0dXJuIC0xOwot
ICAgIH0KLSAgfQotICBudW1fYnVmZmVyc19pbl9xdWV1ZSA9IEdldEJ1ZmZlckNvdW50KCk7Ci0g
IFJUQ19EQ0hFQ0tfRVEobnVtX2J1ZmZlcnNfaW5fcXVldWUsIGtOdW1PZk9wZW5TTEVTQnVmZmVy
cyk7Ci0gIExvZ0J1ZmZlclN0YXRlKCk7Ci0gIC8vIFN0YXJ0IGF1ZGlvIHJlY29yZGluZyBieSBj
aGFuZ2luZyB0aGUgc3RhdGUgdG8gU0xfUkVDT1JEU1RBVEVfUkVDT1JESU5HLgotICAvLyBHaXZl
biB0aGF0IGJ1ZmZlcnMgYXJlIGFscmVhZHkgZW5xdWV1ZWQsIHJlY29yZGluZyBzaG91bGQgc3Rh
cnQgYXQgb25jZS4KLSAgLy8gVGhlIG1hY3JvIHJldHVybnMgLTEgaWYgcmVjb3JkaW5nIGZhaWxz
IHRvIHN0YXJ0LgotICBsYXN0X3JlY190aW1lXyA9IHJ0Yzo6VGltZSgpOwotICBpZiAoTE9HX09O
X0VSUk9SKAotICAgICAgICAgICgqcmVjb3JkZXJfKS0+U2V0UmVjb3JkU3RhdGUocmVjb3JkZXJf
LCBTTF9SRUNPUkRTVEFURV9SRUNPUkRJTkcpKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBy
ZWNvcmRpbmdfID0gKEdldFJlY29yZFN0YXRlKCkgPT0gU0xfUkVDT1JEU1RBVEVfUkVDT1JESU5H
KTsKLSAgUlRDX0RDSEVDSyhyZWNvcmRpbmdfKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVu
U0xFU1JlY29yZGVyOjpTdG9wUmVjb3JkaW5nKCkgewotICBBTE9HRCgiU3RvcFJlY29yZGluZ1t0
aWQ9JWRdIiwgcnRjOjpDdXJyZW50VGhyZWFkSWQoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgaWYgKCFpbml0aWFsaXplZF8gfHwgIXJlY29yZGluZ18p
IHsKLSAgICByZXR1cm4gMDsKLSAgfQotICAvLyBTdG9wIHJlY29yZGluZyBieSBzZXR0aW5nIHRo
ZSByZWNvcmQgc3RhdGUgdG8gU0xfUkVDT1JEU1RBVEVfU1RPUFBFRC4KLSAgaWYgKExPR19PTl9F
UlJPUigKLSAgICAgICAgICAoKnJlY29yZGVyXyktPlNldFJlY29yZFN0YXRlKHJlY29yZGVyXywg
U0xfUkVDT1JEU1RBVEVfU1RPUFBFRCkpKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIC8vIENs
ZWFyIHRoZSBidWZmZXIgcXVldWUgdG8gZ2V0IHJpZCBvZiBvbGQgZGF0YSB3aGVuIHJlc3VtaW5n
IHJlY29yZGluZy4KLSAgaWYgKExPR19PTl9FUlJPUigoKnNpbXBsZV9idWZmZXJfcXVldWVfKS0+
Q2xlYXIoc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICB0
aHJlYWRfY2hlY2tlcl9vcGVuc2xlc18uRGV0YWNoKCk7Ci0gIGluaXRpYWxpemVkXyA9IGZhbHNl
OwotICByZWNvcmRpbmdfID0gZmFsc2U7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIE9wZW5TTEVT
UmVjb3JkZXI6OlJlY29yZGluZygpIGNvbnN0IHsKLSAgcmV0dXJuIHJlY29yZGluZ187Ci19Ci0K
LXZvaWQgT3BlblNMRVNSZWNvcmRlcjo6QXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZm
ZXIqIGF1ZGlvX2J1ZmZlcikgewotICBBTE9HRCgiQXR0YWNoQXVkaW9CdWZmZXIiKTsKLSAgUlRD
X0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uSXNDdXJyZW50KCkpOwotICBSVENfQ0hFQ0soYXVkaW9f
YnVmZmVyKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb19idWZmZXI7Ci0gIC8vIEVu
c3VyZSB0aGF0IHRoZSBhdWRpbyBkZXZpY2UgYnVmZmVyIGlzIGluZm9ybWVkIGFib3V0IHRoZSBu
YXRpdmUgc2FtcGxlCi0gIC8vIHJhdGUgdXNlZCBvbiB0aGUgcmVjb3JkaW5nIHNpZGUuCi0gIGNv
bnN0IGludCBzYW1wbGVfcmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCk7
Ci0gIEFMT0dEKCJTZXRSZWNvcmRpbmdTYW1wbGVSYXRlKCVkKSIsIHNhbXBsZV9yYXRlX2h6KTsK
LSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJlY29yZGluZ1NhbXBsZVJhdGUoc2FtcGxlX3Jh
dGVfaHopOwotICAvLyBFbnN1cmUgdGhhdCB0aGUgYXVkaW8gZGV2aWNlIGJ1ZmZlciBpcyBpbmZv
cm1lZCBhYm91dCB0aGUgbnVtYmVyIG9mCi0gIC8vIGNoYW5uZWxzIHByZWZlcnJlZCBieSB0aGUg
T1Mgb24gdGhlIHJlY29yZGluZyBzaWRlLgotICBjb25zdCBzaXplX3QgY2hhbm5lbHMgPSBhdWRp
b19wYXJhbWV0ZXJzXy5jaGFubmVscygpOwotICBBTE9HRCgiU2V0UmVjb3JkaW5nQ2hhbm5lbHMo
JSIgUlRDX1BSSXVTICIpIiwgY2hhbm5lbHMpOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0
UmVjb3JkaW5nQ2hhbm5lbHMoY2hhbm5lbHMpOwotICAvLyBBbGxvY2F0ZWQgbWVtb3J5IGZvciBp
bnRlcm5hbCBkYXRhIGJ1ZmZlcnMgZ2l2ZW4gZXhpc3RpbmcgYXVkaW8gcGFyYW1ldGVycy4KLSAg
QWxsb2NhdGVEYXRhQnVmZmVycygpOwotfQotCi1ib29sIE9wZW5TTEVTUmVjb3JkZXI6OklzQWNv
dXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBPcGVuU0xFU1JlY29yZGVyOjpJc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIGNv
bnN0IHsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6RW5hYmxl
QnVpbHRJbkFFQyhib29sIGVuYWJsZSkgewotICBBTE9HRCgiRW5hYmxlQnVpbHRJbkFFQyglZCki
LCBlbmFibGUpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0g
IEFMT0dFKCJOb3QgaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xF
U1JlY29yZGVyOjpFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIHsKLSAgQUxPR0QoIkVuYWJs
ZUJ1aWx0SW5OUyglZCkiLCBlbmFibGUpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5J
c0N1cnJlbnQoKSk7Ci0gIEFMT0dFKCJOb3QgaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJuIDA7Ci19
Ci0KLWJvb2wgT3BlblNMRVNSZWNvcmRlcjo6T2J0YWluRW5naW5lSW50ZXJmYWNlKCkgewotICBB
TE9HRCgiT2J0YWluRW5naW5lSW50ZXJmYWNlIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLklzQ3VycmVudCgpKTsKLSAgaWYgKGVuZ2luZV8pCi0gICAgcmV0dXJuIHRydWU7Ci0gIC8v
IEdldCBhY2Nlc3MgdG8gKG9yIGNyZWF0ZSBpZiBub3QgYWxyZWFkeSBleGlzdGluZykgdGhlIGds
b2JhbCBPcGVuU0wgRW5naW5lCi0gIC8vIG9iamVjdC4KLSAgU0xPYmplY3RJdGYgZW5naW5lX29i
amVjdCA9IGVuZ2luZV9tYW5hZ2VyXy0+R2V0T3BlblNMRW5naW5lKCk7Ci0gIGlmIChlbmdpbmVf
b2JqZWN0ID09IG51bGxwdHIpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGFjY2VzcyB0aGUgZ2xv
YmFsIE9wZW5TTCBlbmdpbmUiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gR2V0IHRo
ZSBTTCBFbmdpbmUgSW50ZXJmYWNlIHdoaWNoIGlzIGltcGxpY2l0LgotICBpZiAoTE9HX09OX0VS
Uk9SKAotICAgICAgICAgICgqZW5naW5lX29iamVjdCkKLSAgICAgICAgICAgICAgLT5HZXRJbnRl
cmZhY2UoZW5naW5lX29iamVjdCwgU0xfSUlEX0VOR0lORSwgJmVuZ2luZV8pKSkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcGVuU0xFU1JlY29y
ZGVyOjpDcmVhdGVBdWRpb1JlY29yZGVyKCkgewotICBBTE9HRCgiQ3JlYXRlQXVkaW9SZWNvcmRl
ciIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5Jc0N1cnJlbnQoKSk7Ci0gIGlmIChy
ZWNvcmRlcl9vYmplY3RfLkdldCgpKQotICAgIHJldHVybiB0cnVlOwotICBSVENfRENIRUNLKCFy
ZWNvcmRlcl8pOwotICBSVENfRENIRUNLKCFzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci0KLSAgLy8g
QXVkaW8gc291cmNlIGNvbmZpZ3VyYXRpb24uCi0gIFNMRGF0YUxvY2F0b3JfSU9EZXZpY2UgbWlj
X2xvY2F0b3IgPSB7U0xfREFUQUxPQ0FUT1JfSU9ERVZJQ0UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0xfSU9ERVZJQ0VfQVVESU9JTlBVVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9ERUZBVUxUREVWSUNFSURfQVVESU9JTlBV
VCwgTlVMTH07Ci0gIFNMRGF0YVNvdXJjZSBhdWRpb19zb3VyY2UgPSB7Jm1pY19sb2NhdG9yLCBO
VUxMfTsKLQotICAvLyBBdWRpbyBzaW5rIGNvbmZpZ3VyYXRpb24uCi0gIFNMRGF0YUxvY2F0b3Jf
QW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlIGJ1ZmZlcl9xdWV1ZSA9IHsKLSAgICAgIFNMX0RBVEFM
T0NBVE9SX0FORFJPSURTSU1QTEVCVUZGRVJRVUVVRSwKLSAgICAgIHN0YXRpY19jYXN0PFNMdWlu
dDMyPihrTnVtT2ZPcGVuU0xFU0J1ZmZlcnMpfTsKLSAgU0xEYXRhU2luayBhdWRpb19zaW5rID0g
eyZidWZmZXJfcXVldWUsICZwY21fZm9ybWF0X307Ci0KLSAgLy8gQ3JlYXRlIHRoZSBhdWRpbyBy
ZWNvcmRlciBvYmplY3QgKHJlcXVpcmVzIHRoZSBSRUNPUkRfQVVESU8gcGVybWlzc2lvbikuCi0g
IC8vIERvIG5vdCByZWFsaXplIHRoZSByZWNvcmRlciB5ZXQuIFNldCB0aGUgY29uZmlndXJhdGlv
biBmaXJzdC4KLSAgY29uc3QgU0xJbnRlcmZhY2VJRCBpbnRlcmZhY2VfaWRbXSA9IHtTTF9JSURf
QU5EUk9JRFNJTVBMRUJVRkZFUlFVRVVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNMX0lJRF9BTkRST0lEQ09ORklHVVJBVElPTn07Ci0gIGNvbnN0IFNMYm9vbGVh
biBpbnRlcmZhY2VfcmVxdWlyZWRbXSA9IHtTTF9CT09MRUFOX1RSVUUsIFNMX0JPT0xFQU5fVFJV
RX07Ci0gIGlmIChMT0dfT05fRVJST1IoKCplbmdpbmVfKS0+Q3JlYXRlQXVkaW9SZWNvcmRlcigK
LSAgICAgICAgICBlbmdpbmVfLCByZWNvcmRlcl9vYmplY3RfLlJlY2VpdmUoKSwgJmF1ZGlvX3Nv
dXJjZSwgJmF1ZGlvX3NpbmssCi0gICAgICAgICAgYXJyYXlzaXplKGludGVyZmFjZV9pZCksIGlu
dGVyZmFjZV9pZCwgaW50ZXJmYWNlX3JlcXVpcmVkKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLQotICAvLyBDb25maWd1cmUgdGhlIGF1ZGlvIHJlY29yZGVyIChiZWZvcmUgaXQgaXMgcmVh
bGl6ZWQpLgotICBTTEFuZHJvaWRDb25maWd1cmF0aW9uSXRmIHJlY29yZGVyX2NvbmZpZzsKLSAg
aWYgKExPR19PTl9FUlJPUigocmVjb3JkZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNlKHJlY29yZGVy
X29iamVjdF8uR2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTTF9JSURfQU5EUk9JRENPTkZJR1VSQVRJT04sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjb3JkZXJfY29uZmlnKSkpKSB7
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gVXNlcyB0aGUgZGVmYXVsdCBtaWNyb3Bo
b25lIHR1bmVkIGZvciBhdWRpbyBjb21tdW5pY2F0aW9uLgotICAvLyBOb3RlIHRoYXQsIFNMX0FO
RFJPSURfUkVDT1JESU5HX1BSRVNFVF9WT0lDRV9SRUNPR05JVElPTiBsZWFkcyB0byBhIGZhc3QK
LSAgLy8gdHJhY2sgYnV0IGFsc28gZXhjbHVkZXMgdXNhZ2Ugb2YgcmVxdWlyZWQgZWZmZWN0cyBs
aWtlIEFFQywgQUdDIGFuZCBOUy4KLSAgLy8gU0xfQU5EUk9JRF9SRUNPUkRJTkdfUFJFU0VUX1ZP
SUNFX0NPTU1VTklDQVRJT04KLSAgU0xpbnQzMiBzdHJlYW1fdHlwZSA9IFNMX0FORFJPSURfUkVD
T1JESU5HX1BSRVNFVF9WT0lDRV9DT01NVU5JQ0FUSU9OOwotICBpZiAoTE9HX09OX0VSUk9SKCgo
KnJlY29yZGVyX2NvbmZpZykKLSAgICAgICAgICAgICAgICAgICAgICAgIC0+U2V0Q29uZmlndXJh
dGlvbihyZWNvcmRlcl9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU0xfQU5EUk9JRF9LRVlfUkVDT1JESU5HX1BSRVNFVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyZWFtX3R5cGUsIHNpemVvZihTTGludDMy
KSkpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFRoZSBhdWRpbyByZWNvcmRl
ciBjYW4gbm93IGJlIHJlYWxpemVkIChpbiBzeW5jaHJvbm91cyBtb2RlKS4KLSAgaWYgKExPR19P
Tl9FUlJPUigocmVjb3JkZXJfb2JqZWN0Xy0+UmVhbGl6ZShyZWNvcmRlcl9vYmplY3RfLkdldCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0JPT0xF
QU5fRkFMU0UpKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBHZXQgdGhlIGlt
cGxpY2l0IHJlY29yZGVyIGludGVyZmFjZSAoU0xfSUlEX1JFQ09SRCkuCi0gIGlmIChMT0dfT05f
RVJST1IoKHJlY29yZGVyX29iamVjdF8tPkdldEludGVyZmFjZSgKLSAgICAgICAgICByZWNvcmRl
cl9vYmplY3RfLkdldCgpLCBTTF9JSURfUkVDT1JELCAmcmVjb3JkZXJfKSkpKSB7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gR2V0IHRoZSBzaW1wbGUgYnVmZmVyIHF1ZXVlIGludGVy
ZmFjZSAoU0xfSUlEX0FORFJPSURTSU1QTEVCVUZGRVJRVUVVRSkuCi0gIC8vIEl0IHdhcyBleHBs
aWNpdGx5IHJlcXVlc3RlZC4KLSAgaWYgKExPR19PTl9FUlJPUigocmVjb3JkZXJfb2JqZWN0Xy0+
R2V0SW50ZXJmYWNlKAotICAgICAgICAgIHJlY29yZGVyX29iamVjdF8uR2V0KCksIFNMX0lJRF9B
TkRST0lEU0lNUExFQlVGRkVSUVVFVUUsCi0gICAgICAgICAgJnNpbXBsZV9idWZmZXJfcXVldWVf
KSkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gUmVnaXN0ZXIgdGhlIGlucHV0
IGNhbGxiYWNrIGZvciB0aGUgc2ltcGxlIGJ1ZmZlciBxdWV1ZS4KLSAgLy8gVGhpcyBjYWxsYmFj
ayB3aWxsIGJlIGNhbGxlZCB3aGVuIHJlY2VpdmluZyBuZXcgZGF0YSBmcm9tIHRoZSBkZXZpY2Uu
Ci0gIGlmIChMT0dfT05fRVJST1IoKCgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAtPlJlZ2lzdGVyQ2FsbGJhY2soc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlQnVmZmVyUXVl
dWVDYWxsYmFjaywgdGhpcykpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBPcGVuU0xFU1JlY29yZGVyOjpEZXN0cm95QXVkaW9SZWNvcmRlcigp
IHsKLSAgQUxPR0QoIkRlc3Ryb3lBdWRpb1JlY29yZGVyIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFk
X2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgaWYgKCFyZWNvcmRlcl9vYmplY3RfLkdldCgpKQot
ICAgIHJldHVybjsKLSAgKCpzaW1wbGVfYnVmZmVyX3F1ZXVlXykKLSAgICAgIC0+UmVnaXN0ZXJD
YWxsYmFjayhzaW1wbGVfYnVmZmVyX3F1ZXVlXywgbnVsbHB0ciwgbnVsbHB0cik7Ci0gIHJlY29y
ZGVyX29iamVjdF8uUmVzZXQoKTsKLSAgcmVjb3JkZXJfID0gbnVsbHB0cjsKLSAgc2ltcGxlX2J1
ZmZlcl9xdWV1ZV8gPSBudWxscHRyOwotfQotCi12b2lkIE9wZW5TTEVTUmVjb3JkZXI6OlNpbXBs
ZUJ1ZmZlclF1ZXVlQ2FsbGJhY2soCi0gICAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJdGYg
YnVmZmVyX3F1ZXVlLAotICAgIHZvaWQqIGNvbnRleHQpIHsKLSAgT3BlblNMRVNSZWNvcmRlciog
c3RyZWFtID0gc3RhdGljX2Nhc3Q8T3BlblNMRVNSZWNvcmRlcio+KGNvbnRleHQpOwotICBzdHJl
YW0tPlJlYWRCdWZmZXJRdWV1ZSgpOwotfQotCi12b2lkIE9wZW5TTEVTUmVjb3JkZXI6OkFsbG9j
YXRlRGF0YUJ1ZmZlcnMoKSB7Ci0gIEFMT0dEKCJBbGxvY2F0ZURhdGFCdWZmZXJzIik7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLklzQ3VycmVudCgpKTsKLSAgUlRDX0RDSEVDSyghc2lt
cGxlX2J1ZmZlcl9xdWV1ZV8pOwotICBSVENfQ0hFQ0soYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwot
ICAvLyBDcmVhdGUgYSBtb2RpZmllZCBhdWRpbyBidWZmZXIgY2xhc3Mgd2hpY2ggYWxsb3dzIHVz
IHRvIGRlbGl2ZXIgYW55IG51bWJlcgotICAvLyBvZiBzYW1wbGVzIChhbmQgbm90IG9ubHkgbXVs
dGlwbGUgb2YgMTBtcykgdG8gbWF0Y2ggdGhlIG5hdGl2ZSBhdWRpbyB1bml0Ci0gIC8vIGJ1ZmZl
ciBzaXplLgotICBBTE9HRCgiZnJhbWVzIHBlciBuYXRpdmUgYnVmZmVyOiAlIiBSVENfUFJJdVMs
Ci0gICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICBBTE9H
RCgiZnJhbWVzIHBlciAxMG1zIGJ1ZmZlcjogJSIgUlRDX1BSSXVTLAotICAgICAgICBhdWRpb19w
YXJhbWV0ZXJzXy5mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpOwotICBBTE9HRCgiYnl0ZXMgcGVy
IG5hdGl2ZSBidWZmZXI6ICUiIFJUQ19QUkl1UywKLSAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18u
R2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIEFMT0dEKCJuYXRpdmUgc2FtcGxlIHJhdGU6ICVkIiwg
YXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSk7Ci0gIFJUQ19EQ0hFQ0soYXVkaW9fZGV2
aWNlX2J1ZmZlcl8pOwotICBmaW5lX2F1ZGlvX2J1ZmZlcl8gPSBzdGQ6Om1ha2VfdW5pcXVlPEZp
bmVBdWRpb0J1ZmZlcj4oYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICAvLyBBbGxvY2F0ZSBxdWV1
ZSBvZiBhdWRpbyBidWZmZXJzIHRoYXQgc3RvcmVzIHJlY29yZGVkIGF1ZGlvIHNhbXBsZXMuCi0g
IGNvbnN0IGludCBidWZmZXJfc2l6ZV9zYW1wbGVzID0KLSAgICAgIGF1ZGlvX3BhcmFtZXRlcnNf
LmZyYW1lc19wZXJfYnVmZmVyKCkgKiBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpOwotICBh
dWRpb19idWZmZXJzXy5yZXNldChuZXcgc3RkOjp1bmlxdWVfcHRyPFNMaW50MTZbXT5ba051bU9m
T3BlblNMRVNCdWZmZXJzXSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bU9mT3BlblNMRVNC
dWZmZXJzOyArK2kpIHsKLSAgICBhdWRpb19idWZmZXJzX1tpXS5yZXNldChuZXcgU0xpbnQxNlti
dWZmZXJfc2l6ZV9zYW1wbGVzXSk7Ci0gIH0KLX0KLQotdm9pZCBPcGVuU0xFU1JlY29yZGVyOjpS
ZWFkQnVmZmVyUXVldWUoKSB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNf
LklzQ3VycmVudCgpKTsKLSAgU0x1aW50MzIgc3RhdGUgPSBHZXRSZWNvcmRTdGF0ZSgpOwotICBp
ZiAoc3RhdGUgIT0gU0xfUkVDT1JEU1RBVEVfUkVDT1JESU5HKSB7Ci0gICAgQUxPR1coIkJ1ZmZl
ciBjYWxsYmFjayBpbiBub24tcmVjb3JkaW5nIHN0YXRlISIpOwotICAgIHJldHVybjsKLSAgfQot
ICAvLyBDaGVjayBkZWx0YSB0aW1lIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzIGFu
ZCBwcm92aWRlIGEgd2FybmluZwotICAvLyBpZiBpdCBiZWNvbWVzIHZlcnkgbGFyZ2UuCi0gIC8v
IFRPRE8oaGVucmlrYSk6IHVzaW5nIDE1MG1zIGFzIHVwcGVyIGxpbWl0IGJ1dCB0aGlzIHZhbHVl
IGlzIHJhdGhlciByYW5kb20uCi0gIGNvbnN0IHVpbnQzMl90IGN1cnJlbnRfdGltZSA9IHJ0Yzo6
VGltZSgpOwotICBjb25zdCB1aW50MzJfdCBkaWZmID0gY3VycmVudF90aW1lIC0gbGFzdF9yZWNf
dGltZV87Ci0gIGlmIChkaWZmID4gMTUwKSB7Ci0gICAgQUxPR1coIkJhZCBPcGVuU0wgRVMgcmVj
b3JkIHRpbWluZywgZFQ9JXUgW21zXSIsIGRpZmYpOwotICB9Ci0gIGxhc3RfcmVjX3RpbWVfID0g
Y3VycmVudF90aW1lOwotICAvLyBTZW5kIHJlY29yZGVkIGF1ZGlvIGRhdGEgdG8gdGhlIFdlYlJU
QyBzaW5rLgotICAvLyBUT0RPKGhlbnJpa2EpOiBmaXggZGVsYXkgZXN0aW1hdGVzLiBJdCBpcyBP
SyB0byB1c2UgZml4ZWQgdmFsdWVzIGZvciBub3cKLSAgLy8gc2luY2UgdGhlcmUgaXMgbm8gc3Vw
cG9ydCB0byB0dXJuIG9mZiBidWlsdC1pbiBFQyBpbiBjb21iaW5hdGlvbiB3aXRoCi0gIC8vIE9w
ZW5TTCBFUyBhbnlob3cuIEhlbmNlLCBhcyBpcywgdGhlIFdlYlJUQyBiYXNlZCBBRUMgKHdoaWNo
IHdvdWxkIHVzZQotICAvLyB0aGVzZSBlc3RpbWF0ZXMpIHdpbGwgbmV2ZXIgYmUgYWN0aXZlLgot
ICBmaW5lX2F1ZGlvX2J1ZmZlcl8tPkRlbGl2ZXJSZWNvcmRlZERhdGEoCi0gICAgICBydGM6OkFy
cmF5Vmlldzxjb25zdCBpbnQxNl90PigKLSAgICAgICAgICBhdWRpb19idWZmZXJzX1tidWZmZXJf
aW5kZXhfXS5nZXQoKSwKLSAgICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1
ZmZlcigpICogYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKSksCi0gICAgICAyNSk7Ci0gIC8v
IEVucXVldWUgdGhlIHV0aWxpemVkIGF1ZGlvIGJ1ZmZlciBhbmQgdXNlIGlmIGZvciByZWNvcmRp
bmcgYWdhaW4uCi0gIEVucXVldWVBdWRpb0J1ZmZlcigpOwotfQotCi1ib29sIE9wZW5TTEVTUmVj
b3JkZXI6OkVucXVldWVBdWRpb0J1ZmZlcigpIHsKLSAgU0xyZXN1bHQgZXJyID0KLSAgICAgICgq
c2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAgICAgLT5FbnF1ZXVlKAotICAgICAgICAgICAg
ICBzaW1wbGVfYnVmZmVyX3F1ZXVlXywKLSAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxT
TGludDgqPihhdWRpb19idWZmZXJzX1tidWZmZXJfaW5kZXhfXS5nZXQoKSksCi0gICAgICAgICAg
ICAgIGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBpZiAoU0xfUkVT
VUxUX1NVQ0NFU1MgIT0gZXJyKSB7Ci0gICAgQUxPR0UoIkVucXVldWUgZmFpbGVkOiAlcyIsIEdl
dFNMRXJyb3JTdHJpbmcoZXJyKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGJ1ZmZlcl9p
bmRleF8gPSAoYnVmZmVyX2luZGV4XyArIDEpICUga051bU9mT3BlblNMRVNCdWZmZXJzOwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotU0x1aW50MzIgT3BlblNMRVNSZWNvcmRlcjo6R2V0UmVjb3JkU3Rh
dGUoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0socmVjb3JkZXJfKTsKLSAgU0x1aW50MzIgc3RhdGU7
Ci0gIFNMcmVzdWx0IGVyciA9ICgqcmVjb3JkZXJfKS0+R2V0UmVjb3JkU3RhdGUocmVjb3JkZXJf
LCAmc3RhdGUpOwotICBpZiAoU0xfUkVTVUxUX1NVQ0NFU1MgIT0gZXJyKSB7Ci0gICAgQUxPR0Uo
IkdldFJlY29yZFN0YXRlIGZhaWxlZDogJXMiLCBHZXRTTEVycm9yU3RyaW5nKGVycikpOwotICB9
Ci0gIHJldHVybiBzdGF0ZTsKLX0KLQotU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBP
cGVuU0xFU1JlY29yZGVyOjpHZXRCdWZmZXJRdWV1ZVN0YXRlKCkgY29uc3QgewotICBSVENfRENI
RUNLKHNpbXBsZV9idWZmZXJfcXVldWVfKTsKLSAgLy8gc3RhdGUuY291bnQ6IE51bWJlciBvZiBi
dWZmZXJzIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuCi0gIC8vIHN0YXRlLmluZGV4OiBJbmRleCBv
ZiB0aGUgY3VycmVudGx5IGZpbGxpbmcgYnVmZmVyLiBUaGlzIGlzIGEgbGluZWFyIGluZGV4Ci0g
IC8vIHRoYXQga2VlcHMgYSBjdW11bGF0aXZlIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYnVmZmVy
cyByZWNvcmRlZC4KLSAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBzdGF0ZTsKLSAg
U0xyZXN1bHQgZXJyID0KLSAgICAgICgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pLT5HZXRTdGF0ZShz
aW1wbGVfYnVmZmVyX3F1ZXVlXywgJnN0YXRlKTsKLSAgaWYgKFNMX1JFU1VMVF9TVUNDRVNTICE9
IGVycikgewotICAgIEFMT0dFKCJHZXRTdGF0ZSBmYWlsZWQ6ICVzIiwgR2V0U0xFcnJvclN0cmlu
ZyhlcnIpKTsKLSAgfQotICByZXR1cm4gc3RhdGU7Ci19Ci0KLXZvaWQgT3BlblNMRVNSZWNvcmRl
cjo6TG9nQnVmZmVyU3RhdGUoKSBjb25zdCB7Ci0gIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVl
U3RhdGUgc3RhdGUgPSBHZXRCdWZmZXJRdWV1ZVN0YXRlKCk7Ci0gIEFMT0dEKCJzdGF0ZS5jb3Vu
dDolZCBzdGF0ZS5pbmRleDolZCIsIHN0YXRlLmNvdW50LCBzdGF0ZS5pbmRleCk7Ci19Ci0KLVNM
dWludDMyIE9wZW5TTEVTUmVjb3JkZXI6OkdldEJ1ZmZlckNvdW50KCkgewotICBTTEFuZHJvaWRT
aW1wbGVCdWZmZXJRdWV1ZVN0YXRlIHN0YXRlID0gR2V0QnVmZmVyUXVldWVTdGF0ZSgpOwotICBy
ZXR1cm4gc3RhdGUuY291bnQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfcmVj
b3JkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX3JlY29yZGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTZmZDAxNTVhYWU5MTkzOGVlZDQ1NTAzNTQxMDk0YjEy
N2M0OGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9hdWRpb19kZXZpY2Uvb3BlbnNsZXNfcmVjb3JkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5
MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9T
UkNfSk5JX0FVRElPX0RFVklDRV9PUEVOU0xFU19SRUNPUkRFUl9IXwotI2RlZmluZSBTREtfQU5E
Uk9JRF9TUkNfSk5JX0FVRElPX0RFVklDRV9PUEVOU0xFU19SRUNPUkRFUl9IXwotCi0jaW5jbHVk
ZSA8U0xFUy9PcGVuU0xFUy5oPgotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZC5oPgot
I2luY2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZENvbmZpZ3VyYXRpb24uaD4KLQotI2luY2x1
ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImFwaS9zY29wZWRfcmVmcHRyLmgiCi0jaW5jbHVkZSAi
bW9kdWxlcy9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX2J1ZmZlci5oIgotI2luY2x1ZGUgIm1v
ZHVsZXMvYXVkaW9fZGV2aWNlL2ZpbmVfYXVkaW9fYnVmZmVyLmgiCi0jaW5jbHVkZSAibW9kdWxl
cy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUg
InJ0Y19iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2pu
aS9hdWRpb19kZXZpY2UvYXVkaW9fY29tbW9uLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3Jj
L2puaS9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX21vZHVsZS5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL3NyYy9qbmkvYXVkaW9fZGV2aWNlL29wZW5zbGVzX2NvbW1vbi5oIgotCi1uYW1lc3Bh
Y2Ugd2VicnRjIHsKLQotY2xhc3MgRmluZUF1ZGlvQnVmZmVyOwotCi1uYW1lc3BhY2Ugam5pIHsK
LQotLy8gSW1wbGVtZW50cyAxNi1iaXQgbW9ubyBQQ00gYXVkaW8gaW5wdXQgc3VwcG9ydCBmb3Ig
QW5kcm9pZCB1c2luZyB0aGUKLS8vIEMgYmFzZWQgT3BlblNMIEVTIEFQSS4gTm8gY2FsbHMgZnJv
bSBDL0MrKyB0byBKYXZhIHVzaW5nIEpOSSBpcyBkb25lLgotLy8KLS8vIEFuIGluc3RhbmNlIGNh
biBiZSBjcmVhdGVkIG9uIGFueSB0aHJlYWQsIGJ1dCBtdXN0IHRoZW4gYmUgdXNlZCBvbiBvbmUg
YW5kCi0vLyB0aGUgc2FtZSB0aHJlYWQuIEFsbCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUg
Y2FsbGVkIG9uIHRoZSBzYW1lIHRocmVhZC4gQQotLy8gdGhyZWFkIGNoZWNrZXIgd2lsbCBSVENf
RENIRUNLIGlmIGFueSBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLgotLy8g
UmVjb3JkZWQgYXVkaW8gYnVmZmVycyBhcmUgcHJvdmlkZWQgb24gYSBkZWRpY2F0ZWQgaW50ZXJu
YWwgdGhyZWFkIG1hbmFnZWQgYnkKLS8vIHRoZSBPcGVuU0wgRVMgbGF5ZXIuCi0vLwotLy8gVGhl
IGV4aXN0aW5nIGRlc2lnbiBmb3JjZXMgdGhlIHVzZXIgdG8gY2FsbCBJbml0UmVjb3JkaW5nKCkg
YWZ0ZXIKLS8vIFN0b3BSZWNvcmRpbmcoKSB0byBiZSBhYmxlIHRvIGNhbGwgU3RhcnRSZWNvcmRp
bmcoKSBhZ2Fpbi4gVGhpcyBpcyBpbmxpbmUKLS8vIHdpdGggaG93IHRoZSBKYXZhLWJhc2VkIGlt
cGxlbWVudGF0aW9uIHdvcmtzLgotLy8KLS8vIEFzIG9mIEFQSSBsZXZlbCAyMSwgbG93ZXIgbGF0
ZW5jeSBhdWRpbyBpbnB1dCBpcyBzdXBwb3J0ZWQgb24gc2VsZWN0IGRldmljZXMuCi0vLyBUbyB0
YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUsIGZpcnN0IGNvbmZpcm0gdGhhdCBsb3dlciBs
YXRlbmN5IG91dHB1dCBpcwotLy8gYXZhaWxhYmxlLiBUaGUgY2FwYWJpbGl0eSBmb3IgbG93ZXIg
bGF0ZW5jeSBvdXRwdXQgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIHRoZQotLy8gbG93ZXIgbGF0ZW5j
eSBpbnB1dCBmZWF0dXJlLiBUaGVuLCBjcmVhdGUgYW4gQXVkaW9SZWNvcmRlciB3aXRoIHRoZSBz
YW1lCi0vLyBzYW1wbGUgcmF0ZSBhbmQgYnVmZmVyIHNpemUgYXMgd291bGQgYmUgdXNlZCBmb3Ig
b3V0cHV0LiBPcGVuU0wgRVMgaW50ZXJmYWNlcwotLy8gZm9yIGlucHV0IGVmZmVjdHMgcHJlY2x1
ZGUgdGhlIGxvd2VyIGxhdGVuY3kgcGF0aC4KLS8vIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRy
b2lkLmNvbS9uZGsvZ3VpZGVzL2F1ZGlvL29wZW5zbC1wcm9nLW5vdGVzLmh0bWwKLS8vIGZvciBt
b3JlIGRldGFpbHMuCi1jbGFzcyBPcGVuU0xFU1JlY29yZGVyIDogcHVibGljIEF1ZGlvSW5wdXQg
ewotIHB1YmxpYzoKLSAgLy8gQmVnaW5uaW5nIHdpdGggQVBJIGxldmVsIDE3IChBbmRyb2lkIDQu
MiksIGEgYnVmZmVyIGNvdW50IG9mIDIgb3IgbW9yZSBpcwotICAvLyByZXF1aXJlZCBmb3IgbG93
ZXIgbGF0ZW5jeS4gQmVnaW5uaW5nIHdpdGggQVBJIGxldmVsIDE4IChBbmRyb2lkIDQuMyksIGEK
LSAgLy8gYnVmZmVyIGNvdW50IG9mIDEgaXMgc3VmZmljaWVudCBmb3IgbG93ZXIgbGF0ZW5jeS4g
SW4gYWRkaXRpb24sIHRoZSBidWZmZXIKLSAgLy8gc2l6ZSBhbmQgc2FtcGxlIHJhdGUgbXVzdCBi
ZSBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSdzIG5hdGl2ZSBpbnB1dAotICAvLyBjb25maWd1
cmF0aW9uIHByb3ZpZGVkIHZpYSB0aGUgYXVkaW8gbWFuYWdlciBhdCBjb25zdHJ1Y3Rpb24uCi0g
IC8vIFRPRE8oaGVucmlrYSk6IHBlcmhhcHMgc2V0IHRoaXMgdmFsdWUgZHluYW1pY2FsbHkgYmFz
ZWQgb24gT1MgdmVyc2lvbi4KLSAgc3RhdGljIGNvbnN0IGludCBrTnVtT2ZPcGVuU0xFU0J1ZmZl
cnMgPSAyOwotCi0gIE9wZW5TTEVTUmVjb3JkZXIoY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBhdWRp
b19wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxPcGVu
U0xFbmdpbmVNYW5hZ2VyPiBlbmdpbmVfbWFuYWdlcik7Ci0gIH5PcGVuU0xFU1JlY29yZGVyKCkg
b3ZlcnJpZGU7Ci0KLSAgaW50IEluaXQoKSBvdmVycmlkZTsKLSAgaW50IFRlcm1pbmF0ZSgpIG92
ZXJyaWRlOwotCi0gIGludCBJbml0UmVjb3JkaW5nKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUmVjb3Jk
aW5nSXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gIGludCBTdGFydFJlY29yZGlu
ZygpIG92ZXJyaWRlOwotICBpbnQgU3RvcFJlY29yZGluZygpIG92ZXJyaWRlOwotICBib29sIFJl
Y29yZGluZygpIGNvbnN0IG92ZXJyaWRlOwotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVk
aW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2J1ZmZlcikgb3ZlcnJpZGU7Ci0KLSAgLy8gVE9ETyhoZW5y
aWthKTogYWRkIHN1cHBvcnQgdXNpbmcgT3BlblNMIEVTIEFQSXMgd2hlbiBhdmFpbGFibGUuCi0g
IGJvb2wgSXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlOwot
ICBib29sIElzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIGlu
dCBFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKSBvdmVycmlkZTsKLSAgaW50IEVuYWJsZUJ1
aWx0SW5OUyhib29sIGVuYWJsZSkgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICAvLyBPYnRhaW5l
cyB0aGUgU0wgRW5naW5lIEludGVyZmFjZSBmcm9tIHRoZSBleGlzdGluZyBnbG9iYWwgRW5naW5l
IG9iamVjdC4KLSAgLy8gVGhlIGludGVyZmFjZSBleHBvc2VzIGNyZWF0aW9uIG1ldGhvZHMgb2Yg
YWxsIHRoZSBPcGVuU0wgRVMgb2JqZWN0IHR5cGVzLgotICAvLyBUaGlzIG1ldGhvZCBkZWZpbmVz
IHRoZSB8ZW5naW5lX3wgbWVtYmVyIHZhcmlhYmxlLgotICBib29sIE9idGFpbkVuZ2luZUludGVy
ZmFjZSgpOwotCi0gIC8vIENyZWF0ZXMvZGVzdHJveXMgdGhlIGF1ZGlvIHJlY29yZGVyIGFuZCB0
aGUgc2ltcGxlLWJ1ZmZlciBxdWV1ZSBvYmplY3QuCi0gIGJvb2wgQ3JlYXRlQXVkaW9SZWNvcmRl
cigpOwotICB2b2lkIERlc3Ryb3lBdWRpb1JlY29yZGVyKCk7Ci0KLSAgLy8gQWxsb2NhdGUgbWVt
b3J5IGZvciBhdWRpbyBidWZmZXJzIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjYXB0dXJlIGF1ZGlv
Ci0gIC8vIHZpYSB0aGUgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJdGYgaW50ZXJmYWNlLgot
ICB2b2lkIEFsbG9jYXRlRGF0YUJ1ZmZlcnMoKTsKLQotICAvLyBUaGVzZSBjYWxsYmFjayBtZXRo
b2RzIGFyZSBjYWxsZWQgd2hlbiBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGlucHV0Ci0g
IC8vIGJ1ZmZlciBxdWV1ZS4gVGhleSBhcmUgYm90aCBjYWxsZWQgZnJvbSBhbiBpbnRlcm5hbCAi
T3BlblNMIEVTIHRocmVhZCIKLSAgLy8gd2hpY2ggaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBEYWx2
aWsgVk0uCi0gIHN0YXRpYyB2b2lkIFNpbXBsZUJ1ZmZlclF1ZXVlQ2FsbGJhY2soU0xBbmRyb2lk
U2ltcGxlQnVmZmVyUXVldWVJdGYgY2FsbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpOwotICB2b2lkIFJlYWRCdWZmZXJRdWV1ZSgpOwot
Ci0gIC8vIFdyYXBzIGNhbGxzIHRvIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlU3RhdGU6OkVu
cXVldWUoKSBhbmQgaXQgY2FuIGJlCi0gIC8vIGNhbGxlZCBib3RoIG9uIHRoZSBtYWluIHRocmVh
ZCAoYnV0IGJlZm9yZSByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQpIGFuZCBmcm9tCi0gIC8vIHRoZSBp
bnRlcm5hbCBhdWRpbyB0aHJlYWQgd2hpbGUgaW5wdXQgc3RyZWFtaW5nIGlzIGFjdGl2ZS4gSXQg
dXNlcwotICAvLyB8c2ltcGxlX2J1ZmZlcl9xdWV1ZV98IGJ1dCBubyBsb2NrIGlzIG5lZWRlZCBz
aW5jZSB0aGUgaW5pdGlhbCBjYWxscyBmcm9tCi0gIC8vIHRoZSBtYWluIHRocmVhZCBhbmQgdGhl
IG5hdGl2ZSBjYWxsYmFjayB0aHJlYWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KLSAgYm9vbCBF
bnF1ZXVlQXVkaW9CdWZmZXIoKTsKLQotICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHJlY29yZGVy
IHN0YXRlLgotICBTTHVpbnQzMiBHZXRSZWNvcmRTdGF0ZSgpIGNvbnN0OwotCi0gIC8vIFJldHVy
bnMgdGhlIGN1cnJlbnQgYnVmZmVyIHF1ZXVlIHN0YXRlLgotICBTTEFuZHJvaWRTaW1wbGVCdWZm
ZXJRdWV1ZVN0YXRlIEdldEJ1ZmZlclF1ZXVlU3RhdGUoKSBjb25zdDsKLQotICAvLyBOdW1iZXIg
b2YgYnVmZmVycyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgotICBTTHVpbnQzMiBHZXRCdWZmZXJD
b3VudCgpOwotCi0gIC8vIFByaW50cyBhIGxvZyBtZXNzYWdlIG9mIHRoZSBjdXJyZW50IHF1ZXVl
IHN0YXRlLiBDYW4gYmUgdXNlZCBmb3IgZGVidWdnaW5nCi0gIC8vIHB1cnBvc2VzLgotICB2b2lk
IExvZ0J1ZmZlclN0YXRlKCkgY29uc3Q7Ci0KLSAgLy8gRW5zdXJlcyB0aGF0IG1ldGhvZHMgYXJl
IGNhbGxlZCBmcm9tIHRoZSBzYW1lIHRocmVhZCBhcyB0aGlzIG9iamVjdCBpcwotICAvLyBjcmVh
dGVkIG9uLgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gIC8vIFN0
b3JlcyB0aHJlYWQgSUQgaW4gZmlyc3QgY2FsbCB0byBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNr
KCkgZnJvbSBpbnRlcm5hbAotICAvLyBub24tYXBwbGljYXRpb24gdGhyZWFkIHdoaWNoIGlzIG5v
dCBhdHRhY2hlZCB0byB0aGUgRGFsdmlrIEpWTS4KLSAgLy8gRGV0YWNoZWQgZHVyaW5nIGNvbnN0
cnVjdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVj
a2VyX29wZW5zbGVzXzsKLQotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMgYXVkaW9fcGFyYW1ldGVy
c187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgaGFuZGxlIHByb3ZpZGVkIHRvIHVzIGluIEF0dGFjaEF1
ZGlvQnVmZmVyKCkuIE93bmVkIGJ5IHRoZQotICAvLyBBdWRpb0RldmljZU1vZHVsZUltcGwgY2xh
c3MgYW5kIGNhbGxlZCBieSBBdWRpb0RldmljZU1vZHVsZTo6Q3JlYXRlKCkuCi0gIEF1ZGlvRGV2
aWNlQnVmZmVyKiBhdWRpb19kZXZpY2VfYnVmZmVyXzsKLQotICAvLyBQQ00tdHlwZSBmb3JtYXQg
ZGVmaW5pdGlvbi4KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQgZm9yIFNMQW5kcm9p
ZERhdGFGb3JtYXRfUENNX0VYIChhbmRyb2lkLTIxKSBpZgotICAvLyAzMi1iaXQgZmxvYXQgcmVw
cmVzZW50YXRpb24gaXMgbmVlZGVkLgotICBTTERhdGFGb3JtYXRfUENNIHBjbV9mb3JtYXRfOwot
Ci0gIGJvb2wgaW5pdGlhbGl6ZWRfOwotICBib29sIHJlY29yZGluZ187Ci0KLSAgY29uc3QgcnRj
OjpzY29wZWRfcmVmcHRyPE9wZW5TTEVuZ2luZU1hbmFnZXI+IGVuZ2luZV9tYW5hZ2VyXzsKLSAg
Ly8gVGhpcyBpbnRlcmZhY2UgZXhwb3NlcyBjcmVhdGlvbiBtZXRob2RzIGZvciBhbGwgdGhlIE9w
ZW5TTCBFUyBvYmplY3QgdHlwZXMuCi0gIC8vIEl0IGlzIHRoZSBPcGVuU0wgRVMgQVBJIGVudHJ5
IHBvaW50LgotICBTTEVuZ2luZUl0ZiBlbmdpbmVfOwotCi0gIC8vIFRoZSBhdWRpbyByZWNvcmRl
ciBtZWRpYSBvYmplY3QgcmVjb3JkcyBhdWRpbyB0byB0aGUgZGVzdGluYXRpb24gc3BlY2lmaWVk
Ci0gIC8vIGJ5IHRoZSBkYXRhIHNpbmsgY2FwdHVyaW5nIGl0IGZyb20gdGhlIGlucHV0IHNwZWNp
ZmllZCBieSB0aGUgZGF0YSBzb3VyY2UuCi0gIFNjb3BlZFNMT2JqZWN0SXRmIHJlY29yZGVyX29i
amVjdF87Ci0KLSAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkIG9uIHRoZSBhdWRpbyBy
ZWNvcmRlciBvYmplY3QgYW5kIGl0IGNvbnRyb2xzCi0gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgYXVk
aW8gcmVjb3JkZXIuCi0gIFNMUmVjb3JkSXRmIHJlY29yZGVyXzsKLQotICAvLyBUaGUgQW5kcm9p
ZCBTaW1wbGUgQnVmZmVyIFF1ZXVlIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQgb24gdGhlIGF1ZGlv
Ci0gIC8vIHJlY29yZGVyLiBGb3IgcmVjb3JkaW5nLCBhbiBhcHAgc2hvdWxkIGVucXVldWUgZW1w
dHkgYnVmZmVycy4gV2hlbiBhCi0gIC8vIHJlZ2lzdGVyZWQgY2FsbGJhY2sgc2VuZHMgbm90aWZp
Y2F0aW9uIHRoYXQgdGhlIHN5c3RlbSBoYXMgZmluaXNoZWQgd3JpdGluZwotICAvLyBkYXRhIHRv
IHRoZSBidWZmZXIsIHRoZSBhcHAgY2FuIHJlYWQgdGhlIGJ1ZmZlci4KLSAgU0xBbmRyb2lkU2lt
cGxlQnVmZmVyUXVldWVJdGYgc2ltcGxlX2J1ZmZlcl9xdWV1ZV87Ci0KLSAgLy8gQ29uc3VtZXMg
YXVkaW8gb2YgbmF0aXZlIGJ1ZmZlciBzaXplIGFuZCBmZWVkcyB0aGUgV2ViUlRDIGxheWVyIHdp
dGggMTBtcwotICAvLyBjaHVua3Mgb2YgYXVkaW8uCi0gIHN0ZDo6dW5pcXVlX3B0cjxGaW5lQXVk
aW9CdWZmZXI+IGZpbmVfYXVkaW9fYnVmZmVyXzsKLQotICAvLyBRdWV1ZSBvZiBhdWRpbyBidWZm
ZXJzIHRvIGJlIHVzZWQgYnkgdGhlIHJlY29yZGVyIG9iamVjdCBmb3IgY2FwdHVyaW5nCi0gIC8v
IGF1ZGlvLiBUaGV5IHdpbGwgYmUgdXNlZCBpbiBhIFJvdW5kLXJvYmluIHdheSBhbmQgdGhlIHNp
emUgb2YgZWFjaCBidWZmZXIKLSAgLy8gaXMgZ2l2ZW4gYnkgQXVkaW9QYXJhbWV0ZXJzOjpmcmFt
ZXNfcGVyX2J1ZmZlcigpLCBpLmUuLCBpdCBjb3JyZXNwb25kcyB0bwotICAvLyB0aGUgbmF0aXZl
IE9wZW5TTCBFUyBidWZmZXIgc2l6ZS4KLSAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dW5pcXVlX3B0
cjxTTGludDE2W10+W10+IGF1ZGlvX2J1ZmZlcnNfOwotCi0gIC8vIEtlZXBzIHRyYWNrIG9mIGFj
dGl2ZSBhdWRpbyBidWZmZXIgJ24nIGluIHRoZSBhdWRpb19idWZmZXJzX1tuXSBxdWV1ZS4KLSAg
Ly8gRXhhbXBsZSAoa051bU9mT3BlblNMRVNCdWZmZXJzID0gMik6IGNvdW50cyAwLCAxLCAwLCAx
LCAuLi4KLSAgaW50IGJ1ZmZlcl9pbmRleF87Ci0KLSAgLy8gTGFzdCB0aW1lIHRoZSBPcGVuU0wg
RVMgbGF5ZXIgZGVsaXZlcmVkIHJlY29yZGVkIGF1ZGlvIGRhdGEuCi0gIHVpbnQzMl90IGxhc3Rf
cmVjX3RpbWVfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9BVURJT19ERVZJQ0VfT1BF
TlNMRVNfUkVDT1JERVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYnVpbHRpbl9hdWRpb19kZWNvZGVy
X2ZhY3RvcnlfZmFjdG9yeS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYnVpbHRpbl9hdWRpb19kZWNvZGVyX2ZhY3Rvcnlf
ZmFjdG9yeS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0NWNjNzU0ZWQwZDhk
ZTFiMjc3MDc5NzYwZDZhODk5MTk0N2IyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2J1aWx0aW5fYXVkaW9fZGVjb2Rlcl9mYWN0b3J5X2ZhY3Rv
cnkuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2J1aWx0aW5fYXVkaW9fY29kZWNzX2pu
aS9CdWlsdGluQXVkaW9EZWNvZGVyRmFjdG9yeUZhY3Rvcnlfam5pLmgiCi0jaW5jbHVkZSAic2Rr
L2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLQotI2luY2x1ZGUgImFwaS9hdWRpb19jb2RlY3Mv
YnVpbHRpbl9hdWRpb19kZWNvZGVyX2ZhY3RvcnkuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1u
YW1lc3BhY2Ugam5pIHsKLQotc3RhdGljIGpsb25nCi1KTklfQnVpbHRpbkF1ZGlvRGVjb2RlckZh
Y3RvcnlGYWN0b3J5X0NyZWF0ZUJ1aWx0aW5BdWRpb0RlY29kZXJGYWN0b3J5KAotICAgIEpOSUVu
diogZW52KSB7Ci0gIHJldHVybiBOYXRpdmVUb0phdmFQb2ludGVyKENyZWF0ZUJ1aWx0aW5BdWRp
b0RlY29kZXJGYWN0b3J5KCkucmVsZWFzZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQot
fSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9idWlsdGluX2F1ZGlvX2Vu
Y29kZXJfZmFjdG9yeV9mYWN0b3J5LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9idWlsdGluX2F1ZGlvX2VuY29kZXJfZmFj
dG9yeV9mYWN0b3J5LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWE0YjEwZWVl
OTY0N2QzNGQ5NTJiZTllN2UyZGUzNTJlZmMyMWRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvYnVpbHRpbl9hdWRpb19lbmNvZGVyX2ZhY3Rvcnlf
ZmFjdG9yeS5jYworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfYnVpbHRpbl9hdWRpb19jb2Rl
Y3Nfam5pL0J1aWx0aW5BdWRpb0VuY29kZXJGYWN0b3J5RmFjdG9yeV9qbmkuaCIKLSNpbmNsdWRl
ICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2Rr
L2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi0jaW5jbHVkZSAiYXBpL2F1ZGlvX2Nv
ZGVjcy9idWlsdGluX2F1ZGlvX2VuY29kZXJfZmFjdG9yeS5oIgotCi1uYW1lc3BhY2Ugd2VicnRj
IHsKLW5hbWVzcGFjZSBqbmkgewotCi1zdGF0aWMgamxvbmcKLUpOSV9CdWlsdGluQXVkaW9FbmNv
ZGVyRmFjdG9yeUZhY3RvcnlfQ3JlYXRlQnVpbHRpbkF1ZGlvRW5jb2RlckZhY3RvcnkoCi0gICAg
Sk5JRW52KiBlbnYpIHsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YVBvaW50ZXIoQ3JlYXRlQnVpbHRp
bkF1ZGlvRW5jb2RlckZhY3RvcnkoKS5yZWxlYXNlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
am5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2NsYXNzX2xvYWRl
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9jbGFzc19sb2FkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGIyNTVhNDY2MGNiMzVmMTQzMGFjNjJjOGU3NzE1ZGUzMjc0M2MxOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2NsYXNzX2xvYWRlci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gRGVwcmVj
YXRlZDogdXNlIHNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2NsYXNzX2xvYWRlci5oIGluc3Rl
YWQuCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9DTEFTU19MT0FERVJfSF8KLSNkZWZp
bmUgU0RLX0FORFJPSURfU1JDX0pOSV9DTEFTU19MT0FERVJfSF8KLQotI2luY2x1ZGUgInNkay9h
bmRyb2lkL25hdGl2ZV9hcGkvam5pL2NsYXNzX2xvYWRlci5oIgotCi1uYW1lc3BhY2Ugd2VicnRj
IHsKLW5hbWVzcGFjZSBqbmkgewotdXNpbmcgOjp3ZWJydGM6OkluaXRDbGFzc0xvYWRlcjsKLX0g
IC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBT
REtfQU5EUk9JRF9TUkNfSk5JX0NMQVNTX0xPQURFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9jbGFz
c19yZWZlcmVuY2VfaG9sZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2NsYXNzX3JlZmVyZW5jZV9ob2xkZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcwMmY1ZTJhOWNmMDVhZDVmYTc0NmYwMzYwMzAx
OTc3ZDQzMTM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2NsYXNzX3JlZmVyZW5jZV9ob2xkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9D
TEFTU19SRUZFUkVOQ0VfSE9MREVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfQ0xB
U1NfUkVGRVJFTkNFX0hPTERFUl9IXwotCi0vLyBUT0RPKG1hZ2plZCk6IFVwZGF0ZSBleHRlcm5h
bCBjbGllbnRzIHRvIGNhbGwgd2VicnRjOjpqbmk6OkluaXRDbGFzc0xvYWRlcgotLy8gaW1tZWRp
YXRlbHkgaW5zdGVhZC4KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9jbGFz
c19sb2FkZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgi
Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIERlcHJlY2F0ZWQu
IENhbGwgd2VicnRjOjpqbmk6OkluaXRDbGFzc0xvYWRlcigpIGltbWVkaWF0ZWx5IGluc3RlYWQu
LgotaW5saW5lIHZvaWQgTG9hZEdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVyKCkgewotICB3ZWJy
dGM6OkluaXRDbGFzc0xvYWRlcihHZXRFbnYoKSk7Ci19Ci0KLS8vIERlcHJlY2F0ZWQuIERvIG5v
dCBjYWxsIGF0IGFsbC4KLWlubGluZSB2b2lkIEZyZWVHbG9iYWxDbGFzc1JlZmVyZW5jZUhvbGRl
cigpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQot
Ly8gVE9ETyhtYWdqZWQpOiBSZW1vdmUgb25jZSBleHRlcm5hbCBjbGllbnRzIGFyZSB1cGRhdGVk
LgotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi11c2luZyB3ZWJydGM6OmpuaTo6TG9hZEdsb2Jh
bENsYXNzUmVmZXJlbmNlSG9sZGVyOwotdXNpbmcgd2VicnRjOjpqbmk6OkZyZWVHbG9iYWxDbGFz
c1JlZmVyZW5jZUhvbGRlcjsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlm
ICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX0NMQVNTX1JFRkVSRU5DRV9IT0xERVJfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvZW5jb2RlZF9pbWFnZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvZW5jb2RlZF9pbWFnZS5jYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzNjUzY2EzNDkxODVkOWJkNmUyM2I1NzBiNWZk
OThmZjliNWJkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2VuY29kZWRfaW1hZ2UuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvZW5jb2Rl
ZF9pbWFnZS5oIgotCi0jaW5jbHVkZSAiYXBpL3ZpZGVvL2VuY29kZWRfaW1hZ2UuaCIKLSNpbmNs
dWRlICJydGNfYmFzZS9yZWZfY291bnRlZF9vYmplY3QuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90
aW1lX3V0aWxzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVvX2puaS9F
bmNvZGVkSW1hZ2Vfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkv
amF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMu
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3Njb3BlZF9qYXZhX3JlZl9jb3VudGVk
LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLWNsYXNzIEphdmFFbmNvZGVkSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRW5jb2RlZEltYWdlQnVm
ZmVySW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIEphdmFFbmNvZGVkSW1hZ2VCdWZmZXIoSk5JRW52
KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYg
al9lbmNvZGVkX2ltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHBheWxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpCi0gICAgICA6
IGpfZW5jb2RlZF9pbWFnZV8oU2NvcGVkSmF2YVJlZkNvdW50ZWQ6OlJldGFpbihlbnYsIGpfZW5j
b2RlZF9pbWFnZSkpLAotICAgICAgICBkYXRhXyhjb25zdF9jYXN0PHVpbnQ4X3QqPihwYXlsb2Fk
KSksCi0gICAgICAgIHNpemVfKHNpemUpIHt9Ci0KLSAgY29uc3QgdWludDhfdCogZGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGRhdGFfOyB9Ci0gIHVpbnQ4X3QqIGRhdGEoKSBvdmVycmlk
ZSB7IHJldHVybiBkYXRhXzsgfQotICBzaXplX3Qgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHNpemVfOyB9Ci0KLSBwcml2YXRlOgotICAvLyBUaGUgSmF2YSBvYmplY3Qgb3duaW5nIHRo
ZSBidWZmZXIuCi0gIGNvbnN0IFNjb3BlZEphdmFSZWZDb3VudGVkIGpfZW5jb2RlZF9pbWFnZV87
Ci0KLSAgLy8gVE9ETyhidWdzLndlYnJ0Yy5vcmcvOTM3OCk6IE1ha2UgY29uc3QsIGFuZCBkZWxl
dGUgYWJvdmUgY29uc3RfY2FzdC4KLSAgdWludDhfdCogY29uc3QgZGF0YV87Ci0gIHNpemVfdCBj
b25zdCBzaXplXzsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpv
YmplY3Q+IE5hdGl2ZVRvSmF2YUZyYW1lVHlwZShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVR5cGUgZnJhbWVf
dHlwZSkgewotICByZXR1cm4gSmF2YV9GcmFtZVR5cGVfZnJvbU5hdGl2ZUluZGV4KGVudiwgc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZV90eXBlKSk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PiBOYXRpdmVUb0phdmFFbmNvZGVkSW1hZ2UoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29u
c3QgRW5jb2RlZEltYWdlJiBpbWFnZSkgewotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4g
YnVmZmVyID0gTmV3RGlyZWN0Qnl0ZUJ1ZmZlcigKLSAgICAgIGpuaSwgY29uc3RfY2FzdDx1aW50
OF90Kj4oaW1hZ2UuZGF0YSgpKSwgaW1hZ2Uuc2l6ZSgpKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVm
PGpvYmplY3Q+IGZyYW1lX3R5cGUgPQotICAgICAgTmF0aXZlVG9KYXZhRnJhbWVUeXBlKGpuaSwg
aW1hZ2UuX2ZyYW1lVHlwZSk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBxcDsKLSAg
aWYgKGltYWdlLnFwXyAhPSAtMSkKLSAgICBxcCA9IE5hdGl2ZVRvSmF2YUludGVnZXIoam5pLCBp
bWFnZS5xcF8pOwotICAvLyBUT0RPKGJ1Z3Mud2VicnRjLm9yZy85Mzc4KTogS2VlcCBhIHJlZmVy
ZW5jZSB0byB0aGUgQysrIEVuY29kZWRJbWFnZSBkYXRhLAotICAvLyBhbmQgdXNlIHRoZSByZWxl
YXNlQ2FsbGJhY2sgdG8gbWFuYWdlIGxpZmV0aW1lLgotICByZXR1cm4gSmF2YV9FbmNvZGVkSW1h
Z2VfQ29uc3RydWN0b3IoCi0gICAgICBqbmksIGJ1ZmZlciwKLSAgICAgIC8qcmVsZWFzZUNhbGxi
YWNrPSovU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PihudWxscHRyKSwKLSAgICAgIHN0YXRp
Y19jYXN0PGludD4oaW1hZ2UuX2VuY29kZWRXaWR0aCksCi0gICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGltYWdlLl9lbmNvZGVkSGVpZ2h0KSwKLSAgICAgIGltYWdlLmNhcHR1cmVfdGltZV9tc18gKiBy
dGM6OmtOdW1OYW5vc2Vjc1Blck1pbGxpc2VjLCBmcmFtZV90eXBlLAotICAgICAgc3RhdGljX2Nh
c3Q8amludD4oaW1hZ2Uucm90YXRpb25fKSwgaW1hZ2UuX2NvbXBsZXRlRnJhbWUsIHFwKTsKLX0K
LQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RBcnJheT4gTmF0aXZlVG9KYXZhRnJhbWVUeXBl
QXJyYXkoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8VmlkZW9GcmFt
ZVR5cGU+JiBmcmFtZV90eXBlcykgewotICByZXR1cm4gTmF0aXZlVG9KYXZhT2JqZWN0QXJyYXko
Ci0gICAgICBlbnYsIGZyYW1lX3R5cGVzLCBvcmdfd2VicnRjX0VuY29kZWRJbWFnZV8wMDAyNEZy
YW1lVHlwZV9jbGF6eihlbnYpLAotICAgICAgJk5hdGl2ZVRvSmF2YUZyYW1lVHlwZSk7Ci19Ci0K
LUVuY29kZWRJbWFnZSBKYXZhVG9OYXRpdmVFbmNvZGVkSW1hZ2UoSk5JRW52KiBlbnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4m
IGpfZW5jb2RlZF9pbWFnZSkgewotICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2J1ZmZlciA9
Ci0gICAgICBKYXZhX0VuY29kZWRJbWFnZV9nZXRCdWZmZXIoZW52LCBqX2VuY29kZWRfaW1hZ2Up
OwotICBjb25zdCB1aW50OF90KiBidWZmZXIgPQotICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGVudi0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2J1ZmZlci5vYmooKSkpOwotICBjb25zdCBz
aXplX3QgYnVmZmVyX3NpemUgPSBlbnYtPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGpfYnVmZmVy
Lm9iaigpKTsKLQotICBFbmNvZGVkSW1hZ2UgZnJhbWU7Ci0gIGZyYW1lLlNldEVuY29kZWREYXRh
KG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8SmF2YUVuY29kZWRJbWFnZUJ1ZmZlcj4oCi0gICAg
ICBlbnYsIGpfZW5jb2RlZF9pbWFnZSwgYnVmZmVyLCBidWZmZXJfc2l6ZSkpOwotCi0gIGZyYW1l
Ll9lbmNvZGVkV2lkdGggPSBKYXZhX0VuY29kZWRJbWFnZV9nZXRFbmNvZGVkV2lkdGgoZW52LCBq
X2VuY29kZWRfaW1hZ2UpOwotICBmcmFtZS5fZW5jb2RlZEhlaWdodCA9Ci0gICAgICBKYXZhX0Vu
Y29kZWRJbWFnZV9nZXRFbmNvZGVkSGVpZ2h0KGVudiwgal9lbmNvZGVkX2ltYWdlKTsKLSAgZnJh
bWUucm90YXRpb25fID0KLSAgICAgIChWaWRlb1JvdGF0aW9uKUphdmFfRW5jb2RlZEltYWdlX2dl
dFJvdGF0aW9uKGVudiwgal9lbmNvZGVkX2ltYWdlKTsKLSAgZnJhbWUuX2NvbXBsZXRlRnJhbWUg
PQotICAgICAgSmF2YV9FbmNvZGVkSW1hZ2VfZ2V0Q29tcGxldGVGcmFtZShlbnYsIGpfZW5jb2Rl
ZF9pbWFnZSk7Ci0KLSAgZnJhbWUucXBfID0gSmF2YVRvTmF0aXZlT3B0aW9uYWxJbnQoCi0gICAg
ICAgICAgICAgICAgICBlbnYsIEphdmFfRW5jb2RlZEltYWdlX2dldFFwKGVudiwgal9lbmNvZGVk
X2ltYWdlKSkKLSAgICAgICAgICAgICAgICAgIC52YWx1ZV9vcigtMSk7Ci0KLSAgZnJhbWUuX2Zy
YW1lVHlwZSA9Ci0gICAgICAoVmlkZW9GcmFtZVR5cGUpSmF2YV9FbmNvZGVkSW1hZ2VfZ2V0RnJh
bWVUeXBlKGVudiwgal9lbmNvZGVkX2ltYWdlKTsKLSAgcmV0dXJuIGZyYW1lOwotfQotCi1pbnQ2
NF90IEdldEphdmFFbmNvZGVkSW1hZ2VDYXB0dXJlVGltZU5zKAotICAgIEpOSUVudiogZW52LAot
ICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZW5jb2RlZF9pbWFnZSkgewotICByZXR1cm4g
SmF2YV9FbmNvZGVkSW1hZ2VfZ2V0Q2FwdHVyZVRpbWVOcyhlbnYsIGpfZW5jb2RlZF9pbWFnZSk7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvZW5jb2RlZF9pbWFnZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9lbmNvZGVkX2ltYWdlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNmQwNjI0M2NiNTAzYTQ3ZGViN2RkN2IxOTllY2Zj
OTQ5YmYxMzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2puaS9lbmNvZGVkX2ltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfRU5DT0RFRF9JTUFH
RV9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0VOQ09ERURfSU1BR0VfSF8KLQotI2lu
Y2x1ZGUgPGpuaS5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImFwaS92aWRlby92
aWRlb19mcmFtZV90eXBlLmgiCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2pu
aS9zY29wZWRfamF2YV9yZWYuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLWNsYXNzIEVuY29k
ZWRJbWFnZTsKLQotbmFtZXNwYWNlIGpuaSB7Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0
PiBOYXRpdmVUb0phdmFGcmFtZVR5cGUoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVUeXBlIGZyYW1lX3R5cGUp
OwotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YUVuY29kZWRJbWFnZShK
TklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRW5jb2RlZEltYWdlJiBpbWFnZSk7Ci1TY29wZWRKYXZhTG9jYWxSZWY8
am9iamVjdEFycmF5PiBOYXRpdmVUb0phdmFGcmFtZVR5cGVBcnJheSgKLSAgICBKTklFbnYqIGVu
diwKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxWaWRlb0ZyYW1lVHlwZT4mIGZyYW1lX3R5cGVzKTsK
LQotRW5jb2RlZEltYWdlIEphdmFUb05hdGl2ZUVuY29kZWRJbWFnZShKTklFbnYqIGVudiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0
PiYgal9lbmNvZGVkX2ltYWdlKTsKLQotaW50NjRfdCBHZXRKYXZhRW5jb2RlZEltYWdlQ2FwdHVy
ZVRpbWVOcygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBq
X2VuY29kZWRfaW1hZ2UpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9FTkNPREVEX0lNQUdFX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL2gyNjRfdXRpbHMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2gyNjRfdXRpbHMuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZTNhZTExMGRjMDhmOTA1YTMyMjk4MDA0YjVj
YWU3Y2IwZTU4ZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9oMjY0X3V0aWxzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fY29k
ZWNfaW5mby5oIgotCi0jaW5jbHVkZSAiY29tbW9uX3ZpZGVvL2gyNjQvcHJvZmlsZV9sZXZlbF9p
ZC5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF92aWRlb19qbmkvSDI2NFV0aWxz
X2puaS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1zdGF0aWMg
amJvb2xlYW4gSk5JX0gyNjRVdGlsc19Jc1NhbWVIMjY0UHJvZmlsZSgKLSAgICBKTklFbnYqIGVu
diwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIHBhcmFtczEsCi0gICAgY29uc3Qg
SmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBwYXJhbXMyKSB7Ci0gIHJldHVybiBIMjY0OjpJc1NhbWVI
MjY0UHJvZmlsZShKYXZhVG9OYXRpdmVTdHJpbmdNYXAoZW52LCBwYXJhbXMxKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEphdmFUb05hdGl2ZVN0cmluZ01hcChlbnYsIHBhcmFt
czIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Ywpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9qYXZhX2k0MjBfYnVmZmVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qYXZhX2k0MjBfYnVm
ZmVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWRjZDY2YmI1Y2I0YzU0NjVl
ZTlhMTIyNGI5OTZkYjFkN2IyZmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qbmkvamF2YV9pNDIwX2J1ZmZlci5jYworKysgL2Rldi9udWxsCkBAIC0x
LDYzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9n
ZW5lcmF0ZWRfdmlkZW9fam5pL0phdmFJNDIwQnVmZmVyX2puaS5oIgotI2luY2x1ZGUgInRoaXJk
X3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9zY2FsZS5oIgotCi1uYW1lc3BhY2Ugd2VicnRj
IHsKLW5hbWVzcGFjZSBqbmkgewotCi1zdGF0aWMgdm9pZCBKTklfSmF2YUk0MjBCdWZmZXJfQ3Jv
cEFuZFNjYWxlSTQyMCgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8
am9iamVjdD4mIGpfc3JjX3ksCi0gICAgamludCBzcmNfc3RyaWRlX3ksCi0gICAgY29uc3QgSmF2
YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NyY191LAotICAgIGppbnQgc3JjX3N0cmlkZV91LAotICAg
IGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9zcmNfdiwKLSAgICBqaW50IHNyY19zdHJp
ZGVfdiwKLSAgICBqaW50IGNyb3BfeCwKLSAgICBqaW50IGNyb3BfeSwKLSAgICBqaW50IGNyb3Bf
d2lkdGgsCi0gICAgamludCBjcm9wX2hlaWdodCwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9i
amVjdD4mIGpfZHN0X3ksCi0gICAgamludCBkc3Rfc3RyaWRlX3ksCi0gICAgY29uc3QgSmF2YVBh
cmFtUmVmPGpvYmplY3Q+JiBqX2RzdF91LAotICAgIGppbnQgZHN0X3N0cmlkZV91LAotICAgIGNv
bnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kc3RfdiwKLSAgICBqaW50IGRzdF9zdHJpZGVf
diwKLSAgICBqaW50IHNjYWxlX3dpZHRoLAotICAgIGppbnQgc2NhbGVfaGVpZ2h0KSB7Ci0gIHVp
bnQ4X3QgY29uc3QqIHNyY195ID0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqbmktPkdl
dERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfeS5vYmooKSkpOwotICB1aW50OF90IGNvbnN0KiBz
cmNfdSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJB
ZGRyZXNzKGpfc3JjX3Uub2JqKCkpKTsKLSAgdWludDhfdCBjb25zdCogc3JjX3YgPQotICAgICAg
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3NyY192
Lm9iaigpKSk7Ci0gIHVpbnQ4X3QqIGRzdF95ID0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3RfeS5vYmooKSkpOwotICB1aW50OF90
KiBkc3RfdSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZm
ZXJBZGRyZXNzKGpfZHN0X3Uub2JqKCkpKTsKLSAgdWludDhfdCogZHN0X3YgPQotICAgICAgc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RzdF92Lm9i
aigpKSk7Ci0KLSAgLy8gUGVyZm9ybSBjcm9wcGluZyB1c2luZyBwb2ludGVyIGFyaXRobWV0aWMu
Ci0gIHNyY195ICs9IGNyb3BfeCArIGNyb3BfeSAqIHNyY19zdHJpZGVfeTsKLSAgc3JjX3UgKz0g
Y3JvcF94IC8gMiArIGNyb3BfeSAvIDIgKiBzcmNfc3RyaWRlX3U7Ci0gIHNyY192ICs9IGNyb3Bf
eCAvIDIgKyBjcm9wX3kgLyAyICogc3JjX3N0cmlkZV92OwotCi0gIGJvb2wgcmV0ID0gbGlieXV2
OjpJNDIwU2NhbGUoCi0gICAgICBzcmNfeSwgc3JjX3N0cmlkZV95LCBzcmNfdSwgc3JjX3N0cmlk
ZV91LCBzcmNfdiwgc3JjX3N0cmlkZV92LCBjcm9wX3dpZHRoLAotICAgICAgY3JvcF9oZWlnaHQs
IGRzdF95LCBkc3Rfc3RyaWRlX3ksIGRzdF91LCBkc3Rfc3RyaWRlX3UsIGRzdF92LAotICAgICAg
ZHN0X3N0cmlkZV92LCBzY2FsZV93aWR0aCwgc2NhbGVfaGVpZ2h0LCBsaWJ5dXY6OmtGaWx0ZXJC
b3gpOwotICBSVENfRENIRUNLX0VRKHJldCwgMCkgPDwgIkk0MjBTY2FsZSBmYWlsZWQiOwotfQot
Ci19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL2puaV9jb21tb24uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9jb21tb24uY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDM3NjRmOGRlZWIzOGM0Y2VhZTQ4MjRiOTk3MWYzMjA4YTk2YmIwMzku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qbmlf
Y29tbW9uLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotI2luY2x1ZGUgInJ0Y19iYXNlL3JlZl9jb3VudC5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL2dlbmVyYXRlZF9iYXNlX2puaS9KbmlDb21tb25fam5pLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBqbmkgewotCi1zdGF0aWMgdm9pZCBKTklfSm5pQ29tbW9uX0FkZFJlZihKTklFbnYqIGpu
aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfbmF0aXZlX3JlZl9j
b3VudGVkX3BvaW50ZXIpIHsKLSAgcmVpbnRlcnByZXRfY2FzdDxydGM6OlJlZkNvdW50SW50ZXJm
YWNlKj4oal9uYXRpdmVfcmVmX2NvdW50ZWRfcG9pbnRlcikKLSAgICAgIC0+QWRkUmVmKCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIEpOSV9KbmlDb21tb25fUmVsZWFzZVJlZihKTklFbnYqIGpuaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBqX25hdGl2ZV9yZWZfY291
bnRlZF9wb2ludGVyKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8cnRjOjpSZWZDb3VudEludGVyZmFj
ZSo+KGpfbmF0aXZlX3JlZl9jb3VudGVkX3BvaW50ZXIpCi0gICAgICAtPlJlbGVhc2UoKTsKLX0K
LQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBKTklfSm5pQ29tbW9uX0FsbG9j
YXRlQnl0ZUJ1ZmZlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqaW50IHNpemUpIHsKLSAgdm9p
ZCogbmV3X2RhdGEgPSA6Om9wZXJhdG9yIG5ldyhzaXplKTsKLSAgcmV0dXJuIE5ld0RpcmVjdEJ5
dGVCdWZmZXIoam5pLCBuZXdfZGF0YSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9KbmlD
b21tb25fRnJlZUJ5dGVCdWZmZXIoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBh
cmFtUmVmPGpvYmplY3Q+JiBieXRlX2J1ZmZlcikgewotICB2b2lkKiBkYXRhID0gam5pLT5HZXRE
aXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVfYnVmZmVyLm9iaigpKTsKLSAgOjpvcGVyYXRvciBkZWxl
dGUoZGF0YSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9n
ZW5lcmF0b3JfaGVscGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjZjOTky
ODQ2OGFhM2E3NmE1NTU3ZDM0ZjQ3N2MzZTcxMDMyNWE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIuY2MKKysr
IC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfZ2VuZXJhdG9yX2hlbHBlci5oIgotCi0jaW5jbHVk
ZSAicnRjX2Jhc2UvYXRvbWljX29wcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9h
cGkvam5pL2NsYXNzX2xvYWRlci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gSWYgfGF0
b21pY19jbGFzc19pZHwgc2V0LCBpdCdsbCByZXR1cm4gaW1tZWRpYXRlbHkuIE90aGVyd2lzZSwg
aXQgd2lsbCBsb29rCi0vLyB1cCB0aGUgY2xhc3MgYW5kIHN0b3JlIGl0LiBJZiB0aGVyZSdzIGEg
cmFjZSwgd2UgdGFrZSBjYXJlIHRvIG9ubHkgc3RvcmUgb25lCi0vLyBnbG9iYWwgcmVmZXJlbmNl
IChhbmQgdGhlIGR1cGxpY2F0ZWQgZWZmb3J0IHdpbGwgaGFwcGVuIG9ubHkgb25jZSkuCi1qY2xh
c3MgTGF6eUdldENsYXNzKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBjbGFzc19uYW1lLAotICAgICAgICAgICAgICAgICAgICBzdGQ6OmF0b21pYzxqY2xhc3M+
KiBhdG9taWNfY2xhc3NfaWQpIHsKLSAgY29uc3QgamNsYXNzIHZhbHVlID0gc3RkOjphdG9taWNf
bG9hZChhdG9taWNfY2xhc3NfaWQpOwotICBpZiAodmFsdWUpCi0gICAgcmV0dXJuIHZhbHVlOwot
ICB3ZWJydGM6OlNjb3BlZEphdmFHbG9iYWxSZWY8amNsYXNzPiBjbGF6eih3ZWJydGM6OkdldENs
YXNzKGVudiwgY2xhc3NfbmFtZSkpOwotICBSVENfQ0hFQ0soIWNsYXp6LmlzX251bGwoKSkgPDwg
Y2xhc3NfbmFtZTsKLSAgamNsYXNzIGNhc19yZXN1bHQgPSBudWxscHRyOwotICBpZiAoc3RkOjph
dG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYXRvbWljX2NsYXNzX2lkLCAmY2FzX3Jlc3Vs
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXp6Lm9iaigp
KSkgewotICAgIC8vIFdlIHN1Y2Vzc2Z1bGx5IHN0b3JlZCB8Y2xhenp8IGluIHxhdG9taWNfY2xh
c3NfaWR8LCBzbyB3ZSBhcmUKLSAgICAvLyBpbnRlbnRpb25hbGx5IGxlYWtpbmcgdGhlIGdsb2Jh
bCByZWYgc2luY2UgaXQncyBub3cgc3RvcmVkIHRoZXJlLgotICAgIHJldHVybiBjbGF6ei5SZWxl
YXNlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gU29tZSBvdGhlciB0aHJlYWQgY2FtZSBiZWZvcmUg
dXMgYW5kIHN0b3JlZCBhIGdsb2JhbCBwb2ludGVyIGluCi0gICAgLy8gfGF0b21pY19jbGFzc19p
ZHwuIFJlbGFzZSBvdXIgZ2xvYmFsIHJlZiBhbmQgcmV0dXJuIHRoZSByZWYgZnJvbSB0aGUKLSAg
ICAvLyBvdGhlciB0aHJlYWQuCi0gICAgcmV0dXJuIGNhc19yZXN1bHQ7Ci0gIH0KLX0KLQotLy8g
SWYgfGF0b21pY19tZXRob2RfaWR8IHNldCwgaXQnbGwgcmV0dXJuIGltbWVkaWF0ZWx5LiBPdGhl
cndpc2UsIGl0IHdpbGwgbG9vawotLy8gdXAgdGhlIG1ldGhvZCBpZCBhbmQgc3RvcmUgaXQuIElm
IHRoZXJlJ3MgYSByYWNlLCBpdCdzIG9rIHNpbmNlIHRoZSB2YWx1ZXMKLS8vIGFyZSB0aGUgc2Ft
ZSAoYW5kIHRoZSBkdXBsaWNhdGVkIGVmZm9ydCB3aWxsIGhhcHBlbiBvbmx5IG9uY2UpLgotdGVt
cGxhdGUgPE1ldGhvZElEOjpUeXBlIHR5cGU+Ci1qbWV0aG9kSUQgTWV0aG9kSUQ6OkxhenlHZXQo
Sk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzIGNsYXp6LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1ldGhvZF9uYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGpuaV9zaWduYXR1cmUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjphdG9taWM8am1ldGhvZElEPiogYXRvbWljX21l
dGhvZF9pZCkgewotICBjb25zdCBqbWV0aG9kSUQgdmFsdWUgPSBzdGQ6OmF0b21pY19sb2FkKGF0
b21pY19tZXRob2RfaWQpOwotICBpZiAodmFsdWUpCi0gICAgcmV0dXJuIHZhbHVlOwotICBhdXRv
IGdldF9tZXRob2RfcHRyID0gdHlwZSA9PSBNZXRob2RJRDo6VFlQRV9TVEFUSUMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA/ICZKTklFbnY6OkdldFN0YXRpY01ldGhvZElECi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAmSk5JRW52OjpHZXRNZXRob2RJRDsKLSAgam1ldGhvZElE
IGlkID0gKGVudi0+KmdldF9tZXRob2RfcHRyKShjbGF6eiwgbWV0aG9kX25hbWUsIGpuaV9zaWdu
YXR1cmUpOwotICBDSEVDS19FWENFUFRJT04oZW52KSA8PCAiZXJyb3IgZHVyaW5nIEdldE1ldGhv
ZElEOiAiIDw8IG1ldGhvZF9uYW1lIDw8ICIsICIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwg
am5pX3NpZ25hdHVyZTsKLSAgUlRDX0NIRUNLKGlkKSA8PCBtZXRob2RfbmFtZSA8PCAiLCAiIDw8
IGpuaV9zaWduYXR1cmU7Ci0gIHN0ZDo6YXRvbWljX3N0b3JlKGF0b21pY19tZXRob2RfaWQsIGlk
KTsKLSAgcmV0dXJuIGlkOwotfQotCi0vLyBWYXJpb3VzIHRlbXBsYXRlIGluc3RhbnRpYXRpb25z
LgotdGVtcGxhdGUgam1ldGhvZElEIE1ldGhvZElEOjpMYXp5R2V0PE1ldGhvZElEOjpUWVBFX1NU
QVRJQz4oCi0gICAgSk5JRW52KiBlbnYsCi0gICAgamNsYXNzIGNsYXp6LAotICAgIGNvbnN0IGNo
YXIqIG1ldGhvZF9uYW1lLAotICAgIGNvbnN0IGNoYXIqIGpuaV9zaWduYXR1cmUsCi0gICAgc3Rk
OjphdG9taWM8am1ldGhvZElEPiogYXRvbWljX21ldGhvZF9pZCk7Ci0KLXRlbXBsYXRlIGptZXRo
b2RJRCBNZXRob2RJRDo6TGF6eUdldDxNZXRob2RJRDo6VFlQRV9JTlNUQU5DRT4oCi0gICAgSk5J
RW52KiBlbnYsCi0gICAgamNsYXNzIGNsYXp6LAotICAgIGNvbnN0IGNoYXIqIG1ldGhvZF9uYW1l
LAotICAgIGNvbnN0IGNoYXIqIGpuaV9zaWduYXR1cmUsCi0gICAgc3RkOjphdG9taWM8am1ldGhv
ZElEPiogYXRvbWljX21ldGhvZF9pZCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9oZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2dlbmVyYXRvcl9o
ZWxwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0OTdlMTYzNWU2NDM2ODhk
YTM0OTlhMGY1MjY3ZGRmODBkMjZjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL2puaV9nZW5lcmF0b3JfaGVscGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLS8vIERvIG5vdCBpbmNsdWRlIHRo
aXMgZmlsZSBkaXJlY3RseS4gSXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIEpO
SQotLy8gZ2VuZXJhdGlvbiBzY3JpcHQuIFdlIGFyZSBleHBvcnRpbmcgdHlwZXMgaW4gc3RyYW5n
ZSBuYW1lc3BhY2VzIGluIG9yZGVyIHRvCi0vLyBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGdlbmVy
YXRlZCBjb2RlIHRhcmdldGVkIGZvciBDaHJvbWl1bS4KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9T
UkNfSk5JX0pOSV9HRU5FUkFUT1JfSEVMUEVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19K
TklfSk5JX0dFTkVSQVRPUl9IRUxQRVJfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotI2luY2x1ZGUg
PGF0b21pYz4KLQotI2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL25hdGl2ZV9hcGkvam5pL2puaV9pbnRfd3JhcHBlci5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL25hdGl2ZV9hcGkvam5pL3Njb3BlZF9qYXZhX3JlZi5oIgotCi0jZGVmaW5lIENIRUNL
X0NMQVpaKGVudiwgamNhbGxlciwgY2xhenosIC4uLikgUlRDX0RDSEVDSyhjbGF6eik7Ci0jZGVm
aW5lIENIRUNLX05BVElWRV9QVFIoZW52LCBqY2FsbGVyLCBuYXRpdmVfcHRyLCBtZXRob2RfbmFt
ZSwgLi4uKSBcCi0gIFJUQ19EQ0hFQ0sobmF0aXZlX3B0cikgPDwgbWV0aG9kX25hbWU7Ci0KLSNk
ZWZpbmUgQkFTRV9FWFBPUlQKLSNkZWZpbmUgSk5JX1JFR0lTVFJBVElPTl9FWFBPUlQgX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotI2lmIGRlZmluZWQoV0VCUlRDX0FS
Q0hfWDg2KQotLy8gRGFsdmlrIEpJVCBnZW5lcmF0ZWQgY29kZSBkb2Vzbid0IGd1YXJhbnRlZSAx
Ni1ieXRlIHN0YWNrIGFsaWdubWVudCBvbgotLy8geDg2IC0gdXNlIGZvcmNlX2FsaWduX2FyZ19w
b2ludGVyIHRvIHJlYWxpZ24gdGhlIHN0YWNrIGF0IHRoZSBKTkkKLS8vIGJvdW5kYXJ5LiBjcmJ1
Zy5jb20vNjU1MjQ4Ci0jZGVmaW5lIEpOSV9HRU5FUkFUT1JfRVhQT1JUIFwKLSAgX19hdHRyaWJ1
dGVfXygoZm9yY2VfYWxpZ25fYXJnX3BvaW50ZXIpKSBleHRlcm4gIkMiIEpOSUVYUE9SVCBKTklD
QUxMCi0jZWxzZQotI2RlZmluZSBKTklfR0VORVJBVE9SX0VYUE9SVCBleHRlcm4gIkMiIEpOSUVY
UE9SVCBKTklDQUxMCi0jZW5kaWYKLQotI2RlZmluZSBDSEVDS19FWENFUFRJT04oam5pKSAgICAg
ICAgXAotICBSVENfQ0hFQ0soIWpuaS0+RXhjZXB0aW9uQ2hlY2soKSkgXAotICAgICAgPDwgKGpu
aS0+RXhjZXB0aW9uRGVzY3JpYmUoKSwgam5pLT5FeGNlcHRpb25DbGVhcigpLCAiIikKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHxhdG9t
aWNfY2xhc3NfaWR8IHRvIGNvbnRhaW4gYSBnbG9iYWwgcmVmIHRvCi0vLyB0aGUgZ2l2ZW4gY2xh
c3MsIGFuZCB3aWxsIHJldHVybiB0aGF0IHJlZiBvbiBzdWJzZXF1ZW50IGNhbGxzLiBUaGUgY2Fs
bGVyIGlzCi0vLyByZXNwb25zaWJsZSB0byB6ZXJvLWluaXRpYWxpemUgfGF0b21pY19jbGFzc19p
ZHwuIEl0J3MgZmluZSB0bwotLy8gc2ltdWx0YW5lb3VzbHkgY2FsbCB0aGlzIG9uIG11bHRpcGxl
IHRocmVhZHMgcmVmZXJlbmNpbmcgdGhlIHNhbWUKLS8vIHxhdG9taWNfbWV0aG9kX2lkfC4KLWpj
bGFzcyBMYXp5R2V0Q2xhc3MoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGNsYXNzX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6YXRvbWljPGpjbGFz
cz4qIGF0b21pY19jbGFzc19pZCk7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGZvciBK
TklFbnYgR2V0KFN0YXRpYylNZXRob2RJRC4KLWNsYXNzIE1ldGhvZElEIHsKLSBwdWJsaWM6Ci0g
IGVudW0gVHlwZSB7Ci0gICAgVFlQRV9TVEFUSUMsCi0gICAgVFlQRV9JTlNUQU5DRSwKLSAgfTsK
LQotICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSB8YXRvbWljX21ldGhvZF9pZHwg
dG8gY29udGFpbiBhIHJlZiB0bwotICAvLyB0aGUgZ2l2ZW4gbWV0aG9kLCBhbmQgd2lsbCByZXR1
cm4gdGhhdCByZWYgb24gc3Vic2VxdWVudCBjYWxscy4gVGhlIGNhbGxlcgotICAvLyBpcyByZXNw
b25zaWJsZSB0byB6ZXJvLWluaXRpYWxpemUgfGF0b21pY19tZXRob2RfaWR8LiBJdCdzIGZpbmUg
dG8KLSAgLy8gc2ltdWx0YW5lb3VzbHkgY2FsbCB0aGlzIG9uIG11bHRpcGxlIHRocmVhZHMgcmVm
ZXJlbmNpbmcgdGhlIHNhbWUKLSAgLy8gfGF0b21pY19tZXRob2RfaWR8LgotICB0ZW1wbGF0ZSA8
VHlwZSB0eXBlPgotICBzdGF0aWMgam1ldGhvZElEIExhenlHZXQoSk5JRW52KiBlbnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBqY2xhc3MgY2xhenosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBtZXRob2RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGpuaV9zaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmF0b21pYzxqbWV0aG9kSUQ+KiBhdG9taWNfbWV0aG9kX2lkKTsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSB3ZWJydGMKLQotLy8gUmUtZXhwb3J0IHJlbGV2YW50IGNsYXNzZXMgaW50byB0
aGUgbmFtZXNwYWNlcyB0aGUgc2NyaXB0IGV4cGVjdHMuCi1uYW1lc3BhY2UgYmFzZSB7Ci1uYW1l
c3BhY2UgYW5kcm9pZCB7Ci0KLXVzaW5nIHdlYnJ0Yzo6SmF2YVBhcmFtUmVmOwotdXNpbmcgd2Vi
cnRjOjpKYXZhUmVmOwotdXNpbmcgd2VicnRjOjpTY29wZWRKYXZhTG9jYWxSZWY7Ci11c2luZyB3
ZWJydGM6OkxhenlHZXRDbGFzczsKLXVzaW5nIHdlYnJ0Yzo6TWV0aG9kSUQ7Ci0KLX0gIC8vIG5h
bWVzcGFjZSBhbmRyb2lkCi19ICAvLyBuYW1lc3BhY2UgYmFzZQotCi1uYW1lc3BhY2Ugam5pX2dl
bmVyYXRvciB7Ci1pbmxpbmUgdm9pZCBDaGVja0V4Y2VwdGlvbihKTklFbnYqIGVudikgewotICBD
SEVDS19FWENFUFRJT04oZW52KTsKLX0KLQotLy8gQSAzMiBiaXQgbnVtYmVyIGNvdWxkIGJlIGFu
IGFkZHJlc3Mgb24gc3RhY2suIFJhbmRvbSA2NCBiaXQgbWFya2VyIG9uIHRoZQotLy8gc3RhY2sg
aXMgbXVjaCBsZXNzIGxpa2VseSB0byBiZSBwcmVzZW50IG9uIHN0YWNrLgotY29uc3RleHByIHVp
bnQ2NF90IGtKbmlTdGFja01hcmtlclZhbHVlID0gMHhiZGJkZWYxYmViY2FkZTFiOwotCi0vLyBD
b250ZXh0IGFib3V0IHRoZSBKTkkgY2FsbCB3aXRoIGV4Y2VwdGlvbiBjaGVja2VkIHRvIGJlIHN0
b3JlZCBpbiBzdGFjay4KLXN0cnVjdCBCQVNFX0VYUE9SVCBKbmlKYXZhQ2FsbENvbnRleHRVbmNo
ZWNrZWQgewotICBpbmxpbmUgSm5pSmF2YUNhbGxDb250ZXh0VW5jaGVja2VkKCkgewotLy8gVE9E
Tyhzc2lkKTogSW1wbGVtZW50IGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLgotI2lmIGRlZmluZWQo
X19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKLSAgICAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBpbmNyZW1lbnQgdGhlIHN0YWNrIHBvaW50ZXIuCi0gICAg
YXNtIHZvbGF0aWxlKCJtb3YgJTAsIHNwIiA6ICI9ciIoc3ApKTsKLSNlbHNlCi0gICAgc3AgPSAw
OwotI2VuZGlmCi0gIH0KLQotICAvLyBGb3JjZSBubyBpbmxpbmUgdG8gcmVkdWNlIGNvZGUgc2l6
ZS4KLSAgdGVtcGxhdGUgPGJhc2U6OmFuZHJvaWQ6Ok1ldGhvZElEOjpUeXBlIHR5cGU+Ci0gIHZv
aWQgSW5pdChKTklFbnYqIGVudiwKLSAgICAgICAgICAgIGpjbGFzcyBjbGF6eiwKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG1ldGhvZF9uYW1lLAotICAgICAgICAgICAgY29uc3QgY2hhciogam5p
X3NpZ25hdHVyZSwKLSAgICAgICAgICAgIHN0ZDo6YXRvbWljPGptZXRob2RJRD4qIGF0b21pY19t
ZXRob2RfaWQpIHsKLSAgICBlbnYxID0gZW52OwotCi0gICAgLy8gTWFrZSBzdXJlIGNvbXBpbGVy
IGRvZXNuJ3Qgb3B0aW1pemUgb3V0IHRoZSBhc3NpZ25tZW50LgotICAgIG1lbWNweSgmbWFya2Vy
LCAma0puaVN0YWNrTWFya2VyVmFsdWUsIHNpemVvZihrSm5pU3RhY2tNYXJrZXJWYWx1ZSkpOwot
ICAgIC8vIEdldHMgUEMgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24uCi0gICAgcGMgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQotICAg
IG1ldGhvZF9pZCA9IGJhc2U6OmFuZHJvaWQ6Ok1ldGhvZElEOjpMYXp5R2V0PHR5cGU+KAotICAg
ICAgICBlbnYsIGNsYXp6LCBtZXRob2RfbmFtZSwgam5pX3NpZ25hdHVyZSwgYXRvbWljX21ldGhv
ZF9pZCk7Ci0gIH0KLQotICB+Sm5pSmF2YUNhbGxDb250ZXh0VW5jaGVja2VkKCkgewotICAgIC8v
IFJlc2V0IHNvIHRoYXQgc3B1cmlvdXMgbWFya2VyIGZpbmRzIGFyZSBhdm9pZGVkLgotICAgIG1l
bXNldCgmbWFya2VyLCAwLCBzaXplb2YobWFya2VyKSk7Ci0gIH0KLQotICB1aW50NjRfdCBtYXJr
ZXI7Ci0gIHVpbnRwdHJfdCBzcDsKLSAgdWludHB0cl90IHBjOwotCi0gIEpOSUVudiogZW52MTsK
LSAgam1ldGhvZElEIG1ldGhvZF9pZDsKLX07Ci0KLS8vIENvbnRleHQgYWJvdXQgdGhlIEpOSSBj
YWxsIHdpdGggZXhjZXB0aW9uIHVuY2hlY2tlZCB0byBiZSBzdG9yZWQgaW4gc3RhY2suCi1zdHJ1
Y3QgQkFTRV9FWFBPUlQgSm5pSmF2YUNhbGxDb250ZXh0Q2hlY2tlZCB7Ci0gIC8vIEZvcmNlIG5v
IGlubGluZSB0byByZWR1Y2UgY29kZSBzaXplLgotICB0ZW1wbGF0ZSA8YmFzZTo6YW5kcm9pZDo6
TWV0aG9kSUQ6OlR5cGUgdHlwZT4KLSAgdm9pZCBJbml0KEpOSUVudiogZW52LAotICAgICAgICAg
ICAgamNsYXNzIGNsYXp6LAotICAgICAgICAgICAgY29uc3QgY2hhciogbWV0aG9kX25hbWUsCi0g
ICAgICAgICAgICBjb25zdCBjaGFyKiBqbmlfc2lnbmF0dXJlLAotICAgICAgICAgICAgc3RkOjph
dG9taWM8am1ldGhvZElEPiogYXRvbWljX21ldGhvZF9pZCkgewotICAgIGJhc2UuSW5pdDx0eXBl
PihlbnYsIGNsYXp6LCBtZXRob2RfbmFtZSwgam5pX3NpZ25hdHVyZSwgYXRvbWljX21ldGhvZF9p
ZCk7Ci0gICAgLy8gUmVzZXQgfHBjfCB0byBjb3JyZWN0IGNhbGxlci4KLSAgICBiYXNlLnBjID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7
Ci0gIH0KLQotICB+Sm5pSmF2YUNhbGxDb250ZXh0Q2hlY2tlZCgpIHsgam5pX2dlbmVyYXRvcjo6
Q2hlY2tFeGNlcHRpb24oYmFzZS5lbnYxKTsgfQotCi0gIEpuaUphdmFDYWxsQ29udGV4dFVuY2hl
Y2tlZCBiYXNlOwotfTsKLQotc3RhdGljX2Fzc2VydChzaXplb2YoSm5pSmF2YUNhbGxDb250ZXh0
Q2hlY2tlZCkgPT0KLSAgICAgICAgICAgICAgICAgIHNpemVvZihKbmlKYXZhQ2FsbENvbnRleHRV
bmNoZWNrZWQpLAotICAgICAgICAgICAgICAiU3RhY2sgdW53aW5kZXIgY2Fubm90IHdvcmsgd2l0
aCBzdHJ1Y3RzIG9mIGRpZmZlcmVudCBzaXplcy4iKTsKLX0gIC8vIG5hbWVzcGFjZSBqbmlfZ2Vu
ZXJhdG9yCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9KTklfR0VORVJBVE9SX0hF
TFBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBl
cnMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMzk5YWJhYjE4ODJlMjRmNTUy
OGIzMGViNDMyNTcxMjY3MGJlM2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5jYworKysgL2Rldi9udWxsCkBAIC0xLDUxICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9q
bmlfaGVscGVycy5oIgotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5h
bWVzcGFjZSBqbmkgewotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmV3RGlyZWN0Qnl0
ZUJ1ZmZlcihKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQqIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqbG9uZyBjYXBhY2l0eSkgewotICBTY29wZWRKYXZhTG9jYWxS
ZWY8am9iamVjdD4gYnVmZmVyKAotICAgICAgZW52LCBlbnYtPk5ld0RpcmVjdEJ5dGVCdWZmZXIo
YWRkcmVzcywgY2FwYWNpdHkpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGVudikgPDwgImVycm9yIE5l
d0RpcmVjdEJ5dGVCdWZmZXIiOwotICByZXR1cm4gYnVmZmVyOwotfQotCi1qb2JqZWN0IE5ld0ds
b2JhbFJlZihKTklFbnYqIGpuaSwgam9iamVjdCBvKSB7Ci0gIGpvYmplY3QgcmV0ID0gam5pLT5O
ZXdHbG9iYWxSZWYobyk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcg
TmV3R2xvYmFsUmVmIjsKLSAgUlRDX0NIRUNLKHJldCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXZv
aWQgRGVsZXRlR2xvYmFsUmVmKEpOSUVudiogam5pLCBqb2JqZWN0IG8pIHsKLSAgam5pLT5EZWxl
dGVHbG9iYWxSZWYobyk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcg
RGVsZXRlR2xvYmFsUmVmIjsKLX0KLQotLy8gU2NvcGUgSmF2YSBsb2NhbCByZWZlcmVuY2VzIHRv
IHRoZSBsaWZldGltZSBvZiB0aGlzIG9iamVjdC4gIFVzZSBpbiBhbGwgQysrCi0vLyBjYWxsYmFj
a3MgKGkuZS4gZW50cnkgcG9pbnRzIHRoYXQgZG9uJ3Qgb3JpZ2luYXRlIGluIGEgSmF2YSBjYWxs
c3RhY2sKLS8vIHRocm91Z2ggYSAibmF0aXZlIiBtZXRob2QgY2FsbCkuCi1TY29wZWRMb2NhbFJl
ZkZyYW1lOjpTY29wZWRMb2NhbFJlZkZyYW1lKEpOSUVudiogam5pKSA6IGpuaV8oam5pKSB7Ci0g
IFJUQ19DSEVDSygham5pXy0+UHVzaExvY2FsRnJhbWUoMCkpIDw8ICJGYWlsZWQgdG8gUHVzaExv
Y2FsRnJhbWUiOwotfQotU2NvcGVkTG9jYWxSZWZGcmFtZTo6flNjb3BlZExvY2FsUmVmRnJhbWUo
KSB7Ci0gIGpuaV8tPlBvcExvY2FsRnJhbWUobnVsbHB0cik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBl
cnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2EyZjI3Yjk5ZGFiMTE4YmJkZDBlNTQzMTBhNTY2N2Q4ZGQzYjBiNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0vLyBUaGlzIGZp
bGUgY29udGFpbiBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgZm9yIEpOSS4KLS8v
IEJlZm9yZSB1c2luZyBhbnkgb2YgdGhlIG1ldGhvZHMsIEluaXRHbG9iYWxKbmlWYXJpYWJsZXMg
bXVzdCBiZSBjYWxsZWQuCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9KTklfSEVMUEVS
U19IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX0pOSV9IRUxQRVJTX0hfCi0KLSNpbmNs
dWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9u
YXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZl
X2FwaS9qbmkvc2NvcGVkX2phdmFfcmVmLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2pu
aS9qdm0uaCIKLQotLy8gQ29udmVuaWVuY2UgbWFjcm8gZGVmaW5pbmcgSk5JLWFjY2Vzc2libGUg
bWV0aG9kcyBpbiB0aGUgb3JnLndlYnJ0YyBwYWNrYWdlLgotLy8gRWxpbWluYXRlcyB1bm5lY2Vz
c2FyeSBib2lsZXJwbGF0ZSBhbmQgbGluZS13cmFwcywgcmVkdWNpbmcgdmlzdWFsIGNsdXR0ZXIu
Ci0jaWYgZGVmaW5lZChXRUJSVENfQVJDSF9YODYpCi0vLyBEYWx2aWsgSklUIGdlbmVyYXRlZCBj
b2RlIGRvZXNuJ3QgZ3VhcmFudGVlIDE2LWJ5dGUgc3RhY2sgYWxpZ25tZW50IG9uCi0vLyB4ODYg
LSB1c2UgZm9yY2VfYWxpZ25fYXJnX3BvaW50ZXIgdG8gcmVhbGlnbiB0aGUgc3RhY2sgYXQgdGhl
IEpOSQotLy8gYm91bmRhcnkuIGNyYnVnLmNvbS82NTUyNDgKLSNkZWZpbmUgSk5JX0ZVTkNUSU9O
X0RFQ0xBUkFUSU9OKHJldHR5cGUsIG5hbWUsIC4uLikgICAgICAgICAgICAgICAgICAgIFwKLSAg
X19hdHRyaWJ1dGVfXygoZm9yY2VfYWxpZ25fYXJnX3BvaW50ZXIpKSBleHRlcm4gIkMiIEpOSUVY
UE9SVCByZXR0eXBlIFwKLSAgICAgIEpOSUNBTEwgSmF2YV9vcmdfd2VicnRjXyMjbmFtZShfX1ZB
X0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIEpOSV9GVU5DVElPTl9ERUNMQVJBVElPTihyZXR0eXBl
LCBuYW1lLCAuLi4pIFwKLSAgZXh0ZXJuICJDIiBKTklFWFBPUlQgcmV0dHlwZSBKTklDQUxMIEph
dmFfb3JnX3dlYnJ0Y18jI25hbWUoX19WQV9BUkdTX18pCi0jZW5kaWYKLQotbmFtZXNwYWNlIHdl
YnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8gVE9ETyhzYWthbCk6IFJlbW92ZSBvbmNlIGNs
aWVudHMgaGF2ZSBtaWdyYXRlZC4KLXVzaW5nIDo6d2VicnRjOjpKYXZhVG9TdGRNYXBTdHJpbmdz
OwotCi0vLyBEZXByZWNhdGVkLCB1c2UgTmF0aXZlVG9KYXZhUG9pbnRlci4KLWlubGluZSBsb25n
IGpsb25nRnJvbVBvaW50ZXIodm9pZCogcHRyKSB7Ci0gIHJldHVybiBOYXRpdmVUb0phdmFQb2lu
dGVyKHB0cik7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOZXdEaXJlY3RCeXRl
QnVmZmVyKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCogYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpsb25nIGNhcGFjaXR5KTsKLQotam9iamVjdCBOZXdHbG9iYWxS
ZWYoSk5JRW52KiBqbmksIGpvYmplY3Qgbyk7Ci0KLXZvaWQgRGVsZXRlR2xvYmFsUmVmKEpOSUVu
diogam5pLCBqb2JqZWN0IG8pOwotCi0vLyBTY29wZSBKYXZhIGxvY2FsIHJlZmVyZW5jZXMgdG8g
dGhlIGxpZmV0aW1lIG9mIHRoaXMgb2JqZWN0LiAgVXNlIGluIGFsbCBDKysKLS8vIGNhbGxiYWNr
cyAoaS5lLiBlbnRyeSBwb2ludHMgdGhhdCBkb24ndCBvcmlnaW5hdGUgaW4gYSBKYXZhIGNhbGxz
dGFjawotLy8gdGhyb3VnaCBhICJuYXRpdmUiIG1ldGhvZCBjYWxsKS4KLWNsYXNzIFNjb3BlZExv
Y2FsUmVmRnJhbWUgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU2NvcGVkTG9jYWxSZWZGcmFtZShK
TklFbnYqIGpuaSk7Ci0gIH5TY29wZWRMb2NhbFJlZkZyYW1lKCk7Ci0KLSBwcml2YXRlOgotICBK
TklFbnYqIGpuaV87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLS8vIFRPRE8obWFnamVkKTogUmVtb3ZlIG9uY2UgZXh0ZXJuYWwgY2xpZW50cyBh
cmUgdXBkYXRlZC4KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotdXNpbmcgd2VicnRjOjpBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQ7Ci11c2luZyB3ZWJydGM6OmpuaTo6SW5pdEdsb2JhbEpu
aVZhcmlhYmxlczsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlmICAvLyBT
REtfQU5EUk9JRF9TUkNfSk5JX0pOSV9IRUxQRVJTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2puaV9v
bmxvYWQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvam5pL2puaV9vbmxvYWQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg4NzMwZWE0ZWEyNzVjYzk1NzE3MmM3MjRmYzhmNDM3YTE0ODE3Y2MuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfb25sb2FkLmNjCisr
KyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1
ZGUgPGpuaS5oPgotI3VuZGVmIEpOSUVYUE9SVAotI2RlZmluZSBKTklFWFBPUlQgX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotI2luY2x1ZGUgInJ0Y19iYXNlL3NzbF9h
ZGFwdGVyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9jbGFzc19yZWZlcmVuY2Vf
aG9sZGVyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgot
Ci1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1leHRlcm4gIkMiIGppbnQg
Sk5JRVhQT1JUIEpOSUNBTEwgSk5JX09uTG9hZChKYXZhVk0qIGp2bSwgdm9pZCogcmVzZXJ2ZWQp
IHsKLSAgamludCByZXQgPSBJbml0R2xvYmFsSm5pVmFyaWFibGVzKGp2bSk7Ci0gIFJUQ19EQ0hF
Q0tfR0UocmV0LCAwKTsKLSAgaWYgKHJldCA8IDApCi0gICAgcmV0dXJuIC0xOwotCi0gIFJUQ19D
SEVDSyhydGM6OkluaXRpYWxpemVTU0woKSkgPDwgIkZhaWxlZCB0byBJbml0aWFsaXplU1NMKCki
OwotICBMb2FkR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKTsKLQotICByZXR1cm4gcmV0Owot
fQotCi1leHRlcm4gIkMiIHZvaWQgSk5JRVhQT1JUIEpOSUNBTEwgSk5JX09uVW5Mb2FkKEphdmFW
TSoganZtLCB2b2lkKiByZXNlcnZlZCkgewotICBGcmVlR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xk
ZXIoKTsKLSAgUlRDX0NIRUNLKHJ0Yzo6Q2xlYW51cFNTTCgpKSA8PCAiRmFpbGVkIHRvIENsZWFu
dXBTU0woKSI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvanZtLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qdm0uY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVhYTRmNjcyMTI0NTE1ZjZhMmQ0ODE0ZjU3NDBmYTY1YmMzN2Q4NWIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qdm0u
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
OCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
I2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvanZtLmgiCi0KLSNpbmNsdWRlIDxhc20vdW5p
c3RkLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgotI2lu
Y2x1ZGUgPHN5cy9zeXNjYWxsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9jaGVja3MuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotc3RhdGljIEphdmFWTSogZ19qdm0gPSBudWxscHRyOwot
Ci1zdGF0aWMgcHRocmVhZF9vbmNlX3QgZ19qbmlfcHRyX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5J
VDsKLQotLy8gS2V5IGZvciBwZXItdGhyZWFkIEpOSUVudiogZGF0YS4gIE5vbi1OVUxMIGluIHRo
cmVhZHMgYXR0YWNoZWQgdG8gfGdfanZtfCBieQotLy8gQXR0YWNoQ3VycmVudFRocmVhZElmTmVl
ZGVkKCksIE5VTEwgaW4gdW5hdHRhY2hlZCB0aHJlYWRzIGFuZCB0aHJlYWRzIHRoYXQKLS8vIHdl
cmUgYXR0YWNoZWQgYnkgdGhlIEpWTSBiZWNhdXNlIG9mIGEgSmF2YS0+bmF0aXZlIGNhbGwuCi1z
dGF0aWMgcHRocmVhZF9rZXlfdCBnX2puaV9wdHI7Ci0KLUphdmFWTSogR2V0SlZNKCkgewotICBS
VENfQ0hFQ0soZ19qdm0pIDw8ICJKTklfT25Mb2FkIGZhaWxlZCB0byBydW4/IjsKLSAgcmV0dXJu
IGdfanZtOwotfQotCi0vLyBSZXR1cm4gYSB8Sk5JRW52KnwgdXNhYmxlIG9uIHRoaXMgdGhyZWFk
IG9yIE5VTEwgaWYgdGhpcyB0aHJlYWQgaXMgZGV0YWNoZWQuCi1KTklFbnYqIEdldEVudigpIHsK
LSAgdm9pZCogZW52ID0gbnVsbHB0cjsKLSAgamludCBzdGF0dXMgPSBnX2p2bS0+R2V0RW52KCZl
bnYsIEpOSV9WRVJTSU9OXzFfNik7Ci0gIFJUQ19DSEVDSygoKGVudiAhPSBudWxscHRyKSAmJiAo
c3RhdHVzID09IEpOSV9PSykpIHx8Ci0gICAgICAgICAgICAoKGVudiA9PSBudWxscHRyKSAmJiAo
c3RhdHVzID09IEpOSV9FREVUQUNIRUQpKSkKLSAgICAgIDw8ICJVbmV4cGVjdGVkIEdldEVudiBy
ZXR1cm46ICIgPDwgc3RhdHVzIDw8ICI6IiA8PCBlbnY7Ci0gIHJldHVybiByZWludGVycHJldF9j
YXN0PEpOSUVudio+KGVudik7Ci19Ci0KLXN0YXRpYyB2b2lkIFRocmVhZERlc3RydWN0b3Iodm9p
ZCogcHJldl9qbmlfcHRyKSB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gb25seSBydW5zIG9uIHRocmVh
ZHMgd2hlcmUgfGdfam5pX3B0cnwgaXMgbm9uLU5VTEwsIG1lYW5pbmcKLSAgLy8gd2Ugd2VyZSBy
ZXNwb25zaWJsZSBmb3Igb3JpZ2luYWxseSBhdHRhY2hpbmcgdGhlIHRocmVhZCwgc28gYXJlIHJl
c3BvbnNpYmxlCi0gIC8vIGZvciBkZXRhY2hpbmcgaXQgbm93LiAgSG93ZXZlciwgYmVjYXVzZSBz
b21lIEpWTSBpbXBsZW1lbnRhdGlvbnMgKG5vdGFibHkKLSAgLy8gT3JhY2xlJ3MgaHR0cDovL2dv
by5nbC9lSEFwWVQpIGFsc28gdXNlIHRoZSBwdGhyZWFkX2tleV9jcmVhdGUgbWVjaGFuaXNtLAot
ICAvLyB0aGUgSlZNcyBhY2NvdW50aW5nIGluZm8gZm9yIHRoaXMgdGhyZWFkIG1heSBhbHJlYWR5
IGJlIHdpcGVkIG91dCBieSB0aGUKLSAgLy8gdGltZSB0aGlzIGlzIGNhbGxlZC4gVGh1cyBpdCBt
YXkgYXBwZWFyIHdlIGFyZSBhbHJlYWR5IGRldGFjaGVkIGV2ZW4gdGhvdWdoCi0gIC8vIGl0IHdh
cyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gZGV0YWNoISAgT2ggd2VsbC4KLSAgaWYgKCFHZXRFbnYo
KSkKLSAgICByZXR1cm47Ci0KLSAgUlRDX0NIRUNLKEdldEVudigpID09IHByZXZfam5pX3B0cikK
LSAgICAgIDw8ICJEZXRhY2hpbmcgZnJvbSBhbm90aGVyIHRocmVhZDogIiA8PCBwcmV2X2puaV9w
dHIgPDwgIjoiIDw8IEdldEVudigpOwotICBqaW50IHN0YXR1cyA9IGdfanZtLT5EZXRhY2hDdXJy
ZW50VGhyZWFkKCk7Ci0gIFJUQ19DSEVDSyhzdGF0dXMgPT0gSk5JX09LKSA8PCAiRmFpbGVkIHRv
IGRldGFjaCB0aHJlYWQ6ICIgPDwgc3RhdHVzOwotICBSVENfQ0hFQ0soIUdldEVudigpKSA8PCAi
RGV0YWNoaW5nIHdhcyBhIHN1Y2Nlc3NmdWwgbm8tb3A/Pz8iOwotfQotCi1zdGF0aWMgdm9pZCBD
cmVhdGVKTklQdHJLZXkoKSB7Ci0gIFJUQ19DSEVDSyghcHRocmVhZF9rZXlfY3JlYXRlKCZnX2pu
aV9wdHIsICZUaHJlYWREZXN0cnVjdG9yKSkKLSAgICAgIDw8ICJwdGhyZWFkX2tleV9jcmVhdGUi
OwotfQotCi1qaW50IEluaXRHbG9iYWxKbmlWYXJpYWJsZXMoSmF2YVZNKiBqdm0pIHsKLSAgUlRD
X0NIRUNLKCFnX2p2bSkgPDwgIkluaXRHbG9iYWxKbmlWYXJpYWJsZXMhIjsKLSAgZ19qdm0gPSBq
dm07Ci0gIFJUQ19DSEVDSyhnX2p2bSkgPDwgIkluaXRHbG9iYWxKbmlWYXJpYWJsZXMgaGFuZGVk
IE5VTEw/IjsKLQotICBSVENfQ0hFQ0soIXB0aHJlYWRfb25jZSgmZ19qbmlfcHRyX29uY2UsICZD
cmVhdGVKTklQdHJLZXkpKSA8PCAicHRocmVhZF9vbmNlIjsKLQotICBKTklFbnYqIGpuaSA9IG51
bGxwdHI7Ci0gIGlmIChqdm0tPkdldEVudihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmpuaSks
IEpOSV9WRVJTSU9OXzFfNikgIT0gSk5JX09LKQotICAgIHJldHVybiAtMTsKLQotICByZXR1cm4g
Sk5JX1ZFUlNJT05fMV82OwotfQotCi0vLyBSZXR1cm4gdGhyZWFkIElEIGFzIGEgc3RyaW5nLgot
c3RhdGljIHN0ZDo6c3RyaW5nIEdldFRocmVhZElkKCkgewotICBjaGFyIGJ1ZlsyMV07ICAvLyBC
aWcgZW5vdWdoIHRvIGhvbGQgYSBrdWludDY0bWF4IHBsdXMgdGVybWluYXRpbmcgTlVMTC4KLSAg
UlRDX0NIRUNLX0xUKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlbGQiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZz4oc3lzY2FsbChfX05SX2dldHRpZCkpKSwK
LSAgICAgICAgICAgICAgIHNpemVvZihidWYpKQotICAgICAgPDwgIlRocmVhZCBpZCBpcyBiaWdn
ZXIgdGhhbiB1aW50NjQ/PyI7Ci0gIHJldHVybiBzdGQ6OnN0cmluZyhidWYpOwotfQotCi0vLyBS
ZXR1cm4gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgbmFtZS4KLXN0YXRpYyBzdGQ6OnN0cmluZyBHZXRU
aHJlYWROYW1lKCkgewotICBjaGFyIG5hbWVbMTddID0gezB9OwotICBpZiAocHJjdGwoUFJfR0VU
X05BTUUsIG5hbWUpICE9IDApCi0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCI8bm9uYW1lPiIpOwot
ICByZXR1cm4gc3RkOjpzdHJpbmcobmFtZSk7Ci19Ci0KLS8vIFJldHVybiBhIHxKTklFbnYqfCB1
c2FibGUgb24gdGhpcyB0aHJlYWQuICBBdHRhY2hlcyB0byB8Z19qdm18IGlmIG5lY2Vzc2FyeS4K
LUpOSUVudiogQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCkgewotICBKTklFbnYqIGpuaSA9
IEdldEVudigpOwotICBpZiAoam5pKQotICAgIHJldHVybiBqbmk7Ci0gIFJUQ19DSEVDSyghcHRo
cmVhZF9nZXRzcGVjaWZpYyhnX2puaV9wdHIpKQotICAgICAgPDwgIlRMUyBoYXMgYSBKTklFbnYq
IGJ1dCBub3QgYXR0YWNoZWQ/IjsKLQotICBzdGQ6OnN0cmluZyBuYW1lKEdldFRocmVhZE5hbWUo
KSArICIgLSAiICsgR2V0VGhyZWFkSWQoKSk7Ci0gIEphdmFWTUF0dGFjaEFyZ3MgYXJnczsKLSAg
YXJncy52ZXJzaW9uID0gSk5JX1ZFUlNJT05fMV82OwotICBhcmdzLm5hbWUgPSAmbmFtZVswXTsK
LSAgYXJncy5ncm91cCA9IG51bGxwdHI7Ci0vLyBEZWFsIHdpdGggZGlmZmVyZW5jZSBpbiBzaWdu
YXR1cmVzIGJldHdlZW4gT3JhY2xlJ3Mgam5pLmggYW5kIEFuZHJvaWQncy4KLSNpZmRlZiBfSkFW
QVNPRlRfSk5JX0hfICAvLyBPcmFjbGUncyBqbmkuaCB2aW9sYXRlcyB0aGUgSk5JIHNwZWMhCi0g
IHZvaWQqIGVudiA9IG51bGxwdHI7Ci0jZWxzZQotICBKTklFbnYqIGVudiA9IG51bGxwdHI7Ci0j
ZW5kaWYKLSAgUlRDX0NIRUNLKCFnX2p2bS0+QXR0YWNoQ3VycmVudFRocmVhZCgmZW52LCAmYXJn
cykpCi0gICAgICA8PCAiRmFpbGVkIHRvIGF0dGFjaCB0aHJlYWQiOwotICBSVENfQ0hFQ0soZW52
KSA8PCAiQXR0YWNoQ3VycmVudFRocmVhZCBoYW5kZWQgYmFjayBOVUxMISI7Ci0gIGpuaSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Sk5JRW52Kj4oZW52KTsKLSAgUlRDX0NIRUNLKCFwdGhyZWFkX3NldHNw
ZWNpZmljKGdfam5pX3B0ciwgam5pKSkgPDwgInB0aHJlYWRfc2V0c3BlY2lmaWMiOwotICByZXR1
cm4gam5pOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL2p2bS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9qdm0uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDY5YTE5YTQ0NWI4MTVkMDFlMTI5ZjUxZDg0NDdiNWQzODRiYTc5MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL2p2bS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRl
ZiBTREtfQU5EUk9JRF9TUkNfSk5JX0pWTV9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5J
X0pWTV9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNw
YWNlIGpuaSB7Ci0KLWppbnQgSW5pdEdsb2JhbEpuaVZhcmlhYmxlcyhKYXZhVk0qIGp2bSk7Ci0K
LS8vIFJldHVybiBhIHxKTklFbnYqfCB1c2FibGUgb24gdGhpcyB0aHJlYWQgb3IgTlVMTCBpZiB0
aGlzIHRocmVhZCBpcyBkZXRhY2hlZC4KLUpOSUVudiogR2V0RW52KCk7Ci0KLUphdmFWTSogR2V0
SlZNKCk7Ci0KLS8vIFJldHVybiBhIHxKTklFbnYqfCB1c2FibGUgb24gdGhpcyB0aHJlYWQuICBB
dHRhY2hlcyB0byB8Z19qdm18IGlmIG5lY2Vzc2FyeS4KLUpOSUVudiogQXR0YWNoQ3VycmVudFRo
cmVhZElmTmVlZGVkKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3
ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX0pWTV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9sb2dnaW5nL2xvZ19zaW5rLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9sb2dnaW5nL2xvZ19zaW5rLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTJhNzgxNWFkZGMwODMzNWUzNjgxMDM1MmQy
ZjU1NDA1ZmM1OWNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3NyYy9qbmkvbG9nZ2luZy9sb2dfc2luay5jYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9sb2dn
aW5nL2xvZ19zaW5rLmgiCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfbG9nZ2lu
Z19qbmkvSk5JTG9nZ2luZ19qbmkuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ug
am5pIHsKLQotSk5JTG9nU2luazo6Sk5JTG9nU2luayhKTklFbnYqIGVudiwgY29uc3QgSmF2YVJl
Zjxqb2JqZWN0PiYgal9sb2dnaW5nKQotICAgIDogal9sb2dnaW5nXyhlbnYsIGpfbG9nZ2luZykg
e30KLUpOSUxvZ1Npbms6On5KTklMb2dTaW5rKCkgPSBkZWZhdWx0OwotCi12b2lkIEpOSUxvZ1Np
bms6Ok9uTG9nTWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYgbXNnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnRjOjpMb2dnaW5nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0YWcpIHsKLSAgSk5JRW52KiBlbnYgPSBB
dHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgSmF2YV9KTklMb2dnaW5nX2xvZ1RvSW5q
ZWN0YWJsZShlbnYsIGpfbG9nZ2luZ18sIE5hdGl2ZVRvSmF2YVN0cmluZyhlbnYsIG1zZyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVG9KYXZhSW50ZWdlcihlbnYs
IHNldmVyaXR5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmVUb0ph
dmFTdHJpbmcoZW52LCB0YWcpKTsKLX0KLQotdm9pZCBKTklMb2dTaW5rOjpPbkxvZ01lc3NhZ2Uo
Y29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgewotICBSVENfTk9UUkVBQ0hFRCgpOwotfQotCi19ICAv
LyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5p
L2xvZ2dpbmcvbG9nX3NpbmsuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvbG9nZ2luZy9sb2dfc2luay5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlNDhiODhkY2I3YWVhODQ4NjAwYWI5MWM0MzhjN2EyYTQ3OWY1
ZTViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
bG9nZ2luZy9sb2dfc2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9MT0dHSU5HX0xPR19TSU5L
X0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfTE9HR0lOR19MT0dfU0lOS19IXwotCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1
ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewot
bmFtZXNwYWNlIGpuaSB7Ci0KLWNsYXNzIEpOSUxvZ1NpbmsgOiBwdWJsaWMgcnRjOjpMb2dTaW5r
IHsKLSBwdWJsaWM6Ci0gIEpOSUxvZ1NpbmsoSk5JRW52KiBlbnYsIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfbG9nZ2luZyk7Ci0gIH5KTklMb2dTaW5rKCkgb3ZlcnJpZGU7Ci0KLSAgdm9pZCBP
bkxvZ01lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1zZywKLSAgICAgICAgICAgICAgICAgICAg
cnRjOjpMb2dnaW5nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHRhZykgb3ZlcnJpZGU7Ci0gIHZvaWQgT25Mb2dNZXNzYWdlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBtc2cpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgY29uc3QgU2NvcGVkSmF2YUdsb2Jh
bFJlZjxqb2JqZWN0PiBqX2xvZ2dpbmdfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAg
Ly8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNES19BTkRST0lEX1NSQ19KTklfTE9H
R0lOR19MT0dfU0lOS19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9uYXRpdmVfY2FwdHVyZXJfb2JzZXJ2
ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9zcmMvam5pL25hdGl2ZV9jYXB0dXJlcl9vYnNlcnZlci5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjhlYjQ4NDIyYmM2ZTcxZGE1MmJjMGQ0NmNhYjZiOGI0OGI5ZTIyZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL25hdGl2
ZV9jYXB0dXJlcl9vYnNlcnZlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9uYXRp
dmVfY2FwdHVyZXJfb2JzZXJ2ZXIuaCIKLQotI2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIK
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfdmlkZW9fam5pL05hdGl2ZUNhcHR1cmVy
T2JzZXJ2ZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2
YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvYW5kcm9pZF92aWRlb190
cmFja19zb3VyY2UuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
U2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IENyZWF0ZUphdmFOYXRpdmVDYXB0dXJlck9ic2Vy
dmVyKAotICAgIEpOSUVudiogZW52LAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBbmRyb2lkVmlk
ZW9UcmFja1NvdXJjZT4gbmF0aXZlX3NvdXJjZSkgewotICByZXR1cm4gSmF2YV9OYXRpdmVDYXB0
dXJlck9ic2VydmVyX0NvbnN0cnVjdG9yKAotICAgICAgZW52LCBOYXRpdmVUb0phdmFQb2ludGVy
KG5hdGl2ZV9zb3VyY2UucmVsZWFzZSgpKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0g
IC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvbmF0aXZlX2NhcHR1cmVyX29i
c2VydmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvam5pL25hdGl2ZV9jYXB0dXJlcl9vYnNlcnZlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1MWFjZjQxZjAzNDg4OGM3ZmU4NTM4Mjk0YjA5NDA0NzRjMTQ1NjJi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvbmF0
aXZlX2NhcHR1cmVyX29ic2VydmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoYykgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX05BVElW
RV9DQVBUVVJFUl9PQlNFUlZFUl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX05BVElW
RV9DQVBUVVJFUl9PQlNFUlZFUl9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9zY29wZWRfamF2YV9yZWYuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfdmlkZW9fdHJhY2tfc291cmNlLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PiBDcmVhdGVKYXZhTmF0aXZlQ2FwdHVyZXJPYnNlcnZlcigKLSAgICBKTklFbnYqIGVudiwK
LSAgICBydGM6OnNjb3BlZF9yZWZwdHI8QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U+IG5hdGl2ZV9z
b3VyY2UpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0K
LSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9OQVRJVkVfQ0FQVFVSRVJfT0JTRVJWRVJf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvbnYxMl9idWZmZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL252MTJfYnVmZmVyLmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGU3OTcyNDQ2ZjYxMjY4NTg4OGI4NDVl
OTI0YjhlNGI1MWU1MjVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvbnYxMl9idWZmZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5jbHVkZSA8dmVjdG9y
PgotCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L2NvbnZlcnQu
aCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvc2NhbGUuaCIK
LQotI2luY2x1ZGUgInJ0Y19iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dl
bmVyYXRlZF92aWRlb19qbmkvTlYxMkJ1ZmZlcl9qbmkuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7
Ci1uYW1lc3BhY2Ugam5pIHsKLQotc3RhdGljIHZvaWQgSk5JX05WMTJCdWZmZXJfQ3JvcEFuZFNj
YWxlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGppbnQgY3JvcF94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
bnQgY3JvcF95LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQg
Y3JvcF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50
IGNyb3BfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
bnQgc2NhbGVfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
amludCBzY2FsZV9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NyYywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY193aWR0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY19oZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamludCBzcmNfc3RyaWRlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjX3NsaWNlX2hlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVj
dD4mIGpfZHN0X3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlu
dCBkc3Rfc3RyaWRlX3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RzdF91LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0X3N0cmlkZV91LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9k
c3RfdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdF9z
dHJpZGVfdikgewotICBjb25zdCBpbnQgc3JjX3N0cmlkZV95ID0gc3JjX3N0cmlkZTsKLSAgY29u
c3QgaW50IHNyY19zdHJpZGVfdXYgPSBzcmNfc3RyaWRlOwotICBjb25zdCBpbnQgY3JvcF9jaHJv
bWFfeCA9IGNyb3BfeCAvIDI7Ci0gIGNvbnN0IGludCBjcm9wX2Nocm9tYV95ID0gY3JvcF95IC8g
MjsKLSAgY29uc3QgaW50IGNyb3BfY2hyb21hX3dpZHRoID0gKGNyb3Bfd2lkdGggKyAxKSAvIDI7
Ci0gIGNvbnN0IGludCBjcm9wX2Nocm9tYV9oZWlnaHQgPSAoY3JvcF9oZWlnaHQgKyAxKSAvIDI7
Ci0gIGNvbnN0IGludCB0bXBfc3RyaWRlX3UgPSBjcm9wX2Nocm9tYV93aWR0aDsKLSAgY29uc3Qg
aW50IHRtcF9zdHJpZGVfdiA9IGNyb3BfY2hyb21hX3dpZHRoOwotICBjb25zdCBpbnQgdG1wX3Np
emUgPSBjcm9wX2Nocm9tYV9oZWlnaHQgKiAodG1wX3N0cmlkZV91ICsgdG1wX3N0cmlkZV92KTsK
LQotICB1aW50OF90IGNvbnN0KiBzcmNfeSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90IGNv
bnN0Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfc3JjLm9iaigpKSk7Ci0gIHVpbnQ4
X3QgY29uc3QqIHNyY191diA9IHNyY195ICsgc3JjX3NsaWNlX2hlaWdodCAqIHNyY19zdHJpZGVf
eTsKLQotICB1aW50OF90KiBkc3RfeSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5p
LT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfZHN0X3kub2JqKCkpKTsKLSAgdWludDhfdCogZHN0
X3UgPQotICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRk
cmVzcyhqX2RzdF91Lm9iaigpKSk7Ci0gIHVpbnQ4X3QqIGRzdF92ID0KLSAgICAgIHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3Rfdi5vYmooKSkp
OwotCi0gIC8vIENyb3AgdXNpbmcgcG9pbnRlciBhcml0aG1ldGljLgotICBzcmNfeSArPSBjcm9w
X3ggKyBjcm9wX3kgKiBzcmNfc3RyaWRlX3k7Ci0gIHNyY191diArPSAyICogY3JvcF9jaHJvbWFf
eCArIGNyb3BfY2hyb21hX3kgKiBzcmNfc3RyaWRlX3V2OwotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4
X3Q+IHRtcF9idWZmZXIodG1wX3NpemUpOwotICB1aW50OF90KiB0bXBfdSA9IHRtcF9idWZmZXIu
ZGF0YSgpOwotICB1aW50OF90KiB0bXBfdiA9IHRtcF91ICsgY3JvcF9jaHJvbWFfaGVpZ2h0ICog
dG1wX3N0cmlkZV91OwotCi0gIGxpYnl1djo6U3BsaXRVVlBsYW5lKHNyY191diwgc3JjX3N0cmlk
ZV91diwgdG1wX3UsIHRtcF9zdHJpZGVfdSwgdG1wX3YsCi0gICAgICAgICAgICAgICAgICAgICAg
IHRtcF9zdHJpZGVfdiwgY3JvcF9jaHJvbWFfd2lkdGgsIGNyb3BfY2hyb21hX2hlaWdodCk7Ci0K
LSAgbGlieXV2OjpJNDIwU2NhbGUoc3JjX3ksIHNyY19zdHJpZGVfeSwgdG1wX3UsIHRtcF9zdHJp
ZGVfdSwgdG1wX3YsCi0gICAgICAgICAgICAgICAgICAgIHRtcF9zdHJpZGVfdiwgY3JvcF93aWR0
aCwgY3JvcF9oZWlnaHQsIGRzdF95LCBkc3Rfc3RyaWRlX3ksCi0gICAgICAgICAgICAgICAgICAg
IGRzdF91LCBkc3Rfc3RyaWRlX3UsIGRzdF92LCBkc3Rfc3RyaWRlX3YsIHNjYWxlX3dpZHRoLAot
ICAgICAgICAgICAgICAgICAgICBzY2FsZV9oZWlnaHQsIGxpYnl1djo6a0ZpbHRlckJveCk7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3NyYy9qbmkvbnYyMV9idWZmZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL252MjFfYnVmZmVyLmNjCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxMGUzMzE2ZjMzMDk0ZjIwZDc2OGE3NzFmNjEzOGJlOTU3MTM5
YmE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
bnYyMV9idWZmZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVk
ZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L2NvbnZlcnQuaCIKLSNpbmNsdWRl
ICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvc2NhbGUuaCIKLQotI2luY2x1ZGUg
ImNvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2LmgiCi0jaW5jbHVkZSAi
cnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVv
X2puaS9OVjIxQnVmZmVyX2puaS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBq
bmkgewotCi1zdGF0aWMgdm9pZCBKTklfTlYyMUJ1ZmZlcl9Dcm9wQW5kU2NhbGUoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBjcm9wX3gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBjcm9wX3ksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBjcm9wX3dpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgY3JvcF9oZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBzY2FsZV93aWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNjYWxlX2hl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZh
UGFyYW1SZWY8amJ5dGVBcnJheT4mIGpfc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppbnQgc3JjX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppbnQgc3JjX2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZHN0X3ksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBkc3Rfc3RyaWRlX3ksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVm
PGpvYmplY3Q+JiBqX2RzdF91LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppbnQgZHN0X3N0cmlkZV91LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kc3RfdiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdF9zdHJpZGVfdikgewotICBjb25z
dCBpbnQgc3JjX3N0cmlkZV95ID0gc3JjX3dpZHRoOwotICBjb25zdCBpbnQgc3JjX3N0cmlkZV91
diA9IHNyY193aWR0aDsKLSAgY29uc3QgaW50IGNyb3BfY2hyb21hX3ggPSBjcm9wX3ggLyAyOwot
ICBjb25zdCBpbnQgY3JvcF9jaHJvbWFfeSA9IGNyb3BfeSAvIDI7Ci0KLSAgamJvb2xlYW4gd2Fz
X2NvcHk7Ci0gIGpieXRlKiBzcmNfYnl0ZXMgPSBqbmktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGpf
c3JjLm9iaigpLCAmd2FzX2NvcHkpOwotICBSVENfRENIRUNLKCF3YXNfY29weSk7Ci0gIHVpbnQ4
X3QgY29uc3QqIHNyY195ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90IGNvbnN0Kj4oc3JjX2J5
dGVzKTsKLSAgdWludDhfdCBjb25zdCogc3JjX3V2ID0gc3JjX3kgKyBzcmNfaGVpZ2h0ICogc3Jj
X3N0cmlkZV95OwotCi0gIHVpbnQ4X3QqIGRzdF95ID0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3RfeS5vYmooKSkpOwotICB1aW50
OF90KiBkc3RfdSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RC
dWZmZXJBZGRyZXNzKGpfZHN0X3Uub2JqKCkpKTsKLSAgdWludDhfdCogZHN0X3YgPQotICAgICAg
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RzdF92
Lm9iaigpKSk7Ci0KLSAgLy8gQ3JvcCB1c2luZyBwb2ludGVyIGFyaXRobWV0aWMuCi0gIHNyY195
ICs9IGNyb3BfeCArIGNyb3BfeSAqIHNyY19zdHJpZGVfeTsKLSAgc3JjX3V2ICs9IDIgKiBjcm9w
X2Nocm9tYV94ICsgY3JvcF9jaHJvbWFfeSAqIHNyY19zdHJpZGVfdXY7Ci0KLSAgTlYxMlRvSTQy
MFNjYWxlciBzY2FsZXI7Ci0gIC8vIFUtIGFuZCBWLXBsYW5lcyBhcmUgc3dhcHBlZCBiZWNhdXNl
IHRoaXMgaXMgTlYyMSBub3QgTlYxMi4KLSAgc2NhbGVyLk5WMTJUb0k0MjBTY2FsZShzcmNfeSwg
c3JjX3N0cmlkZV95LCBzcmNfdXYsIHNyY19zdHJpZGVfdXYsIGNyb3Bfd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY3JvcF9oZWlnaHQsIGRzdF95LCBkc3Rfc3RyaWRlX3ksIGRzdF92
LCBkc3Rfc3RyaWRlX3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3UsIGRzdF9zdHJp
ZGVfdSwgc2NhbGVfd2lkdGgsIHNjYWxlX2hlaWdodCk7Ci0KLSAgam5pLT5SZWxlYXNlQnl0ZUFy
cmF5RWxlbWVudHMoal9zcmMub2JqKCksIHNyY19ieXRlcywgSk5JX0FCT1JUKTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9wYy9hbmRyb2lkX25ldHdvcmtfbW9uaXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9hbmRyb2lkX25ldHdvcmtf
bW9uaXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDljMWIwNTZlZjZmMjQ1
OTQ3ZDc2ZGZmNTQxZDY4NGUzNTg0YzgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvYW5kcm9pZF9uZXR3b3JrX21vbml0b3IuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLS8vIFRPRE8oc2Fr
YWwpOiBSZW1vdmUgdGhpcyBmaWxlIG9uY2UgY2xpZW50cyBoYXZlIHVwZGF0ZSB0byB0aGUgbmF0
aXZlIEFQSS4KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfbmV0d29ya19t
b25pdG9yLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2F1ZGlvLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9hdWRpby5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc2YzQyMTc4YWZjYmFmNDYzMTYyNzU3
N2VjN2UwNmM5MGRlMmExOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9zcmMvam5pL3BjL2F1ZGlvLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvYXVk
aW8uaCIKLQotI2luY2x1ZGUgImFwaS9hdWRpb19jb2RlY3MvYnVpbHRpbl9hdWRpb19kZWNvZGVy
X2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJhcGkvYXVkaW9fY29kZWNzL2J1aWx0aW5fYXVkaW9fZW5j
b2Rlcl9mYWN0b3J5LmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2luY2x1
ZGUvYXVkaW9fcHJvY2Vzc2luZy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBq
bmkgewotCi1ydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZWNvZGVyRmFjdG9yeT4gQ3JlYXRlQXVk
aW9EZWNvZGVyRmFjdG9yeSgpIHsKLSAgcmV0dXJuIENyZWF0ZUJ1aWx0aW5BdWRpb0RlY29kZXJG
YWN0b3J5KCk7Ci19Ci0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0VuY29kZXJGYWN0b3J5PiBD
cmVhdGVBdWRpb0VuY29kZXJGYWN0b3J5KCkgewotICByZXR1cm4gQ3JlYXRlQnVpbHRpbkF1ZGlv
RW5jb2RlckZhY3RvcnkoKTsKLX0KLQotcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvUHJvY2Vzc2lu
Zz4gQ3JlYXRlQXVkaW9Qcm9jZXNzaW5nKCkgewotICByZXR1cm4gQXVkaW9Qcm9jZXNzaW5nQnVp
bGRlcigpLkNyZWF0ZSgpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3Bh
Y2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2F1ZGlvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2F1ZGlvLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOGIzYWNjYzJkMjA5OWY3NjAzZWQ4NmJl
MTNkYjRmM2Q5MjgyNjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9wYy9hdWRpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX0FVRElPX0hf
Ci0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfUENfQVVESU9fSF8KLQotLy8gQWRkaW5nICdu
b2duY2hlY2snIHRvIGRpc2FibGUgdGhlIGduIGluY2x1ZGUgaGVhZGVycyBjaGVjay4KLS8vIFdl
IGRvbid0IHdhbnQgdGhpcyB0YXJnZXQgZGVwZW5kIG9uIGF1ZGlvIHJlbGF0ZWQgdGFyZ2V0cwot
I2luY2x1ZGUgImFwaS9hdWRpb19jb2RlY3MvYXVkaW9fZGVjb2Rlcl9mYWN0b3J5LmgiICAvLyBu
b2duY2hlY2sKLSNpbmNsdWRlICJhcGkvYXVkaW9fY29kZWNzL2F1ZGlvX2VuY29kZXJfZmFjdG9y
eS5oIiAgLy8gbm9nbmNoZWNrCi0jaW5jbHVkZSAiYXBpL3Njb3BlZF9yZWZwdHIuaCIKLSNpbmNs
dWRlICJtb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9hdWRpb19wcm9jZXNzaW5nLmgi
ICAvLyBub2duY2hlY2sKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
cnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGVjb2RlckZhY3Rvcnk+IENyZWF0ZUF1ZGlvRGVjb2Rl
ckZhY3RvcnkoKTsKLQotcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRW5jb2RlckZhY3Rvcnk+IENy
ZWF0ZUF1ZGlvRW5jb2RlckZhY3RvcnkoKTsKLQotcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvUHJv
Y2Vzc2luZz4gQ3JlYXRlQXVkaW9Qcm9jZXNzaW5nKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkK
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5J
X1BDX0FVRElPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2F1ZGlvX3RyYWNrLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9w
Yy9hdWRpb190cmFjay5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwMjg3ZWFh
ZTc5N2Q4MjQ4OThjNGJhYWM5MjgzMWNkZTZjM2EzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2F1ZGlvX3RyYWNrLmNjCisrKyAvZGV2L251
bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgImFwaS9t
ZWRpYV9zdHJlYW1faW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVk
X3BlZXJjb25uZWN0aW9uX2puaS9BdWRpb1RyYWNrX2puaS5oIgotCi1uYW1lc3BhY2Ugd2VicnRj
IHsKLW5hbWVzcGFjZSBqbmkgewotCi1zdGF0aWMgdm9pZCBKTklfQXVkaW9UcmFja19TZXRWb2x1
bWUoSk5JRW52KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBq
X3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamRvdWJsZSB2b2x1bWUp
IHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvU291cmNlSW50ZXJmYWNlPiBzb3VyY2UoCi0g
ICAgICByZWludGVycHJldF9jYXN0PEF1ZGlvVHJhY2tJbnRlcmZhY2UqPihqX3ApLT5HZXRTb3Vy
Y2UoKSk7Ci0gIHNvdXJjZS0+U2V0Vm9sdW1lKHZvbHVtZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvY2FsbF9z
ZXNzaW9uX2ZpbGVfcm90YXRpbmdfbG9nX3NpbmsuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2NhbGxfc2Vzc2lvbl9m
aWxlX3JvdGF0aW5nX2xvZ19zaW5rLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
OTM3YTBkMDNhMDA5ZjY2NDQ4MDg2Njc5MmVkNjdhNjY5OTVhODc4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvY2FsbF9zZXNzaW9uX2ZpbGVf
cm90YXRpbmdfbG9nX3NpbmsuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nX3NpbmtzLmgiCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9DYWxsU2Vzc2lvbkZp
bGVSb3RhdGluZ0xvZ1Npbmtfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2Fw
aS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hl
bHBlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotc3RhdGlj
IGpsb25nIEpOSV9DYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmtfQWRkU2luaygKLSAgICBK
TklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8anN0cmluZz4mIGpfZGlyUGF0aCwK
LSAgICBqaW50IGpfbWF4RmlsZVNpemUsCi0gICAgamludCBqX3NldmVyaXR5KSB7Ci0gIHN0ZDo6
c3RyaW5nIGRpcl9wYXRoID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9kaXJQYXRoKTsKLSAgcnRj
OjpDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsqIHNpbmsgPQotICAgICAgbmV3IHJ0Yzo6
Q2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rKGRpcl9wYXRoLCBqX21heEZpbGVTaXplKTsK
LSAgaWYgKCFzaW5rLT5Jbml0KCkpIHsKLSAgICBSVENfTE9HX1YocnRjOjpMb2dnaW5nU2V2ZXJp
dHk6OkxTX1dBUk5JTkcpCi0gICAgICAgIDw8ICJGYWlsZWQgdG8gaW5pdCBDYWxsU2Vzc2lvbkZp
bGVSb3RhdGluZ0xvZ1NpbmsgZm9yIHBhdGggIgotICAgICAgICA8PCBkaXJfcGF0aDsKLSAgICBk
ZWxldGUgc2luazsKLSAgICByZXR1cm4gMDsKLSAgfQotICBydGM6OkxvZ01lc3NhZ2U6OkFkZExv
Z1RvU3RyZWFtKAotICAgICAgc2luaywgc3RhdGljX2Nhc3Q8cnRjOjpMb2dnaW5nU2V2ZXJpdHk+
KGpfc2V2ZXJpdHkpKTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIoc2luayk7Ci19Ci0KLXN0
YXRpYyB2b2lkIEpOSV9DYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmtfRGVsZXRlU2luaygK
LSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3NpbmspIHsKLSAgcnRjOjpDYWxsU2Vzc2lv
bkZpbGVSb3RhdGluZ0xvZ1NpbmsqIHNpbmsgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxydGM6
OkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luayo+KGpfc2luayk7Ci0gIHJ0Yzo6TG9nTWVz
c2FnZTo6UmVtb3ZlTG9nVG9TdHJlYW0oc2luayk7Ci0gIGRlbGV0ZSBzaW5rOwotfQotCi1zdGF0
aWMgU2NvcGVkSmF2YUxvY2FsUmVmPGpieXRlQXJyYXk+Ci1KTklfQ2FsbFNlc3Npb25GaWxlUm90
YXRpbmdMb2dTaW5rX0dldExvZ0RhdGEoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2
YVBhcmFtUmVmPGpzdHJpbmc+JiBqX2RpclBhdGgpIHsKLSAgc3RkOjpzdHJpbmcgZGlyX3BhdGgg
PSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX2RpclBhdGgpOwotICBydGM6OkNhbGxTZXNzaW9uRmls
ZVJvdGF0aW5nU3RyZWFtUmVhZGVyIGZpbGVfcmVhZGVyKGRpcl9wYXRoKTsKLSAgc2l6ZV90IGxv
Z19zaXplID0gZmlsZV9yZWFkZXIuR2V0U2l6ZSgpOwotICBpZiAobG9nX3NpemUgPT0gMCkgewot
ICAgIFJUQ19MT0dfVihydGM6OkxvZ2dpbmdTZXZlcml0eTo6TFNfV0FSTklORykKLSAgICAgICAg
PDwgIkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nU3RyZWFtIHJldHVybnMgMCBzaXplIGZvciBwYXRo
ICIgPDwgZGlyX3BhdGg7Ci0gICAgcmV0dXJuIFNjb3BlZEphdmFMb2NhbFJlZjxqYnl0ZUFycmF5
PihqbmksIGpuaS0+TmV3Qnl0ZUFycmF5KDApKTsKLSAgfQotCi0gIC8vIFRPRE8obmlzc2UsIHNh
a2FsKTogVG8gYXZvaWQgY29weWluZywgY2hhbmdlIGFwaSB0byB1c2UgQnl0ZUJ1ZmZlci4KLSAg
c3RkOjp1bmlxdWVfcHRyPGpieXRlPiBidWZmZXIoc3RhdGljX2Nhc3Q8amJ5dGUqPihtYWxsb2Mo
bG9nX3NpemUpKSk7Ci0gIHNpemVfdCByZWFkID0gZmlsZV9yZWFkZXIuUmVhZEFsbChidWZmZXIu
Z2V0KCksIGxvZ19zaXplKTsKLQotICBTY29wZWRKYXZhTG9jYWxSZWY8amJ5dGVBcnJheT4gcmVz
dWx0ID0KLSAgICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqYnl0ZUFycmF5PihqbmksIGpuaS0+TmV3
Qnl0ZUFycmF5KHJlYWQpKTsKLSAgam5pLT5TZXRCeXRlQXJyYXlSZWdpb24ocmVzdWx0Lm9iaigp
LCAwLCByZWFkLCBidWZmZXIuZ2V0KCkpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
cGMvY3J5cHRvX29wdGlvbnMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2NyeXB0b19vcHRpb25zLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVmMTk1ZDk4ZDJiMmUxM2Q2N2EyMmJhZGQ0ZjM0ODBm
ODgxNGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvcGMvY3J5cHRvX29wdGlvbnMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9jcnlw
dG9fb3B0aW9ucy5oIgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJjb25u
ZWN0aW9uX2puaS9DcnlwdG9PcHRpb25zX2puaS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5h
bWVzcGFjZSBqbmkgewotCi1hYnNsOjpvcHRpb25hbDxDcnlwdG9PcHRpb25zPiBKYXZhVG9OYXRp
dmVPcHRpb25hbENyeXB0b09wdGlvbnMoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2
YVJlZjxqb2JqZWN0PiYgal9jcnlwdG9fb3B0aW9ucykgewotICBpZiAoal9jcnlwdG9fb3B0aW9u
cy5pc19udWxsKCkpIHsKLSAgICByZXR1cm4gYWJzbDo6bnVsbG9wdDsKLSAgfQotCi0gIFNjb3Bl
ZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX3NydHAgPQotICAgICAgSmF2YV9DcnlwdG9PcHRpb25z
X2dldFNydHAoam5pLCBqX2NyeXB0b19vcHRpb25zKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpv
YmplY3Q+IGpfc2ZyYW1lID0KLSAgICAgIEphdmFfQ3J5cHRvT3B0aW9uc19nZXRTRnJhbWUoam5p
LCBqX2NyeXB0b19vcHRpb25zKTsKLQotICBDcnlwdG9PcHRpb25zIG5hdGl2ZV9jcnlwdG9fb3B0
aW9uczsKLSAgbmF0aXZlX2NyeXB0b19vcHRpb25zLnNydHAuZW5hYmxlX2djbV9jcnlwdG9fc3Vp
dGVzID0KLSAgICAgIEphdmFfU3J0cF9nZXRFbmFibGVHY21DcnlwdG9TdWl0ZXMoam5pLCBqX3Ny
dHApOwotICBuYXRpdmVfY3J5cHRvX29wdGlvbnMuc3J0cC5lbmFibGVfYWVzMTI4X3NoYTFfMzJf
Y3J5cHRvX2NpcGhlciA9Ci0gICAgICBKYXZhX1NydHBfZ2V0RW5hYmxlQWVzMTI4U2hhMV8zMkNy
eXB0b0NpcGhlcihqbmksIGpfc3J0cCk7Ci0gIG5hdGl2ZV9jcnlwdG9fb3B0aW9ucy5zcnRwLmVu
YWJsZV9lbmNyeXB0ZWRfcnRwX2hlYWRlcl9leHRlbnNpb25zID0KLSAgICAgIEphdmFfU3J0cF9n
ZXRFbmFibGVFbmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25zKGpuaSwgal9zcnRwKTsKLSAgbmF0
aXZlX2NyeXB0b19vcHRpb25zLnNmcmFtZS5yZXF1aXJlX2ZyYW1lX2VuY3J5cHRpb24gPQotICAg
ICAgSmF2YV9TRnJhbWVfZ2V0UmVxdWlyZUZyYW1lRW5jcnlwdGlvbihqbmksIGpfc2ZyYW1lKTsK
LSAgcmV0dXJuIGFic2w6Om9wdGlvbmFsPENyeXB0b09wdGlvbnM+KG5hdGl2ZV9jcnlwdG9fb3B0
aW9ucyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qbmkvcGMvY3J5cHRvX29wdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvY3J5cHRvX29w
dGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTljOGYyNjA5YWFjYjc2Nzll
ZjU5M2YwYTNjZTJhYjVlNThjMWQ0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL2NyeXB0b19vcHRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NS
Q19KTklfUENfQ1JZUFRPX09QVElPTlNfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfU1JDX0pOSV9Q
Q19DUllQVE9fT1BUSU9OU19IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJhYnNs
L3R5cGVzL29wdGlvbmFsLmgiCi0jaW5jbHVkZSAiYXBpL2NyeXB0by9jcnlwdG9fb3B0aW9ucy5o
IgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL3Njb3BlZF9qYXZhX3JlZi5o
IgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1hYnNsOjpvcHRpb25h
bDxDcnlwdG9PcHRpb25zPiBKYXZhVG9OYXRpdmVPcHRpb25hbENyeXB0b09wdGlvbnMoCi0gICAg
Sk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9jcnlwdG9fb3B0aW9u
cyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2Vu
ZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX0NSWVBUT19PUFRJT05TX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvam5pL3BjL2RhdGFfY2hhbm5lbC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvZGF0YV9jaGFubmVsLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTUyOTc0NDQzYjVlNjc2ZmM1NTUyMzNiYWI4
NzM1OWRmMTY5YTYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3NyYy9qbmkvcGMvZGF0YV9jaGFubmVsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlIDxs
aW1pdHM+Ci0KLSNpbmNsdWRlICJhcGkvZGF0YV9jaGFubmVsX2ludGVyZmFjZS5oIgotI2luY2x1
ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRf
cGVlcmNvbm5lY3Rpb25fam5pL0RhdGFDaGFubmVsX2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9z
cmMvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9k
YXRhX2NoYW5uZWwuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
bmFtZXNwYWNlIHsKLS8vIEFkYXB0ZXIgZm9yIGEgSmF2YSBEYXRhQ2hhbm5lbCRPYnNlcnZlciBw
cmVzZW50aW5nIGEgQysrIERhdGFDaGFubmVsT2JzZXJ2ZXIKLS8vIGFuZCBkaXNwYXRjaGluZyB0
aGUgY2FsbGJhY2sgZnJvbSBDKysgYmFjayB0byBKYXZhLgotY2xhc3MgRGF0YUNoYW5uZWxPYnNl
cnZlckpuaSA6IHB1YmxpYyBEYXRhQ2hhbm5lbE9ic2VydmVyIHsKLSBwdWJsaWM6Ci0gIERhdGFD
aGFubmVsT2JzZXJ2ZXJKbmkoSk5JRW52KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpf
b2JzZXJ2ZXIpOwotICB+RGF0YUNoYW5uZWxPYnNlcnZlckpuaSgpIG92ZXJyaWRlIHt9Ci0KLSAg
dm9pZCBPbkJ1ZmZlcmVkQW1vdW50Q2hhbmdlKHVpbnQ2NF90IHByZXZpb3VzX2Ftb3VudCkgb3Zl
cnJpZGU7Ci0gIHZvaWQgT25TdGF0ZUNoYW5nZSgpIG92ZXJyaWRlOwotICB2b2lkIE9uTWVzc2Fn
ZShjb25zdCBEYXRhQnVmZmVyJiBidWZmZXIpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgY29u
c3QgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBqX29ic2VydmVyX2dsb2JhbF87Ci19Owot
Ci1EYXRhQ2hhbm5lbE9ic2VydmVySm5pOjpEYXRhQ2hhbm5lbE9ic2VydmVySm5pKAotICAgIEpO
SUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfb2JzZXJ2ZXIpCi0gICAg
OiBqX29ic2VydmVyX2dsb2JhbF8oam5pLCBqX29ic2VydmVyKSB7fQotCi12b2lkIERhdGFDaGFu
bmVsT2JzZXJ2ZXJKbmk6Ok9uQnVmZmVyZWRBbW91bnRDaGFuZ2UodWludDY0X3QgcHJldmlvdXNf
YW1vdW50KSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7
Ci0gIEphdmFfT2JzZXJ2ZXJfb25CdWZmZXJlZEFtb3VudENoYW5nZShlbnYsIGpfb2JzZXJ2ZXJf
Z2xvYmFsXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3Vz
X2Ftb3VudCk7Ci19Ci0KLXZvaWQgRGF0YUNoYW5uZWxPYnNlcnZlckpuaTo6T25TdGF0ZUNoYW5n
ZSgpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAg
SmF2YV9PYnNlcnZlcl9vblN0YXRlQ2hhbmdlKGVudiwgal9vYnNlcnZlcl9nbG9iYWxfKTsKLX0K
LQotdm9pZCBEYXRhQ2hhbm5lbE9ic2VydmVySm5pOjpPbk1lc3NhZ2UoY29uc3QgRGF0YUJ1ZmZl
ciYgYnVmZmVyKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
KCk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBieXRlX2J1ZmZlciA9IE5ld0RpcmVj
dEJ5dGVCdWZmZXIoCi0gICAgICBlbnYsIGNvbnN0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhLmRh
dGE8Y2hhcj4oKSksIGJ1ZmZlci5kYXRhLnNpemUoKSk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxq
b2JqZWN0PiBqX2J1ZmZlciA9Ci0gICAgICBKYXZhX0J1ZmZlcl9Db25zdHJ1Y3RvcihlbnYsIGJ5
dGVfYnVmZmVyLCBidWZmZXIuYmluYXJ5KTsKLSAgSmF2YV9PYnNlcnZlcl9vbk1lc3NhZ2UoZW52
LCBqX29ic2VydmVyX2dsb2JhbF8sIGpfYnVmZmVyKTsKLX0KLQotRGF0YUNoYW5uZWxJbnRlcmZh
Y2UqIEV4dHJhY3ROYXRpdmVEQyhKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RjKSB7Ci0gIHJl
dHVybiByZWludGVycHJldF9jYXN0PERhdGFDaGFubmVsSW50ZXJmYWNlKj4oCi0gICAgICBKYXZh
X0RhdGFDaGFubmVsX2dldE5hdGl2ZURhdGFDaGFubmVsKGpuaSwgal9kYykpOwotfQotCi19ICAv
LyBuYW1lc3BhY2UKLQotRGF0YUNoYW5uZWxJbml0IEphdmFUb05hdGl2ZURhdGFDaGFubmVsSW5p
dChKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9pbml0KSB7Ci0gIERhdGFDaGFubmVsSW5pdCBp
bml0OwotICBpbml0Lm9yZGVyZWQgPSBKYXZhX0luaXRfZ2V0T3JkZXJlZChlbnYsIGpfaW5pdCk7
Ci0gIGluaXQubWF4UmV0cmFuc21pdFRpbWUgPSBKYXZhX0luaXRfZ2V0TWF4UmV0cmFuc21pdFRp
bWVNcyhlbnYsIGpfaW5pdCk7Ci0gIGluaXQubWF4UmV0cmFuc21pdHMgPSBKYXZhX0luaXRfZ2V0
TWF4UmV0cmFuc21pdHMoZW52LCBqX2luaXQpOwotICBpbml0LnByb3RvY29sID0gSmF2YVRvU3Rk
U3RyaW5nKGVudiwgSmF2YV9Jbml0X2dldFByb3RvY29sKGVudiwgal9pbml0KSk7Ci0gIGluaXQu
bmVnb3RpYXRlZCA9IEphdmFfSW5pdF9nZXROZWdvdGlhdGVkKGVudiwgal9pbml0KTsKLSAgaW5p
dC5pZCA9IEphdmFfSW5pdF9nZXRJZChlbnYsIGpfaW5pdCk7Ci0gIHJldHVybiBpbml0OwotfQot
Ci1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gV3JhcE5hdGl2ZURhdGFDaGFubmVsKAotICAg
IEpOSUVudiogZW52LAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxEYXRhQ2hhbm5lbEludGVyZmFj
ZT4gY2hhbm5lbCkgewotICBpZiAoIWNoYW5uZWwpCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIC8v
IENoYW5uZWwgaXMgbm93IG93bmVkIGJ5IEphdmEgb2JqZWN0LCBhbmQgd2lsbCBiZSBmcmVlZCBm
cm9tIHRoZXJlLgotICByZXR1cm4gSmF2YV9EYXRhQ2hhbm5lbF9Db25zdHJ1Y3RvcihlbnYsIGps
b25nRnJvbVBvaW50ZXIoY2hhbm5lbC5yZWxlYXNlKCkpKTsKLX0KLQotc3RhdGljIGpsb25nIEpO
SV9EYXRhQ2hhbm5lbF9SZWdpc3Rlck9ic2VydmVyKAotICAgIEpOSUVudiogam5pLAotICAgIGNv
bnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kYywKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8
am9iamVjdD4mIGpfb2JzZXJ2ZXIpIHsKLSAgYXV0byBvYnNlcnZlciA9IHN0ZDo6bWFrZV91bmlx
dWU8RGF0YUNoYW5uZWxPYnNlcnZlckpuaT4oam5pLCBqX29ic2VydmVyKTsKLSAgRXh0cmFjdE5h
dGl2ZURDKGpuaSwgal9kYyktPlJlZ2lzdGVyT2JzZXJ2ZXIob2JzZXJ2ZXIuZ2V0KCkpOwotICBy
ZXR1cm4gamxvbmdGcm9tUG9pbnRlcihvYnNlcnZlci5yZWxlYXNlKCkpOwotfQotCi1zdGF0aWMg
dm9pZCBKTklfRGF0YUNoYW5uZWxfVW5yZWdpc3Rlck9ic2VydmVyKAotICAgIEpOSUVudiogam5p
LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kYywKLSAgICBqbG9uZyBuYXRp
dmVfb2JzZXJ2ZXIpIHsKLSAgRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPlVucmVnaXN0ZXJP
YnNlcnZlcigpOwotICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxEYXRhQ2hhbm5lbE9ic2VydmVy
Sm5pKj4obmF0aXZlX29ic2VydmVyKTsKLX0KLQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxq
c3RyaW5nPiBKTklfRGF0YUNoYW5uZWxfTGFiZWwoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29u
c3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RjKSB7Ci0gIHJldHVybiBOYXRpdmVUb0phdmFT
dHJpbmcoam5pLCBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+bGFiZWwoKSk7Ci19Ci0KLXN0
YXRpYyBqaW50IEpOSV9EYXRhQ2hhbm5lbF9JZChKTklFbnYqIGpuaSwgY29uc3QgSmF2YVBhcmFt
UmVmPGpvYmplY3Q+JiBqX2RjKSB7Ci0gIGludCBpZCA9IEV4dHJhY3ROYXRpdmVEQyhqbmksIGpf
ZGMpLT5pZCgpOwotICBSVENfQ0hFQ0tfTEUoaWQsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKQotICAgICAgPDwgImlkIG92ZXJmbG93ZWQgamludCEiOwotICByZXR1cm4gc3Rh
dGljX2Nhc3Q8amludD4oaWQpOwotfQotCi1zdGF0aWMgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmpl
Y3Q+IEpOSV9EYXRhQ2hhbm5lbF9TdGF0ZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBK
YXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZGMpIHsKLSAgcmV0dXJuIEphdmFfU3RhdGVfZnJvbU5h
dGl2ZUluZGV4KGpuaSwgRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPnN0YXRlKCkpOwotfQot
Ci1zdGF0aWMgamxvbmcgSk5JX0RhdGFDaGFubmVsX0J1ZmZlcmVkQW1vdW50KEpOSUVudiogam5p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZh
UGFyYW1SZWY8am9iamVjdD4mIGpfZGMpIHsKLSAgdWludDY0X3QgYnVmZmVyZWRfYW1vdW50ID0g
RXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPmJ1ZmZlcmVkX2Ftb3VudCgpOwotICBSVENfQ0hF
Q0tfTEUoYnVmZmVyZWRfYW1vdW50LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgo
KSkKLSAgICAgIDw8ICJidWZmZXJlZF9hbW91bnQgb3ZlcmZsb3dlZCBqbG9uZyEiOwotICByZXR1
cm4gc3RhdGljX2Nhc3Q8amxvbmc+KGJ1ZmZlcmVkX2Ftb3VudCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IEpOSV9EYXRhQ2hhbm5lbF9DbG9zZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZGMpIHsKLSAgRXh0
cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPkNsb3NlKCk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBK
TklfRGF0YUNoYW5uZWxfU2VuZChKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZGMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpieXRlQXJy
YXk+JiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFu
IGJpbmFyeSkgewotICBzdGQ6OnZlY3RvcjxpbnQ4X3Q+IGJ1ZmZlciA9IEphdmFUb05hdGl2ZUJ5
dGVBcnJheShqbmksIGRhdGEpOwotICBib29sIHJldCA9IEV4dHJhY3ROYXRpdmVEQyhqbmksIGpf
ZGMpLT5TZW5kKAotICAgICAgRGF0YUJ1ZmZlcihydGM6OkNvcHlPbldyaXRlQnVmZmVyKGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpLCBiaW5hcnkpKTsKLSAgcmV0dXJuIHJldDsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2puaS9wYy9kYXRhX2NoYW5uZWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvZGF0YV9jaGFubmVsLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTFiNjdkYWViY2EwZDU3MDA0NWUzMTJjYmFhMzVmNDI2
ZTM5MjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9wYy9kYXRhX2NoYW5uZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19EQVRBX0NIQU5O
RUxfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19EQVRBX0NIQU5ORUxfSF8KLQot
bmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotRGF0YUNoYW5uZWxJbml0IEph
dmFUb05hdGl2ZURhdGFDaGFubmVsSW5pdChKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9pbml0
KTsKLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IFdyYXBOYXRpdmVEYXRhQ2hhbm5lbCgK
LSAgICBKTklFbnYqIGVudiwKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8RGF0YUNoYW5uZWxJbnRl
cmZhY2U+IGNoYW5uZWwpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19EQVRBX0NIQU5ORUxf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvZHRtZl9zZW5kZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2R0bWZfc2Vu
ZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2NiMDI3ZjZkODZiODkxNmQ4
Y2U4NWQ1OTczZjk3ZTE3MjE0ZTE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qbmkvcGMvZHRtZl9zZW5kZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1
NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAiYXBpL2R0bWZfc2VuZGVy
X2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9wZWVyY29ubmVj
dGlvbl9qbmkvRHRtZlNlbmRlcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVf
YXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlf
aGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1zdGF0
aWMgamJvb2xlYW4gSk5JX0R0bWZTZW5kZXJfQ2FuSW5zZXJ0RHRtZihKTklFbnYqIGpuaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfZHRtZl9z
ZW5kZXJfcG9pbnRlcikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEdG1mU2VuZGVySW50
ZXJmYWNlKj4oal9kdG1mX3NlbmRlcl9wb2ludGVyKQotICAgICAgLT5DYW5JbnNlcnREdG1mKCk7
Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBKTklfRHRtZlNlbmRlcl9JbnNlcnREdG1mKEpOSUVudiog
am5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9k
dG1mX3NlbmRlcl9wb2ludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpzdHJpbmc+JiB0b25lcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHVyYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGludGVyX3RvbmVfZ2FwKSB7Ci0gIHJl
dHVybiByZWludGVycHJldF9jYXN0PER0bWZTZW5kZXJJbnRlcmZhY2UqPihqX2R0bWZfc2VuZGVy
X3BvaW50ZXIpCi0gICAgICAtPkluc2VydER0bWYoSmF2YVRvU3RkU3RyaW5nKGpuaSwgdG9uZXMp
LCBkdXJhdGlvbiwgaW50ZXJfdG9uZV9nYXApOwotfQotCi1zdGF0aWMgU2NvcGVkSmF2YUxvY2Fs
UmVmPGpzdHJpbmc+IEpOSV9EdG1mU2VuZGVyX1RvbmVzKAotICAgIEpOSUVudiogam5pLAotICAg
IGpsb25nIGpfZHRtZl9zZW5kZXJfcG9pbnRlcikgewotICByZXR1cm4gTmF0aXZlVG9KYXZhU3Ry
aW5nKAotICAgICAgam5pLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxEdG1mU2VuZGVySW50ZXJm
YWNlKj4oal9kdG1mX3NlbmRlcl9wb2ludGVyKS0+dG9uZXMoKSk7Ci19Ci0KLXN0YXRpYyBqaW50
IEpOSV9EdG1mU2VuZGVyX0R1cmF0aW9uKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamxvbmcgal9kdG1mX3NlbmRlcl9wb2ludGVyKSB7Ci0gIHJldHVy
biByZWludGVycHJldF9jYXN0PER0bWZTZW5kZXJJbnRlcmZhY2UqPihqX2R0bWZfc2VuZGVyX3Bv
aW50ZXIpCi0gICAgICAtPmR1cmF0aW9uKCk7Ci19Ci0KLXN0YXRpYyBqaW50IEpOSV9EdG1mU2Vu
ZGVyX0ludGVyVG9uZUdhcChKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqbG9uZyBqX2R0bWZfc2VuZGVyX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8RHRtZlNlbmRlckludGVyZmFjZSo+KGpfZHRtZl9zZW5kZXJfcG9pbnRl
cikKLSAgICAgIC0+aW50ZXJfdG9uZV9nYXAoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQot
fSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9pY2VfY2FuZGlkYXRl
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9wYy9pY2VfY2FuZGlkYXRlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZjkyZmY4ZTg5YTNlM2FmYjE5ZTlmMjUyMzZiYzJlY2FkM2Y2NDc5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvaWNlX2NhbmRpZGF0
ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9pY2VfY2FuZGlkYXRlLmgiCi0KLSNp
bmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJwYy93ZWJydGNfc2RwLmgiCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9JY2VDYW5kaWRhdGVfam5p
LmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgot
I2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfc3RyZWFtX3RyYWNrLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rpb24uaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotbmFtZXNwYWNlIHsKLQotU2NvcGVk
SmF2YUxvY2FsUmVmPGpvYmplY3Q+IENyZWF0ZUphdmFJY2VDYW5kaWRhdGUoSk5JRW52KiBlbnYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgc2RwX21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzZHBfbWxpbmVfaW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2Rw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcgc2VydmVyX3VybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBhZGFwdGVyVHlwZSkgewotICByZXR1cm4gSmF2YV9J
Y2VDYW5kaWRhdGVfQ29uc3RydWN0b3IoCi0gICAgICBlbnYsIE5hdGl2ZVRvSmF2YVN0cmluZyhl
bnYsIHNkcF9taWQpLCBzZHBfbWxpbmVfaW5kZXgsCi0gICAgICBOYXRpdmVUb0phdmFTdHJpbmco
ZW52LCBzZHApLCBOYXRpdmVUb0phdmFTdHJpbmcoZW52LCBzZXJ2ZXJfdXJsKSwKLSAgICAgIE5h
dGl2ZVRvSmF2YUFkYXB0ZXJUeXBlKGVudiwgYWRhcHRlclR5cGUpKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlCi0KLWNyaWNrZXQ6OkNhbmRpZGF0ZSBKYXZhVG9OYXRpdmVDYW5kaWRhdGUoSk5JRW52
KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEph
dmFSZWY8am9iamVjdD4mIGpfY2FuZGlkYXRlKSB7Ci0gIHN0ZDo6c3RyaW5nIHNkcF9taWQgPQot
ICAgICAgSmF2YVRvU3RkU3RyaW5nKGpuaSwgSmF2YV9JY2VDYW5kaWRhdGVfZ2V0U2RwTWlkKGpu
aSwgal9jYW5kaWRhdGUpKTsKLSAgc3RkOjpzdHJpbmcgc2RwID0KLSAgICAgIEphdmFUb1N0ZFN0
cmluZyhqbmksIEphdmFfSWNlQ2FuZGlkYXRlX2dldFNkcChqbmksIGpfY2FuZGlkYXRlKSk7Ci0g
IGNyaWNrZXQ6OkNhbmRpZGF0ZSBjYW5kaWRhdGU7Ci0gIGlmICghU2RwRGVzZXJpYWxpemVDYW5k
aWRhdGUoc2RwX21pZCwgc2RwLCAmY2FuZGlkYXRlLCBOVUxMKSkgewotICAgIFJUQ19MT0coTFNf
RVJST1IpIDw8ICJTZHBEZXNjcmlhbGl6ZUNhbmRpZGF0ZSBmYWlsZWQgd2l0aCBzZHAgIiA8PCBz
ZHA7Ci0gIH0KLSAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpv
YmplY3Q+IE5hdGl2ZVRvSmF2YUNhbmRpZGF0ZSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25z
dCBjcmlja2V0OjpDYW5kaWRhdGUmIGNhbmRpZGF0ZSkgewotICBzdGQ6OnN0cmluZyBzZHAgPSBT
ZHBTZXJpYWxpemVDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgUlRDX0NIRUNLKCFzZHAuZW1wdHko
KSkgPDwgImdvdCBhbiBlbXB0eSBJQ0UgY2FuZGlkYXRlIjsKLSAgLy8gc2RwX21saW5lX2luZGV4
IGlzIG5vdCB1c2VkLCBwYXNzIGFuIGludmFsaWQgdmFsdWUgLTEuCi0gIHJldHVybiBDcmVhdGVK
YXZhSWNlQ2FuZGlkYXRlKGVudiwgY2FuZGlkYXRlLnRyYW5zcG9ydF9uYW1lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xIC8qIHNkcF9tbGluZV9pbmRleCAqLywgc2RwLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiAvKiBzZXJ2ZXJfdXJsICovLCBjYW5k
aWRhdGUubmV0d29ya190eXBlKCkpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4g
TmF0aXZlVG9KYXZhSWNlQ2FuZGlkYXRlKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IElj
ZUNhbmRpZGF0ZUludGVyZmFjZSYgY2FuZGlkYXRlKSB7Ci0gIHN0ZDo6c3RyaW5nIHNkcDsKLSAg
UlRDX0NIRUNLKGNhbmRpZGF0ZS5Ub1N0cmluZygmc2RwKSkgPDwgImdvdCBzbyBmYXI6ICIgPDwg
c2RwOwotICByZXR1cm4gQ3JlYXRlSmF2YUljZUNhbmRpZGF0ZShlbnYsIGNhbmRpZGF0ZS5zZHBf
bWlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBfbWxp
bmVfaW5kZXgoKSwgc2RwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRh
dGUuY2FuZGlkYXRlKCkudXJsKCksIDApOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVj
dEFycmF5PiBOYXRpdmVUb0phdmFDYW5kaWRhdGVBcnJheSgKLSAgICBKTklFbnYqIGpuaSwKLSAg
ICBjb25zdCBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpDYW5kaWRhdGU+JiBjYW5kaWRhdGVzKSB7Ci0g
IHJldHVybiBOYXRpdmVUb0phdmFPYmplY3RBcnJheShqbmksIGNhbmRpZGF0ZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdfd2VicnRjX0ljZUNhbmRpZGF0ZV9jbGF6eihq
bmkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5hdGl2ZVRvSmF2YUNhbmRp
ZGF0ZSk7Ci19Ci0KLVBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VUcmFuc3BvcnRzVHlwZSBK
YXZhVG9OYXRpdmVJY2VUcmFuc3BvcnRzVHlwZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25z
dCBKYXZhUmVmPGpvYmplY3Q+JiBqX2ljZV90cmFuc3BvcnRzX3R5cGUpIHsKLSAgc3RkOjpzdHJp
bmcgZW51bV9uYW1lID0gR2V0SmF2YUVudW1OYW1lKGpuaSwgal9pY2VfdHJhbnNwb3J0c190eXBl
KTsKLQotICBpZiAoZW51bV9uYW1lID09ICJBTEwiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlv
bkludGVyZmFjZTo6a0FsbDsKLQotICBpZiAoZW51bV9uYW1lID09ICJSRUxBWSIpCi0gICAgcmV0
dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprUmVsYXk7Ci0KLSAgaWYgKGVudW1fbmFtZSA9
PSAiTk9IT1NUIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtOb0hvc3Q7
Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTk9ORSIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlOjprTm9uZTsKLQotICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIElj
ZVRyYW5zcG9ydHNUeXBlIGVudW1fbmFtZSAiIDw8IGVudW1fbmFtZTsKLSAgcmV0dXJuIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlOjprQWxsOwotfQotCi1QZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6
QnVuZGxlUG9saWN5IEphdmFUb05hdGl2ZUJ1bmRsZVBvbGljeSgKLSAgICBKTklFbnYqIGpuaSwK
LSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2J1bmRsZV9wb2xpY3kpIHsKLSAgc3RkOjpz
dHJpbmcgZW51bV9uYW1lID0gR2V0SmF2YUVudW1OYW1lKGpuaSwgal9idW5kbGVfcG9saWN5KTsK
LQotICBpZiAoZW51bV9uYW1lID09ICJCQUxBTkNFRCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjprQnVuZGxlUG9saWN5QmFsYW5jZWQ7Ci0KLSAgaWYgKGVudW1fbmFtZSA9
PSAiTUFYQlVORExFIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtCdW5k
bGVQb2xpY3lNYXhCdW5kbGU7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTUFYQ09NUEFUIikKLSAg
ICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtCdW5kbGVQb2xpY3lNYXhDb21wYXQ7
Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBlY3RlZCBCdW5kbGVQb2xpY3kgZW51bV9u
YW1lICIgPDwgZW51bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtC
dW5kbGVQb2xpY3lCYWxhbmNlZDsKLX0KLQotUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJ0Y3BN
dXhQb2xpY3kgSmF2YVRvTmF0aXZlUnRjcE11eFBvbGljeSgKLSAgICBKTklFbnYqIGpuaSwKLSAg
ICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3J0Y3BfbXV4X3BvbGljeSkgewotICBzdGQ6OnN0
cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoam5pLCBqX3J0Y3BfbXV4X3BvbGljeSk7
Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTkVHT1RJQVRFIikKLSAgICByZXR1cm4gUGVlckNvbm5l
Y3Rpb25JbnRlcmZhY2U6OmtSdGNwTXV4UG9saWN5TmVnb3RpYXRlOwotCi0gIGlmIChlbnVtX25h
bWUgPT0gIlJFUVVJUkUiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1J0
Y3BNdXhQb2xpY3lSZXF1aXJlOwotCi0gIFJUQ19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0ZWQg
UnRjcE11eFBvbGljeSBlbnVtX25hbWUgIiA8PCBlbnVtX25hbWU7Ci0gIHJldHVybiBQZWVyQ29u
bmVjdGlvbkludGVyZmFjZTo6a1J0Y3BNdXhQb2xpY3lOZWdvdGlhdGU7Ci19Ci0KLVBlZXJDb25u
ZWN0aW9uSW50ZXJmYWNlOjpUY3BDYW5kaWRhdGVQb2xpY3kgSmF2YVRvTmF0aXZlVGNwQ2FuZGlk
YXRlUG9saWN5KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4m
IGpfdGNwX2NhbmRpZGF0ZV9wb2xpY3kpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0gR2V0
SmF2YUVudW1OYW1lKGpuaSwgal90Y3BfY2FuZGlkYXRlX3BvbGljeSk7Ci0KLSAgaWYgKGVudW1f
bmFtZSA9PSAiRU5BQkxFRCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpr
VGNwQ2FuZGlkYXRlUG9saWN5RW5hYmxlZDsKLQotICBpZiAoZW51bV9uYW1lID09ICJESVNBQkxF
RCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprVGNwQ2FuZGlkYXRlUG9s
aWN5RGlzYWJsZWQ7Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBlY3RlZCBUY3BDYW5k
aWRhdGVQb2xpY3kgZW51bV9uYW1lICIgPDwgZW51bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5l
Y3Rpb25JbnRlcmZhY2U6OmtUY3BDYW5kaWRhdGVQb2xpY3lFbmFibGVkOwotfQotCi1QZWVyQ29u
bmVjdGlvbkludGVyZmFjZTo6Q2FuZGlkYXRlTmV0d29ya1BvbGljeQotSmF2YVRvTmF0aXZlQ2Fu
ZGlkYXRlTmV0d29ya1BvbGljeSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeSkgewotICBzdGQ6OnN0cmluZyBl
bnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoam5pLCBqX2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGlj
eSk7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQUxMIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rp
b25JbnRlcmZhY2U6OmtDYW5kaWRhdGVOZXR3b3JrUG9saWN5QWxsOwotCi0gIGlmIChlbnVtX25h
bWUgPT0gIkxPV19DT1NUIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtD
YW5kaWRhdGVOZXR3b3JrUG9saWN5TG93Q29zdDsKLQotICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJV
bmV4cGVjdGVkIENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgZW51bV9uYW1lICIKLSAgICAgICAgICAg
ICAgICAgICA8PCBlbnVtX25hbWU7Ci0gIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6
a0NhbmRpZGF0ZU5ldHdvcmtQb2xpY3lBbGw7Ci19Ci0KLXJ0Yzo6S2V5VHlwZSBKYXZhVG9OYXRp
dmVLZXlUeXBlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9rZXlfdHlwZSkgewotICBzdGQ6OnN0cmluZyBlbnVt
X25hbWUgPSBHZXRKYXZhRW51bU5hbWUoam5pLCBqX2tleV90eXBlKTsKLQotICBpZiAoZW51bV9u
YW1lID09ICJSU0EiKQotICAgIHJldHVybiBydGM6OktUX1JTQTsKLSAgaWYgKGVudW1fbmFtZSA9
PSAiRUNEU0EiKQotICAgIHJldHVybiBydGM6OktUX0VDRFNBOwotCi0gIFJUQ19DSEVDSyhmYWxz
ZSkgPDwgIlVuZXhwZWN0ZWQgS2V5VHlwZSBlbnVtX25hbWUgIiA8PCBlbnVtX25hbWU7Ci0gIHJl
dHVybiBydGM6OktUX0VDRFNBOwotfQotCi1QZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6Q29udGlu
dWFsR2F0aGVyaW5nUG9saWN5Ci1KYXZhVG9OYXRpdmVDb250aW51YWxHYXRoZXJpbmdQb2xpY3ko
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9nYXRoZXJp
bmdfcG9saWN5KSB7Ci0gIHN0ZDo6c3RyaW5nIGVudW1fbmFtZSA9IEdldEphdmFFbnVtTmFtZShq
bmksIGpfZ2F0aGVyaW5nX3BvbGljeSk7Ci0gIGlmIChlbnVtX25hbWUgPT0gIkdBVEhFUl9PTkNF
IikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkdBVEhFUl9PTkNFOwotCi0g
IGlmIChlbnVtX25hbWUgPT0gIkdBVEhFUl9DT05USU5VQUxMWSIpCi0gICAgcmV0dXJuIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlOjpHQVRIRVJfQ09OVElOVUFMTFk7Ci0KLSAgUlRDX0NIRUNLKGZh
bHNlKSA8PCAiVW5leHBlY3RlZCBDb250aW51YWxHYXRoZXJpbmdQb2xpY3kgZW51bSBuYW1lICIK
LSAgICAgICAgICAgICAgICAgICA8PCBlbnVtX25hbWU7Ci0gIHJldHVybiBQZWVyQ29ubmVjdGlv
bkludGVyZmFjZTo6R0FUSEVSX09OQ0U7Ci19Ci0KLXdlYnJ0Yzo6UG9ydFBydW5lUG9saWN5IEph
dmFUb05hdGl2ZVBvcnRQcnVuZVBvbGljeSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBqX3BvcnRfcHJ1bmVfcG9saWN5KSB7Ci0gIHN0ZDo6c3RyaW5nIGVu
dW1fbmFtZSA9IEdldEphdmFFbnVtTmFtZShqbmksIGpfcG9ydF9wcnVuZV9wb2xpY3kpOwotICBp
ZiAoZW51bV9uYW1lID09ICJOT19QUlVORSIpIHsKLSAgICByZXR1cm4gd2VicnRjOjpOT19QUlVO
RTsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJQUlVORV9CQVNFRF9PTl9QUklPUklUWSIpIHsK
LSAgICByZXR1cm4gd2VicnRjOjpQUlVORV9CQVNFRF9PTl9QUklPUklUWTsKLSAgfQotICBpZiAo
ZW51bV9uYW1lID09ICJLRUVQX0ZJUlNUX1JFQURZIikgewotICAgIHJldHVybiB3ZWJydGM6OktF
RVBfRklSU1RfUkVBRFk7Ci0gIH0KLQotICBSVENfQ0hFQ0soZmFsc2UpIDw8ICIgVW5leHBlY3Rl
ZCBQb3J0UHJ1bmVQb2xpY3kgZW51bSBuYW1lICIgPDwgZW51bV9uYW1lOwotCi0gIHJldHVybiB3
ZWJydGM6Ok5PX1BSVU5FOwotfQotCi1QZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6VGxzQ2VydFBv
bGljeSBKYXZhVG9OYXRpdmVUbHNDZXJ0UG9saWN5KAotICAgIEpOSUVudiogam5pLAotICAgIGNv
bnN0IEphdmFSZWY8am9iamVjdD4mIGpfaWNlX3NlcnZlcl90bHNfY2VydF9wb2xpY3kpIHsKLSAg
c3RkOjpzdHJpbmcgZW51bV9uYW1lID0gR2V0SmF2YUVudW1OYW1lKGpuaSwgal9pY2Vfc2VydmVy
X3Rsc19jZXJ0X3BvbGljeSk7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiVExTX0NFUlRfUE9MSUNZ
X1NFQ1VSRSIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprVGxzQ2VydFBv
bGljeVNlY3VyZTsKLQotICBpZiAoZW51bV9uYW1lID09ICJUTFNfQ0VSVF9QT0xJQ1lfSU5TRUNV
UkVfTk9fQ0hFQ0siKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1Rsc0Nl
cnRQb2xpY3lJbnNlY3VyZU5vQ2hlY2s7Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBl
Y3RlZCBUbHNDZXJ0UG9saWN5IGVudW1fbmFtZSAiIDw8IGVudW1fbmFtZTsKLSAgcmV0dXJuIFBl
ZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprVGxzQ2VydFBvbGljeVNlY3VyZTsKLX0KLQotYWJzbDo6
b3B0aW9uYWw8cnRjOjpBZGFwdGVyVHlwZT4gSmF2YVRvTmF0aXZlTmV0d29ya1ByZWZlcmVuY2Uo
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9uZXR3b3Jr
X3ByZWZlcmVuY2UpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0gR2V0SmF2YUVudW1OYW1l
KGpuaSwgal9uZXR3b3JrX3ByZWZlcmVuY2UpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIlVOS05P
V04iKQotICAgIHJldHVybiBhYnNsOjpudWxsb3B0OwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkVU
SEVSTkVUIikKLSAgICByZXR1cm4gcnRjOjpBREFQVEVSX1RZUEVfRVRIRVJORVQ7Ci0KLSAgaWYg
KGVudW1fbmFtZSA9PSAiV0lGSSIpCi0gICAgcmV0dXJuIHJ0Yzo6QURBUFRFUl9UWVBFX1dJRkk7
Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ0VMTFVMQVIiKQotICAgIHJldHVybiBydGM6OkFEQVBU
RVJfVFlQRV9DRUxMVUxBUjsKLQotICBpZiAoZW51bV9uYW1lID09ICJWUE4iKQotICAgIHJldHVy
biBydGM6OkFEQVBURVJfVFlQRV9WUE47Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTE9PUEJBQ0si
KQotICAgIHJldHVybiBydGM6OkFEQVBURVJfVFlQRV9MT09QQkFDSzsKLQotICBSVENfQ0hFQ0so
ZmFsc2UpIDw8ICJVbmV4cGVjdGVkIE5ldHdvcmtQcmVmZXJlbmNlIGVudW1fbmFtZSAiIDw8IGVu
dW1fbmFtZTsKLSAgcmV0dXJuIGFic2w6Om51bGxvcHQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBq
bmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvaWNlX2NhbmRp
ZGF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS9wYy9pY2VfY2FuZGlkYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRiZGVlYTYxYzYzMWRhZjQwMTAxMzI2ZmRlZmM1NzQyYWM1MjQ4MDMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9pY2VfY2FuZGlk
YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfUENfSUNFX0NBTkRJREFURV9IXwotI2RlZmlu
ZSBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX0lDRV9DQU5ESURBVEVfSF8KLQotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotI2luY2x1ZGUgImFwaS9kYXRhX2NoYW5uZWxfaW50ZXJmYWNlLmgiCi0jaW5jbHVk
ZSAiYXBpL2pzZXAuaCIKLSNpbmNsdWRlICJhcGkvanNlcF9pY2VfY2FuZGlkYXRlLmgiCi0jaW5j
bHVkZSAiYXBpL3BlZXJfY29ubmVjdGlvbl9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJhcGkvcnRw
X3BhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJydGNfYmFzZS9zc2xfaWRlbnRpdHkuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJy
dGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLWNyaWNrZXQ6OkNhbmRpZGF0ZSBKYXZhVG9OYXRpdmVD
YW5kaWRhdGUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfY2FuZGlkYXRlKTsKLQotU2NvcGVkSmF2
YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YUNhbmRpZGF0ZSgKLSAgICBKTklFbnYqIGVu
diwKLSAgICBjb25zdCBjcmlja2V0OjpDYW5kaWRhdGUmIGNhbmRpZGF0ZSk7Ci0KLVNjb3BlZEph
dmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFJY2VDYW5kaWRhdGUoCi0gICAgSk5JRW52
KiBlbnYsCi0gICAgY29uc3QgSWNlQ2FuZGlkYXRlSW50ZXJmYWNlJiBjYW5kaWRhdGUpOwotCi1T
Y29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBOYXRpdmVUb0phdmFDYW5kaWRhdGVBcnJh
eSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpDYW5k
aWRhdGU+JiBjYW5kaWRhdGVzKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCi0gKiBCZWxvdyBhcmUgYWxsIHRoaW5ncyB0aGF0IGdvIGlu
dG8gUlRDQ29uZmlndXJhdGlvbi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLVBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VUcmFuc3Bv
cnRzVHlwZSBKYXZhVG9OYXRpdmVJY2VUcmFuc3BvcnRzVHlwZSgKLSAgICBKTklFbnYqIGpuaSwK
LSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2ljZV90cmFuc3BvcnRzX3R5cGUpOwotCi1Q
ZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6QnVuZGxlUG9saWN5IEphdmFUb05hdGl2ZUJ1bmRsZVBv
bGljeSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2J1
bmRsZV9wb2xpY3kpOwotCi1QZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UnRjcE11eFBvbGljeSBK
YXZhVG9OYXRpdmVSdGNwTXV4UG9saWN5KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEph
dmFSZWY8am9iamVjdD4mIGpfcnRjcF9tdXhfcG9saWN5KTsKLQotUGVlckNvbm5lY3Rpb25JbnRl
cmZhY2U6OlRjcENhbmRpZGF0ZVBvbGljeSBKYXZhVG9OYXRpdmVUY3BDYW5kaWRhdGVQb2xpY3ko
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal90Y3BfY2Fu
ZGlkYXRlX3BvbGljeSk7Ci0KLVBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpDYW5kaWRhdGVOZXR3
b3JrUG9saWN5Ci1KYXZhVG9OYXRpdmVDYW5kaWRhdGVOZXR3b3JrUG9saWN5KAotICAgIEpOSUVu
diogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfY2FuZGlkYXRlX25ldHdvcmtf
cG9saWN5KTsKLQotcnRjOjpLZXlUeXBlIEphdmFUb05hdGl2ZUtleVR5cGUoSk5JRW52KiBqbmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+
JiBqX2tleV90eXBlKTsKLQotUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkNvbnRpbnVhbEdhdGhl
cmluZ1BvbGljeQotSmF2YVRvTmF0aXZlQ29udGludWFsR2F0aGVyaW5nUG9saWN5KAotICAgIEpO
SUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZ2F0aGVyaW5nX3BvbGlj
eSk7Ci0KLXdlYnJ0Yzo6UG9ydFBydW5lUG9saWN5IEphdmFUb05hdGl2ZVBvcnRQcnVuZVBvbGlj
eSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3BvcnRf
cHJ1bmVfcG9saWN5KTsKLQotUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlRsc0NlcnRQb2xpY3kg
SmF2YVRvTmF0aXZlVGxzQ2VydFBvbGljeSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBqX2ljZV9zZXJ2ZXJfdGxzX2NlcnRfcG9saWN5KTsKLQotYWJzbDo6
b3B0aW9uYWw8cnRjOjpBZGFwdGVyVHlwZT4gSmF2YVRvTmF0aXZlTmV0d29ya1ByZWZlcmVuY2Uo
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9uZXR3b3Jr
X3ByZWZlcmVuY2UpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19JQ0VfQ0FORElEQVRFX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL2xvZ2dpbmcuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL2xvZ2dpbmcuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMzVjYTA1MWM3ODExOTA4NDk0OGVhN2Q0OTVh
N2IyY2RmZTM4NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9wYy9sb2dnaW5nLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgInJ0Y19iYXNl
L2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5
cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1KTklfRlVOQ1RJT05fREVDTEFS
QVRJT04odm9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMb2dnaW5nX25hdGl2ZUVuYWJs
ZUxvZ1RvRGVidWdPdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSk5JRW52KiBqbmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGppbnQgbmF0aXZlU2V2ZXJpdHkpIHsKLSAgaWYgKG5hdGl2ZVNldmVyaXR5ID49IHJ0Yzo6
TFNfVkVSQk9TRSAmJiBuYXRpdmVTZXZlcml0eSA8PSBydGM6OkxTX05PTkUpIHsKLSAgICBydGM6
OkxvZ01lc3NhZ2U6OkxvZ1RvRGVidWcoCi0gICAgICAgIHN0YXRpY19jYXN0PHJ0Yzo6TG9nZ2lu
Z1NldmVyaXR5PihuYXRpdmVTZXZlcml0eSkpOwotICB9Ci19Ci0KLUpOSV9GVU5DVElPTl9ERUNM
QVJBVElPTih2b2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dpbmdfbmF0aXZlRW5h
YmxlTG9nVGhyZWFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGpuaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBqY2xhc3MpIHsKLSAgcnRjOjpMb2dNZXNzYWdlOjpMb2dU
aHJlYWRzKHRydWUpOwotfQotCi1KTklfRlVOQ1RJT05fREVDTEFSQVRJT04odm9pZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBMb2dnaW5nX25hdGl2ZUVuYWJsZUxvZ1RpbWVTdGFtcHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgamNsYXNzKSB7Ci0gIHJ0Yzo6TG9nTWVzc2FnZTo6TG9nVGltZXN0YW1wcyh0cnVlKTsK
LX0KLQotSk5JX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKHZvaWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgTG9nZ2luZ19uYXRpdmVMb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgSk5JRW52
KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGppbnQgal9zZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBqc3Ry
aW5nIGpfdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGpzdHJpbmcgal9tZXNzYWdlKSB7
Ci0gIHN0ZDo6c3RyaW5nIG1lc3NhZ2UgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBKYXZhUGFyYW1S
ZWY8anN0cmluZz4oal9tZXNzYWdlKSk7Ci0gIHN0ZDo6c3RyaW5nIHRhZyA9IEphdmFUb1N0ZFN0
cmluZyhqbmksIEphdmFQYXJhbVJlZjxqc3RyaW5nPihqX3RhZykpOwotICBSVENfTE9HX1RBRyhz
dGF0aWNfY2FzdDxydGM6OkxvZ2dpbmdTZXZlcml0eT4oal9zZXZlcml0eSksIHRhZy5jX3N0cigp
KQotICAgICAgPDwgbWVzc2FnZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9tZWRpYV9jb25zdHJhaW50cy5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Ny
Yy9qbmkvcGMvbWVkaWFfY29uc3RyYWludHMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRlMWEzYmE0MDYyOTM2NGNiMzUxMDQ5Y2ViZmY0MGJiZDRmYzk3NTguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9tZWRpYV9jb25zdHJh
aW50cy5jYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX2NvbnN0cmFpbnRzLmgi
Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRf
cGVlcmNvbm5lY3Rpb25fam5pL01lZGlhQ29uc3RyYWludHNfam5pLmgiCi0jaW5jbHVkZSAic2Rr
L2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3Bh
Y2Ugam5pIHsKLQotbmFtZXNwYWNlIHsKLQotLy8gSGVscGVyIGZvciB0cmFuc2xhdGluZyBhIExp
c3Q8UGFpcjxTdHJpbmcsIFN0cmluZz4+IHRvIGEgQ29uc3RyYWludHMuCi1NZWRpYUNvbnN0cmFp
bnRzOjpDb25zdHJhaW50cyBQb3B1bGF0ZUNvbnN0cmFpbnRzRnJvbUphdmFQYWlyTGlzdCgKLSAg
ICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2xpc3QpIHsKLSAg
TWVkaWFDb25zdHJhaW50czo6Q29uc3RyYWludHMgY29uc3RyYWludHM7Ci0gIGZvciAoY29uc3Qg
SmF2YVJlZjxqb2JqZWN0PiYgZW50cnkgOiBJdGVyYWJsZShlbnYsIGpfbGlzdCkpIHsKLSAgICBj
b25zdHJhaW50cy5lbXBsYWNlX2JhY2soCi0gICAgICAgIEphdmFUb1N0ZFN0cmluZyhlbnYsIEph
dmFfS2V5VmFsdWVQYWlyX2dldEtleShlbnYsIGVudHJ5KSksCi0gICAgICAgIEphdmFUb1N0ZFN0
cmluZyhlbnYsIEphdmFfS2V5VmFsdWVQYWlyX2dldFZhbHVlKGVudiwgZW50cnkpKSk7Ci0gIH0K
LSAgcmV0dXJuIGNvbnN0cmFpbnRzOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotLy8gQ29waWVz
IGFsbCBuZWVkZWQgZGF0YSBzbyBKYXZhIG9iamVjdCBpcyBubyBsb25nZXIgbmVlZGVkIGF0IHJl
dHVybi4KLXN0ZDo6dW5pcXVlX3B0cjxNZWRpYUNvbnN0cmFpbnRzPiBKYXZhVG9OYXRpdmVNZWRp
YUNvbnN0cmFpbnRzKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9iamVj
dD4mIGpfY29uc3RyYWludHMpIHsKLSAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFDb25z
dHJhaW50cz4oCi0gICAgICBQb3B1bGF0ZUNvbnN0cmFpbnRzRnJvbUphdmFQYWlyTGlzdCgKLSAg
ICAgICAgICBlbnYsIEphdmFfTWVkaWFDb25zdHJhaW50c19nZXRNYW5kYXRvcnkoZW52LCBqX2Nv
bnN0cmFpbnRzKSksCi0gICAgICBQb3B1bGF0ZUNvbnN0cmFpbnRzRnJvbUphdmFQYWlyTGlzdCgK
LSAgICAgICAgICBlbnYsIEphdmFfTWVkaWFDb25zdHJhaW50c19nZXRPcHRpb25hbChlbnYsIGpf
Y29uc3RyYWludHMpKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfY29uc3RyYWludHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
cGMvbWVkaWFfY29uc3RyYWludHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhj
ZWRjN2YyZGQ3MWFjNWRkYTNkNDRkMjdlYzBlNGY2NDAyMDhlMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX2NvbnN0cmFpbnRzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZu
ZGVmIFNES19BTkRST0lEX1NSQ19KTklfUENfTUVESUFfQ09OU1RSQUlOVFNfSF8KLSNkZWZpbmUg
U0RLX0FORFJPSURfU1JDX0pOSV9QQ19NRURJQV9DT05TVFJBSU5UU19IXwotCi0jaW5jbHVkZSA8
am5pLmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZl
X2FwaS9qbmkvc2NvcGVkX2phdmFfcmVmLmgiCi0jaW5jbHVkZSAic2RrL21lZGlhX2NvbnN0cmFp
bnRzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUNvbnN0cmFpbnRzPiBKYXZhVG9OYXRpdmVNZWRpYUNvbnN0cmFpbnRzKAot
ICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfY29uc3RyYWlu
dHMpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNl
bmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19NRURJQV9DT05TVFJBSU5UU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS9wYy9tZWRpYV9zb3VyY2UuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX3NvdXJjZS5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwZjI4ZjMxMGQzZTIwNmJiMmY4YTAz
ODgwMzNiZGQ5MzU2NTcyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC9zcmMvam5pL3BjL21lZGlhX3NvdXJjZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDI0ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJhcGkvbWVkaWFfc3RyZWFtX2lu
dGVyZmFjZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9wZWVyY29ubmVjdGlv
bl9qbmkvTWVkaWFTb3VyY2Vfam5pLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNl
IGpuaSB7Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX01lZGlhU291
cmNlX0dldFN0YXRlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9wKSB7Ci0gIHJldHVybiBKYXZh
X1N0YXRlX2Zyb21OYXRpdmVJbmRleCgKLSAgICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxNZWRp
YVNvdXJjZUludGVyZmFjZSo+KGpfcCktPnN0YXRlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
am5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX3N0
cmVhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfc3RyZWFtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0Nzc5NzkzOWEyMDQ3MDMyN2I4ZGRjZTAzNDUzMGRjMTZkODBkOTI3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfc3Ry
ZWFtLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX3N0cmVhbS5oIgotCi0j
aW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJj
b25uZWN0aW9uX2puaS9NZWRpYVN0cmVhbV9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9u
YXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2pu
aS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewot
Ci1KYXZhTWVkaWFTdHJlYW06OkphdmFNZWRpYVN0cmVhbSgKLSAgICBKTklFbnYqIGVudiwKLSAg
ICBydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+IG1lZGlhX3N0cmVhbSkK
LSAgICA6IGpfbWVkaWFfc3RyZWFtXygKLSAgICAgICAgICBlbnYsCi0gICAgICAgICAgSmF2YV9N
ZWRpYVN0cmVhbV9Db25zdHJ1Y3RvcihlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqbG9uZ0Zyb21Qb2ludGVyKG1lZGlhX3N0cmVhbS5nZXQoKSkpKSwKLSAgICAg
IG9ic2VydmVyXyhzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhU3RyZWFtT2JzZXJ2ZXI+KG1lZGlhX3N0
cmVhbSkpIHsKLSAgZm9yIChydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9UcmFja0ludGVyZmFjZT4g
dHJhY2sgOgotICAgICAgIG1lZGlhX3N0cmVhbS0+R2V0QXVkaW9UcmFja3MoKSkgewotICAgIEph
dmFfTWVkaWFTdHJlYW1fYWRkTmF0aXZlQXVkaW9UcmFjayhlbnYsIGpfbWVkaWFfc3RyZWFtXywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmdGcm9tUG9pbnRl
cih0cmFjay5yZWxlYXNlKCkpKTsKLSAgfQotICBmb3IgKHJ0Yzo6c2NvcGVkX3JlZnB0cjxWaWRl
b1RyYWNrSW50ZXJmYWNlPiB0cmFjayA6Ci0gICAgICAgbWVkaWFfc3RyZWFtLT5HZXRWaWRlb1Ry
YWNrcygpKSB7Ci0gICAgSmF2YV9NZWRpYVN0cmVhbV9hZGROYXRpdmVWaWRlb1RyYWNrKGVudiwg
al9tZWRpYV9zdHJlYW1fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqbG9uZ0Zyb21Qb2ludGVyKHRyYWNrLnJlbGVhc2UoKSkpOwotICB9Ci0KLSAgLy8gQ3JlYXRl
IGFuIG9ic2VydmVyIHRvIHVwZGF0ZSB0aGUgSmF2YSBzdHJlYW0gd2hlbiB0aGUgbmF0aXZlIHN0
cmVhbSdzIHNldAotICAvLyBvZiB0cmFja3MgY2hhbmdlcy4KLSAgb2JzZXJ2ZXJfLT5TaWduYWxB
dWRpb1RyYWNrUmVtb3ZlZC5jb25uZWN0KAotICAgICAgdGhpcywgJkphdmFNZWRpYVN0cmVhbTo6
T25BdWRpb1RyYWNrUmVtb3ZlZEZyb21TdHJlYW0pOwotICBvYnNlcnZlcl8tPlNpZ25hbFZpZGVv
VHJhY2tSZW1vdmVkLmNvbm5lY3QoCi0gICAgICB0aGlzLCAmSmF2YU1lZGlhU3RyZWFtOjpPblZp
ZGVvVHJhY2tSZW1vdmVkRnJvbVN0cmVhbSk7Ci0gIG9ic2VydmVyXy0+U2lnbmFsQXVkaW9UcmFj
a0FkZGVkLmNvbm5lY3QoCi0gICAgICB0aGlzLCAmSmF2YU1lZGlhU3RyZWFtOjpPbkF1ZGlvVHJh
Y2tBZGRlZFRvU3RyZWFtKTsKLSAgb2JzZXJ2ZXJfLT5TaWduYWxWaWRlb1RyYWNrQWRkZWQuY29u
bmVjdCgKLSAgICAgIHRoaXMsICZKYXZhTWVkaWFTdHJlYW06Ok9uVmlkZW9UcmFja0FkZGVkVG9T
dHJlYW0pOwotCi0gIC8vIHxqX21lZGlhX3N0cmVhbXwgaG9sZHMgb25lIHJlZmVyZW5jZS4gQ29y
cmVzcG9uZGluZyBSZWxlYXNlKCkgaXMgaW4KLSAgLy8gTWVkaWFTdHJlYW1fZnJlZSwgdHJpZ2dl
cmVkIGJ5IE1lZGlhU3RyZWFtLmRpc3Bvc2UoKS4KLSAgbWVkaWFfc3RyZWFtLnJlbGVhc2UoKTsK
LX0KLQotSmF2YU1lZGlhU3RyZWFtOjp+SmF2YU1lZGlhU3RyZWFtKCkgewotICBKTklFbnYqIGVu
diA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICAvLyBSZW1vdmUgdGhlIG9ic2Vy
dmVyIGZpcnN0LCBzbyBpdCBkb2Vzbid0IHJlYWN0IHRvIGV2ZW50cyBkdXJpbmcgZGVsZXRpb24u
Ci0gIG9ic2VydmVyXyA9IG51bGxwdHI7Ci0gIEphdmFfTWVkaWFTdHJlYW1fZGlzcG9zZShlbnYs
IGpfbWVkaWFfc3RyZWFtXyk7Ci19Ci0KLXZvaWQgSmF2YU1lZGlhU3RyZWFtOjpPbkF1ZGlvVHJh
Y2tBZGRlZFRvU3RyZWFtKEF1ZGlvVHJhY2tJbnRlcmZhY2UqIHRyYWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFTdHJlYW1JbnRlcmZhY2Uq
IHN0cmVhbSkgewotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgp
OwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShlbnYpOwotICB0cmFjay0+
QWRkUmVmKCk7Ci0gIEphdmFfTWVkaWFTdHJlYW1fYWRkTmF0aXZlQXVkaW9UcmFjayhlbnYsIGpf
bWVkaWFfc3RyZWFtXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGps
b25nRnJvbVBvaW50ZXIodHJhY2spKTsKLX0KLQotdm9pZCBKYXZhTWVkaWFTdHJlYW06Ok9uVmlk
ZW9UcmFja0FkZGVkVG9TdHJlYW0oVmlkZW9UcmFja0ludGVyZmFjZSogdHJhY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVN0cmVhbUludGVy
ZmFjZSogc3RyZWFtKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVl
ZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGVudik7Ci0gIHRy
YWNrLT5BZGRSZWYoKTsKLSAgSmF2YV9NZWRpYVN0cmVhbV9hZGROYXRpdmVWaWRlb1RyYWNrKGVu
diwgal9tZWRpYV9zdHJlYW1fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamxvbmdGcm9tUG9pbnRlcih0cmFjaykpOwotfQotCi12b2lkIEphdmFNZWRpYVN0cmVhbTo6
T25BdWRpb1RyYWNrUmVtb3ZlZEZyb21TdHJlYW0oCi0gICAgQXVkaW9UcmFja0ludGVyZmFjZSog
dHJhY2ssCi0gICAgTWVkaWFTdHJlYW1JbnRlcmZhY2UqIHN0cmVhbSkgewotICBKTklFbnYqIGVu
diA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1l
IGxvY2FsX3JlZl9mcmFtZShlbnYpOwotICBKYXZhX01lZGlhU3RyZWFtX3JlbW92ZUF1ZGlvVHJh
Y2soZW52LCBqX21lZGlhX3N0cmVhbV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqbG9uZ0Zyb21Qb2ludGVyKHRyYWNrKSk7Ci19Ci0KLXZvaWQgSmF2YU1lZGlhU3RyZWFt
OjpPblZpZGVvVHJhY2tSZW1vdmVkRnJvbVN0cmVhbSgKLSAgICBWaWRlb1RyYWNrSW50ZXJmYWNl
KiB0cmFjaywKLSAgICBNZWRpYVN0cmVhbUludGVyZmFjZSogc3RyZWFtKSB7Ci0gIEpOSUVudiog
ZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJh
bWUgbG9jYWxfcmVmX2ZyYW1lKGVudik7Ci0gIEphdmFfTWVkaWFTdHJlYW1fcmVtb3ZlVmlkZW9U
cmFjayhlbnYsIGpfbWVkaWFfc3RyZWFtXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpsb25nRnJvbVBvaW50ZXIodHJhY2spKTsKLX0KLQotamNsYXNzIEdldE1lZGlhU3Ry
ZWFtQ2xhc3MoSk5JRW52KiBlbnYpIHsKLSAgcmV0dXJuIG9yZ193ZWJydGNfTWVkaWFTdHJlYW1f
Y2xhenooZW52KTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9NZWRpYVN0cmVhbV9BZGRBdWRp
b1RyYWNrVG9OYXRpdmVTdHJlYW0oCi0gICAgSk5JRW52KiBqbmksCi0gICAgamxvbmcgcG9pbnRl
ciwKLSAgICBqbG9uZyBqX2F1ZGlvX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihwb2ludGVyKS0+QWRkVHJhY2soCi0gICAg
ICByZWludGVycHJldF9jYXN0PEF1ZGlvVHJhY2tJbnRlcmZhY2UqPihqX2F1ZGlvX3RyYWNrX3Bv
aW50ZXIpKTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9NZWRpYVN0cmVhbV9BZGRWaWRlb1Ry
YWNrVG9OYXRpdmVTdHJlYW0oCi0gICAgSk5JRW52KiBqbmksCi0gICAgamxvbmcgcG9pbnRlciwK
LSAgICBqbG9uZyBqX3ZpZGVvX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihwb2ludGVyKS0+QWRkVHJhY2soCi0gICAgICBy
ZWludGVycHJldF9jYXN0PFZpZGVvVHJhY2tJbnRlcmZhY2UqPihqX3ZpZGVvX3RyYWNrX3BvaW50
ZXIpKTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9NZWRpYVN0cmVhbV9SZW1vdmVBdWRpb1Ry
YWNrKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpsb25nIHBvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamxvbmcgal9hdWRpb190cmFja19wb2ludGVyKSB7Ci0gIHJldHVy
biByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50ZXJmYWNlKj4ocG9pbnRlciktPlJlbW92
ZVRyYWNrKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxBdWRpb1RyYWNrSW50ZXJmYWNlKj4oal9h
dWRpb190cmFja19wb2ludGVyKSk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBKTklfTWVkaWFTdHJl
YW1fUmVtb3ZlVmlkZW9UcmFjayhKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBwb2ludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfdmlkZW9fdHJhY2tfcG9p
bnRlcikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+
KHBvaW50ZXIpLT5SZW1vdmVUcmFjaygKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VmlkZW9UcmFj
a0ludGVyZmFjZSo+KGpfdmlkZW9fdHJhY2tfcG9pbnRlcikpOwotfQotCi1zdGF0aWMgU2NvcGVk
SmF2YUxvY2FsUmVmPGpzdHJpbmc+IEpOSV9NZWRpYVN0cmVhbV9HZXRJZChKTklFbnYqIGpuaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpsb25nIGpfcCkgewotICByZXR1cm4gTmF0aXZlVG9KYXZhU3RyaW5nKGpuaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50ZXJmYWNl
Kj4oal9wKS0+aWQoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfc3RyZWFtLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL21l
ZGlhX3N0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzVhMzQ5OWJiMzVl
NzU0YjUwZjk1NDdmZmNhMTFlZTEwNTY0OGYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfc3RyZWFtLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lE
X1NSQ19KTklfUENfTUVESUFfU1RSRUFNX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklf
UENfTUVESUFfU1RSRUFNX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+
Ci0KLSNpbmNsdWRlICJhcGkvbWVkaWFfc3RyZWFtX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInBj
L21lZGlhX3N0cmVhbV9vYnNlcnZlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkv
am5pX2hlbHBlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
Y2xhc3MgSmF2YU1lZGlhU3RyZWFtIDogcHVibGljIHNpZ3Nsb3Q6Omhhc19zbG90czw+IHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IEphdmFNZWRpYVN0cmVhbSgKLSAgICAgIEpOSUVudiogZW52LAot
ICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPiBtZWRpYV9zdHJl
YW0pOwotICB+SmF2YU1lZGlhU3RyZWFtKCkgb3ZlcnJpZGU7Ci0KLSAgY29uc3QgU2NvcGVkSmF2
YUdsb2JhbFJlZjxqb2JqZWN0PiYgal9tZWRpYV9zdHJlYW0oKSB7Ci0gICAgcmV0dXJuIGpfbWVk
aWFfc3RyZWFtXzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgdm9pZCBPbkF1ZGlvVHJhY2tBZGRlZFRv
U3RyZWFtKEF1ZGlvVHJhY2tJbnRlcmZhY2UqIHRyYWNrLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWVkaWFTdHJlYW1JbnRlcmZhY2UqIHN0cmVhbSk7Ci0gIHZvaWQgT25WaWRl
b1RyYWNrQWRkZWRUb1N0cmVhbShWaWRlb1RyYWNrSW50ZXJmYWNlKiB0cmFjaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhU3RyZWFtSW50ZXJmYWNlKiBzdHJlYW0pOwot
ICB2b2lkIE9uQXVkaW9UcmFja1JlbW92ZWRGcm9tU3RyZWFtKEF1ZGlvVHJhY2tJbnRlcmZhY2Uq
IHRyYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhU3RyZWFt
SW50ZXJmYWNlKiBzdHJlYW0pOwotICB2b2lkIE9uVmlkZW9UcmFja1JlbW92ZWRGcm9tU3RyZWFt
KFZpZGVvVHJhY2tJbnRlcmZhY2UqIHRyYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1lZGlhU3RyZWFtSW50ZXJmYWNlKiBzdHJlYW0pOwotCi0gIFNjb3BlZEphdmFH
bG9iYWxSZWY8am9iamVjdD4gal9tZWRpYV9zdHJlYW1fOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVk
aWFTdHJlYW1PYnNlcnZlcj4gb2JzZXJ2ZXJfOwotfTsKLQotamNsYXNzIEdldE1lZGlhU3RyZWFt
Q2xhc3MoSk5JRW52KiBlbnYpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3Bh
Y2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19NRURJQV9TVFJF
QU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfc3RyZWFtX3RyYWNrLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9w
Yy9tZWRpYV9zdHJlYW1fdHJhY2suY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDky
OGYxMGMwM2EyMWQzNzM0MGI3NDEzZGEwZTg5YzQyZDc4YWIwODQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9tZWRpYV9zdHJlYW1fdHJhY2su
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9tZWRpYV9zdHJlYW1fdHJhY2suaCIKLQot
I2luY2x1ZGUgImFwaS9tZWRpYV9zdHJlYW1faW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvZ2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9NZWRpYVN0cmVhbVRyYWNrX2puaS5o
IgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3
ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBO
YXRpdmVUb0phdmFNZWRpYVR5cGUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY3JpY2tldDo6TWVk
aWFUeXBlIG1lZGlhX3R5cGUpIHsKLSAgcmV0dXJuIEphdmFfTWVkaWFUeXBlX2Zyb21OYXRpdmVJ
bmRleChqbmksIG1lZGlhX3R5cGUpOwotfQotCi1jcmlja2V0OjpNZWRpYVR5cGUgSmF2YVRvTmF0
aXZlTWVkaWFUeXBlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX21lZGlhX3R5cGUpIHsKLSAgcmV0
dXJuIHN0YXRpY19jYXN0PGNyaWNrZXQ6Ok1lZGlhVHlwZT4oCi0gICAgICBKYXZhX01lZGlhVHlw
ZV9nZXROYXRpdmUoam5pLCBqX21lZGlhX3R5cGUpKTsKLX0KLQotc3RhdGljIFNjb3BlZEphdmFM
b2NhbFJlZjxqc3RyaW5nPiBKTklfTWVkaWFTdHJlYW1UcmFja19HZXRJZCgKLSAgICBKTklFbnYq
IGpuaSwKLSAgICBqbG9uZyBqX3ApIHsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YVN0cmluZygKLSAg
ICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal9w
KS0+aWQoKSk7Ci19Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4gSk5JX01l
ZGlhU3RyZWFtVHJhY2tfR2V0S2luZCgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3Ap
IHsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YVN0cmluZygKLSAgICAgIGpuaSwgcmVpbnRlcnByZXRf
Y2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal9wKS0+a2luZCgpKTsKLX0KLQotc3Rh
dGljIGpib29sZWFuIEpOSV9NZWRpYVN0cmVhbVRyYWNrX0dldEVuYWJsZWQoSk5JRW52KiBqbmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBq
X3ApIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVyZmFj
ZSo+KGpfcCktPmVuYWJsZWQoKTsKLX0KLQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PiBKTklfTWVkaWFTdHJlYW1UcmFja19HZXRTdGF0ZSgKLSAgICBKTklFbnYqIGpuaSwKLSAg
ICBqbG9uZyBqX3ApIHsKLSAgcmV0dXJuIEphdmFfU3RhdGVfZnJvbU5hdGl2ZUluZGV4KAotICAg
ICAgam5pLCByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihqX3Ap
LT5zdGF0ZSgpKTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9NZWRpYVN0cmVhbVRyYWNrX1Nl
dEVuYWJsZWQoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqbG9uZyBqX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqYm9vbGVhbiBlbmFibGVkKSB7Ci0gIHJldHVybiByZWludGVycHJl
dF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihqX3ApLT5zZXRfZW5hYmxlZCgKLSAg
ICAgIGVuYWJsZWQpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX3N0cmVhbV90cmFjay5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9w
Yy9tZWRpYV9zdHJlYW1fdHJhY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJm
ZTMwMmRiNzYwY2Y2ZWEyOGRiOTI0NGI5NDE3NTIxOGI4ZDVjZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX3N0cmVhbV90cmFjay5o
CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lm
bmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX01FRElBX1NUUkVBTV9UUkFDS19IXwotI2RlZmlu
ZSBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX01FRElBX1NUUkVBTV9UUkFDS19IXwotCi0jaW5jbHVk
ZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJhcGkvbWVkaWFfdHlwZXMuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9uYXRpdmVfYXBpL2puaS9zY29wZWRfamF2YV9yZWYuaCIKLQotbmFtZXNwYWNlIHdl
YnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5h
dGl2ZVRvSmF2YU1lZGlhVHlwZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjcmlja2V0OjpNZWRp
YVR5cGUgbWVkaWFfdHlwZSk7Ci1jcmlja2V0OjpNZWRpYVR5cGUgSmF2YVRvTmF0aXZlTWVkaWFU
eXBlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX21lZGlhX3R5cGUpOwotCi19ICAvLyBuYW1lc3Bh
Y2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURf
U1JDX0pOSV9QQ19NRURJQV9TVFJFQU1fVFJBQ0tfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvb3du
ZWRfZmFjdG9yeV9hbmRfdGhyZWFkcy5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvb3duZWRfZmFjdG9yeV9hbmRfdGhy
ZWFkcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyYjExN2U1N2FjMGY4MmQx
MWRkMzAyYmZkYjk0ZjYxMTcyZmY3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL293bmVkX2ZhY3RvcnlfYW5kX3RocmVhZHMuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvc3JjL2puaS9wYy9vd25lZF9mYWN0b3J5X2FuZF90aHJlYWRzLmgiCi0KLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3
ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLU93bmVkRmFjdG9yeUFuZFRocmVhZHM6Ok93bmVk
RmFjdG9yeUFuZFRocmVhZHMoCi0gICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiBuZXR3
b3JrX3RocmVhZCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IHdvcmtlcl90aHJl
YWQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiBzaWduYWxpbmdfdGhyZWFkLAot
ICAgIHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5KiBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSwK
LSAgICBjb25zdCBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJm
YWNlPiYgZmFjdG9yeSkKLSAgICA6IG5ldHdvcmtfdGhyZWFkXyhzdGQ6Om1vdmUobmV0d29ya190
aHJlYWQpKSwKLSAgICAgIHdvcmtlcl90aHJlYWRfKHN0ZDo6bW92ZSh3b3JrZXJfdGhyZWFkKSks
Ci0gICAgICBzaWduYWxpbmdfdGhyZWFkXyhzdGQ6Om1vdmUoc2lnbmFsaW5nX3RocmVhZCkpLAot
ICAgICAgbmV0d29ya19tb25pdG9yX2ZhY3RvcnlfKG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5KSwK
LSAgICAgIGZhY3RvcnlfKGZhY3RvcnkpIHt9Ci0KLU93bmVkRmFjdG9yeUFuZFRocmVhZHM6On5P
d25lZEZhY3RvcnlBbmRUaHJlYWRzKCkgewotICBpZiAobmV0d29ya19tb25pdG9yX2ZhY3Rvcnlf
ICE9IG51bGxwdHIpIHsKLSAgICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeTo6UmVsZWFzZUZh
Y3RvcnkobmV0d29ya19tb25pdG9yX2ZhY3RvcnlfKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3Bh
Y2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL293bmVk
X2ZhY3RvcnlfYW5kX3RocmVhZHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvb3duZWRfZmFjdG9yeV9hbmRfdGhyZWFk
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDVkNGRiZDcwMjg1MWRkMTNlNjhk
MjZkZWNjMzQ4ZGUwZmUxOWU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3NyYy9qbmkvcGMvb3duZWRfZmFjdG9yeV9hbmRfdGhyZWFkcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5E
Uk9JRF9TUkNfSk5JX1BDX09XTkVEX0ZBQ1RPUllfQU5EX1RIUkVBRFNfSF8KLSNkZWZpbmUgU0RL
X0FORFJPSURfU1JDX0pOSV9QQ19PV05FRF9GQUNUT1JZX0FORF9USFJFQURTX0hfCi0KLSNpbmNs
dWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2lu
Y2x1ZGUgImFwaS9wZWVyX2Nvbm5lY3Rpb25faW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicnRjX2Jh
c2UvdGhyZWFkLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLS8v
IEhlbHBlciBzdHJ1Y3QgZm9yIHdvcmtpbmcgYXJvdW5kIHRoZSBmYWN0IHRoYXQgQ3JlYXRlUGVl
ckNvbm5lY3Rpb25GYWN0b3J5KCkKLS8vIGNvbWVzIGluIHR3byBmbGF2b3JzOiBlaXRoZXIgZW50
aXJlbHkgYXV0b21hZ2ljYWwgKGNvbnN0cnVjdGluZyBpdHMgb3duCi0vLyB0aHJlYWRzIGFuZCBk
ZWxldGluZyB0aGVtIG9uIHRlYXJkb3duLCBidXQgbm8gZXh0ZXJuYWwgY29kZWMgZmFjdG9yeSBz
dXBwb3J0KQotLy8gb3IgZW50aXJlbHkgbWFudWFsIChyZXF1aXJlcyBjYWxsZXIgdG8gZGVsZXRl
IHRocmVhZHMgYWZ0ZXIgZmFjdG9yeQotLy8gdGVhcmRvd24pLiAgVGhpcyBzdHJ1Y3QgdGFrZXMg
b3duZXJzaGlwIG9mIGl0cyBjdG9yJ3MgYXJndW1lbnRzIHRvIHByZXNlbnQgYQotLy8gc2luZ2xl
IHRoaW5nIGZvciBKYXZhIHRvIGhvbGQgYW5kIGV2ZW50dWFsbHkgZnJlZS4KLWNsYXNzIE93bmVk
RmFjdG9yeUFuZFRocmVhZHMgewotIHB1YmxpYzoKLSAgT3duZWRGYWN0b3J5QW5kVGhyZWFkcygK
LSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gbmV0d29ya190aHJlYWQsCi0gICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IHdvcmtlcl90aHJlYWQsCi0gICAgICBzdGQ6
OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IHNpZ25hbGluZ190aHJlYWQsCi0gICAgICBydGM6Ok5l
dHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29ya19tb25pdG9yX2ZhY3RvcnksCi0gICAgICBjb25z
dCBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiYgZmFj
dG9yeSk7Ci0KLSAgfk93bmVkRmFjdG9yeUFuZFRocmVhZHMoKTsKLQotICBQZWVyQ29ubmVjdGlv
bkZhY3RvcnlJbnRlcmZhY2UqIGZhY3RvcnkoKSB7IHJldHVybiBmYWN0b3J5Xy5nZXQoKTsgfQot
ICBydGM6OlRocmVhZCogbmV0d29ya190aHJlYWQoKSB7IHJldHVybiBuZXR3b3JrX3RocmVhZF8u
Z2V0KCk7IH0KLSAgcnRjOjpUaHJlYWQqIHNpZ25hbGluZ190aHJlYWQoKSB7IHJldHVybiBzaWdu
YWxpbmdfdGhyZWFkXy5nZXQoKTsgfQotICBydGM6OlRocmVhZCogd29ya2VyX3RocmVhZCgpIHsg
cmV0dXJuIHdvcmtlcl90aHJlYWRfLmdldCgpOyB9Ci0gIHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0
b3J5KiBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSgpIHsKLSAgICByZXR1cm4gbmV0d29ya19tb25p
dG9yX2ZhY3RvcnlfOwotICB9Ci0gIHZvaWQgY2xlYXJfbmV0d29ya19tb25pdG9yX2ZhY3Rvcnko
KSB7IG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5XyA9IG51bGxwdHI7IH0KLQotIHByaXZhdGU6Ci0g
IGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gbmV0d29ya190aHJlYWRfOwotICBj
b25zdCBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IHdvcmtlcl90aHJlYWRfOwotICBjb25z
dCBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IHNpZ25hbGluZ190aHJlYWRfOwotICBydGM6
Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29ya19tb25pdG9yX2ZhY3RvcnlfOwotICBjb25z
dCBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0
b3J5XzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMK
LQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX09XTkVEX0ZBQ1RPUllfQU5EX1RI
UkVBRFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcGVlcl9jb25uZWN0aW9uLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9w
Yy9wZWVyX2Nvbm5lY3Rpb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZTM5
ZmJmNjYxNDEyZDhmZmY2OThjZWU2NjlmZWJmZjY0MTJmNGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rpb24uY2MKKysr
IC9kZXYvbnVsbApAQCAtMSw4MzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gTGlm
ZWN5Y2xlIG5vdGVzOiBvYmplY3RzIGFyZSBvd25lZCB3aGVyZSB0aGV5IHdpbGwgYmUgY2FsbGVk
OyBpbiBvdGhlciB3b3JkcwotLy8gRm9vT2JzZXJ2ZXJzIGFyZSBvd25lZCBieSBDKystbGFuZCwg
YW5kIHVzZXItY2FsbGFibGUgb2JqZWN0cyAoZS5nLgotLy8gUGVlckNvbm5lY3Rpb24gYW5kIFZp
ZGVvVHJhY2spIGFyZSBvd25lZCBieSBKYXZhLWxhbmQuCi0vLyBXaGVuIHRoaXMgZmlsZSAob3Ig
b3RoZXIgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkpIGFsbG9jYXRlcyBDKysKLS8vIFJlZkNvdW50
SW50ZXJmYWNlcyBpdCBBZGRSZWYoKXMgYW4gYXJ0aWZpY2lhbCByZWYgc2ltdWxhdGluZyB0aGUg
amxvbmcgaGVsZAotLy8gaW4gSmF2YS1sYW5kLCBhbmQgdGhlbiBSZWxlYXNlKClzIHRoZSByZWYg
aW4gdGhlIHJlc3BlY3RpdmUgZnJlZSBjYWxsLgotLy8gU29tZXRpbWVzIHRoaXMgQWRkUmVmIGlz
IGltcGxpY2l0IGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBzY29wZWRfcmVmcHRyPD4KLS8vIHdo
aWNoIGlzIHRoZW4gLnJlbGVhc2UoKWQuIEFueSBwZXJzaXN0ZW50IChub24tbG9jYWwpIHJlZmVy
ZW5jZXMgZnJvbSBDKysgdG8KLS8vIEphdmEgbXVzdCBiZSBnbG9iYWwgb3Igd2VhayAoaW4gd2hp
Y2ggY2FzZSB0aGV5IG11c3QgYmUgY2hlY2tlZCBiZWZvcmUgdXNlKSEKLS8vCi0vLyBFeGNlcHRp
b24gbm90ZXM6IHByZXR0eSBtdWNoIGFsbCBKTkkgY2FsbHMgY2FuIHRocm93IEphdmEgZXhjZXB0
aW9ucywgc28gZWFjaAotLy8gY2FsbCB0aHJvdWdoIGEgSk5JRW52KiBwb2ludGVyIG5lZWRzIHRv
IGJlIGZvbGxvd2VkIGJ5IGFuIEV4Y2VwdGlvbkNoZWNrKCkKLS8vIGNhbGwuIEluIHRoaXMgZmls
ZSB0aGlzIGlzIGRvbmUgaW4gQ0hFQ0tfRVhDRVBUSU9OLCBtYWtpbmcgZm9yIG11Y2ggZWFzaWVy
Ci0vLyBkZWJ1Z2dpbmcgaW4gY2FzZSBvZiBmYWlsdXJlICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8g
d2FpdCBmb3IgY29udHJvbCB0bwotLy8gcmV0dXJuIHRvIHRoZSBKYXZhIGZyYW1lIHRoYXQgY2Fs
bGVkIGNvZGUgaW4gdGhpcyBmaWxlLCBhdCB3aGljaCBwb2ludCBpdCdzCi0vLyBpbXBvc3NpYmxl
IHRvIHRlbGwgd2hpY2ggSk5JIGNhbGwgYnJva2UpLgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQv
c3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rpb24uaCIKLQotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNp
bmNsdWRlICJhcGkvcGVlcl9jb25uZWN0aW9uX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgImFwaS9y
dGNfZXZlbnRfbG9nX291dHB1dF9maWxlLmgiCi0jaW5jbHVkZSAiYXBpL3J0cF9yZWNlaXZlcl9p
bnRlcmZhY2UuaCIKLSNpbmNsdWRlICJhcGkvcnRwX3NlbmRlcl9pbnRlcmZhY2UuaCIKLSNpbmNs
dWRlICJhcGkvcnRwX3RyYW5zY2VpdmVyX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNl
L2NoZWNrcy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJydGNf
YmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQv
Z2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9DYW5kaWRhdGVQYWlyQ2hhbmdlRXZlbnRfam5p
LmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9Q
ZWVyQ29ubmVjdGlvbl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2pu
aS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVy
cy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvY3J5cHRvX29wdGlvbnMuaCIK
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL2RhdGFfY2hhbm5lbC5oIgotI2luY2x1
ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvaWNlX2NhbmRpZGF0ZS5oIgotI2luY2x1ZGUgInNk
ay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVkaWFfY29uc3RyYWludHMuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9zcmMvam5pL3BjL21lZGlhX3N0cmVhbV90cmFjay5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL3NyYy9qbmkvcGMvcnRjX2NlcnRpZmljYXRlLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS9wYy9ydGNfc3RhdHNfY29sbGVjdG9yX2NhbGxiYWNrX3dyYXBwZXIuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF9zZW5kZXIuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL3NkcF9vYnNlcnZlci5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL3NyYy9qbmkvcGMvc2Vzc2lvbl9kZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL3NyYy9qbmkvcGMvc3RhdHNfb2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9z
cmMvam5pL3BjL3R1cm5fY3VzdG9taXplci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBqbmkgewotCi1uYW1lc3BhY2UgewotCi1QZWVyQ29ubmVjdGlvbkludGVyZmFjZSogRXh0
cmFjdE5hdGl2ZVBDKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3BjKSB7Ci0gIHJldHVybiByZWlu
dGVycHJldF9jYXN0PE93bmVkUGVlckNvbm5lY3Rpb24qPigKLSAgICAgICAgICAgICBKYXZhX1Bl
ZXJDb25uZWN0aW9uX2dldE5hdGl2ZU93bmVkUGVlckNvbm5lY3Rpb24oam5pLCBqX3BjKSkKLSAg
ICAgIC0+cGMoKTsKLX0KLQotUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkljZVNlcnZlcnMgSmF2
YVRvTmF0aXZlSWNlU2VydmVycygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX2ljZV9zZXJ2ZXJzKSB7Ci0gIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJ
Y2VTZXJ2ZXJzIGljZV9zZXJ2ZXJzOwotICBmb3IgKGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpf
aWNlX3NlcnZlciA6IEl0ZXJhYmxlKGpuaSwgal9pY2Vfc2VydmVycykpIHsKLSAgICBTY29wZWRK
YXZhTG9jYWxSZWY8am9iamVjdD4gal9pY2Vfc2VydmVyX3Rsc19jZXJ0X3BvbGljeSA9Ci0gICAg
ICAgIEphdmFfSWNlU2VydmVyX2dldFRsc0NlcnRQb2xpY3koam5pLCBqX2ljZV9zZXJ2ZXIpOwot
ICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiB1cmxzID0KLSAgICAgICAgSmF2YV9JY2VT
ZXJ2ZXJfZ2V0VXJscyhqbmksIGpfaWNlX3NlcnZlcik7Ci0gICAgU2NvcGVkSmF2YUxvY2FsUmVm
PGpzdHJpbmc+IHVzZXJuYW1lID0KLSAgICAgICAgSmF2YV9JY2VTZXJ2ZXJfZ2V0VXNlcm5hbWUo
am5pLCBqX2ljZV9zZXJ2ZXIpOwotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqc3RyaW5nPiBwYXNz
d29yZCA9Ci0gICAgICAgIEphdmFfSWNlU2VydmVyX2dldFBhc3N3b3JkKGpuaSwgal9pY2Vfc2Vy
dmVyKTsKLSAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6VGxzQ2VydFBvbGljeSB0bHNfY2Vy
dF9wb2xpY3kgPQotICAgICAgICBKYXZhVG9OYXRpdmVUbHNDZXJ0UG9saWN5KGpuaSwgal9pY2Vf
c2VydmVyX3Rsc19jZXJ0X3BvbGljeSk7Ci0gICAgU2NvcGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+
IGhvc3RuYW1lID0KLSAgICAgICAgSmF2YV9JY2VTZXJ2ZXJfZ2V0SG9zdG5hbWUoam5pLCBqX2lj
ZV9zZXJ2ZXIpOwotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiB0bHNfYWxwbl9wcm90
b2NvbHMgPQotICAgICAgICBKYXZhX0ljZVNlcnZlcl9nZXRUbHNBbHBuUHJvdG9jb2xzKGpuaSwg
al9pY2Vfc2VydmVyKTsKLSAgICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gdGxzX2VsbGlw
dGljX2N1cnZlcyA9Ci0gICAgICAgIEphdmFfSWNlU2VydmVyX2dldFRsc0VsbGlwdGljQ3VydmVz
KGpuaSwgal9pY2Vfc2VydmVyKTsKLSAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNlU2Vy
dmVyIHNlcnZlcjsKLSAgICBzZXJ2ZXIudXJscyA9IEphdmFMaXN0VG9OYXRpdmVWZWN0b3I8c3Rk
OjpzdHJpbmcsIGpzdHJpbmc+KAotICAgICAgICBqbmksIHVybHMsICZKYXZhVG9OYXRpdmVTdHJp
bmcpOwotICAgIHNlcnZlci51c2VybmFtZSA9IEphdmFUb05hdGl2ZVN0cmluZyhqbmksIHVzZXJu
YW1lKTsKLSAgICBzZXJ2ZXIucGFzc3dvcmQgPSBKYXZhVG9OYXRpdmVTdHJpbmcoam5pLCBwYXNz
d29yZCk7Ci0gICAgc2VydmVyLnRsc19jZXJ0X3BvbGljeSA9IHRsc19jZXJ0X3BvbGljeTsKLSAg
ICBzZXJ2ZXIuaG9zdG5hbWUgPSBKYXZhVG9OYXRpdmVTdHJpbmcoam5pLCBob3N0bmFtZSk7Ci0g
ICAgc2VydmVyLnRsc19hbHBuX3Byb3RvY29scyA9IEphdmFMaXN0VG9OYXRpdmVWZWN0b3I8c3Rk
OjpzdHJpbmcsIGpzdHJpbmc+KAotICAgICAgICBqbmksIHRsc19hbHBuX3Byb3RvY29scywgJkph
dmFUb05hdGl2ZVN0cmluZyk7Ci0gICAgc2VydmVyLnRsc19lbGxpcHRpY19jdXJ2ZXMgPSBKYXZh
TGlzdFRvTmF0aXZlVmVjdG9yPHN0ZDo6c3RyaW5nLCBqc3RyaW5nPigKLSAgICAgICAgam5pLCB0
bHNfZWxsaXB0aWNfY3VydmVzLCAmSmF2YVRvTmF0aXZlU3RyaW5nKTsKLSAgICBpY2Vfc2VydmVy
cy5wdXNoX2JhY2soc2VydmVyKTsKLSAgfQotICByZXR1cm4gaWNlX3NlcnZlcnM7Ci19Ci0KLVNk
cFNlbWFudGljcyBKYXZhVG9OYXRpdmVTZHBTZW1hbnRpY3MoSk5JRW52KiBqbmksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpf
c2RwX3NlbWFudGljcykgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51bU5h
bWUoam5pLCBqX3NkcF9zZW1hbnRpY3MpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIlBMQU5fQiIp
Ci0gICAgcmV0dXJuIFNkcFNlbWFudGljczo6a1BsYW5COwotCi0gIGlmIChlbnVtX25hbWUgPT0g
IlVOSUZJRURfUExBTiIpCi0gICAgcmV0dXJuIFNkcFNlbWFudGljczo6a1VuaWZpZWRQbGFuOwot
Ci0gIFJUQ19OT1RSRUFDSEVEKCk7Ci0gIHJldHVybiBTZHBTZW1hbnRpY3M6OmtQbGFuQjsKLX0K
LQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YUNhbmRpZGF0ZVBhaXJD
aGFuZ2UoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgY3JpY2tldDo6Q2FuZGlkYXRlUGFp
ckNoYW5nZUV2ZW50JiBldmVudCkgewotICBjb25zdCBhdXRvJiBzZWxlY3RlZF9wYWlyID0gZXZl
bnQuc2VsZWN0ZWRfY2FuZGlkYXRlX3BhaXI7Ci0gIHJldHVybiBKYXZhX0NhbmRpZGF0ZVBhaXJD
aGFuZ2VFdmVudF9Db25zdHJ1Y3RvcigKLSAgICAgIGVudiwgTmF0aXZlVG9KYXZhQ2FuZGlkYXRl
KGVudiwgc2VsZWN0ZWRfcGFpci5sb2NhbF9jYW5kaWRhdGUoKSksCi0gICAgICBOYXRpdmVUb0ph
dmFDYW5kaWRhdGUoZW52LCBzZWxlY3RlZF9wYWlyLnJlbW90ZV9jYW5kaWRhdGUoKSksCi0gICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50Lmxhc3RfZGF0YV9yZWNlaXZlZF9tcyksCi0gICAgICBO
YXRpdmVUb0phdmFTdHJpbmcoZW52LCBldmVudC5yZWFzb24pKTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlCi0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFBZGFwdGVyVHlw
ZShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYWRhcHRlclR5cGUpIHsKLSAgcmV0dXJuIEphdmFfQWRhcHRlclR5cGVf
ZnJvbU5hdGl2ZUluZGV4KGVudiwgYWRhcHRlclR5cGUpOwotfQotCi12b2lkIEphdmFUb05hdGl2
ZVJUQ0NvbmZpZ3VyYXRpb24oCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxq
b2JqZWN0PiYgal9ydGNfY29uZmlnLAotICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVEND
b25maWd1cmF0aW9uKiBydGNfY29uZmlnKSB7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0
PiBqX2ljZV90cmFuc3BvcnRzX3R5cGUgPQotICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dl
dEljZVRyYW5zcG9ydHNUeXBlKGpuaSwgal9ydGNfY29uZmlnKTsKLSAgU2NvcGVkSmF2YUxvY2Fs
UmVmPGpvYmplY3Q+IGpfYnVuZGxlX3BvbGljeSA9Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRp
b25fZ2V0QnVuZGxlUG9saWN5KGpuaSwgal9ydGNfY29uZmlnKTsKLSAgU2NvcGVkSmF2YUxvY2Fs
UmVmPGpvYmplY3Q+IGpfcnRjcF9tdXhfcG9saWN5ID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJh
dGlvbl9nZXRSdGNwTXV4UG9saWN5KGpuaSwgal9ydGNfY29uZmlnKTsKLSAgU2NvcGVkSmF2YUxv
Y2FsUmVmPGpvYmplY3Q+IGpfcnRjX2NlcnRpZmljYXRlID0KLSAgICAgIEphdmFfUlRDQ29uZmln
dXJhdGlvbl9nZXRDZXJ0aWZpY2F0ZShqbmksIGpfcnRjX2NvbmZpZyk7Ci0gIFNjb3BlZEphdmFM
b2NhbFJlZjxqb2JqZWN0PiBqX3RjcF9jYW5kaWRhdGVfcG9saWN5ID0KLSAgICAgIEphdmFfUlRD
Q29uZmlndXJhdGlvbl9nZXRUY3BDYW5kaWRhdGVQb2xpY3koam5pLCBqX3J0Y19jb25maWcpOwot
ICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9jYW5kaWRhdGVfbmV0d29ya19wb2xpY3kg
PQotICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldENhbmRpZGF0ZU5ldHdvcmtQb2xpY3ko
am5pLCBqX3J0Y19jb25maWcpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9pY2Vf
c2VydmVycyA9Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0SWNlU2VydmVycyhqbmks
IGpfcnRjX2NvbmZpZyk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2NvbnRpbnVh
bF9nYXRoZXJpbmdfcG9saWN5ID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRDb250
aW51YWxHYXRoZXJpbmdQb2xpY3koam5pLCBqX3J0Y19jb25maWcpOwotICBTY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gal90dXJuX3BvcnRfcHJ1bmVfcG9saWN5ID0KLSAgICAgIEphdmFfUlRD
Q29uZmlndXJhdGlvbl9nZXRUdXJuUG9ydFBydW5lUG9saWN5KGpuaSwgal9ydGNfY29uZmlnKTsK
LSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfdHVybl9jdXN0b21pemVyID0KLSAgICAg
IEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRUdXJuQ3VzdG9taXplcihqbmksIGpfcnRjX2NvbmZp
Zyk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX25ldHdvcmtfcHJlZmVyZW5jZSA9
Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0TmV0d29ya1ByZWZlcmVuY2Uoam5pLCBq
X3J0Y19jb25maWcpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9zZHBfc2VtYW50
aWNzID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRTZHBTZW1hbnRpY3Moam5pLCBq
X3J0Y19jb25maWcpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9jcnlwdG9fb3B0
aW9ucyA9Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0Q3J5cHRvT3B0aW9ucyhqbmks
IGpfcnRjX2NvbmZpZyk7Ci0KLSAgcnRjX2NvbmZpZy0+dHlwZSA9IEphdmFUb05hdGl2ZUljZVRy
YW5zcG9ydHNUeXBlKGpuaSwgal9pY2VfdHJhbnNwb3J0c190eXBlKTsKLSAgcnRjX2NvbmZpZy0+
YnVuZGxlX3BvbGljeSA9IEphdmFUb05hdGl2ZUJ1bmRsZVBvbGljeShqbmksIGpfYnVuZGxlX3Bv
bGljeSk7Ci0gIHJ0Y19jb25maWctPnJ0Y3BfbXV4X3BvbGljeSA9Ci0gICAgICBKYXZhVG9OYXRp
dmVSdGNwTXV4UG9saWN5KGpuaSwgal9ydGNwX211eF9wb2xpY3kpOwotICBpZiAoIWpfcnRjX2Nl
cnRpZmljYXRlLmlzX251bGwoKSkgewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxydGM6OlJUQ0Nl
cnRpZmljYXRlPiBjZXJ0aWZpY2F0ZSA9Ci0gICAgICAgIHJ0Yzo6UlRDQ2VydGlmaWNhdGU6OkZy
b21QRU0oCi0gICAgICAgICAgICBKYXZhVG9OYXRpdmVSVENDZXJ0aWZpY2F0ZVBFTShqbmksIGpf
cnRjX2NlcnRpZmljYXRlKSk7Ci0gICAgUlRDX0NIRUNLKGNlcnRpZmljYXRlICE9IG51bGxwdHIp
IDw8ICJzdXBwbGllZCBjZXJ0aWZpY2F0ZSBpcyBtYWxmb3JtZWQuIjsKLSAgICBydGNfY29uZmln
LT5jZXJ0aWZpY2F0ZXMucHVzaF9iYWNrKGNlcnRpZmljYXRlKTsKLSAgfQotICBydGNfY29uZmln
LT50Y3BfY2FuZGlkYXRlX3BvbGljeSA9Ci0gICAgICBKYXZhVG9OYXRpdmVUY3BDYW5kaWRhdGVQ
b2xpY3koam5pLCBqX3RjcF9jYW5kaWRhdGVfcG9saWN5KTsKLSAgcnRjX2NvbmZpZy0+Y2FuZGlk
YXRlX25ldHdvcmtfcG9saWN5ID0KLSAgICAgIEphdmFUb05hdGl2ZUNhbmRpZGF0ZU5ldHdvcmtQ
b2xpY3koam5pLCBqX2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeSk7Ci0gIHJ0Y19jb25maWctPnNl
cnZlcnMgPSBKYXZhVG9OYXRpdmVJY2VTZXJ2ZXJzKGpuaSwgal9pY2Vfc2VydmVycyk7Ci0gIHJ0
Y19jb25maWctPmF1ZGlvX2ppdHRlcl9idWZmZXJfbWF4X3BhY2tldHMgPQotICAgICAgSmF2YV9S
VENDb25maWd1cmF0aW9uX2dldEF1ZGlvSml0dGVyQnVmZmVyTWF4UGFja2V0cyhqbmksIGpfcnRj
X2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPmF1ZGlvX2ppdHRlcl9idWZmZXJfZmFzdF9hY2NlbGVy
YXRlID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRBdWRpb0ppdHRlckJ1ZmZlckZh
c3RBY2NlbGVyYXRlKGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpfcnRjX2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPmlj
ZV9jb25uZWN0aW9uX3JlY2VpdmluZ190aW1lb3V0ID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJh
dGlvbl9nZXRJY2VDb25uZWN0aW9uUmVjZWl2aW5nVGltZW91dChqbmksIGpfcnRjX2NvbmZpZyk7
Ci0gIHJ0Y19jb25maWctPmljZV9iYWNrdXBfY2FuZGlkYXRlX3BhaXJfcGluZ19pbnRlcnZhbCA9
Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0SWNlQmFja3VwQ2FuZGlkYXRlUGFpclBp
bmdJbnRlcnZhbChqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqX3J0Y19jb25maWcpOwotICBydGNfY29uZmlnLT5j
b250aW51YWxfZ2F0aGVyaW5nX3BvbGljeSA9Ci0gICAgICBKYXZhVG9OYXRpdmVDb250aW51YWxH
YXRoZXJpbmdQb2xpY3koam5pLCBqX2NvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5KTsKLSAgcnRj
X2NvbmZpZy0+aWNlX2NhbmRpZGF0ZV9wb29sX3NpemUgPQotICAgICAgSmF2YV9SVENDb25maWd1
cmF0aW9uX2dldEljZUNhbmRpZGF0ZVBvb2xTaXplKGpuaSwgal9ydGNfY29uZmlnKTsKLSAgcnRj
X2NvbmZpZy0+cHJ1bmVfdHVybl9wb3J0cyA9Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25f
Z2V0UHJ1bmVUdXJuUG9ydHMoam5pLCBqX3J0Y19jb25maWcpOwotICBydGNfY29uZmlnLT50dXJu
X3BvcnRfcHJ1bmVfcG9saWN5ID0KLSAgICAgIEphdmFUb05hdGl2ZVBvcnRQcnVuZVBvbGljeShq
bmksIGpfdHVybl9wb3J0X3BydW5lX3BvbGljeSk7Ci0gIHJ0Y19jb25maWctPnByZXN1bWVfd3Jp
dGFibGVfd2hlbl9mdWxseV9yZWxheWVkID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9n
ZXRQcmVzdW1lV3JpdGFibGVXaGVuRnVsbHlSZWxheWVkKGpuaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfcnRjX2NvbmZp
Zyk7Ci0gIHJ0Y19jb25maWctPnN1cmZhY2VfaWNlX2NhbmRpZGF0ZXNfb25faWNlX3RyYW5zcG9y
dF90eXBlX2NoYW5nZWQgPQotICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldFN1cmZhY2VJ
Y2VDYW5kaWRhdGVzT25JY2VUcmFuc3BvcnRUeXBlQ2hhbmdlZCgKLSAgICAgICAgICBqbmksIGpf
cnRjX2NvbmZpZyk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2ljZV9jaGVja19p
bnRlcnZhbF9zdHJvbmdfY29ubmVjdGl2aXR5ID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlv
bl9nZXRJY2VDaGVja0ludGVydmFsU3Ryb25nQ29ubmVjdGl2aXR5KGpuaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpf
cnRjX2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPmljZV9jaGVja19pbnRlcnZhbF9zdHJvbmdfY29u
bmVjdGl2aXR5ID0KLSAgICAgIEphdmFUb05hdGl2ZU9wdGlvbmFsSW50KGpuaSwgal9pY2VfY2hl
Y2tfaW50ZXJ2YWxfc3Ryb25nX2Nvbm5lY3Rpdml0eSk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxq
b2JqZWN0PiBqX2ljZV9jaGVja19pbnRlcnZhbF93ZWFrX2Nvbm5lY3Rpdml0eSA9Ci0gICAgICBK
YXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0SWNlQ2hlY2tJbnRlcnZhbFdlYWtDb25uZWN0aXZpdHko
am5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpfcnRjX2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPmljZV9jaGVja19pbnRl
cnZhbF93ZWFrX2Nvbm5lY3Rpdml0eSA9Ci0gICAgICBKYXZhVG9OYXRpdmVPcHRpb25hbEludChq
bmksIGpfaWNlX2NoZWNrX2ludGVydmFsX3dlYWtfY29ubmVjdGl2aXR5KTsKLSAgU2NvcGVkSmF2
YUxvY2FsUmVmPGpvYmplY3Q+IGpfaWNlX2NoZWNrX21pbl9pbnRlcnZhbCA9Ci0gICAgICBKYXZh
X1JUQ0NvbmZpZ3VyYXRpb25fZ2V0SWNlQ2hlY2tNaW5JbnRlcnZhbChqbmksIGpfcnRjX2NvbmZp
Zyk7Ci0gIHJ0Y19jb25maWctPmljZV9jaGVja19taW5faW50ZXJ2YWwgPQotICAgICAgSmF2YVRv
TmF0aXZlT3B0aW9uYWxJbnQoam5pLCBqX2ljZV9jaGVja19taW5faW50ZXJ2YWwpOwotICBTY29w
ZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9pY2VfdW53cml0YWJsZV90aW1lb3V0ID0KLSAgICAg
IEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRJY2VVbndyaXRhYmxlVGltZW91dChqbmksIGpfcnRj
X2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPmljZV91bndyaXRhYmxlX3RpbWVvdXQgPQotICAgICAg
SmF2YVRvTmF0aXZlT3B0aW9uYWxJbnQoam5pLCBqX2ljZV91bndyaXRhYmxlX3RpbWVvdXQpOwot
ICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9pY2VfdW53cml0YWJsZV9taW5fY2hlY2tz
ID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRJY2VVbndyaXRhYmxlTWluQ2hlY2tz
KGpuaSwgal9ydGNfY29uZmlnKTsKLSAgcnRjX2NvbmZpZy0+aWNlX3Vud3JpdGFibGVfbWluX2No
ZWNrcyA9Ci0gICAgICBKYXZhVG9OYXRpdmVPcHRpb25hbEludChqbmksIGpfaWNlX3Vud3JpdGFi
bGVfbWluX2NoZWNrcyk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX3N0dW5fY2Fu
ZGlkYXRlX2tlZXBhbGl2ZV9pbnRlcnZhbCA9Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25f
Z2V0U3R1bkNhbmRpZGF0ZUtlZXBhbGl2ZUludGVydmFsKGpuaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal9ydGNfY29uZmln
KTsKLSAgcnRjX2NvbmZpZy0+c3R1bl9jYW5kaWRhdGVfa2VlcGFsaXZlX2ludGVydmFsID0KLSAg
ICAgIEphdmFUb05hdGl2ZU9wdGlvbmFsSW50KGpuaSwgal9zdHVuX2NhbmRpZGF0ZV9rZWVwYWxp
dmVfaW50ZXJ2YWwpOwotICBydGNfY29uZmlnLT5kaXNhYmxlX2lwdjZfb25fd2lmaSA9Ci0gICAg
ICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0RGlzYWJsZUlQdjZPbldpZmkoam5pLCBqX3J0Y19j
b25maWcpOwotICBydGNfY29uZmlnLT5tYXhfaXB2Nl9uZXR3b3JrcyA9Ci0gICAgICBKYXZhX1JU
Q0NvbmZpZ3VyYXRpb25fZ2V0TWF4SVB2Nk5ldHdvcmtzKGpuaSwgal9ydGNfY29uZmlnKTsKLQot
ICBydGNfY29uZmlnLT50dXJuX2N1c3RvbWl6ZXIgPSBHZXROYXRpdmVUdXJuQ3VzdG9taXplcihq
bmksIGpfdHVybl9jdXN0b21pemVyKTsKLQotICBydGNfY29uZmlnLT5kaXNhYmxlX2lwdjYgPQot
ICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldERpc2FibGVJcHY2KGpuaSwgal9ydGNfY29u
ZmlnKTsKLSAgcnRjX2NvbmZpZy0+bWVkaWFfY29uZmlnLmVuYWJsZV9kc2NwID0KLSAgICAgIEph
dmFfUlRDQ29uZmlndXJhdGlvbl9nZXRFbmFibGVEc2NwKGpuaSwgal9ydGNfY29uZmlnKTsKLSAg
cnRjX2NvbmZpZy0+bWVkaWFfY29uZmlnLnZpZGVvLmVuYWJsZV9jcHVfYWRhcHRhdGlvbiA9Ci0g
ICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0RW5hYmxlQ3B1T3ZlcnVzZURldGVjdGlvbihq
bmksIGpfcnRjX2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPmVuYWJsZV9ydHBfZGF0YV9jaGFubmVs
ID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRFbmFibGVSdHBEYXRhQ2hhbm5lbChq
bmksIGpfcnRjX2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPm1lZGlhX2NvbmZpZy52aWRlby5zdXNw
ZW5kX2JlbG93X21pbl9iaXRyYXRlID0KLSAgICAgIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRT
dXNwZW5kQmVsb3dNaW5CaXRyYXRlKGpuaSwgal9ydGNfY29uZmlnKTsKLSAgcnRjX2NvbmZpZy0+
c2NyZWVuY2FzdF9taW5fYml0cmF0ZSA9IEphdmFUb05hdGl2ZU9wdGlvbmFsSW50KAotICAgICAg
am5pLCBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0U2NyZWVuY2FzdE1pbkJpdHJhdGUoam5pLCBq
X3J0Y19jb25maWcpKTsKLSAgcnRjX2NvbmZpZy0+Y29tYmluZWRfYXVkaW9fdmlkZW9fYndlID0g
SmF2YVRvTmF0aXZlT3B0aW9uYWxCb29sKAotICAgICAgam5pLCBKYXZhX1JUQ0NvbmZpZ3VyYXRp
b25fZ2V0Q29tYmluZWRBdWRpb1ZpZGVvQndlKGpuaSwgal9ydGNfY29uZmlnKSk7Ci0gIHJ0Y19j
b25maWctPmVuYWJsZV9kdGxzX3NydHAgPSBKYXZhVG9OYXRpdmVPcHRpb25hbEJvb2woCi0gICAg
ICBqbmksIEphdmFfUlRDQ29uZmlndXJhdGlvbl9nZXRFbmFibGVEdGxzU3J0cChqbmksIGpfcnRj
X2NvbmZpZykpOwotICBydGNfY29uZmlnLT5uZXR3b3JrX3ByZWZlcmVuY2UgPQotICAgICAgSmF2
YVRvTmF0aXZlTmV0d29ya1ByZWZlcmVuY2Uoam5pLCBqX25ldHdvcmtfcHJlZmVyZW5jZSk7Ci0g
IHJ0Y19jb25maWctPnNkcF9zZW1hbnRpY3MgPSBKYXZhVG9OYXRpdmVTZHBTZW1hbnRpY3Moam5p
LCBqX3NkcF9zZW1hbnRpY3MpOwotICBydGNfY29uZmlnLT5hY3RpdmVfcmVzZXRfc3J0cF9wYXJh
bXMgPQotICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldEFjdGl2ZVJlc2V0U3J0cFBhcmFt
cyhqbmksIGpfcnRjX2NvbmZpZyk7Ci0gIHJ0Y19jb25maWctPnVzZV9tZWRpYV90cmFuc3BvcnQg
PQotICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldFVzZU1lZGlhVHJhbnNwb3J0KGpuaSwg
al9ydGNfY29uZmlnKTsKLSAgcnRjX2NvbmZpZy0+dXNlX21lZGlhX3RyYW5zcG9ydF9mb3JfZGF0
YV9jaGFubmVscyA9Ci0gICAgICBKYXZhX1JUQ0NvbmZpZ3VyYXRpb25fZ2V0VXNlTWVkaWFUcmFu
c3BvcnRGb3JEYXRhQ2hhbm5lbHMoam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfcnRjX2NvbmZpZyk7Ci0gIHJ0Y19j
b25maWctPmNyeXB0b19vcHRpb25zID0KLSAgICAgIEphdmFUb05hdGl2ZU9wdGlvbmFsQ3J5cHRv
T3B0aW9ucyhqbmksIGpfY3J5cHRvX29wdGlvbnMpOwotCi0gIHJ0Y19jb25maWctPmFsbG93X2Nv
ZGVjX3N3aXRjaGluZyA9IEphdmFUb05hdGl2ZU9wdGlvbmFsQm9vbCgKLSAgICAgIGpuaSwgSmF2
YV9SVENDb25maWd1cmF0aW9uX2dldEFsbG93Q29kZWNTd2l0Y2hpbmcoam5pLCBqX3J0Y19jb25m
aWcpKTsKLQotICBTY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4gal90dXJuX2xvZ2dpbmdfaWQg
PQotICAgICAgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldFR1cm5Mb2dnaW5nSWQoam5pLCBqX3J0
Y19jb25maWcpOwotICBpZiAoIUlzTnVsbChqbmksIGpfdHVybl9sb2dnaW5nX2lkKSkgewotICAg
IHJ0Y19jb25maWctPnR1cm5fbG9nZ2luZ19pZCA9IEphdmFUb05hdGl2ZVN0cmluZyhqbmksIGpf
dHVybl9sb2dnaW5nX2lkKTsKLSAgfQotfQotCi1ydGM6OktleVR5cGUgR2V0UnRjQ29uZmlnS2V5
VHlwZShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEphdmFSZWY8am9iamVjdD4mIGpfcnRjX2NvbmZpZykgewotICByZXR1cm4gSmF2YVRvTmF0aXZl
S2V5VHlwZSgKLSAgICAgIGVudiwgSmF2YV9SVENDb25maWd1cmF0aW9uX2dldEtleVR5cGUoZW52
LCBqX3J0Y19jb25maWcpKTsKLX0KLQotUGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaTo6UGVlckNv
bm5lY3Rpb25PYnNlcnZlckpuaSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX29ic2VydmVyKQotICAgIDogal9vYnNlcnZlcl9nbG9iYWxfKGpuaSwgal9v
YnNlcnZlcikge30KLQotUGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaTo6flBlZXJDb25uZWN0aW9u
T2JzZXJ2ZXJKbmkoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25PYnNlcnZlckpu
aTo6T25JY2VDYW5kaWRhdGUoCi0gICAgY29uc3QgSWNlQ2FuZGlkYXRlSW50ZXJmYWNlKiBjYW5k
aWRhdGUpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsK
LSAgSmF2YV9PYnNlcnZlcl9vbkljZUNhbmRpZGF0ZShlbnYsIGpfb2JzZXJ2ZXJfZ2xvYmFsXywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmVUb0phdmFJY2VDYW5kaWRhdGUo
ZW52LCAqY2FuZGlkYXRlKSk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaTo6
T25JY2VDYW5kaWRhdGVzUmVtb3ZlZCgKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpD
YW5kaWRhdGU+JiBjYW5kaWRhdGVzKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRo
cmVhZElmTmVlZGVkKCk7Ci0gIEphdmFfT2JzZXJ2ZXJfb25JY2VDYW5kaWRhdGVzUmVtb3ZlZCgK
LSAgICAgIGVudiwgal9vYnNlcnZlcl9nbG9iYWxfLCBOYXRpdmVUb0phdmFDYW5kaWRhdGVBcnJh
eShlbnYsIGNhbmRpZGF0ZXMpKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbk9ic2VydmVySm5p
OjpPblNpZ25hbGluZ0NoYW5nZSgKLSAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6U2lnbmFs
aW5nU3RhdGUgbmV3X3N0YXRlKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRocmVh
ZElmTmVlZGVkKCk7Ci0gIEphdmFfT2JzZXJ2ZXJfb25TaWduYWxpbmdDaGFuZ2UoCi0gICAgICBl
bnYsIGpfb2JzZXJ2ZXJfZ2xvYmFsXywKLSAgICAgIEphdmFfU2lnbmFsaW5nU3RhdGVfZnJvbU5h
dGl2ZUluZGV4KGVudiwgbmV3X3N0YXRlKSk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25PYnNl
cnZlckpuaTo6T25JY2VDb25uZWN0aW9uQ2hhbmdlKAotICAgIFBlZXJDb25uZWN0aW9uSW50ZXJm
YWNlOjpJY2VDb25uZWN0aW9uU3RhdGUgbmV3X3N0YXRlKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0
YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIEphdmFfT2JzZXJ2ZXJfb25JY2VDb25uZWN0
aW9uQ2hhbmdlKAotICAgICAgZW52LCBqX29ic2VydmVyX2dsb2JhbF8sCi0gICAgICBKYXZhX0lj
ZUNvbm5lY3Rpb25TdGF0ZV9mcm9tTmF0aXZlSW5kZXgoZW52LCBuZXdfc3RhdGUpKTsKLX0KLQot
dm9pZCBQZWVyQ29ubmVjdGlvbk9ic2VydmVySm5pOjpPblN0YW5kYXJkaXplZEljZUNvbm5lY3Rp
b25DaGFuZ2UoCi0gICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkljZUNvbm5lY3Rpb25TdGF0
ZSBuZXdfc3RhdGUpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVk
ZWQoKTsKLSAgSmF2YV9PYnNlcnZlcl9vblN0YW5kYXJkaXplZEljZUNvbm5lY3Rpb25DaGFuZ2Uo
Ci0gICAgICBlbnYsIGpfb2JzZXJ2ZXJfZ2xvYmFsXywKLSAgICAgIEphdmFfSWNlQ29ubmVjdGlv
blN0YXRlX2Zyb21OYXRpdmVJbmRleChlbnYsIG5ld19zdGF0ZSkpOwotfQotCi12b2lkIFBlZXJD
b25uZWN0aW9uT2JzZXJ2ZXJKbmk6Ok9uQ29ubmVjdGlvbkNoYW5nZSgKLSAgICBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZTo6UGVlckNvbm5lY3Rpb25TdGF0ZSBuZXdfc3RhdGUpIHsKLSAgSk5JRW52
KiBlbnYgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgSmF2YV9PYnNlcnZlcl9v
bkNvbm5lY3Rpb25DaGFuZ2UoZW52LCBqX29ic2VydmVyX2dsb2JhbF8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEphdmFfUGVlckNvbm5lY3Rpb25TdGF0ZV9mcm9tTmF0aXZl
SW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYsIHN0YXRp
Y19jYXN0PGludD4obmV3X3N0YXRlKSkpOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uT2JzZXJ2
ZXJKbmk6Ok9uSWNlQ29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShib29sIHJlY2VpdmluZykgewot
ICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBKYXZhX09i
c2VydmVyX29uSWNlQ29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShlbnYsIGpfb2JzZXJ2ZXJfZ2xv
YmFsXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
ZWl2aW5nKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbk9ic2VydmVySm5pOjpPbkljZVNlbGVj
dGVkQ2FuZGlkYXRlUGFpckNoYW5nZWQoCi0gICAgY29uc3QgY3JpY2tldDo6Q2FuZGlkYXRlUGFp
ckNoYW5nZUV2ZW50JiBldmVudCkgewotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJl
YWRJZk5lZWRlZCgpOwotICBKYXZhX09ic2VydmVyX29uU2VsZWN0ZWRDYW5kaWRhdGVQYWlyQ2hh
bmdlZCgKLSAgICAgIGVudiwgal9vYnNlcnZlcl9nbG9iYWxfLCBOYXRpdmVUb0phdmFDYW5kaWRh
dGVQYWlyQ2hhbmdlKGVudiwgZXZlbnQpKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbk9ic2Vy
dmVySm5pOjpPbkljZUdhdGhlcmluZ0NoYW5nZSgKLSAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFj
ZTo6SWNlR2F0aGVyaW5nU3RhdGUgbmV3X3N0YXRlKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNo
Q3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIEphdmFfT2JzZXJ2ZXJfb25JY2VHYXRoZXJpbmdD
aGFuZ2UoCi0gICAgICBlbnYsIGpfb2JzZXJ2ZXJfZ2xvYmFsXywKLSAgICAgIEphdmFfSWNlR2F0
aGVyaW5nU3RhdGVfZnJvbU5hdGl2ZUluZGV4KGVudiwgbmV3X3N0YXRlKSk7Ci19Ci0KLXZvaWQg
UGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaTo6T25BZGRTdHJlYW0oCi0gICAgcnRjOjpzY29wZWRf
cmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0pIHsKLSAgSk5JRW52KiBlbnYgPSBB
dHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgSmF2YV9PYnNlcnZlcl9vbkFkZFN0cmVh
bSgKLSAgICAgIGVudiwgal9vYnNlcnZlcl9nbG9iYWxfLAotICAgICAgR2V0T3JDcmVhdGVKYXZh
U3RyZWFtKGVudiwgc3RyZWFtKS5qX21lZGlhX3N0cmVhbSgpKTsKLX0KLQotdm9pZCBQZWVyQ29u
bmVjdGlvbk9ic2VydmVySm5pOjpPblJlbW92ZVN0cmVhbSgKLSAgICBydGM6OnNjb3BlZF9yZWZw
dHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSkgewotICBKTklFbnYqIGVudiA9IEF0dGFj
aEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBOYXRpdmVUb0phdmFTdHJlYW1zTWFwOjppdGVy
YXRvciBpdCA9IHJlbW90ZV9zdHJlYW1zXy5maW5kKHN0cmVhbSk7Ci0gIFJUQ19DSEVDSyhpdCAh
PSByZW1vdGVfc3RyZWFtc18uZW5kKCkpIDw8ICJ1bmV4cGVjdGVkIHN0cmVhbTogIiA8PCBzdHJl
YW07Ci0gIEphdmFfT2JzZXJ2ZXJfb25SZW1vdmVTdHJlYW0oZW52LCBqX29ic2VydmVyX2dsb2Jh
bF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5qX21lZGlhX3N0
cmVhbSgpKTsKLSAgcmVtb3RlX3N0cmVhbXNfLmVyYXNlKGl0KTsKLX0KLQotdm9pZCBQZWVyQ29u
bmVjdGlvbk9ic2VydmVySm5pOjpPbkRhdGFDaGFubmVsKAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0
cjxEYXRhQ2hhbm5lbEludGVyZmFjZT4gY2hhbm5lbCkgewotICBKTklFbnYqIGVudiA9IEF0dGFj
aEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBKYXZhX09ic2VydmVyX29uRGF0YUNoYW5uZWwo
ZW52LCBqX29ic2VydmVyX2dsb2JhbF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
cmFwTmF0aXZlRGF0YUNoYW5uZWwoZW52LCBjaGFubmVsKSk7Ci19Ci0KLXZvaWQgUGVlckNvbm5l
Y3Rpb25PYnNlcnZlckpuaTo6T25SZW5lZ290aWF0aW9uTmVlZGVkKCkgewotICBKTklFbnYqIGVu
diA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBKYXZhX09ic2VydmVyX29uUmVu
ZWdvdGlhdGlvbk5lZWRlZChlbnYsIGpfb2JzZXJ2ZXJfZ2xvYmFsXyk7Ci19Ci0KLXZvaWQgUGVl
ckNvbm5lY3Rpb25PYnNlcnZlckpuaTo6T25BZGRUcmFjaygKLSAgICBydGM6OnNjb3BlZF9yZWZw
dHI8UnRwUmVjZWl2ZXJJbnRlcmZhY2U+IHJlY2VpdmVyLAotICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4+JiBzdHJlYW1zKSB7Ci0g
IEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZEph
dmFMb2NhbFJlZjxqb2JqZWN0PiBqX3J0cF9yZWNlaXZlciA9Ci0gICAgICBOYXRpdmVUb0phdmFS
dHBSZWNlaXZlcihlbnYsIHJlY2VpdmVyKTsKLSAgcnRwX3JlY2VpdmVyc18uZW1wbGFjZV9iYWNr
KGVudiwgal9ydHBfcmVjZWl2ZXIpOwotCi0gIEphdmFfT2JzZXJ2ZXJfb25BZGRUcmFjayhlbnYs
IGpfb2JzZXJ2ZXJfZ2xvYmFsXywgal9ydHBfcmVjZWl2ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBOYXRpdmVUb0phdmFNZWRpYVN0cmVhbUFycmF5KGVudiwgc3RyZWFtcykpOwotfQot
Ci12b2lkIFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXJKbmk6Ok9uVHJhY2soCi0gICAgcnRjOjpzY29w
ZWRfcmVmcHRyPFJ0cFRyYW5zY2VpdmVySW50ZXJmYWNlPiB0cmFuc2NlaXZlcikgewotICBKTklF
bnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gal9ydHBfdHJhbnNjZWl2ZXIgPQotICAgICAgTmF0aXZlVG9KYXZhUnRw
VHJhbnNjZWl2ZXIoZW52LCB0cmFuc2NlaXZlcik7Ci0gIHJ0cF90cmFuc2NlaXZlcnNfLmVtcGxh
Y2VfYmFjayhlbnYsIGpfcnRwX3RyYW5zY2VpdmVyKTsKLQotICBKYXZhX09ic2VydmVyX29uVHJh
Y2soZW52LCBqX29ic2VydmVyX2dsb2JhbF8sIGpfcnRwX3RyYW5zY2VpdmVyKTsKLX0KLQotLy8g
SWYgdGhlIE5hdGl2ZVRvSmF2YVN0cmVhbXNNYXAgY29udGFpbnMgdGhlIHN0cmVhbSwgcmV0dXJu
IGl0LgotLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgSmF2YSBNZWRpYVN0cmVhbS4KLUphdmFN
ZWRpYVN0cmVhbSYgUGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaTo6R2V0T3JDcmVhdGVKYXZhU3Ry
ZWFtKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRp
YVN0cmVhbUludGVyZmFjZT4mIHN0cmVhbSkgewotICBOYXRpdmVUb0phdmFTdHJlYW1zTWFwOjpp
dGVyYXRvciBpdCA9IHJlbW90ZV9zdHJlYW1zXy5maW5kKHN0cmVhbSk7Ci0gIGlmIChpdCA9PSBy
ZW1vdGVfc3RyZWFtc18uZW5kKCkpIHsKLSAgICBpdCA9IHJlbW90ZV9zdHJlYW1zXwotICAgICAg
ICAgICAgIC5lbXBsYWNlKHN0ZDo6cGllY2V3aXNlX2NvbnN0cnVjdCwKLSAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RyZWFtLmdldCgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoZW52LCBzdHJlYW0pKQotICAgICAgICAg
ICAgIC5maXJzdDsKLSAgfQotICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotU2NvcGVkSmF2YUxv
Y2FsUmVmPGpvYmplY3RBcnJheT4KLVBlZXJDb25uZWN0aW9uT2JzZXJ2ZXJKbmk6Ok5hdGl2ZVRv
SmF2YU1lZGlhU3RyZWFtQXJyYXkoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3Qgc3RkOjp2
ZWN0b3I8cnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPj4mIHN0cmVhbXMp
IHsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YU9iamVjdEFycmF5KAotICAgICAgam5pLCBzdHJlYW1z
LCBHZXRNZWRpYVN0cmVhbUNsYXNzKGpuaSksCi0gICAgICBbdGhpc10oSk5JRW52KiBlbnYsIHJ0
Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4gc3RyZWFtKQotICAgICAgICAg
IC0+IGNvbnN0IFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4mIHsKLSAgICAgICAgcmV0dXJu
IEdldE9yQ3JlYXRlSmF2YVN0cmVhbShlbnYsIHN0cmVhbSkual9tZWRpYV9zdHJlYW0oKTsKLSAg
ICAgIH0pOwotfQotCi1Pd25lZFBlZXJDb25uZWN0aW9uOjpPd25lZFBlZXJDb25uZWN0aW9uKAot
ICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkludGVyZmFjZT4gcGVlcl9jb25u
ZWN0aW9uLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbk9ic2VydmVyPiBvYnNl
cnZlcikKLSAgICA6IE93bmVkUGVlckNvbm5lY3Rpb24ocGVlcl9jb25uZWN0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUob2JzZXJ2ZXIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBudWxscHRyIC8qIGNvbnN0cmFpbnRzICovKSB7fQotCi1Pd25lZFBlZXJDb25u
ZWN0aW9uOjpPd25lZFBlZXJDb25uZWN0aW9uKAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVy
Q29ubmVjdGlvbkludGVyZmFjZT4gcGVlcl9jb25uZWN0aW9uLAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxQZWVyQ29ubmVjdGlvbk9ic2VydmVyPiBvYnNlcnZlciwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCi0gICAgOiBwZWVyX2Nvbm5lY3Rpb25fKHBl
ZXJfY29ubmVjdGlvbiksCi0gICAgICBvYnNlcnZlcl8oc3RkOjptb3ZlKG9ic2VydmVyKSksCi0g
ICAgICBjb25zdHJhaW50c18oc3RkOjptb3ZlKGNvbnN0cmFpbnRzKSkge30KLQotT3duZWRQZWVy
Q29ubmVjdGlvbjo6fk93bmVkUGVlckNvbm5lY3Rpb24oKSB7Ci0gIC8vIEVuc3VyZSB0aGF0IFBl
ZXJDb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBiZWZvcmUgdGhlIG9ic2VydmVyLgotICBwZWVyX2Nv
bm5lY3Rpb25fID0gbnVsbHB0cjsKLX0KLQotc3RhdGljIGpsb25nIEpOSV9QZWVyQ29ubmVjdGlv
bl9DcmVhdGVQZWVyQ29ubmVjdGlvbk9ic2VydmVyKAotICAgIEpOSUVudiogam5pLAotICAgIGNv
bnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9vYnNlcnZlcikgewotICByZXR1cm4gamxvbmdG
cm9tUG9pbnRlcihuZXcgUGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaShqbmksIGpfb2JzZXJ2ZXIp
KTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1BlZXJDb25uZWN0aW9uX0ZyZWVPd25lZFBlZXJDb25u
ZWN0aW9uKAotICAgIEpOSUVudiosCi0gICAgamxvbmcgal9wKSB7Ci0gIGRlbGV0ZSByZWludGVy
cHJldF9jYXN0PE93bmVkUGVlckNvbm5lY3Rpb24qPihqX3ApOwotfQotCi1zdGF0aWMgamxvbmcg
Sk5JX1BlZXJDb25uZWN0aW9uX0dldE5hdGl2ZVBlZXJDb25uZWN0aW9uKAotICAgIEpOSUVudiog
am5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYykgewotICByZXR1cm4g
amxvbmdGcm9tUG9pbnRlcihFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKSk7Ci19Ci0KLXN0YXRp
YyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1BlZXJDb25uZWN0aW9uX0dldExvY2Fs
RGVzY3JpcHRpb24oCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpv
YmplY3Q+JiBqX3BjKSB7Ci0gIGNvbnN0IFNlc3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSogc2Rw
ID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5sb2NhbF9kZXNjcmlwdGlvbigp
OwotICByZXR1cm4gc2RwID8gTmF0aXZlVG9KYXZhU2Vzc2lvbkRlc2NyaXB0aW9uKGpuaSwgc2Rw
KSA6IG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5J
X1BlZXJDb25uZWN0aW9uX0dldFJlbW90ZURlc2NyaXB0aW9uKAotICAgIEpOSUVudiogam5pLAot
ICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYykgewotICBjb25zdCBTZXNzaW9u
RGVzY3JpcHRpb25JbnRlcmZhY2UqIHNkcCA9Ci0gICAgICBFeHRyYWN0TmF0aXZlUEMoam5pLCBq
X3BjKS0+cmVtb3RlX2Rlc2NyaXB0aW9uKCk7Ci0gIHJldHVybiBzZHAgPyBOYXRpdmVUb0phdmFT
ZXNzaW9uRGVzY3JpcHRpb24oam5pLCBzZHApIDogbnVsbHB0cjsKLX0KLQotc3RhdGljIFNjb3Bl
ZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBKTklfUGVlckNvbm5lY3Rpb25fR2V0Q2VydGlmaWNhdGUo
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3Bj
KSB7Ci0gIGNvbnN0IFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25maWd1cmF0aW9uIHJ0
Y19jb25maWcgPQotICAgICAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkdldENvbmZpZ3Vy
YXRpb24oKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPHJ0Yzo6UlRDQ2VydGlmaWNhdGU+IGNlcnRp
ZmljYXRlID0KLSAgICAgIHJ0Y19jb25maWcuY2VydGlmaWNhdGVzWzBdOwotICByZXR1cm4gTmF0
aXZlVG9KYXZhUlRDQ2VydGlmaWNhdGVQRU0oam5pLCBjZXJ0aWZpY2F0ZS0+VG9QRU0oKSk7Ci19
Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1BlZXJDb25uZWN0aW9u
X0NyZWF0ZURhdGFDaGFubmVsKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJh
bVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8anN0cmluZz4mIGpf
bGFiZWwsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2luaXQpIHsKLSAgRGF0
YUNoYW5uZWxJbml0IGluaXQgPSBKYXZhVG9OYXRpdmVEYXRhQ2hhbm5lbEluaXQoam5pLCBqX2lu
aXQpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8RGF0YUNoYW5uZWxJbnRlcmZhY2U+IGNoYW5uZWwo
Ci0gICAgICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q3JlYXRlRGF0YUNoYW5uZWwoCi0g
ICAgICAgICAgSmF2YVRvTmF0aXZlU3RyaW5nKGpuaSwgal9sYWJlbCksICZpbml0KSk7Ci0gIHJl
dHVybiBXcmFwTmF0aXZlRGF0YUNoYW5uZWwoam5pLCBjaGFubmVsKTsKLX0KLQotc3RhdGljIHZv
aWQgSk5JX1BlZXJDb25uZWN0aW9uX0NyZWF0ZU9mZmVyKAotICAgIEpOSUVudiogam5pLAotICAg
IGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBjb25zdCBKYXZhUGFyYW1S
ZWY8am9iamVjdD4mIGpfb2JzZXJ2ZXIsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+
JiBqX2NvbnN0cmFpbnRzKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUNvbnN0cmFpbnRzPiBj
b25zdHJhaW50cyA9Ci0gICAgICBKYXZhVG9OYXRpdmVNZWRpYUNvbnN0cmFpbnRzKGpuaSwgal9j
b25zdHJhaW50cyk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxDcmVhdGVTZHBPYnNlcnZlckpuaT4g
b2JzZXJ2ZXIoCi0gICAgICBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PENyZWF0ZVNkcE9ic2Vy
dmVySm5pPihqbmksIGpfb2JzZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY29uc3RyYWludHMpKSk7Ci0gIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlOjpSVENPZmZlckFuc3dlck9wdGlvbnMgb3B0aW9uczsKLSAgQ29w
eUNvbnN0cmFpbnRzSW50b09mZmVyQW5zd2VyT3B0aW9ucyhvYnNlcnZlci0+Y29uc3RyYWludHMo
KSwgJm9wdGlvbnMpOwotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q3JlYXRlT2ZmZXIo
b2JzZXJ2ZXIsIG9wdGlvbnMpOwotfQotCi1zdGF0aWMgdm9pZCBKTklfUGVlckNvbm5lY3Rpb25f
Q3JlYXRlQW5zd2VyKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxq
b2JqZWN0PiYgal9wYywKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfb2JzZXJ2
ZXIsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2NvbnN0cmFpbnRzKSB7Ci0g
IHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50cyA9Ci0gICAgICBK
YXZhVG9OYXRpdmVNZWRpYUNvbnN0cmFpbnRzKGpuaSwgal9jb25zdHJhaW50cyk7Ci0gIHJ0Yzo6
c2NvcGVkX3JlZnB0cjxDcmVhdGVTZHBPYnNlcnZlckpuaT4gb2JzZXJ2ZXIoCi0gICAgICBuZXcg
cnRjOjpSZWZDb3VudGVkT2JqZWN0PENyZWF0ZVNkcE9ic2VydmVySm5pPihqbmksIGpfb2JzZXJ2
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1vdmUoY29uc3RyYWludHMpKSk7Ci0gIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpS
VENPZmZlckFuc3dlck9wdGlvbnMgb3B0aW9uczsKLSAgQ29weUNvbnN0cmFpbnRzSW50b09mZmVy
QW5zd2VyT3B0aW9ucyhvYnNlcnZlci0+Y29uc3RyYWludHMoKSwgJm9wdGlvbnMpOwotICBFeHRy
YWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q3JlYXRlQW5zd2VyKG9ic2VydmVyLCBvcHRpb25zKTsK
LX0KLQotc3RhdGljIHZvaWQgSk5JX1BlZXJDb25uZWN0aW9uX1NldExvY2FsRGVzY3JpcHRpb24o
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3Bj
LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9vYnNlcnZlciwKLSAgICBjb25z
dCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfc2RwKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxT
ZXRTZHBPYnNlcnZlckpuaT4gb2JzZXJ2ZXIoCi0gICAgICBuZXcgcnRjOjpSZWZDb3VudGVkT2Jq
ZWN0PFNldFNkcE9ic2VydmVySm5pPihqbmksIGpfb2JzZXJ2ZXIsIG51bGxwdHIpKTsKLSAgRXh0
cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlNldExvY2FsRGVzY3JpcHRpb24oCi0gICAgICBvYnNl
cnZlciwgSmF2YVRvTmF0aXZlU2Vzc2lvbkRlc2NyaXB0aW9uKGpuaSwgal9zZHApLnJlbGVhc2Uo
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29ubmVjdGlvbl9TZXRSZW1vdGVEZXNjcmlw
dGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4m
IGpfcGMsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX29ic2VydmVyLAotICAg
IGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9zZHApIHsKLSAgcnRjOjpzY29wZWRfcmVm
cHRyPFNldFNkcE9ic2VydmVySm5pPiBvYnNlcnZlcigKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50
ZWRPYmplY3Q8U2V0U2RwT2JzZXJ2ZXJKbmk+KGpuaSwgal9vYnNlcnZlciwgbnVsbHB0cikpOwot
ICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+U2V0UmVtb3RlRGVzY3JpcHRpb24oCi0gICAg
ICBvYnNlcnZlciwgSmF2YVRvTmF0aXZlU2Vzc2lvbkRlc2NyaXB0aW9uKGpuaSwgal9zZHApLnJl
bGVhc2UoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29ubmVjdGlvbl9TZXRBdWRpb1Bs
YXlvdXQoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+
JiBqX3BjLAotICAgIGpib29sZWFuIHBsYXlvdXQpIHsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwg
al9wYyktPlNldEF1ZGlvUGxheW91dChwbGF5b3V0KTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1Bl
ZXJDb25uZWN0aW9uX1NldEF1ZGlvUmVjb3JkaW5nKAotICAgIEpOSUVudiogam5pLAotICAgIGNv
bnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBqYm9vbGVhbiByZWNvcmRpbmcp
IHsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlNldEF1ZGlvUmVjb3JkaW5nKHJlY29y
ZGluZyk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBKTklfUGVlckNvbm5lY3Rpb25fU2V0Q29uZmln
dXJhdGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVj
dD4mIGpfcGMsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3J0Y19jb25maWcp
IHsKLSAgLy8gTmVlZCB0byBtZXJnZSBjb25zdHJhaW50cyBpbnRvIFJUQ0NvbmZpZ3VyYXRpb24g
YWdhaW4sIHdoaWNoIGFyZSBzdG9yZWQKLSAgLy8gaW4gdGhlIE93bmVkUGVlckNvbm5lY3Rpb24g
b2JqZWN0LgotICBPd25lZFBlZXJDb25uZWN0aW9uKiBvd25lZF9wYyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8T3duZWRQZWVyQ29ubmVjdGlvbio+KAotICAgICAgSmF2YV9QZWVyQ29ubmVjdGlvbl9nZXRO
YXRpdmVPd25lZFBlZXJDb25uZWN0aW9uKGpuaSwgal9wYykpOwotICBQZWVyQ29ubmVjdGlvbklu
dGVyZmFjZTo6UlRDQ29uZmlndXJhdGlvbiBydGNfY29uZmlnKAotICAgICAgUGVlckNvbm5lY3Rp
b25JbnRlcmZhY2U6OlJUQ0NvbmZpZ3VyYXRpb25UeXBlOjprQWdncmVzc2l2ZSk7Ci0gIEphdmFU
b05hdGl2ZVJUQ0NvbmZpZ3VyYXRpb24oam5pLCBqX3J0Y19jb25maWcsICZydGNfY29uZmlnKTsK
LSAgaWYgKG93bmVkX3BjLT5jb25zdHJhaW50cygpKSB7Ci0gICAgQ29weUNvbnN0cmFpbnRzSW50
b1J0Y0NvbmZpZ3VyYXRpb24ob3duZWRfcGMtPmNvbnN0cmFpbnRzKCksICZydGNfY29uZmlnKTsK
LSAgfQotICByZXR1cm4gb3duZWRfcGMtPnBjKCktPlNldENvbmZpZ3VyYXRpb24ocnRjX2NvbmZp
Zykub2soKTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9QZWVyQ29ubmVjdGlvbl9BZGRJY2VD
YW5kaWRhdGUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmpl
Y3Q+JiBqX3BjLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqc3RyaW5nPiYgal9zZHBfbWlkLAot
ICAgIGppbnQgal9zZHBfbWxpbmVfaW5kZXgsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpzdHJp
bmc+JiBqX2NhbmRpZGF0ZV9zZHApIHsKLSAgc3RkOjpzdHJpbmcgc2RwX21pZCA9IEphdmFUb05h
dGl2ZVN0cmluZyhqbmksIGpfc2RwX21pZCk7Ci0gIHN0ZDo6c3RyaW5nIHNkcCA9IEphdmFUb05h
dGl2ZVN0cmluZyhqbmksIGpfY2FuZGlkYXRlX3NkcCk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxJY2VD
YW5kaWRhdGVJbnRlcmZhY2U+IGNhbmRpZGF0ZSgKLSAgICAgIENyZWF0ZUljZUNhbmRpZGF0ZShz
ZHBfbWlkLCBqX3NkcF9tbGluZV9pbmRleCwgc2RwLCBudWxscHRyKSk7Ci0gIHJldHVybiBFeHRy
YWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+QWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZS5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBKTklfUGVlckNvbm5lY3Rpb25fUmVtb3ZlSWNlQ2FuZGlk
YXRlcygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4m
IGpfcGMsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3RBcnJheT4mIGpfY2FuZGlkYXRl
cykgewotICBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpDYW5kaWRhdGU+IGNhbmRpZGF0ZXMgPQotICAg
ICAgSmF2YVRvTmF0aXZlVmVjdG9yPGNyaWNrZXQ6OkNhbmRpZGF0ZT4oam5pLCBqX2NhbmRpZGF0
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSmF2YVRv
TmF0aXZlQ2FuZGlkYXRlKTsKLSAgcmV0dXJuIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5S
ZW1vdmVJY2VDYW5kaWRhdGVzKGNhbmRpZGF0ZXMpOwotfQotCi1zdGF0aWMgamJvb2xlYW4gSk5J
X1BlZXJDb25uZWN0aW9uX0FkZExvY2FsU3RyZWFtKAotICAgIEpOSUVudiogam5pLAotICAgIGNv
bnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBqbG9uZyBuYXRpdmVfc3RyZWFt
KSB7Ci0gIHJldHVybiBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+QWRkU3RyZWFtKAotICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KG5hdGl2ZV9zdHJlYW0p
KTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1BlZXJDb25uZWN0aW9uX1JlbW92ZUxvY2FsU3RyZWFt
KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9w
YywKLSAgICBqbG9uZyBuYXRpdmVfc3RyZWFtKSB7Ci0gIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpf
cGMpLT5SZW1vdmVTdHJlYW0oCi0gICAgICByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50
ZXJmYWNlKj4obmF0aXZlX3N0cmVhbSkpOwotfQotCi1zdGF0aWMgU2NvcGVkSmF2YUxvY2FsUmVm
PGpvYmplY3Q+IEpOSV9QZWVyQ29ubmVjdGlvbl9DcmVhdGVTZW5kZXIoCi0gICAgSk5JRW52KiBq
bmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3BjLAotICAgIGNvbnN0IEph
dmFQYXJhbVJlZjxqc3RyaW5nPiYgal9raW5kLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqc3Ry
aW5nPiYgal9zdHJlYW1faWQpIHsKLSAgc3RkOjpzdHJpbmcga2luZCA9IEphdmFUb05hdGl2ZVN0
cmluZyhqbmksIGpfa2luZCk7Ci0gIHN0ZDo6c3RyaW5nIHN0cmVhbV9pZCA9IEphdmFUb05hdGl2
ZVN0cmluZyhqbmksIGpfc3RyZWFtX2lkKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFJ0cFNlbmRl
ckludGVyZmFjZT4gc2VuZGVyID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5D
cmVhdGVTZW5kZXIoa2luZCwgc3RyZWFtX2lkKTsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YVJ0cFNl
bmRlcihqbmksIHNlbmRlcik7Ci19Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVj
dD4gSk5JX1BlZXJDb25uZWN0aW9uX0dldFNlbmRlcnMoCi0gICAgSk5JRW52KiBqbmksCi0gICAg
Y29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3BjKSB7Ci0gIHJldHVybiBOYXRpdmVUb0ph
dmFMaXN0KGpuaSwgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkdldFNlbmRlcnMoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgJk5hdGl2ZVRvSmF2YVJ0cFNlbmRlcik7Ci19Ci0KLXN0
YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1BlZXJDb25uZWN0aW9uX0dldFJl
Y2VpdmVycygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVj
dD4mIGpfcGMpIHsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YUxpc3Qoam5pLCBFeHRyYWN0TmF0aXZl
UEMoam5pLCBqX3BjKS0+R2V0UmVjZWl2ZXJzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICZOYXRpdmVUb0phdmFSdHBSZWNlaXZlcik7Ci19Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxS
ZWY8am9iamVjdD4gSk5JX1BlZXJDb25uZWN0aW9uX0dldFRyYW5zY2VpdmVycygKLSAgICBKTklF
bnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfcGMpIHsKLSAgcmV0
dXJuIE5hdGl2ZVRvSmF2YUxpc3Qoam5pLCBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+R2V0
VHJhbnNjZWl2ZXJzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZOYXRpdmVUb0phdmFS
dHBUcmFuc2NlaXZlcik7Ci19Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4g
Sk5JX1BlZXJDb25uZWN0aW9uX0FkZFRyYWNrKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0
IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBjb25zdCBqbG9uZyBuYXRpdmVfdHJh
Y2ssCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3N0cmVhbV9sYWJlbHMpIHsK
LSAgUlRDRXJyb3JPcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwU2VuZGVySW50ZXJmYWNlPj4gcmVz
dWx0ID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5BZGRUcmFjaygKLSAgICAg
ICAgICByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihuYXRpdmVf
dHJhY2spLAotICAgICAgICAgIEphdmFMaXN0VG9OYXRpdmVWZWN0b3I8c3RkOjpzdHJpbmcsIGpz
dHJpbmc+KGpuaSwgal9zdHJlYW1fbGFiZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZKYXZhVG9OYXRpdmVTdHJpbmcpKTsKLSAgaWYg
KCFyZXN1bHQub2soKSkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJGYWlsZWQgdG8gYWRk
IHRyYWNrOiAiIDw8IHJlc3VsdC5lcnJvcigpLm1lc3NhZ2UoKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTmF0aXZlVG9KYXZhUnRwU2VuZGVyKGpuaSwgcmVz
dWx0Lk1vdmVWYWx1ZSgpKTsKLSAgfQotfQotCi1zdGF0aWMgamJvb2xlYW4gSk5JX1BlZXJDb25u
ZWN0aW9uX1JlbW92ZVRyYWNrKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJh
bVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBqbG9uZyBuYXRpdmVfc2VuZGVyKSB7Ci0gIHJldHVy
biBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+UmVtb3ZlVHJhY2soCi0gICAgICByZWludGVy
cHJldF9jYXN0PFJ0cFNlbmRlckludGVyZmFjZSo+KG5hdGl2ZV9zZW5kZXIpKTsKLX0KLQotc3Rh
dGljIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBKTklfUGVlckNvbm5lY3Rpb25fQWRkVHJh
bnNjZWl2ZXJXaXRoVHJhY2soCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFt
UmVmPGpvYmplY3Q+JiBqX3BjLAotICAgIGpsb25nIG5hdGl2ZV90cmFjaywKLSAgICBjb25zdCBK
YXZhUGFyYW1SZWY8am9iamVjdD4mIGpfaW5pdCkgewotICBSVENFcnJvck9yPHJ0Yzo6c2NvcGVk
X3JlZnB0cjxSdHBUcmFuc2NlaXZlckludGVyZmFjZT4+IHJlc3VsdCA9Ci0gICAgICBFeHRyYWN0
TmF0aXZlUEMoam5pLCBqX3BjKS0+QWRkVHJhbnNjZWl2ZXIoCi0gICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4obmF0aXZlX3RyYWNrKSwKLSAgICAg
ICAgICBKYXZhVG9OYXRpdmVSdHBUcmFuc2NlaXZlckluaXQoam5pLCBqX2luaXQpKTsKLSAgaWYg
KCFyZXN1bHQub2soKSkgewotICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJGYWlsZWQgdG8gYWRk
IHRyYW5zY2VpdmVyOiAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgcmVzdWx0LmVycm9yKCku
bWVzc2FnZSgpOwotICAgIHJldHVybiBudWxscHRyOwotICB9IGVsc2UgewotICAgIHJldHVybiBO
YXRpdmVUb0phdmFSdHBUcmFuc2NlaXZlcihqbmksIHJlc3VsdC5Nb3ZlVmFsdWUoKSk7Ci0gIH0K
LX0KLQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBKTklfUGVlckNvbm5lY3Rp
b25fQWRkVHJhbnNjZWl2ZXJPZlR5cGUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2
YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3BjLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0
PiYgal9tZWRpYV90eXBlLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9pbml0
KSB7Ci0gIFJUQ0Vycm9yT3I8cnRjOjpzY29wZWRfcmVmcHRyPFJ0cFRyYW5zY2VpdmVySW50ZXJm
YWNlPj4gcmVzdWx0ID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5BZGRUcmFu
c2NlaXZlcigKLSAgICAgICAgICBKYXZhVG9OYXRpdmVNZWRpYVR5cGUoam5pLCBqX21lZGlhX3R5
cGUpLAotICAgICAgICAgIEphdmFUb05hdGl2ZVJ0cFRyYW5zY2VpdmVySW5pdChqbmksIGpfaW5p
dCkpOwotICBpZiAoIXJlc3VsdC5vaygpKSB7Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkZh
aWxlZCB0byBhZGQgdHJhbnNjZWl2ZXI6ICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCByZXN1
bHQuZXJyb3IoKS5tZXNzYWdlKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0gZWxzZSB7Ci0g
ICAgcmV0dXJuIE5hdGl2ZVRvSmF2YVJ0cFRyYW5zY2VpdmVyKGpuaSwgcmVzdWx0Lk1vdmVWYWx1
ZSgpKTsKLSAgfQotfQotCi1zdGF0aWMgamJvb2xlYW4gSk5JX1BlZXJDb25uZWN0aW9uX09sZEdl
dFN0YXRzKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0
PiYgal9wYywKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfb2JzZXJ2ZXIsCi0g
ICAgamxvbmcgbmF0aXZlX3RyYWNrKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxTdGF0c09ic2Vy
dmVySm5pPiBvYnNlcnZlcigKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8U3RhdHNP
YnNlcnZlckpuaT4oam5pLCBqX29ic2VydmVyKSk7Ci0gIHJldHVybiBFeHRyYWN0TmF0aXZlUEMo
am5pLCBqX3BjKS0+R2V0U3RhdHMoCi0gICAgICBvYnNlcnZlciwgcmVpbnRlcnByZXRfY2FzdDxN
ZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4obmF0aXZlX3RyYWNrKSwKLSAgICAgIFBlZXJDb25u
ZWN0aW9uSW50ZXJmYWNlOjprU3RhdHNPdXRwdXRMZXZlbFN0YW5kYXJkKTsKLX0KLQotc3RhdGlj
IHZvaWQgSk5JX1BlZXJDb25uZWN0aW9uX05ld0dldFN0YXRzKAotICAgIEpOSUVudiogam5pLAot
ICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYywKLSAgICBjb25zdCBKYXZhUGFy
YW1SZWY8am9iamVjdD4mIGpfY2FsbGJhY2spIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFJUQ1N0
YXRzQ29sbGVjdG9yQ2FsbGJhY2tXcmFwcGVyPiBjYWxsYmFjaygKLSAgICAgIG5ldyBydGM6OlJl
ZkNvdW50ZWRPYmplY3Q8UlRDU3RhdHNDb2xsZWN0b3JDYWxsYmFja1dyYXBwZXI+KGpuaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpfY2FsbGJhY2spKTsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkdldFN0
YXRzKGNhbGxiYWNrKTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9QZWVyQ29ubmVjdGlvbl9T
ZXRCaXRyYXRlKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2Jq
ZWN0PiYgal9wYywKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfbWluLAotICAg
IGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9jdXJyZW50LAotICAgIGNvbnN0IEphdmFQ
YXJhbVJlZjxqb2JqZWN0PiYgal9tYXgpIHsKLSAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkJp
dHJhdGVQYXJhbWV0ZXJzIHBhcmFtczsKLSAgcGFyYW1zLm1pbl9iaXRyYXRlX2JwcyA9IEphdmFU
b05hdGl2ZU9wdGlvbmFsSW50KGpuaSwgal9taW4pOwotICBwYXJhbXMuY3VycmVudF9iaXRyYXRl
X2JwcyA9IEphdmFUb05hdGl2ZU9wdGlvbmFsSW50KGpuaSwgal9jdXJyZW50KTsKLSAgcGFyYW1z
Lm1heF9iaXRyYXRlX2JwcyA9IEphdmFUb05hdGl2ZU9wdGlvbmFsSW50KGpuaSwgal9tYXgpOwot
ICByZXR1cm4gRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlNldEJpdHJhdGUocGFyYW1zKS5v
aygpOwotfQotCi1zdGF0aWMgamJvb2xlYW4gSk5JX1BlZXJDb25uZWN0aW9uX1N0YXJ0UnRjRXZl
bnRMb2coCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+
JiBqX3BjLAotICAgIGludCBmaWxlX2Rlc2NyaXB0b3IsCi0gICAgaW50IG1heF9zaXplX2J5dGVz
KSB7Ci0gIC8vIFRPRE8oZWxhZGFsb24pOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gbm90IGFsbG93
IG5lZ2F0aXZlIHZhbHVlcyBpbnRvIFBDLgotICBjb25zdCBzaXplX3QgbWF4X3NpemUgPSAobWF4
X3NpemVfYnl0ZXMgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBSdGNFdmVu
dExvZzo6a1VubGltaXRlZE91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBy
dGM6OnNhdHVyYXRlZF9jYXN0PHNpemVfdD4obWF4X3NpemVfYnl0ZXMpOwotICBGSUxFKiBmID0g
ZmRvcGVuKGZpbGVfZGVzY3JpcHRvciwgIndiIik7Ci0gIGlmICghZikgewotICAgIGNsb3NlKGZp
bGVfZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBFeHRyYWN0
TmF0aXZlUEMoam5pLCBqX3BjKS0+U3RhcnRSdGNFdmVudExvZygKLSAgICAgIHN0ZDo6bWFrZV91
bmlxdWU8UnRjRXZlbnRMb2dPdXRwdXRGaWxlPihmLCBtYXhfc2l6ZSkpOwotfQotCi1zdGF0aWMg
dm9pZCBKTklfUGVlckNvbm5lY3Rpb25fU3RvcFJ0Y0V2ZW50TG9nKAotICAgIEpOSUVudiogam5p
LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYykgewotICBFeHRyYWN0TmF0
aXZlUEMoam5pLCBqX3BjKS0+U3RvcFJ0Y0V2ZW50TG9nKCk7Ci19Ci0KLXN0YXRpYyBTY29wZWRK
YXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1BlZXJDb25uZWN0aW9uX1NpZ25hbGluZ1N0YXRlKAot
ICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9wYykg
ewotICByZXR1cm4gSmF2YV9TaWduYWxpbmdTdGF0ZV9mcm9tTmF0aXZlSW5kZXgoCi0gICAgICBl
bnYsIEV4dHJhY3ROYXRpdmVQQyhlbnYsIGpfcGMpLT5zaWduYWxpbmdfc3RhdGUoKSk7Ci19Ci0K
LXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1BlZXJDb25uZWN0aW9uX0lj
ZUNvbm5lY3Rpb25TdGF0ZSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBKYXZhUGFyYW1S
ZWY8am9iamVjdD4mIGpfcGMpIHsKLSAgcmV0dXJuIEphdmFfSWNlQ29ubmVjdGlvblN0YXRlX2Zy
b21OYXRpdmVJbmRleCgKLSAgICAgIGVudiwgRXh0cmFjdE5hdGl2ZVBDKGVudiwgal9wYyktPmlj
ZV9jb25uZWN0aW9uX3N0YXRlKCkpOwotfQotCi1zdGF0aWMgU2NvcGVkSmF2YUxvY2FsUmVmPGpv
YmplY3Q+IEpOSV9QZWVyQ29ubmVjdGlvbl9Db25uZWN0aW9uU3RhdGUoCi0gICAgSk5JRW52KiBl
bnYsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3BjKSB7Ci0gIHJldHVybiBK
YXZhX1BlZXJDb25uZWN0aW9uU3RhdGVfZnJvbU5hdGl2ZUluZGV4KAotICAgICAgZW52LAotICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihFeHRyYWN0TmF0aXZlUEMoZW52LCBqX3BjKS0+cGVlcl9jb25u
ZWN0aW9uX3N0YXRlKCkpKTsKLX0KLQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0
PiBKTklfUGVlckNvbm5lY3Rpb25fSWNlR2F0aGVyaW5nU3RhdGUoCi0gICAgSk5JRW52KiBlbnYs
Ci0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3BjKSB7Ci0gIHJldHVybiBKYXZh
X0ljZUdhdGhlcmluZ1N0YXRlX2Zyb21OYXRpdmVJbmRleCgKLSAgICAgIGVudiwgRXh0cmFjdE5h
dGl2ZVBDKGVudiwgal9wYyktPmljZV9nYXRoZXJpbmdfc3RhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIEpOSV9QZWVyQ29ubmVjdGlvbl9DbG9zZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfcGMp
IHsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkNsb3NlKCk7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMv
cGVlcl9jb25uZWN0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3BlZXJfY29ubmVjdGlvbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhOWUyYWYyYTQ3NjU2NWJhNDllMTUwZDI2ODg3YjE5N2EwMTQw
ZDg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
cGMvcGVlcl9jb25uZWN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1BFRVJfQ09O
TkVDVElPTl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1BFRVJfQ09OTkVDVElP
Tl9IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0
b3I+Ci0KLSNpbmNsdWRlICJhcGkvcGVlcl9jb25uZWN0aW9uX2ludGVyZmFjZS5oIgotI2luY2x1
ZGUgInBjL21lZGlhX3N0cmVhbV9vYnNlcnZlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3Ny
Yy9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL21l
ZGlhX2NvbnN0cmFpbnRzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9tZWRp
YV9zdHJlYW0uaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF9yZWNlaXZl
ci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3RyYW5zY2VpdmVyLmgi
Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLXZvaWQgSmF2YVRvTmF0
aXZlUlRDQ29uZmlndXJhdGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX3J0Y19jb25maWcsCi0gICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJU
Q0NvbmZpZ3VyYXRpb24qIHJ0Y19jb25maWcpOwotCi1ydGM6OktleVR5cGUgR2V0UnRjQ29uZmln
S2V5VHlwZShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEphdmFSZWY8am9iamVjdD4mIGpfcnRjX2NvbmZpZyk7Ci0KLVNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiBOYXRpdmVUb0phdmFBZGFwdGVyVHlwZShKTklFbnYqIGVudiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRhcHRlclR5
cGUpOwotCi0vLyBBZGFwdGVyIGJldHdlZW4gdGhlIEMrKyBQZWVyQ29ubmVjdGlvbk9ic2VydmVy
IGludGVyZmFjZSBhbmQgdGhlIEphdmEKLS8vIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIGludGVy
ZmFjZS4gIFdyYXBzIGFuIGluc3RhbmNlIG9mIHRoZSBKYXZhIGludGVyZmFjZQotLy8gYW5kIGRp
c3BhdGNoZXMgQysrIGNhbGxiYWNrcyB0byBKYXZhLgotY2xhc3MgUGVlckNvbm5lY3Rpb25PYnNl
cnZlckpuaSA6IHB1YmxpYyBQZWVyQ29ubmVjdGlvbk9ic2VydmVyIHsKLSBwdWJsaWM6Ci0gIFBl
ZXJDb25uZWN0aW9uT2JzZXJ2ZXJKbmkoSk5JRW52KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVj
dD4mIGpfb2JzZXJ2ZXIpOwotICB+UGVlckNvbm5lY3Rpb25PYnNlcnZlckpuaSgpIG92ZXJyaWRl
OwotCi0gIC8vIEltcGxlbWVudGF0aW9uIG9mIFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXIgaW50ZXJm
YWNlLCB3aGljaCBwcm9wYWdhdGVzCi0gIC8vIHRoZSBjYWxsYmFja3MgdG8gdGhlIEphdmEgb2Jz
ZXJ2ZXIuCi0gIHZvaWQgT25JY2VDYW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRlSW50ZXJmYWNl
KiBjYW5kaWRhdGUpIG92ZXJyaWRlOwotICB2b2lkIE9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoCi0g
ICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpDYW5kaWRhdGU+JiBjYW5kaWRhdGVzKSBv
dmVycmlkZTsKLSAgdm9pZCBPblNpZ25hbGluZ0NoYW5nZSgKLSAgICAgIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlOjpTaWduYWxpbmdTdGF0ZSBuZXdfc3RhdGUpIG92ZXJyaWRlOwotICB2b2lkIE9u
SWNlQ29ubmVjdGlvbkNoYW5nZSgKLSAgICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VD
b25uZWN0aW9uU3RhdGUgbmV3X3N0YXRlKSBvdmVycmlkZTsKLSAgdm9pZCBPblN0YW5kYXJkaXpl
ZEljZUNvbm5lY3Rpb25DaGFuZ2UoCi0gICAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNl
Q29ubmVjdGlvblN0YXRlIG5ld19zdGF0ZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25Db25uZWN0aW9u
Q2hhbmdlKAotICAgICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlBlZXJDb25uZWN0aW9uU3Rh
dGUgbmV3X3N0YXRlKSBvdmVycmlkZTsKLSAgdm9pZCBPbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdD
aGFuZ2UoYm9vbCByZWNlaXZpbmcpIG92ZXJyaWRlOwotICB2b2lkIE9uSWNlR2F0aGVyaW5nQ2hh
bmdlKAotICAgICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkljZUdhdGhlcmluZ1N0YXRlIG5l
d19zdGF0ZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25JY2VTZWxlY3RlZENhbmRpZGF0ZVBhaXJDaGFu
Z2VkKAotICAgICAgY29uc3QgY3JpY2tldDo6Q2FuZGlkYXRlUGFpckNoYW5nZUV2ZW50JiBldmVu
dCkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25BZGRTdHJlYW0ocnRjOjpzY29wZWRfcmVmcHRyPE1lZGlh
U3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0pIG92ZXJyaWRlOwotICB2b2lkIE9uUmVtb3ZlU3RyZWFt
KHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4gc3RyZWFtKSBvdmVycmlk
ZTsKLSAgdm9pZCBPbkRhdGFDaGFubmVsKHJ0Yzo6c2NvcGVkX3JlZnB0cjxEYXRhQ2hhbm5lbElu
dGVyZmFjZT4gY2hhbm5lbCkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25SZW5lZ290aWF0aW9uTmVlZGVk
KCkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25BZGRUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8UnRwUmVj
ZWl2ZXJJbnRlcmZhY2U+IHJlY2VpdmVyLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8cnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPj4mCi0gICAgICAg
ICAgICAgICAgICAgICAgc3RyZWFtcykgb3ZlcnJpZGU7Ci0gIHZvaWQgT25UcmFjaygKLSAgICAg
IHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBUcmFuc2NlaXZlckludGVyZmFjZT4gdHJhbnNjZWl2ZXIp
IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiBzdGQ6Om1hcDxNZWRpYVN0cmVhbUlu
dGVyZmFjZSosIEphdmFNZWRpYVN0cmVhbT4KLSAgICAgIE5hdGl2ZVRvSmF2YVN0cmVhbXNNYXA7
Ci0gIHR5cGVkZWYgc3RkOjptYXA8TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSosIFJ0cFJlY2Vp
dmVySW50ZXJmYWNlKj4KLSAgICAgIE5hdGl2ZU1lZGlhU3RyZWFtVHJhY2tUb05hdGl2ZVJ0cFJl
Y2VpdmVyOwotCi0gIC8vIElmIHRoZSBOYXRpdmVUb0phdmFTdHJlYW1zTWFwIGNvbnRhaW5zIHRo
ZSBzdHJlYW0sIHJldHVybiBpdC4KLSAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgSmF2YSBN
ZWRpYVN0cmVhbS4gUmV0dXJucyBhIGdsb2JhbCBqb2JqZWN0LgotICBKYXZhTWVkaWFTdHJlYW0m
IEdldE9yQ3JlYXRlSmF2YVN0cmVhbSgKLSAgICAgIEpOSUVudiogZW52LAotICAgICAgY29uc3Qg
cnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPiYgc3RyZWFtKTsKLQotICAv
LyBDb252ZXJ0cyBhcnJheSBvZiBzdHJlYW1zLCBjcmVhdGluZyBvciByZS11c2luZyBKYXZhIHN0
cmVhbXMgYXMgbmVjZXNzYXJ5LgotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBO
YXRpdmVUb0phdmFNZWRpYVN0cmVhbUFycmF5KAotICAgICAgSk5JRW52KiBqbmksCi0gICAgICBj
b25zdCBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+
PiYgc3RyZWFtcyk7Ci0KLSAgY29uc3QgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBqX29i
c2VydmVyX2dsb2JhbF87Ci0KLSAgLy8gQysrIC0+IEphdmEgcmVtb3RlIHN0cmVhbXMuCi0gIE5h
dGl2ZVRvSmF2YVN0cmVhbXNNYXAgcmVtb3RlX3N0cmVhbXNfOwotICBzdGQ6OnZlY3RvcjxKYXZh
UnRwUmVjZWl2ZXJHbG9iYWxPd25lcj4gcnRwX3JlY2VpdmVyc187Ci0gIC8vIEhvbGRzIGEgcmVm
ZXJlbmNlIHRvIHRoZSBKYXZhIHRyYW5zY2VpdmVycyBnaXZlbiB0byB0aGUgQWRkVHJhY2sKLSAg
Ly8gY2FsbGJhY2ssIHNvIHRoYXQgdGhlIHNoYXJlZCBvd25lcnNoaXAgYnkgdGhlIEphdmEgb2Jq
ZWN0IHdpbGwgYmUKLSAgLy8gcHJvcGVybHkgZGlzcG9zZWQuCi0gIHN0ZDo6dmVjdG9yPEphdmFS
dHBUcmFuc2NlaXZlckdsb2JhbE93bmVyPiBydHBfdHJhbnNjZWl2ZXJzXzsKLX07Ci0KLS8vIFBl
ZXJDb25uZWN0aW9uIGRvZXNuJ3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIG9ic2VydmVyLiBJbiBK
YXZhIEFQSSwgd2UgZG9uJ3QKLS8vIHdhbnQgdGhlIGNsaWVudCB0byBoYXZlIHRvIG1hbnVhbGx5
IGRpc3Bvc2UgdGhlIG9ic2VydmVyLiBUbyBzb2x2ZSB0aGlzLCB0aGlzCi0vLyB3cmFwcGVyIGNs
YXNzIGlzIHVzZWQgZm9yIG9iamVjdCBvd25lcnNoaXAuCi0vLwotLy8gQWxzbyBzdG9yZXMgcmVm
ZXJlbmNlIHRvIHRoZSBkZXByZWNhdGVkIFBlZXJDb25uZWN0aW9uIGNvbnN0cmFpbnRzIGZvciBu
b3cuCi1jbGFzcyBPd25lZFBlZXJDb25uZWN0aW9uIHsKLSBwdWJsaWM6Ci0gIE93bmVkUGVlckNv
bm5lY3Rpb24oCi0gICAgICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25JbnRlcmZh
Y2U+IHBlZXJfY29ubmVjdGlvbiwKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlv
bk9ic2VydmVyPiBvYnNlcnZlcik7Ci0gIC8vIERlcHJlY2F0ZWQuIFBDIGNvbnN0cmFpbnRzIGFy
ZSBkZXByZWNhdGVkLgotICBPd25lZFBlZXJDb25uZWN0aW9uKAotICAgICAgcnRjOjpzY29wZWRf
cmVmcHRyPFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlPiBwZWVyX2Nvbm5lY3Rpb24sCi0gICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsCi0gICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpOwotICB+T3duZWRQ
ZWVyQ29ubmVjdGlvbigpOwotCi0gIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlKiBwYygpIGNvbnN0
IHsgcmV0dXJuIHBlZXJfY29ubmVjdGlvbl8uZ2V0KCk7IH0KLSAgY29uc3QgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMoKSBjb25zdCB7IHJldHVybiBjb25zdHJhaW50c18uZ2V0KCk7IH0K
LQotIHByaXZhdGU6Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkludGVyZmFj
ZT4gcGVlcl9jb25uZWN0aW9uXzsKLSAgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uT2Jz
ZXJ2ZXI+IG9ic2VydmVyXzsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhQ29uc3RyYWludHM+IGNv
bnN0cmFpbnRzXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3
ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1BFRVJfQ09OTkVDVElP
Tl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9wZWVyX2Nvbm5lY3Rpb25fZmFjdG9yeS5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvcGMvcGVlcl9jb25uZWN0aW9uX2ZhY3RvcnkuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ4ZGQ2ZTQxZDg5MzZhYTVmNDViNTBlZDVkMjY0NTg3OTIwNzRhMTEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9wZWVyX2Nvbm5l
Y3Rpb25fZmFjdG9yeS5jYworKysgL2Rldi9udWxsCkBAIC0xLDU2MyArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9wZWVyX2Nvbm5l
Y3Rpb25fZmFjdG9yeS5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+
Ci0KLSNpbmNsdWRlICJhYnNsL21lbW9yeS9tZW1vcnkuaCIKLSNpbmNsdWRlICJhcGkvdmlkZW9f
Y29kZWNzL3ZpZGVvX2RlY29kZXJfZmFjdG9yeS5oIgotI2luY2x1ZGUgImFwaS92aWRlb19jb2Rl
Y3MvdmlkZW9fZW5jb2Rlcl9mYWN0b3J5LmgiCi0jaW5jbHVkZSAibWVkaWEvYmFzZS9tZWRpYV9l
bmdpbmUuaCIKLSNpbmNsdWRlICJtb2R1bGVzL2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1ZGlvX2Rl
dmljZS5oIgotI2luY2x1ZGUgIm1vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2p2bV9hbmRyb2lkLmgi
Ci0vLyBXZSBkb24ndCBkZXBlbmQgb24gdGhlIGF1ZGlvIHByb2Nlc3NpbmcgbW9kdWxlIGltcGxl
bWVudGF0aW9uLgotLy8gVGhlIHVzZXIgbWF5IHBhc3MgaW4gYSBudWxscHRyLgotI2luY2x1ZGUg
ImFwaS9jYWxsL2NhbGxfZmFjdG9yeV9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJhcGkvcnRjX2V2
ZW50X2xvZy9ydGNfZXZlbnRfbG9nX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJhcGkvdGFza19xdWV1
ZS9kZWZhdWx0X3Rhc2tfcXVldWVfZmFjdG9yeS5oIgotI2luY2x1ZGUgImFwaS92aWRlb19jb2Rl
Y3MvdmlkZW9fZGVjb2Rlcl9mYWN0b3J5LmgiCi0jaW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy92
aWRlb19lbmNvZGVyX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJtZWRpYS9lbmdpbmUvd2VicnRjX21l
ZGlhX2VuZ2luZS5oIgotI2luY2x1ZGUgIm1vZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1ZGUvYXVk
aW9fZGV2aWNlLmgiCi0jaW5jbHVkZSAibW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2luY2x1ZGUv
YXVkaW9fcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2V2ZW50X3RyYWNlci5oIgot
I2luY2x1ZGUgInJ0Y19iYXNlL3N5c3RlbS90aHJlYWRfcmVnaXN0cnkuaCIKLSNpbmNsdWRlICJy
dGNfYmFzZS90aHJlYWQuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVlcmNv
bm5lY3Rpb25fam5pL1BlZXJDb25uZWN0aW9uRmFjdG9yeV9qbmkuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvbmF0aXZlX2FwaS9zdGFja3RyYWNlL3N0YWNrdHJhY2UuaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2pu
aS9sb2dnaW5nL2xvZ19zaW5rLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9h
bmRyb2lkX25ldHdvcmtfbW9uaXRvci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkv
cGMvYXVkaW8uaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL2ljZV9jYW5kaWRh
dGUuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL293bmVkX2ZhY3RvcnlfYW5k
X3RocmVhZHMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3BlZXJfY29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvc3NsX2NlcnRpZmljYXRl
X3ZlcmlmaWVyX3dyYXBwZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3Zp
ZGVvLmgiCi0jaW5jbHVkZSAic3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvZmllbGRfdHJpYWwuaCIK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotbmFtZXNwYWNlIHsKLQot
Ly8gVGFrZSBvd25lcnNoaXAgb2YgdGhlIGpsb25nIHJlZmVyZW5jZSBhbmQgY2FzdCBpdCBpbnRv
IGFuIHJ0Yzo6c2NvcGVkX3JlZnB0ci4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotcnRjOjpzY29w
ZWRfcmVmcHRyPFQ+IFRha2VPd25lcnNoaXBPZlJlZlB0cihqbG9uZyBqX3BvaW50ZXIpIHsKLSAg
VCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxUKj4oal9wb2ludGVyKTsKLSAgcnRjOjpzY29wZWRf
cmVmcHRyPFQ+IHJlZnB0cjsKLSAgcmVmcHRyLnN3YXAoJnB0cik7Ci0gIHJldHVybiByZWZwdHI7
Ci19Ci0KLS8vIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBqbG9uZyByZWZlcmVuY2UgYW5kIGNhc3Qg
aXQgaW50byBhIHN0ZDo6dW5pcXVlX3B0ci4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RkOjp1
bmlxdWVfcHRyPFQ+IFRha2VPd25lcnNoaXBPZlVuaXF1ZVB0cihqbG9uZyBuYXRpdmVfcG9pbnRl
cikgewotICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG5h
dGl2ZV9wb2ludGVyKSk7Ci19Ci0KLXR5cGVkZWYgdm9pZCAoKkphdmFNZXRob2RQb2ludGVyKShK
TklFbnYqLCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+Jik7Ci0KLS8vIFBvc3QgYSBtZXNzYWdlIG9u
IHRoZSBnaXZlbiB0aHJlYWQgdGhhdCB3aWxsIGNhbGwgdGhlIEphdmEgbWV0aG9kIG9uIHRoZQot
Ly8gZ2l2ZW4gSmF2YSBvYmplY3QuCi12b2lkIFBvc3RKYXZhQ2FsbGJhY2soSk5JRW52KiBlbnYs
Ci0gICAgICAgICAgICAgICAgICAgICAgcnRjOjpUaHJlYWQqIHF1ZXVlLAotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHJ0Yzo6TG9jYXRpb24mIHBvc3RlZF9mcm9tLAotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfb2JqZWN0LAotICAgICAgICAgICAg
ICAgICAgICAgIEphdmFNZXRob2RQb2ludGVyIGphdmFfbWV0aG9kX3BvaW50ZXIpIHsKLSAgLy8g
T25lLW9mZiBtZXNzYWdlIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgSmF2YSBtZXRob2Qgb24gdGhl
IHNwZWNpZmllZCBKYXZhCi0gIC8vIG9iamVjdCBiZWZvcmUgZGVsZXRpbmcgaXRzZWxmLgotICBj
bGFzcyBKYXZhQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBydGM6Ok1lc3NhZ2VIYW5kbGVyIHsKLSAg
IHB1YmxpYzoKLSAgICBKYXZhQXN5bmNDYWxsYmFjayhKTklFbnYqIGVudiwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX29iamVjdCwKLSAgICAgICAgICAg
ICAgICAgICAgICBKYXZhTWV0aG9kUG9pbnRlciBqYXZhX21ldGhvZF9wb2ludGVyKQotICAgICAg
ICA6IGpfb2JqZWN0XyhlbnYsIGpfb2JqZWN0KSwgamF2YV9tZXRob2RfcG9pbnRlcl8oamF2YV9t
ZXRob2RfcG9pbnRlcikge30KLQotICAgIHZvaWQgT25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSopIG92
ZXJyaWRlIHsKLSAgICAgIGphdmFfbWV0aG9kX3BvaW50ZXJfKEF0dGFjaEN1cnJlbnRUaHJlYWRJ
Zk5lZWRlZCgpLCBqX29iamVjdF8pOwotICAgICAgLy8gVGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVs
aXZlcmVkLCBjbGVhbiB1cCBhZnRlciBvdXJzZWxmLgotICAgICAgZGVsZXRlIHRoaXM7Ci0gICAg
fQotCi0gICBwcml2YXRlOgotICAgIFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4gal9vYmpl
Y3RfOwotICAgIEphdmFNZXRob2RQb2ludGVyIGphdmFfbWV0aG9kX3BvaW50ZXJfOwotICB9Owot
Ci0gIHF1ZXVlLT5Qb3N0KHBvc3RlZF9mcm9tLAotICAgICAgICAgICAgICBuZXcgSmF2YUFzeW5j
Q2FsbGJhY2soZW52LCBqX29iamVjdCwgamF2YV9tZXRob2RfcG9pbnRlcikpOwotfQotCi1hYnNs
OjpvcHRpb25hbDxQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U6Ok9wdGlvbnM+Ci1KYXZh
VG9OYXRpdmVQZWVyQ29ubmVjdGlvbkZhY3RvcnlPcHRpb25zKEpOSUVudiogam5pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+
JiBqX29wdGlvbnMpIHsKLSAgaWYgKGpfb3B0aW9ucy5pc19udWxsKCkpCi0gICAgcmV0dXJuIGFi
c2w6Om51bGxvcHQ7Ci0KLSAgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlOjpPcHRpb25z
IG5hdGl2ZV9vcHRpb25zOwotCi0gIC8vIFRoaXMgZG9lc24ndCBuZWNlc3NhcmlseSBtYXRjaCB0
aGUgYysrIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3Q7IGZlZWwgZnJlZQotICAvLyB0byBhZGQgbW9y
ZSBwYXJhbWV0ZXJzIGFzIG5lY2Vzc2FyeS4KLSAgbmF0aXZlX29wdGlvbnMubmV0d29ya19pZ25v
cmVfbWFzayA9Ci0gICAgICBKYXZhX09wdGlvbnNfZ2V0TmV0d29ya0lnbm9yZU1hc2soam5pLCBq
X29wdGlvbnMpOwotICBuYXRpdmVfb3B0aW9ucy5kaXNhYmxlX2VuY3J5cHRpb24gPQotICAgICAg
SmF2YV9PcHRpb25zX2dldERpc2FibGVFbmNyeXB0aW9uKGpuaSwgal9vcHRpb25zKTsKLSAgbmF0
aXZlX29wdGlvbnMuZGlzYWJsZV9uZXR3b3JrX21vbml0b3IgPQotICAgICAgSmF2YV9PcHRpb25z
X2dldERpc2FibGVOZXR3b3JrTW9uaXRvcihqbmksIGpfb3B0aW9ucyk7Ci0KLSAgcmV0dXJuIG5h
dGl2ZV9vcHRpb25zOwotfQotCi0vLyBQbGFjZSBzdGF0aWMgb2JqZWN0cyBpbnRvIGEgY29udGFp
bmVyIHRoYXQgZ2V0cyBsZWFrZWQgc28gd2UgYXZvaWQKLS8vIG5vbi10cml2aWFsIGRlc3RydWN0
b3IuCi1zdHJ1Y3QgU3RhdGljT2JqZWN0Q29udGFpbmVyIHsKLSAgLy8gRmllbGQgdHJpYWxzIGlu
aXRpYWxpemF0aW9uIHN0cmluZwotICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpzdHJpbmc+IGZpZWxk
X3RyaWFsc19pbml0X3N0cmluZzsKLSAgLy8gU2V0IGluIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9J
bmplY3RMb2dnYWJsZSgpLgotICBzdGQ6OnVuaXF1ZV9wdHI8Sk5JTG9nU2luaz4gam5pX2xvZ19z
aW5rOwotfTsKLQotU3RhdGljT2JqZWN0Q29udGFpbmVyJiBHZXRTdGF0aWNPYmplY3RzKCkgewot
ICBzdGF0aWMgU3RhdGljT2JqZWN0Q29udGFpbmVyKiBzdGF0aWNfb2JqZWN0cyA9IG5ldyBTdGF0
aWNPYmplY3RDb250YWluZXIoKTsKLSAgcmV0dXJuICpzdGF0aWNfb2JqZWN0czsKLX0KLQotU2Nv
cGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvU2NvcGVkSmF2YVBlZXJDb25uZWN0aW9u
RmFjdG9yeSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IHBjZiwKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8cnRjOjpUaHJlYWQ+IG5ldHdvcmtfdGhyZWFkLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6
OlRocmVhZD4gd29ya2VyX3RocmVhZCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+
IHNpZ25hbGluZ190aHJlYWQsCi0gICAgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3RvcnkqIG5ldHdv
cmtfbW9uaXRvcl9mYWN0b3J5KSB7Ci0gIE93bmVkRmFjdG9yeUFuZFRocmVhZHMqIG93bmVkX2Zh
Y3RvcnkgPSBuZXcgT3duZWRGYWN0b3J5QW5kVGhyZWFkcygKLSAgICAgIHN0ZDo6bW92ZShuZXR3
b3JrX3RocmVhZCksIHN0ZDo6bW92ZSh3b3JrZXJfdGhyZWFkKSwKLSAgICAgIHN0ZDo6bW92ZShz
aWduYWxpbmdfdGhyZWFkKSwgbmV0d29ya19tb25pdG9yX2ZhY3RvcnksIHBjZik7Ci0KLSAgU2Nv
cGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfcGNmID0gSmF2YV9QZWVyQ29ubmVjdGlvbkZhY3Rv
cnlfQ29uc3RydWN0b3IoCi0gICAgICBlbnYsIE5hdGl2ZVRvSmF2YVBvaW50ZXIob3duZWRfZmFj
dG9yeSkpOwotCi0gIFBvc3RKYXZhQ2FsbGJhY2soZW52LCBvd25lZF9mYWN0b3J5LT5uZXR3b3Jr
X3RocmVhZCgpLCBSVENfRlJPTV9IRVJFLCBqX3BjZiwKLSAgICAgICAgICAgICAgICAgICAmSmF2
YV9QZWVyQ29ubmVjdGlvbkZhY3Rvcnlfb25OZXR3b3JrVGhyZWFkUmVhZHkpOwotICBQb3N0SmF2
YUNhbGxiYWNrKGVudiwgb3duZWRfZmFjdG9yeS0+d29ya2VyX3RocmVhZCgpLCBSVENfRlJPTV9I
RVJFLCBqX3BjZiwKLSAgICAgICAgICAgICAgICAgICAmSmF2YV9QZWVyQ29ubmVjdGlvbkZhY3Rv
cnlfb25Xb3JrZXJUaHJlYWRSZWFkeSk7Ci0gIFBvc3RKYXZhQ2FsbGJhY2soZW52LCBvd25lZF9m
YWN0b3J5LT5zaWduYWxpbmdfdGhyZWFkKCksIFJUQ19GUk9NX0hFUkUsIGpfcGNmLAotICAgICAg
ICAgICAgICAgICAgICZKYXZhX1BlZXJDb25uZWN0aW9uRmFjdG9yeV9vblNpZ25hbGluZ1RocmVh
ZFJlYWR5KTsKLQotICByZXR1cm4gal9wY2Y7Ci19Ci0KLVBlZXJDb25uZWN0aW9uRmFjdG9yeUlu
dGVyZmFjZSogUGVlckNvbm5lY3Rpb25GYWN0b3J5RnJvbUphdmEoamxvbmcgal9wKSB7Ci0gIHJl
dHVybiByZWludGVycHJldF9jYXN0PE93bmVkRmFjdG9yeUFuZFRocmVhZHMqPihqX3ApLT5mYWN0
b3J5KCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyBOb3RlOiBTb21lIG9mIHRoZSB2aWRl
by1zcGVjaWZpYyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgbWV0aG9kcyBhcmUKLS8vIGltcGxlbWVu
dGVkIGluICJ2aWRlby5jYyIuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGlmIGFuIGFwcGxpY2F0aW9u
Ci0vLyBkb2Vzbid0IG5lZWQgdmlkZW8gc3VwcG9ydCwgaXQgY2FuIGp1c3QgbGluayB3aXRoICJu
dWxsX3ZpZGVvLmNjIgotLy8gaW5zdGVhZCBvZiAidmlkZW8uY2MiLCB3aGljaCBkb2Vzbid0IGJy
aW5nIGluIHRoZSB2aWRlby1zcGVjaWZpYwotLy8gZGVwZW5kZW5jaWVzLgotCi0vLyBTZXQgaW4g
UGVlckNvbm5lY3Rpb25GYWN0b3J5X2luaXRpYWxpemVBbmRyb2lkR2xvYmFscygpLgotc3RhdGlj
IGJvb2wgZmFjdG9yeV9zdGF0aWNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCi1qb2JqZWN0IE5h
dGl2ZVRvSmF2YVBlZXJDb25uZWN0aW9uRmFjdG9yeSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBy
dGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+
IHBjZiwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IG5ldHdvcmtfdGhyZWFkLAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gd29ya2VyX3RocmVhZCwKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IHNpZ25hbGluZ190aHJlYWQsCi0gICAgcnRjOjpOZXR3
b3JrTW9uaXRvckZhY3RvcnkqIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5KSB7Ci0gIHJldHVybiBO
YXRpdmVUb1Njb3BlZEphdmFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoCi0gICAgICAgICAgICAgam5p
LCBwY2YsIHN0ZDo6bW92ZShuZXR3b3JrX3RocmVhZCksIHN0ZDo6bW92ZSh3b3JrZXJfdGhyZWFk
KSwKLSAgICAgICAgICAgICBzdGQ6Om1vdmUoc2lnbmFsaW5nX3RocmVhZCksIG5ldHdvcmtfbW9u
aXRvcl9mYWN0b3J5KQotICAgICAgLlJlbGVhc2UoKTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1Bl
ZXJDb25uZWN0aW9uRmFjdG9yeV9Jbml0aWFsaXplQW5kcm9pZEdsb2JhbHMoSk5JRW52KiBqbmkp
IHsKLSAgaWYgKCFmYWN0b3J5X3N0YXRpY19pbml0aWFsaXplZCkgewotICAgIEpWTTo6SW5pdGlh
bGl6ZShHZXRKVk0oKSk7Ci0gICAgZmFjdG9yeV9zdGF0aWNfaW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29ubmVjdGlvbkZhY3RvcnlfSW5pdGlhbGl6
ZUZpZWxkVHJpYWxzKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxq
c3RyaW5nPiYgal90cmlhbHNfaW5pdF9zdHJpbmcpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6
c3RyaW5nPiYgZmllbGRfdHJpYWxzX2luaXRfc3RyaW5nID0KLSAgICAgIEdldFN0YXRpY09iamVj
dHMoKS5maWVsZF90cmlhbHNfaW5pdF9zdHJpbmc7Ci0KLSAgaWYgKGpfdHJpYWxzX2luaXRfc3Ry
aW5nLmlzX251bGwoKSkgewotICAgIGZpZWxkX3RyaWFsc19pbml0X3N0cmluZyA9IG51bGxwdHI7
Ci0gICAgZmllbGRfdHJpYWw6OkluaXRGaWVsZFRyaWFsc0Zyb21TdHJpbmcobnVsbHB0cik7Ci0g
ICAgcmV0dXJuOwotICB9Ci0gIGZpZWxkX3RyaWFsc19pbml0X3N0cmluZyA9IHN0ZDo6bWFrZV91
bmlxdWU8c3RkOjpzdHJpbmc+KAotICAgICAgSmF2YVRvTmF0aXZlU3RyaW5nKGpuaSwgal90cmlh
bHNfaW5pdF9zdHJpbmcpKTsKLSAgUlRDX0xPRyhMU19JTkZPKSA8PCAiaW5pdGlhbGl6ZUZpZWxk
VHJpYWxzOiAiIDw8ICpmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmc7Ci0gIGZpZWxkX3RyaWFsOjpJ
bml0RmllbGRUcmlhbHNGcm9tU3RyaW5nKGZpZWxkX3RyaWFsc19pbml0X3N0cmluZy0+Y19zdHIo
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29ubmVjdGlvbkZhY3RvcnlfSW5pdGlhbGl6
ZUludGVybmFsVHJhY2VyKEpOSUVudiogam5pKSB7Ci0gIHJ0Yzo6dHJhY2luZzo6U2V0dXBJbnRl
cm5hbFRyYWNlcigpOwotfQotCi1zdGF0aWMgU2NvcGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+Ci1K
TklfUGVlckNvbm5lY3Rpb25GYWN0b3J5X0ZpbmRGaWVsZFRyaWFsc0Z1bGxOYW1lKAotICAgIEpO
SUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqc3RyaW5nPiYgal9uYW1lKSB7Ci0g
IHJldHVybiBOYXRpdmVUb0phdmFTdHJpbmcoCi0gICAgICBqbmksIGZpZWxkX3RyaWFsOjpGaW5k
RnVsbE5hbWUoSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9uYW1lKSkpOwotfQotCi1zdGF0aWMgamJv
b2xlYW4gSk5JX1BlZXJDb25uZWN0aW9uRmFjdG9yeV9TdGFydEludGVybmFsVHJhY2luZ0NhcHR1
cmUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpzdHJpbmc+JiBq
X2V2ZW50X3RyYWNpbmdfZmlsZW5hbWUpIHsKLSAgaWYgKGpfZXZlbnRfdHJhY2luZ19maWxlbmFt
ZS5pc19udWxsKCkpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNvbnN0IGNoYXIqIGluaXRfc3Ry
aW5nID0KLSAgICAgIGpuaS0+R2V0U3RyaW5nVVRGQ2hhcnMoal9ldmVudF90cmFjaW5nX2ZpbGVu
YW1lLm9iaigpLCBOVUxMKTsKLSAgUlRDX0xPRyhMU19JTkZPKSA8PCAiU3RhcnRpbmcgaW50ZXJu
YWwgdHJhY2luZyB0bzogIiA8PCBpbml0X3N0cmluZzsKLSAgYm9vbCByZXQgPSBydGM6OnRyYWNp
bmc6OlN0YXJ0SW50ZXJuYWxDYXB0dXJlKGluaXRfc3RyaW5nKTsKLSAgam5pLT5SZWxlYXNlU3Ry
aW5nVVRGQ2hhcnMoal9ldmVudF90cmFjaW5nX2ZpbGVuYW1lLm9iaigpLCBpbml0X3N0cmluZyk7
Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29ubmVjdGlvbkZhY3Rv
cnlfU3RvcEludGVybmFsVHJhY2luZ0NhcHR1cmUoSk5JRW52KiBqbmkpIHsKLSAgcnRjOjp0cmFj
aW5nOjpTdG9wSW50ZXJuYWxDYXB0dXJlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29u
bmVjdGlvbkZhY3RvcnlfU2h1dGRvd25JbnRlcm5hbFRyYWNlcihKTklFbnYqIGpuaSkgewotICBy
dGM6OnRyYWNpbmc6OlNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsKLX0KLQotLy8gRm9sbG93aW5n
IHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsOgotLy8gfGF1ZGlvX2RldmljZV9tb2R1bGV8LCB8amVu
Y29kZXJfZmFjdG9yeXwsIHxqZGVjb2Rlcl9mYWN0b3J5fCwKLS8vIHxhdWRpb19wcm9jZXNzb3J8
LCB8bWVkaWFfdHJhbnNwb3J0X2ZhY3Rvcnl8LCB8ZmVjX2NvbnRyb2xsZXJfZmFjdG9yeXwsCi0v
LyB8bmV0d29ya19zdGF0ZV9wcmVkaWN0b3JfZmFjdG9yeXwsIHxuZXRlcV9mYWN0b3J5fC4KLVNj
b3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlGb3JK
YXZhKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYg
amNvbnRleHQsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqb3B0aW9ucywKLSAg
ICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1bGU+IGF1ZGlvX2RldmljZV9tb2R1
bGUsCi0gICAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRW5jb2RlckZhY3Rvcnk+IGF1ZGlvX2Vu
Y29kZXJfZmFjdG9yeSwKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZWNvZGVyRmFjdG9y
eT4gYXVkaW9fZGVjb2Rlcl9mYWN0b3J5LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0
PiYgamVuY29kZXJfZmFjdG9yeSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpk
ZWNvZGVyX2ZhY3RvcnksCi0gICAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvUHJvY2Vzc2luZz4g
YXVkaW9fcHJvY2Vzc29yLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGZWNDb250cm9sbGVyRmFjdG9y
eUludGVyZmFjZT4gZmVjX2NvbnRyb2xsZXJfZmFjdG9yeSwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5SW50ZXJmYWNlPgotICAgICAgICBuZXR3b3JrX2NvbnRy
b2xsZXJfZmFjdG9yeSwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0YXRlUHJlZGljdG9y
RmFjdG9yeUludGVyZmFjZT4KLSAgICAgICAgbmV0d29ya19zdGF0ZV9wcmVkaWN0b3JfZmFjdG9y
eSwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFuc3BvcnRGYWN0b3J5PiBtZWRpYV90cmFu
c3BvcnRfZmFjdG9yeSwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0RXFGYWN0b3J5PiBuZXRlcV9m
YWN0b3J5KSB7Ci0gIC8vIHRhbGsvIGFzc3VtZXMgcHJldHR5IHdpZGVseSB0aGF0IHRoZSBjdXJy
ZW50IFRocmVhZCBpcyBUaHJlYWRNYW5hZ2VyJ2QsIGJ1dAotICAvLyBUaHJlYWRNYW5hZ2VyIG9u
bHkgV3JhcEN1cnJlbnRUaHJlYWQoKXMgdGhlIHRocmVhZCB3aGVyZSBpdCBpcyBmaXJzdAotICAv
LyBjcmVhdGVkLiAgU2luY2UgdGhlIHNlbWFudGljcyBhcm91bmQgd2hlbiBhdXRvLXdyYXBwaW5n
IGhhcHBlbnMgaW4KLSAgLy8gd2VicnRjL3J0Y19iYXNlLyBhcmUgY29udm9sdXRlZCwgd2Ugc2lt
cGx5IHdyYXAgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8KLSAgLy8gdGhpbmsgYWJvdXQgcmFtaWZp
Y2F0aW9ucyBvZiBhdXRvLXdyYXBwaW5nIHRoZXJlLgotICBydGM6OlRocmVhZE1hbmFnZXI6Oklu
c3RhbmNlKCktPldyYXBDdXJyZW50VGhyZWFkKCk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6
VGhyZWFkPiBuZXR3b3JrX3RocmVhZCA9Ci0gICAgICBydGM6OlRocmVhZDo6Q3JlYXRlV2l0aFNv
Y2tldFNlcnZlcigpOwotICBuZXR3b3JrX3RocmVhZC0+U2V0TmFtZSgibmV0d29ya190aHJlYWQi
LCBudWxscHRyKTsKLSAgUlRDX0NIRUNLKG5ldHdvcmtfdGhyZWFkLT5TdGFydCgpKSA8PCAiRmFp
bGVkIHRvIHN0YXJ0IHRocmVhZCI7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiB3
b3JrZXJfdGhyZWFkID0gcnRjOjpUaHJlYWQ6OkNyZWF0ZSgpOwotICB3b3JrZXJfdGhyZWFkLT5T
ZXROYW1lKCJ3b3JrZXJfdGhyZWFkIiwgbnVsbHB0cik7Ci0gIFJUQ19DSEVDSyh3b3JrZXJfdGhy
ZWFkLT5TdGFydCgpKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IHRocmVhZCI7Ci0KLSAgc3RkOjp1bmlx
dWVfcHRyPHJ0Yzo6VGhyZWFkPiBzaWduYWxpbmdfdGhyZWFkID0gcnRjOjpUaHJlYWQ6OkNyZWF0
ZSgpOwotICBzaWduYWxpbmdfdGhyZWFkLT5TZXROYW1lKCJzaWduYWxpbmdfdGhyZWFkIiwgTlVM
TCk7Ci0gIFJUQ19DSEVDSyhzaWduYWxpbmdfdGhyZWFkLT5TdGFydCgpKSA8PCAiRmFpbGVkIHRv
IHN0YXJ0IHRocmVhZCI7Ci0KLSAgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3RvcnkqIG5ldHdvcmtf
bW9uaXRvcl9mYWN0b3J5ID0gbnVsbHB0cjsKLQotICBjb25zdCBhYnNsOjpvcHRpb25hbDxQZWVy
Q29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U6Ok9wdGlvbnM+IG9wdGlvbnMgPQotICAgICAgSmF2
YVRvTmF0aXZlUGVlckNvbm5lY3Rpb25GYWN0b3J5T3B0aW9ucyhqbmksIGpvcHRpb25zKTsKLQot
ICAvLyBEbyBub3QgY3JlYXRlIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5IG9ubHkgaWYgdGhlIG9w
dGlvbnMgYXJlCi0gIC8vIHByb3ZpZGVkIGFuZCBkaXNhYmxlX25ldHdvcmtfbW9uaXRvciB0aGVy
ZWluIGlzIHNldCB0byB0cnVlLgotICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMtPmRpc2FibGVf
bmV0d29ya19tb25pdG9yKSkgewotICAgIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5ID0gbmV3IEFu
ZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKTsKLSAgICBydGM6Ok5ldHdvcmtNb25pdG9yRmFj
dG9yeTo6U2V0RmFjdG9yeShuZXR3b3JrX21vbml0b3JfZmFjdG9yeSk7Ci0gIH0KLQotICBQZWVy
Q29ubmVjdGlvbkZhY3RvcnlEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzOwotICBkZXBlbmRlbmNp
ZXMubmV0d29ya190aHJlYWQgPSBuZXR3b3JrX3RocmVhZC5nZXQoKTsKLSAgZGVwZW5kZW5jaWVz
Lndvcmtlcl90aHJlYWQgPSB3b3JrZXJfdGhyZWFkLmdldCgpOwotICBkZXBlbmRlbmNpZXMuc2ln
bmFsaW5nX3RocmVhZCA9IHNpZ25hbGluZ190aHJlYWQuZ2V0KCk7Ci0gIGRlcGVuZGVuY2llcy50
YXNrX3F1ZXVlX2ZhY3RvcnkgPSBDcmVhdGVEZWZhdWx0VGFza1F1ZXVlRmFjdG9yeSgpOwotICBk
ZXBlbmRlbmNpZXMuY2FsbF9mYWN0b3J5ID0gQ3JlYXRlQ2FsbEZhY3RvcnkoKTsKLSAgZGVwZW5k
ZW5jaWVzLmV2ZW50X2xvZ19mYWN0b3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxSdGNFdmVudExvZ0Zh
Y3Rvcnk+KAotICAgICAgZGVwZW5kZW5jaWVzLnRhc2tfcXVldWVfZmFjdG9yeS5nZXQoKSk7Ci0g
IGRlcGVuZGVuY2llcy5mZWNfY29udHJvbGxlcl9mYWN0b3J5ID0gc3RkOjptb3ZlKGZlY19jb250
cm9sbGVyX2ZhY3RvcnkpOwotICBkZXBlbmRlbmNpZXMubmV0d29ya19jb250cm9sbGVyX2ZhY3Rv
cnkgPQotICAgICAgc3RkOjptb3ZlKG5ldHdvcmtfY29udHJvbGxlcl9mYWN0b3J5KTsKLSAgZGVw
ZW5kZW5jaWVzLm5ldHdvcmtfc3RhdGVfcHJlZGljdG9yX2ZhY3RvcnkgPQotICAgICAgc3RkOjpt
b3ZlKG5ldHdvcmtfc3RhdGVfcHJlZGljdG9yX2ZhY3RvcnkpOwotICBkZXBlbmRlbmNpZXMubWVk
aWFfdHJhbnNwb3J0X2ZhY3RvcnkgPSBzdGQ6Om1vdmUobWVkaWFfdHJhbnNwb3J0X2ZhY3Rvcnkp
OwotICBkZXBlbmRlbmNpZXMubmV0ZXFfZmFjdG9yeSA9IHN0ZDo6bW92ZShuZXRlcV9mYWN0b3J5
KTsKLQotICBjcmlja2V0OjpNZWRpYUVuZ2luZURlcGVuZGVuY2llcyBtZWRpYV9kZXBlbmRlbmNp
ZXM7Ci0gIG1lZGlhX2RlcGVuZGVuY2llcy50YXNrX3F1ZXVlX2ZhY3RvcnkgPSBkZXBlbmRlbmNp
ZXMudGFza19xdWV1ZV9mYWN0b3J5LmdldCgpOwotICBtZWRpYV9kZXBlbmRlbmNpZXMuYWRtID0g
c3RkOjptb3ZlKGF1ZGlvX2RldmljZV9tb2R1bGUpOwotICBtZWRpYV9kZXBlbmRlbmNpZXMuYXVk
aW9fZW5jb2Rlcl9mYWN0b3J5ID0gc3RkOjptb3ZlKGF1ZGlvX2VuY29kZXJfZmFjdG9yeSk7Ci0g
IG1lZGlhX2RlcGVuZGVuY2llcy5hdWRpb19kZWNvZGVyX2ZhY3RvcnkgPSBzdGQ6Om1vdmUoYXVk
aW9fZGVjb2Rlcl9mYWN0b3J5KTsKLSAgbWVkaWFfZGVwZW5kZW5jaWVzLmF1ZGlvX3Byb2Nlc3Np
bmcgPSBzdGQ6Om1vdmUoYXVkaW9fcHJvY2Vzc29yKTsKLSAgbWVkaWFfZGVwZW5kZW5jaWVzLnZp
ZGVvX2VuY29kZXJfZmFjdG9yeSA9Ci0gICAgICBhYnNsOjpXcmFwVW5pcXVlKENyZWF0ZVZpZGVv
RW5jb2RlckZhY3Rvcnkoam5pLCBqZW5jb2Rlcl9mYWN0b3J5KSk7Ci0gIG1lZGlhX2RlcGVuZGVu
Y2llcy52aWRlb19kZWNvZGVyX2ZhY3RvcnkgPQotICAgICAgYWJzbDo6V3JhcFVuaXF1ZShDcmVh
dGVWaWRlb0RlY29kZXJGYWN0b3J5KGpuaSwgamRlY29kZXJfZmFjdG9yeSkpOwotICBkZXBlbmRl
bmNpZXMubWVkaWFfZW5naW5lID0KLSAgICAgIGNyaWNrZXQ6OkNyZWF0ZU1lZGlhRW5naW5lKHN0
ZDo6bW92ZShtZWRpYV9kZXBlbmRlbmNpZXMpKTsKLQotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVl
ckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5ID0KLSAgICAgIENyZWF0ZU1vZHVs
YXJQZWVyQ29ubmVjdGlvbkZhY3Rvcnkoc3RkOjptb3ZlKGRlcGVuZGVuY2llcykpOwotCi0gIFJU
Q19DSEVDSyhmYWN0b3J5KSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgcGVlciBjb25uZWN0aW9u
IGZhY3Rvcnk7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJXZWJSVEMvbGliamluZ2xlIGlu
aXQgbGlrZWx5IGZhaWxlZCBvbiB0aGlzIGRldmljZSI7Ci0gIC8vIFRPRE8oaG9uZ2hhaXopOiBN
YXliZSBwdXQgdGhlIG9wdGlvbnMgYXMgdGhlIGFyZ3VtZW50IG9mCi0gIC8vIENyZWF0ZVBlZXJD
b25uZWN0aW9uRmFjdG9yeS4KLSAgaWYgKG9wdGlvbnMpCi0gICAgZmFjdG9yeS0+U2V0T3B0aW9u
cygqb3B0aW9ucyk7Ci0KLSAgcmV0dXJuIE5hdGl2ZVRvU2NvcGVkSmF2YVBlZXJDb25uZWN0aW9u
RmFjdG9yeSgKLSAgICAgIGpuaSwgZmFjdG9yeSwgc3RkOjptb3ZlKG5ldHdvcmtfdGhyZWFkKSwg
c3RkOjptb3ZlKHdvcmtlcl90aHJlYWQpLAotICAgICAgc3RkOjptb3ZlKHNpZ25hbGluZ190aHJl
YWQpLCBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSk7Ci19Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4KLUpOSV9QZWVyQ29ubmVjdGlvbkZhY3RvcnlfQ3JlYXRlUGVlckNvbm5l
Y3Rpb25GYWN0b3J5KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxq
b2JqZWN0PiYgamNvbnRleHQsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqb3B0
aW9ucywKLSAgICBqbG9uZyBuYXRpdmVfYXVkaW9fZGV2aWNlX21vZHVsZSwKLSAgICBqbG9uZyBu
YXRpdmVfYXVkaW9fZW5jb2Rlcl9mYWN0b3J5LAotICAgIGpsb25nIG5hdGl2ZV9hdWRpb19kZWNv
ZGVyX2ZhY3RvcnksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqZW5jb2Rlcl9m
YWN0b3J5LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgamRlY29kZXJfZmFjdG9y
eSwKLSAgICBqbG9uZyBuYXRpdmVfYXVkaW9fcHJvY2Vzc29yLAotICAgIGpsb25nIG5hdGl2ZV9m
ZWNfY29udHJvbGxlcl9mYWN0b3J5LAotICAgIGpsb25nIG5hdGl2ZV9uZXR3b3JrX2NvbnRyb2xs
ZXJfZmFjdG9yeSwKLSAgICBqbG9uZyBuYXRpdmVfbmV0d29ya19zdGF0ZV9wcmVkaWN0b3JfZmFj
dG9yeSwKLSAgICBqbG9uZyBuYXRpdmVfbWVkaWFfdHJhbnNwb3J0X2ZhY3RvcnksCi0gICAgamxv
bmcgbmF0aXZlX25ldGVxX2ZhY3RvcnkpIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvUHJv
Y2Vzc2luZz4gYXVkaW9fcHJvY2Vzc29yID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Q
cm9jZXNzaW5nKj4obmF0aXZlX2F1ZGlvX3Byb2Nlc3Nvcik7Ci0gIHJldHVybiBDcmVhdGVQZWVy
Q29ubmVjdGlvbkZhY3RvcnlGb3JKYXZhKAotICAgICAgam5pLCBqY29udGV4dCwgam9wdGlvbnMs
Ci0gICAgICByZWludGVycHJldF9jYXN0PEF1ZGlvRGV2aWNlTW9kdWxlKj4obmF0aXZlX2F1ZGlv
X2RldmljZV9tb2R1bGUpLAotICAgICAgVGFrZU93bmVyc2hpcE9mUmVmUHRyPEF1ZGlvRW5jb2Rl
ckZhY3Rvcnk+KG5hdGl2ZV9hdWRpb19lbmNvZGVyX2ZhY3RvcnkpLAotICAgICAgVGFrZU93bmVy
c2hpcE9mUmVmUHRyPEF1ZGlvRGVjb2RlckZhY3Rvcnk+KG5hdGl2ZV9hdWRpb19kZWNvZGVyX2Zh
Y3RvcnkpLAotICAgICAgamVuY29kZXJfZmFjdG9yeSwgamRlY29kZXJfZmFjdG9yeSwKLSAgICAg
IGF1ZGlvX3Byb2Nlc3NvciA/IGF1ZGlvX3Byb2Nlc3NvciA6IENyZWF0ZUF1ZGlvUHJvY2Vzc2lu
ZygpLAotICAgICAgVGFrZU93bmVyc2hpcE9mVW5pcXVlUHRyPEZlY0NvbnRyb2xsZXJGYWN0b3J5
SW50ZXJmYWNlPigKLSAgICAgICAgICBuYXRpdmVfZmVjX2NvbnRyb2xsZXJfZmFjdG9yeSksCi0g
ICAgICBUYWtlT3duZXJzaGlwT2ZVbmlxdWVQdHI8TmV0d29ya0NvbnRyb2xsZXJGYWN0b3J5SW50
ZXJmYWNlPigKLSAgICAgICAgICBuYXRpdmVfbmV0d29ya19jb250cm9sbGVyX2ZhY3RvcnkpLAot
ICAgICAgVGFrZU93bmVyc2hpcE9mVW5pcXVlUHRyPE5ldHdvcmtTdGF0ZVByZWRpY3RvckZhY3Rv
cnlJbnRlcmZhY2U+KAotICAgICAgICAgIG5hdGl2ZV9uZXR3b3JrX3N0YXRlX3ByZWRpY3Rvcl9m
YWN0b3J5KSwKLSAgICAgIFRha2VPd25lcnNoaXBPZlVuaXF1ZVB0cjxNZWRpYVRyYW5zcG9ydEZh
Y3Rvcnk+KAotICAgICAgICAgIG5hdGl2ZV9tZWRpYV90cmFuc3BvcnRfZmFjdG9yeSksCi0gICAg
ICBUYWtlT3duZXJzaGlwT2ZVbmlxdWVQdHI8TmV0RXFGYWN0b3J5PihuYXRpdmVfbmV0ZXFfZmFj
dG9yeSkpOwotfQotCi1zdGF0aWMgdm9pZCBKTklfUGVlckNvbm5lY3Rpb25GYWN0b3J5X0ZyZWVG
YWN0b3J5KEpOSUVudiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpsb25nIGpfcCkgewotICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxPd25lZEZh
Y3RvcnlBbmRUaHJlYWRzKj4oal9wKTsKLSAgZmllbGRfdHJpYWw6OkluaXRGaWVsZFRyaWFsc0Zy
b21TdHJpbmcobnVsbHB0cik7Ci0gIEdldFN0YXRpY09iamVjdHMoKS5maWVsZF90cmlhbHNfaW5p
dF9zdHJpbmcgPSBudWxscHRyOwotfQotCi1zdGF0aWMgamxvbmcgSk5JX1BlZXJDb25uZWN0aW9u
RmFjdG9yeV9DcmVhdGVMb2NhbE1lZGlhU3RyZWFtKAotICAgIEpOSUVudiogam5pLAotICAgIGps
b25nIG5hdGl2ZV9mYWN0b3J5LAotICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqc3RyaW5nPiYgbGFi
ZWwpIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0o
Ci0gICAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSkKLSAg
ICAgICAgICAtPkNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0oSmF2YVRvU3RkU3RyaW5nKGpuaSwgbGFi
ZWwpKSk7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKHN0cmVhbS5yZWxlYXNlKCkpOwotfQot
Ci1zdGF0aWMgamxvbmcgSk5JX1BlZXJDb25uZWN0aW9uRmFjdG9yeV9DcmVhdGVBdWRpb1NvdXJj
ZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBuYXRpdmVfZmFjdG9yeSwKLSAgICBjb25z
dCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfY29uc3RyYWludHMpIHsKLSAgc3RkOjp1bmlxdWVf
cHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnRzID0KLSAgICAgIEphdmFUb05hdGl2ZU1l
ZGlhQ29uc3RyYWludHMoam5pLCBqX2NvbnN0cmFpbnRzKTsKLSAgY3JpY2tldDo6QXVkaW9PcHRp
b25zIG9wdGlvbnM7Ci0gIENvcHlDb25zdHJhaW50c0ludG9BdWRpb09wdGlvbnMoY29uc3RyYWlu
dHMuZ2V0KCksICZvcHRpb25zKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvU291cmNlSW50
ZXJmYWNlPiBzb3VyY2UoCi0gICAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlGcm9tSmF2YShuYXRp
dmVfZmFjdG9yeSkKLSAgICAgICAgICAtPkNyZWF0ZUF1ZGlvU291cmNlKG9wdGlvbnMpKTsKLSAg
cmV0dXJuIGpsb25nRnJvbVBvaW50ZXIoc291cmNlLnJlbGVhc2UoKSk7Ci19Ci0KLWpsb25nIEpO
SV9QZWVyQ29ubmVjdGlvbkZhY3RvcnlfQ3JlYXRlQXVkaW9UcmFjaygKLSAgICBKTklFbnYqIGpu
aSwKLSAgICBqbG9uZyBuYXRpdmVfZmFjdG9yeSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8anN0
cmluZz4mIGlkLAotICAgIGpsb25nIG5hdGl2ZV9zb3VyY2UpIHsKLSAgcnRjOjpzY29wZWRfcmVm
cHRyPEF1ZGlvVHJhY2tJbnRlcmZhY2U+IHRyYWNrKAotICAgICAgUGVlckNvbm5lY3Rpb25GYWN0
b3J5RnJvbUphdmEobmF0aXZlX2ZhY3RvcnkpCi0gICAgICAgICAgLT5DcmVhdGVBdWRpb1RyYWNr
KAotICAgICAgICAgICAgICBKYXZhVG9TdGRTdHJpbmcoam5pLCBpZCksCi0gICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Tb3VyY2VJbnRlcmZhY2UqPihuYXRpdmVfc291cmNlKSkp
OwotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcih0cmFjay5yZWxlYXNlKCkpOwotfQotCi1zdGF0
aWMgamJvb2xlYW4gSk5JX1BlZXJDb25uZWN0aW9uRmFjdG9yeV9TdGFydEFlY0R1bXAoCi0gICAg
Sk5JRW52KiBqbmksCi0gICAgamxvbmcgbmF0aXZlX2ZhY3RvcnksCi0gICAgamludCBmaWxlX2Rl
c2NyaXB0b3IsCi0gICAgamludCBmaWxlc2l6ZV9saW1pdF9ieXRlcykgewotICBGSUxFKiBmID0g
ZmRvcGVuKGZpbGVfZGVzY3JpcHRvciwgIndiIik7Ci0gIGlmICghZikgewotICAgIGNsb3NlKGZp
bGVfZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIFBlZXJD
b25uZWN0aW9uRmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9mYWN0b3J5KQotICAgICAgLT5TdGFydEFl
Y0R1bXAoZiwgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotfQotCi1zdGF0aWMgdm9pZCBKTklfUGVl
ckNvbm5lY3Rpb25GYWN0b3J5X1N0b3BBZWNEdW1wKEpOSUVudiogam5pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVfZmFjdG9y
eSkgewotICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSktPlN0
b3BBZWNEdW1wKCk7Ci19Ci0KLXN0YXRpYyBqbG9uZyBKTklfUGVlckNvbm5lY3Rpb25GYWN0b3J5
X0NyZWF0ZVBlZXJDb25uZWN0aW9uKAotICAgIEpOSUVudiogam5pLAotICAgIGpsb25nIGZhY3Rv
cnksCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3J0Y19jb25maWcsCi0gICAg
Y29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2NvbnN0cmFpbnRzLAotICAgIGpsb25nIG9i
c2VydmVyX3AsCi0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NzbENlcnRpZmlj
YXRlVmVyaWZpZXIpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXI+
IG9ic2VydmVyKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxQZWVyQ29ubmVjdGlvbk9ic2VydmVy
Kj4ob2JzZXJ2ZXJfcCkpOwotCi0gIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25maWd1
cmF0aW9uIHJ0Y19jb25maWcoCi0gICAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UlRDQ29u
ZmlndXJhdGlvblR5cGU6OmtBZ2dyZXNzaXZlKTsKLSAgSmF2YVRvTmF0aXZlUlRDQ29uZmlndXJh
dGlvbihqbmksIGpfcnRjX2NvbmZpZywgJnJ0Y19jb25maWcpOwotCi0gIGlmIChydGNfY29uZmln
LmNlcnRpZmljYXRlcy5lbXB0eSgpKSB7Ci0gICAgLy8gR2VuZXJhdGUgbm9uLWRlZmF1bHQgY2Vy
dGlmaWNhdGUuCi0gICAgcnRjOjpLZXlUeXBlIGtleV90eXBlID0gR2V0UnRjQ29uZmlnS2V5VHlw
ZShqbmksIGpfcnRjX2NvbmZpZyk7Ci0gICAgaWYgKGtleV90eXBlICE9IHJ0Yzo6S1RfREVGQVVM
VCkgewotICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPHJ0Yzo6UlRDQ2VydGlmaWNhdGU+IGNlcnRp
ZmljYXRlID0KLSAgICAgICAgICBydGM6OlJUQ0NlcnRpZmljYXRlR2VuZXJhdG9yOjpHZW5lcmF0
ZUNlcnRpZmljYXRlKAotICAgICAgICAgICAgICBydGM6OktleVBhcmFtcyhrZXlfdHlwZSksIGFi
c2w6Om51bGxvcHQpOwotICAgICAgaWYgKCFjZXJ0aWZpY2F0ZSkgewotICAgICAgICBSVENfTE9H
KExTX0VSUk9SKSA8PCAiRmFpbGVkIHRvIGdlbmVyYXRlIGNlcnRpZmljYXRlLiBLZXlUeXBlOiAi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGtleV90eXBlOwotICAgICAgICByZXR1cm4g
MDsKLSAgICAgIH0KLSAgICAgIHJ0Y19jb25maWcuY2VydGlmaWNhdGVzLnB1c2hfYmFjayhjZXJ0
aWZpY2F0ZSk7Ci0gICAgfQotICB9Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhQ29uc3RyYWlu
dHM+IGNvbnN0cmFpbnRzOwotICBpZiAoIWpfY29uc3RyYWludHMuaXNfbnVsbCgpKSB7Ci0gICAg
Y29uc3RyYWludHMgPSBKYXZhVG9OYXRpdmVNZWRpYUNvbnN0cmFpbnRzKGpuaSwgal9jb25zdHJh
aW50cyk7Ci0gICAgQ29weUNvbnN0cmFpbnRzSW50b1J0Y0NvbmZpZ3VyYXRpb24oY29uc3RyYWlu
dHMuZ2V0KCksICZydGNfY29uZmlnKTsKLSAgfQotCi0gIFBlZXJDb25uZWN0aW9uRGVwZW5kZW5j
aWVzIHBlZXJfY29ubmVjdGlvbl9kZXBlbmRlbmNpZXMob2JzZXJ2ZXIuZ2V0KCkpOwotICBpZiAo
IWpfc3NsQ2VydGlmaWNhdGVWZXJpZmllci5pc19udWxsKCkpIHsKLSAgICBwZWVyX2Nvbm5lY3Rp
b25fZGVwZW5kZW5jaWVzLnRsc19jZXJ0X3ZlcmlmaWVyID0KLSAgICAgICAgc3RkOjptYWtlX3Vu
aXF1ZTxTU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyV3JhcHBlcj4oCi0gICAgICAgICAgICBqbmksIGpf
c3NsQ2VydGlmaWNhdGVWZXJpZmllcik7Ci0gIH0KLQotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2U+IHBjID0KLSAgICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeUZy
b21KYXZhKGZhY3RvcnkpLT5DcmVhdGVQZWVyQ29ubmVjdGlvbigKLSAgICAgICAgICBydGNfY29u
ZmlnLCBzdGQ6Om1vdmUocGVlcl9jb25uZWN0aW9uX2RlcGVuZGVuY2llcykpOwotICBpZiAoIXBj
KQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKAotICAgICAgbmV3
IE93bmVkUGVlckNvbm5lY3Rpb24ocGMsIHN0ZDo6bW92ZShvYnNlcnZlciksIHN0ZDo6bW92ZShj
b25zdHJhaW50cykpKTsKLX0KLQotc3RhdGljIGpsb25nIEpOSV9QZWVyQ29ubmVjdGlvbkZhY3Rv
cnlfQ3JlYXRlVmlkZW9Tb3VyY2UoCi0gICAgSk5JRW52KiBqbmksCi0gICAgamxvbmcgbmF0aXZl
X2ZhY3RvcnksCi0gICAgamJvb2xlYW4gaXNfc2NyZWVuY2FzdCwKLSAgICBqYm9vbGVhbiBhbGln
bl90aW1lc3RhbXBzKSB7Ci0gIE93bmVkRmFjdG9yeUFuZFRocmVhZHMqIGZhY3RvcnkgPQotICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxPd25lZEZhY3RvcnlBbmRUaHJlYWRzKj4obmF0aXZlX2ZhY3Rv
cnkpOwotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihDcmVhdGVWaWRlb1NvdXJjZShqbmksIGZh
Y3RvcnktPnNpZ25hbGluZ190aHJlYWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmFjdG9yeS0+d29ya2VyX3RocmVhZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zY3JlZW5jYXN0LCBhbGlnbl90aW1lc3Rh
bXBzKSk7Ci19Ci0KLXN0YXRpYyBqbG9uZyBKTklfUGVlckNvbm5lY3Rpb25GYWN0b3J5X0NyZWF0
ZVZpZGVvVHJhY2soCi0gICAgSk5JRW52KiBqbmksCi0gICAgamxvbmcgbmF0aXZlX2ZhY3Rvcnks
Ci0gICAgY29uc3QgSmF2YVBhcmFtUmVmPGpzdHJpbmc+JiBpZCwKLSAgICBqbG9uZyBuYXRpdmVf
c291cmNlKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxWaWRlb1RyYWNrSW50ZXJmYWNlPiB0cmFj
ayA9Ci0gICAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSkK
LSAgICAgICAgICAtPkNyZWF0ZVZpZGVvVHJhY2soCi0gICAgICAgICAgICAgIEphdmFUb1N0ZFN0
cmluZyhqbmksIGlkKSwKLSAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxWaWRlb1RyYWNr
U291cmNlSW50ZXJmYWNlKj4obmF0aXZlX3NvdXJjZSkpOwotICByZXR1cm4gamxvbmdGcm9tUG9p
bnRlcih0cmFjay5yZWxlYXNlKCkpOwotfQotCi1zdGF0aWMgamxvbmcgSk5JX1BlZXJDb25uZWN0
aW9uRmFjdG9yeV9HZXROYXRpdmVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoCi0gICAgSk5JRW52KiBq
bmksCi0gICAgamxvbmcgbmF0aXZlX2ZhY3RvcnkpIHsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50
ZXIoUGVlckNvbm5lY3Rpb25GYWN0b3J5RnJvbUphdmEobmF0aXZlX2ZhY3RvcnkpKTsKLX0KLQot
c3RhdGljIHZvaWQgSk5JX1BlZXJDb25uZWN0aW9uRmFjdG9yeV9JbmplY3RMb2dnYWJsZSgKLSAg
ICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfbG9nZ2lu
ZywKLSAgICBqaW50IG5hdGl2ZVNldmVyaXR5KSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxKTklMb2dT
aW5rPiYgam5pX2xvZ19zaW5rID0gR2V0U3RhdGljT2JqZWN0cygpLmpuaV9sb2dfc2luazsKLQot
ICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgTG9nU2luaywgcmVtb3ZlIGl0IGZyb20gTG9nTWVz
c2FnZS4KLSAgaWYgKGpuaV9sb2dfc2luaykgewotICAgIHJ0Yzo6TG9nTWVzc2FnZTo6UmVtb3Zl
TG9nVG9TdHJlYW0oam5pX2xvZ19zaW5rLmdldCgpKTsKLSAgfQotICBqbmlfbG9nX3NpbmsgPSBz
dGQ6Om1ha2VfdW5pcXVlPEpOSUxvZ1Npbms+KGpuaSwgal9sb2dnaW5nKTsKLSAgcnRjOjpMb2dN
ZXNzYWdlOjpBZGRMb2dUb1N0cmVhbSgKLSAgICAgIGpuaV9sb2dfc2luay5nZXQoKSwgc3RhdGlj
X2Nhc3Q8cnRjOjpMb2dnaW5nU2V2ZXJpdHk+KG5hdGl2ZVNldmVyaXR5KSk7Ci0gIHJ0Yzo6TG9n
TWVzc2FnZTo6TG9nVG9EZWJ1ZyhydGM6OkxTX05PTkUpOwotfQotCi1zdGF0aWMgdm9pZCBKTklf
UGVlckNvbm5lY3Rpb25GYWN0b3J5X0RlbGV0ZUxvZ2dhYmxlKEpOSUVudiogam5pKSB7Ci0gIHN0
ZDo6dW5pcXVlX3B0cjxKTklMb2dTaW5rPiYgam5pX2xvZ19zaW5rID0gR2V0U3RhdGljT2JqZWN0
cygpLmpuaV9sb2dfc2luazsKLQotICBpZiAoam5pX2xvZ19zaW5rKSB7Ci0gICAgcnRjOjpMb2dN
ZXNzYWdlOjpSZW1vdmVMb2dUb1N0cmVhbShqbmlfbG9nX3NpbmsuZ2V0KCkpOwotICAgIGpuaV9s
b2dfc2luay5yZXNldCgpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9QZWVyQ29ubmVjdGlv
bkZhY3RvcnlfUHJpbnRTdGFja1RyYWNlKEpOSUVudiogZW52LCBqaW50IHRpZCkgewotICBSVENf
TE9HKExTX1dBUk5JTkcpIDw8IFN0YWNrVHJhY2VUb1N0cmluZyhHZXRTdGFja1RyYWNlKHRpZCkp
OwotfQotCi1zdGF0aWMgdm9pZCBKTklfUGVlckNvbm5lY3Rpb25GYWN0b3J5X1ByaW50U3RhY2tU
cmFjZXNPZlJlZ2lzdGVyZWRUaHJlYWRzKAotICAgIEpOSUVudiogZW52KSB7Ci0gIFByaW50U3Rh
Y2tUcmFjZXNPZlJlZ2lzdGVyZWRUaHJlYWRzKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkK
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcGVlcl9jb25uZWN0
aW9uX2ZhY3RvcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcGVlcl9jb25uZWN0aW9uX2ZhY3RvcnkuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA0MzUyZjQyNWZjNDNhZDY0MTNmMTEwMWM4ZTJkZTJh
Nzk5M2FlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
am5pL3BjL3BlZXJfY29ubmVjdGlvbl9mYWN0b3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklf
UENfUEVFUl9DT05ORUNUSU9OX0ZBQ1RPUllfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfU1JDX0pO
SV9QQ19QRUVSX0NPTk5FQ1RJT05fRkFDVE9SWV9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5j
bHVkZSAiYXBpL3BlZXJfY29ubmVjdGlvbl9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJydGNfYmFz
ZS90aHJlYWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8g
Q3JlYXRlcyBqYXZhIFBlZXJDb25uZWN0aW9uRmFjdG9yeSB3aXRoIHNwZWNpZmllZCB8cGNmfC4K
LWpvYmplY3QgTmF0aXZlVG9KYXZhUGVlckNvbm5lY3Rpb25GYWN0b3J5KAotICAgIEpOSUVudiog
am5pLAotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlBlZXJDb25uZWN0aW9uRmFjdG9y
eUludGVyZmFjZT4gcGNmLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gbmV0d29y
a190aHJlYWQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiB3b3JrZXJfdGhyZWFk
LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gc2lnbmFsaW5nX3RocmVhZCwKLSAg
ICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29ya19tb25pdG9yX2ZhY3RvcnkgPSBu
dWxscHRyKTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Ywot
Ci0jZW5kaWYgIC8vIFNES19BTkRST0lEX1NSQ19KTklfUENfUEVFUl9DT05ORUNUSU9OX0ZBQ1RP
UllfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRjX2NlcnRpZmljYXRlLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9y
dGNfY2VydGlmaWNhdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMDUzMjRh
Yzg5ODE2YjkyZGRjOGYxNDdhZWIxYWI3ODAzNDEzMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfY2VydGlmaWNhdGUuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfY2VydGlmaWNhdGUuaCIKLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9zcmMvam5pL3BjL2ljZV9jYW5kaWRhdGUuaCIKLQotI2luY2x1ZGUgInJ0Y19iYXNl
L3JlZl9jb3VudC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3J0Y19jZXJ0aWZpY2F0ZS5oIgotI2lu
Y2x1ZGUgInJ0Y19iYXNlL3J0Y19jZXJ0aWZpY2F0ZV9nZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVlcmNvbm5lY3Rpb25fam5pL1J0Y0NlcnRpZmljYXRlUGVt
X2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMu
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLXJ0Yzo6UlRDQ2VydGlmaWNhdGVQRU0g
SmF2YVRvTmF0aXZlUlRDQ2VydGlmaWNhdGVQRU0oCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29u
c3QgSmF2YVJlZjxqb2JqZWN0PiYgal9ydGNfY2VydGlmaWNhdGUpIHsKLSAgU2NvcGVkSmF2YUxv
Y2FsUmVmPGpzdHJpbmc+IHByaXZhdGVrZXlfZmllbGQgPQotICAgICAgSmF2YV9SdGNDZXJ0aWZp
Y2F0ZVBlbV9nZXRQcml2YXRlS2V5KGpuaSwgal9ydGNfY2VydGlmaWNhdGUpOwotICBTY29wZWRK
YXZhTG9jYWxSZWY8anN0cmluZz4gY2VydGlmaWNhdGVfZmllbGQgPQotICAgICAgSmF2YV9SdGND
ZXJ0aWZpY2F0ZVBlbV9nZXRDZXJ0aWZpY2F0ZShqbmksIGpfcnRjX2NlcnRpZmljYXRlKTsKLSAg
cmV0dXJuIHJ0Yzo6UlRDQ2VydGlmaWNhdGVQRU0oSmF2YVRvTmF0aXZlU3RyaW5nKGpuaSwgcHJp
dmF0ZWtleV9maWVsZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphdmFUb05h
dGl2ZVN0cmluZyhqbmksIGNlcnRpZmljYXRlX2ZpZWxkKSk7Ci19Ci0KLVNjb3BlZEphdmFMb2Nh
bFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFSVENDZXJ0aWZpY2F0ZVBFTSgKLSAgICBKTklFbnYq
IGpuaSwKLSAgICBjb25zdCBydGM6OlJUQ0NlcnRpZmljYXRlUEVNJiBjZXJ0aWZpY2F0ZSkgewot
ICByZXR1cm4gSmF2YV9SdGNDZXJ0aWZpY2F0ZVBlbV9Db25zdHJ1Y3RvcigKLSAgICAgIGpuaSwg
TmF0aXZlVG9KYXZhU3RyaW5nKGpuaSwgY2VydGlmaWNhdGUucHJpdmF0ZV9rZXkoKSksCi0gICAg
ICBOYXRpdmVUb0phdmFTdHJpbmcoam5pLCBjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZSgpKSk7Ci19
Ci0KLXN0YXRpYyBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1J0Y0NlcnRpZmljYXRl
UGVtX0dlbmVyYXRlQ2VydGlmaWNhdGUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2
YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2tleV90eXBlLAotICAgIGpsb25nIGpfZXhwaXJlcykgewot
ICBydGM6OktleVR5cGUga2V5X3R5cGUgPSBKYXZhVG9OYXRpdmVLZXlUeXBlKGpuaSwgal9rZXlf
dHlwZSk7Ci0gIHVpbnQ2NF90IGV4cGlyZXMgPSAodWludDY0X3Qpal9leHBpcmVzOwotICBydGM6
OnNjb3BlZF9yZWZwdHI8cnRjOjpSVENDZXJ0aWZpY2F0ZT4gY2VydGlmaWNhdGUgPQotICAgICAg
cnRjOjpSVENDZXJ0aWZpY2F0ZUdlbmVyYXRvcjo6R2VuZXJhdGVDZXJ0aWZpY2F0ZSgKLSAgICAg
ICAgICBydGM6OktleVBhcmFtcyhrZXlfdHlwZSksIGV4cGlyZXMpOwotICBydGM6OlJUQ0NlcnRp
ZmljYXRlUEVNIHBlbSA9IGNlcnRpZmljYXRlLT5Ub1BFTSgpOwotICByZXR1cm4gSmF2YV9SdGND
ZXJ0aWZpY2F0ZVBlbV9Db25zdHJ1Y3RvcigKLSAgICAgIGpuaSwgTmF0aXZlVG9KYXZhU3RyaW5n
KGpuaSwgcGVtLnByaXZhdGVfa2V5KCkpLAotICAgICAgTmF0aXZlVG9KYXZhU3RyaW5nKGpuaSwg
cGVtLmNlcnRpZmljYXRlKCkpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfY2VydGlmaWNhdGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvcGMvcnRjX2NlcnRpZmljYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkx
YTQxM2NkMzc4Y2FlMTc0NmZlOGFiMTYyMTM5MTlmYWFjZjVjMjUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfY2VydGlmaWNhdGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5k
ZWYgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19SVENfQ0VSVElGSUNBVEVfSF8KLSNkZWZpbmUgU0RL
X0FORFJPSURfU1JDX0pOSV9QQ19SVENfQ0VSVElGSUNBVEVfSF8KLQotI2luY2x1ZGUgInJ0Y19i
YXNlL3JlZl9jb3VudC5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3J0Y19jZXJ0aWZpY2F0ZS5oIgot
I2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJy
dGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLXJ0Yzo6UlRDQ2VydGlmaWNhdGVQRU0gSmF2YVRvTmF0
aXZlUlRDQ2VydGlmaWNhdGVQRU0oCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJl
Zjxqb2JqZWN0PiYgal9ydGNfY2VydGlmaWNhdGUpOwotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9i
amVjdD4gTmF0aXZlVG9KYXZhUlRDQ2VydGlmaWNhdGVQRU0oCi0gICAgSk5JRW52KiBlbnYsCi0g
ICAgY29uc3QgcnRjOjpSVENDZXJ0aWZpY2F0ZVBFTSYgY2VydGlmaWNhdGUpOwotCi19ICAvLyBu
YW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FO
RFJPSURfU1JDX0pOSV9QQ19SVENfQ0VSVElGSUNBVEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMv
cnRjX3N0YXRzX2NvbGxlY3Rvcl9jYWxsYmFja193cmFwcGVyLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfc3Rh
dHNfY29sbGVjdG9yX2NhbGxiYWNrX3dyYXBwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGIzMzRiYjRhNzJiNGVjN2MxYzk0YWU4ZTE5ZWY1OTc2N2Y5YzAzN2QuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfc3RhdHNf
Y29sbGVjdG9yX2NhbGxiYWNrX3dyYXBwZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkv
cGMvcnRjX3N0YXRzX2NvbGxlY3Rvcl9jYWxsYmFja193cmFwcGVyLmgiCi0KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAicnRjX2Jhc2Uvc3RyaW5nX2Vu
Y29kZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9leHRlcm5hbF9jbGFzc2Vz
X2puaS9CaWdJbnRlZ2VyX2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9w
ZWVyY29ubmVjdGlvbl9qbmkvUlRDU3RhdHNDb2xsZWN0b3JDYWxsYmFja19qbmkuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVlcmNvbm5lY3Rpb25fam5pL1JUQ1N0YXRzUmVw
b3J0X2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF9wZWVyY29ubmVjdGlv
bl9qbmkvUlRDU3RhdHNfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9q
bmkvamF2YV90eXBlcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewot
Ci1uYW1lc3BhY2UgewotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZh
QmlnSW50ZWdlcihKTklFbnYqIGVudiwgdWludDY0X3QgdSkgewotICByZXR1cm4gSk5JX0JpZ0lu
dGVnZXI6OkphdmFfQmlnSW50ZWdlcl9Db25zdHJ1Y3RvckpNQklfSkxTKAotICAgICAgZW52LCBO
YXRpdmVUb0phdmFTdHJpbmcoZW52LCBydGM6OlRvU3RyaW5nKHUpKSk7Ci19Ci0KLVNjb3BlZEph
dmFMb2NhbFJlZjxqb2JqZWN0QXJyYXk+IE5hdGl2ZVRvSmF2YUJpZ0ludGVnZXJBcnJheSgKLSAg
ICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50NjRfdD4mIGNvbnRhaW5l
cikgewotICByZXR1cm4gTmF0aXZlVG9KYXZhT2JqZWN0QXJyYXkoCi0gICAgICBlbnYsIGNvbnRh
aW5lciwgamF2YV9tYXRoX0JpZ0ludGVnZXJfY2xhenooZW52KSwgJk5hdGl2ZVRvSmF2YUJpZ0lu
dGVnZXIpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTWVtYmVyVG9KYXZhKAot
ICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IFJUQ1N0YXRzTWVtYmVySW50ZXJmYWNlJiBtZW1i
ZXIpIHsKLSAgc3dpdGNoIChtZW1iZXIudHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTdGF0c01lbWJl
ckludGVyZmFjZTo6a0Jvb2w6Ci0gICAgICByZXR1cm4gTmF0aXZlVG9KYXZhQm9vbGVhbihlbnYs
ICptZW1iZXIuY2FzdF90bzxSVENTdGF0c01lbWJlcjxib29sPj4oKSk7Ci0KLSAgICBjYXNlIFJU
Q1N0YXRzTWVtYmVySW50ZXJmYWNlOjprSW50MzI6Ci0gICAgICByZXR1cm4gTmF0aXZlVG9KYXZh
SW50ZWdlcihlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWVtYmVyLmNh
c3RfdG88UlRDU3RhdHNNZW1iZXI8aW50MzJfdD4+KCkpOwotCi0gICAgY2FzZSBSVENTdGF0c01l
bWJlckludGVyZmFjZTo6a1VpbnQzMjoKLSAgICAgIHJldHVybiBOYXRpdmVUb0phdmFMb25nKGVu
diwgKm1lbWJlci5jYXN0X3RvPFJUQ1N0YXRzTWVtYmVyPHVpbnQzMl90Pj4oKSk7Ci0KLSAgICBj
YXNlIFJUQ1N0YXRzTWVtYmVySW50ZXJmYWNlOjprSW50NjQ6Ci0gICAgICByZXR1cm4gTmF0aXZl
VG9KYXZhTG9uZyhlbnYsICptZW1iZXIuY2FzdF90bzxSVENTdGF0c01lbWJlcjxpbnQ2NF90Pj4o
KSk7Ci0KLSAgICBjYXNlIFJUQ1N0YXRzTWVtYmVySW50ZXJmYWNlOjprVWludDY0OgotICAgICAg
cmV0dXJuIE5hdGl2ZVRvSmF2YUJpZ0ludGVnZXIoCi0gICAgICAgICAgZW52LCAqbWVtYmVyLmNh
c3RfdG88UlRDU3RhdHNNZW1iZXI8dWludDY0X3Q+PigpKTsKLQotICAgIGNhc2UgUlRDU3RhdHNN
ZW1iZXJJbnRlcmZhY2U6OmtEb3VibGU6Ci0gICAgICByZXR1cm4gTmF0aXZlVG9KYXZhRG91Ymxl
KGVudiwgKm1lbWJlci5jYXN0X3RvPFJUQ1N0YXRzTWVtYmVyPGRvdWJsZT4+KCkpOwotCi0gICAg
Y2FzZSBSVENTdGF0c01lbWJlckludGVyZmFjZTo6a1N0cmluZzoKLSAgICAgIHJldHVybiBOYXRp
dmVUb0phdmFTdHJpbmcoZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWVt
YmVyLmNhc3RfdG88UlRDU3RhdHNNZW1iZXI8c3RkOjpzdHJpbmc+PigpKTsKLQotICAgIGNhc2Ug
UlRDU3RhdHNNZW1iZXJJbnRlcmZhY2U6OmtTZXF1ZW5jZUJvb2w6Ci0gICAgICByZXR1cm4gTmF0
aXZlVG9KYXZhQm9vbGVhbkFycmF5KAotICAgICAgICAgIGVudiwgKm1lbWJlci5jYXN0X3RvPFJU
Q1N0YXRzTWVtYmVyPHN0ZDo6dmVjdG9yPGJvb2w+Pj4oKSk7Ci0KLSAgICBjYXNlIFJUQ1N0YXRz
TWVtYmVySW50ZXJmYWNlOjprU2VxdWVuY2VJbnQzMjoKLSAgICAgIHJldHVybiBOYXRpdmVUb0ph
dmFJbnRlZ2VyQXJyYXkoCi0gICAgICAgICAgZW52LCAqbWVtYmVyLmNhc3RfdG88UlRDU3RhdHNN
ZW1iZXI8c3RkOjp2ZWN0b3I8aW50MzJfdD4+PigpKTsKLQotICAgIGNhc2UgUlRDU3RhdHNNZW1i
ZXJJbnRlcmZhY2U6OmtTZXF1ZW5jZVVpbnQzMjogewotICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
dWludDMyX3Q+JiB2ID0KLSAgICAgICAgICAqbWVtYmVyLmNhc3RfdG88UlRDU3RhdHNNZW1iZXI8
c3RkOjp2ZWN0b3I8dWludDMyX3Q+Pj4oKTsKLSAgICAgIHJldHVybiBOYXRpdmVUb0phdmFMb25n
QXJyYXkoZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rv
cjxpbnQ2NF90Pih2LmJlZ2luKCksIHYuZW5kKCkpKTsKLSAgICB9Ci0gICAgY2FzZSBSVENTdGF0
c01lbWJlckludGVyZmFjZTo6a1NlcXVlbmNlSW50NjQ6Ci0gICAgICByZXR1cm4gTmF0aXZlVG9K
YXZhTG9uZ0FycmF5KAotICAgICAgICAgIGVudiwgKm1lbWJlci5jYXN0X3RvPFJUQ1N0YXRzTWVt
YmVyPHN0ZDo6dmVjdG9yPGludDY0X3Q+Pj4oKSk7Ci0KLSAgICBjYXNlIFJUQ1N0YXRzTWVtYmVy
SW50ZXJmYWNlOjprU2VxdWVuY2VVaW50NjQ6Ci0gICAgICByZXR1cm4gTmF0aXZlVG9KYXZhQmln
SW50ZWdlckFycmF5KAotICAgICAgICAgIGVudiwgKm1lbWJlci5jYXN0X3RvPFJUQ1N0YXRzTWVt
YmVyPHN0ZDo6dmVjdG9yPHVpbnQ2NF90Pj4+KCkpOwotCi0gICAgY2FzZSBSVENTdGF0c01lbWJl
ckludGVyZmFjZTo6a1NlcXVlbmNlRG91YmxlOgotICAgICAgcmV0dXJuIE5hdGl2ZVRvSmF2YURv
dWJsZUFycmF5KAotICAgICAgICAgIGVudiwgKm1lbWJlci5jYXN0X3RvPFJUQ1N0YXRzTWVtYmVy
PHN0ZDo6dmVjdG9yPGRvdWJsZT4+PigpKTsKLQotICAgIGNhc2UgUlRDU3RhdHNNZW1iZXJJbnRl
cmZhY2U6OmtTZXF1ZW5jZVN0cmluZzoKLSAgICAgIHJldHVybiBOYXRpdmVUb0phdmFTdHJpbmdB
cnJheSgKLSAgICAgICAgICBlbnYsICptZW1iZXIuY2FzdF90bzxSVENTdGF0c01lbWJlcjxzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4+PigpKTsKLSAgfQotICBSVENfTk9UUkVBQ0hFRCgpOwotICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRv
SmF2YVJ0Y1N0YXRzKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJUQ1N0YXRzJiBzdGF0cykgewotICBKYXZhTWFwQnVp
bGRlciBidWlsZGVyKGVudik7Ci0gIGZvciAoYXV0byogY29uc3QgbWVtYmVyIDogc3RhdHMuTWVt
YmVycygpKSB7Ci0gICAgaWYgKCFtZW1iZXItPmlzX2RlZmluZWQoKSkKLSAgICAgIGNvbnRpbnVl
OwotICAgIGJ1aWxkZXIucHV0KE5hdGl2ZVRvSmF2YVN0cmluZyhlbnYsIG1lbWJlci0+bmFtZSgp
KSwKLSAgICAgICAgICAgICAgICBNZW1iZXJUb0phdmEoZW52LCAqbWVtYmVyKSk7Ci0gIH0KLSAg
cmV0dXJuIEphdmFfUlRDU3RhdHNfY3JlYXRlKAotICAgICAgZW52LCBzdGF0cy50aW1lc3RhbXBf
dXMoKSwgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgc3RhdHMudHlwZSgpKSwKLSAgICAgIE5hdGl2
ZVRvSmF2YVN0cmluZyhlbnYsIHN0YXRzLmlkKCkpLCBidWlsZGVyLkdldEphdmFNYXAoKSk7Ci19
Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFSdGNTdGF0c1JlcG9y
dCgKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBydGM6OnNjb3BlZF9yZWZwdHI8Y29uc3Qg
UlRDU3RhdHNSZXBvcnQ+JiByZXBvcnQpIHsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+
IGpfc3RhdHNfbWFwID0KLSAgICAgIE5hdGl2ZVRvSmF2YU1hcChlbnYsICpyZXBvcnQsIFtdKEpO
SUVudiogZW52LCBjb25zdCBSVENTdGF0cyYgc3RhdHMpIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKE5hdGl2ZVRvSmF2YVN0cmluZyhlbnYsIHN0YXRzLmlkKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVG9KYXZhUnRjU3RhdHMoZW52LCBzdGF0cykpOwot
ICAgICAgfSk7Ci0gIHJldHVybiBKYXZhX1JUQ1N0YXRzUmVwb3J0X2NyZWF0ZShlbnYsIHJlcG9y
dC0+dGltZXN0YW1wX3VzKCksIGpfc3RhdHNfbWFwKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0K
LVJUQ1N0YXRzQ29sbGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjpSVENTdGF0c0NvbGxlY3RvckNhbGxi
YWNrV3JhcHBlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+
JiBqX2NhbGxiYWNrKQotICAgIDogal9jYWxsYmFja19nbG9iYWxfKGpuaSwgal9jYWxsYmFjaykg
e30KLQotUlRDU3RhdHNDb2xsZWN0b3JDYWxsYmFja1dyYXBwZXI6On5SVENTdGF0c0NvbGxlY3Rv
ckNhbGxiYWNrV3JhcHBlcigpID0gZGVmYXVsdDsKLQotdm9pZCBSVENTdGF0c0NvbGxlY3RvckNh
bGxiYWNrV3JhcHBlcjo6T25TdGF0c0RlbGl2ZXJlZCgKLSAgICBjb25zdCBydGM6OnNjb3BlZF9y
ZWZwdHI8Y29uc3QgUlRDU3RhdHNSZXBvcnQ+JiByZXBvcnQpIHsKLSAgSk5JRW52KiBqbmkgPSBB
dHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgSmF2YV9SVENTdGF0c0NvbGxlY3RvckNh
bGxiYWNrX29uU3RhdHNEZWxpdmVyZWQoCi0gICAgICBqbmksIGpfY2FsbGJhY2tfZ2xvYmFsXywg
TmF0aXZlVG9KYXZhUnRjU3RhdHNSZXBvcnQoam5pLCByZXBvcnQpKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9y
dGNfc3RhdHNfY29sbGVjdG9yX2NhbGxiYWNrX3dyYXBwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRjX3N0YXRz
X2NvbGxlY3Rvcl9jYWxsYmFja193cmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDUwZmFkMTg0NGQzMjMzNzgzODJlOGNmOTM4NzkwNmVhOGMzYjA0ZmQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydGNfc3RhdHNfY29s
bGVjdG9yX2NhbGxiYWNrX3dyYXBwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19SVENf
U1RBVFNfQ09MTEVDVE9SX0NBTExCQUNLX1dSQVBQRVJfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURf
U1JDX0pOSV9QQ19SVENfU1RBVFNfQ09MTEVDVE9SX0NBTExCQUNLX1dSQVBQRVJfSF8KLQotI2lu
Y2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAiYXBpL3BlZXJfY29ubmVjdGlvbl9pbnRlcmZhY2Uu
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIEFkYXB0ZXIgZm9yIGEgSmF2YSBS
VENTdGF0c0NvbGxlY3RvckNhbGxiYWNrIHByZXNlbnRpbmcgYSBDKysKLS8vIFJUQ1N0YXRzQ29s
bGVjdG9yQ2FsbGJhY2sgYW5kIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBmcm9tIEMrKyBiYWNr
IHRvCi0vLyBKYXZhLgotY2xhc3MgUlRDU3RhdHNDb2xsZWN0b3JDYWxsYmFja1dyYXBwZXIgOiBw
dWJsaWMgUlRDU3RhdHNDb2xsZWN0b3JDYWxsYmFjayB7Ci0gcHVibGljOgotICBSVENTdGF0c0Nv
bGxlY3RvckNhbGxiYWNrV3JhcHBlcihKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9jYWxsYmFjayk7Ci0gIH5S
VENTdGF0c0NvbGxlY3RvckNhbGxiYWNrV3JhcHBlcigpIG92ZXJyaWRlOwotCi0gIHZvaWQgT25T
dGF0c0RlbGl2ZXJlZCgKLSAgICAgIGNvbnN0IHJ0Yzo6c2NvcGVkX3JlZnB0cjxjb25zdCBSVENT
dGF0c1JlcG9ydD4mIHJlcG9ydCkgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICBjb25zdCBTY29w
ZWRKYXZhR2xvYmFsUmVmPGpvYmplY3Q+IGpfY2FsbGJhY2tfZ2xvYmFsXzsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtf
QU5EUk9JRF9TUkNfSk5JX1BDX1JUQ19TVEFUU19DT0xMRUNUT1JfQ0FMTEJBQ0tfV1JBUFBFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfcGFyYW1ldGVycy5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3Bh
cmFtZXRlcnMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMzk0YWIzYTEwNGZi
ZWYwOTRhMTY2ODA0ZGYwOTg0MjQwMTNhZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfcGFyYW1ldGVycy5jYworKysgL2Rldi9udWxs
CkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS9wYy9ydHBfcGFyYW1ldGVycy5oIgotCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvZ2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9SdHBQYXJhbWV0ZXJzX2puaS5oIgotI2lu
Y2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNsdWRl
ICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS9wYy9tZWRpYV9zdHJlYW1fdHJhY2suaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7
Ci1uYW1lc3BhY2Ugam5pIHsKLQotbmFtZXNwYWNlIHsKLQotd2VicnRjOjpEZWdyYWRhdGlvblBy
ZWZlcmVuY2UgSmF2YVRvTmF0aXZlRGVncmFkYXRpb25QcmVmZXJlbmNlKAotICAgIEpOSUVudiog
am5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZGVncmFkYXRpb25fcHJlZmVyZW5j
ZSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoam5pLCBqX2Rl
Z3JhZGF0aW9uX3ByZWZlcmVuY2UpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkRJU0FCTEVEIikK
LSAgICByZXR1cm4gd2VicnRjOjpEZWdyYWRhdGlvblByZWZlcmVuY2U6OkRJU0FCTEVEOwotCi0g
IGlmIChlbnVtX25hbWUgPT0gIk1BSU5UQUlOX0ZSQU1FUkFURSIpCi0gICAgcmV0dXJuIHdlYnJ0
Yzo6RGVncmFkYXRpb25QcmVmZXJlbmNlOjpNQUlOVEFJTl9GUkFNRVJBVEU7Ci0KLSAgaWYgKGVu
dW1fbmFtZSA9PSAiTUFJTlRBSU5fUkVTT0xVVElPTiIpCi0gICAgcmV0dXJuIHdlYnJ0Yzo6RGVn
cmFkYXRpb25QcmVmZXJlbmNlOjpNQUlOVEFJTl9SRVNPTFVUSU9OOwotCi0gIGlmIChlbnVtX25h
bWUgPT0gIkJBTEFOQ0VEIikKLSAgICByZXR1cm4gd2VicnRjOjpEZWdyYWRhdGlvblByZWZlcmVu
Y2U6OkJBTEFOQ0VEOwotCi0gIFJUQ19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0ZWQgRGVncmFk
YXRpb25QcmVmZXJlbmNlIGVudW1fbmFtZSAiCi0gICAgICAgICAgICAgICAgICAgPDwgZW51bV9u
YW1lOwotICByZXR1cm4gd2VicnRjOjpEZWdyYWRhdGlvblByZWZlcmVuY2U6OkRJU0FCTEVEOwot
fQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhUnRwRW5jb2RpbmdQ
YXJhbWV0ZXIoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3QgUnRwRW5jb2RpbmdQYXJhbWV0
ZXJzJiBlbmNvZGluZykgewotICByZXR1cm4gSmF2YV9FbmNvZGluZ19Db25zdHJ1Y3RvcigKLSAg
ICAgIGVudiwgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgZW5jb2RpbmcucmlkKSwgZW5jb2Rpbmcu
YWN0aXZlLAotICAgICAgTmF0aXZlVG9KYXZhSW50ZWdlcihlbnYsIGVuY29kaW5nLm1heF9iaXRy
YXRlX2JwcyksCi0gICAgICBOYXRpdmVUb0phdmFJbnRlZ2VyKGVudiwgZW5jb2RpbmcubWluX2Jp
dHJhdGVfYnBzKSwKLSAgICAgIE5hdGl2ZVRvSmF2YUludGVnZXIoZW52LCBlbmNvZGluZy5tYXhf
ZnJhbWVyYXRlKSwKLSAgICAgIE5hdGl2ZVRvSmF2YUludGVnZXIoZW52LCBlbmNvZGluZy5udW1f
dGVtcG9yYWxfbGF5ZXJzKSwKLSAgICAgIE5hdGl2ZVRvSmF2YURvdWJsZShlbnYsIGVuY29kaW5n
LnNjYWxlX3Jlc29sdXRpb25fZG93bl9ieSksCi0gICAgICBlbmNvZGluZy5zc3JjID8gTmF0aXZl
VG9KYXZhTG9uZyhlbnYsICplbmNvZGluZy5zc3JjKSA6IG51bGxwdHIpOwotfQotCi1TY29wZWRK
YXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhUnRwQ29kZWNQYXJhbWV0ZXIoCi0gICAg
Sk5JRW52KiBlbnYsCi0gICAgY29uc3QgUnRwQ29kZWNQYXJhbWV0ZXJzJiBjb2RlYykgewotICBy
ZXR1cm4gSmF2YV9Db2RlY19Db25zdHJ1Y3RvcihlbnYsIGNvZGVjLnBheWxvYWRfdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgY29k
ZWMubmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRvSmF2YU1l
ZGlhVHlwZShlbnYsIGNvZGVjLmtpbmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYXRpdmVUb0phdmFJbnRlZ2VyKGVudiwgY29kZWMuY2xvY2tfcmF0ZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRvSmF2YUludGVnZXIoZW52LCBjb2RlYy5udW1f
Y2hhbm5lbHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmVUb0phdmFT
dHJpbmdNYXAoZW52LCBjb2RlYy5wYXJhbWV0ZXJzKSk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiBOYXRpdmVUb0phdmFSdHBSdGNwUGFyYW1ldGVycygKLSAgICBKTklFbnYqIGVu
diwKLSAgICBjb25zdCBSdGNwUGFyYW1ldGVycyYgcnRjcCkgewotICByZXR1cm4gSmF2YV9SdGNw
X0NvbnN0cnVjdG9yKGVudiwgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgcnRjcC5jbmFtZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjcC5yZWR1Y2VkX3NpemUpOwotfQotCi1T
Y29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhUnRwSGVhZGVyRXh0ZW5zaW9u
UGFyYW1ldGVyKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IFJ0cEV4dGVuc2lvbiYgZXh0
ZW5zaW9uKSB7Ci0gIHJldHVybiBKYXZhX0hlYWRlckV4dGVuc2lvbl9Db25zdHJ1Y3RvcigKLSAg
ICAgIGVudiwgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgZXh0ZW5zaW9uLnVyaSksIGV4dGVuc2lv
bi5pZCwKLSAgICAgIGV4dGVuc2lvbi5lbmNyeXB0KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0K
LVJ0cEVuY29kaW5nUGFyYW1ldGVycyBKYXZhVG9OYXRpdmVSdHBFbmNvZGluZ1BhcmFtZXRlcnMo
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9lbmNvZGlu
Z19wYXJhbWV0ZXJzKSB7Ci0gIFJ0cEVuY29kaW5nUGFyYW1ldGVycyBlbmNvZGluZzsKLSAgU2Nv
cGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+IGpfcmlkID0KLSAgICAgIEphdmFfRW5jb2RpbmdfZ2V0
UmlkKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJzKTsKLSAgaWYgKCFJc051bGwoam5pLCBqX3Jp
ZCkpIHsKLSAgICBlbmNvZGluZy5yaWQgPSBKYXZhVG9OYXRpdmVTdHJpbmcoam5pLCBqX3JpZCk7
Ci0gIH0KLSAgZW5jb2RpbmcuYWN0aXZlID0gSmF2YV9FbmNvZGluZ19nZXRBY3RpdmUoam5pLCBq
X2VuY29kaW5nX3BhcmFtZXRlcnMpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9t
YXhfYml0cmF0ZSA9Ci0gICAgICBKYXZhX0VuY29kaW5nX2dldE1heEJpdHJhdGVCcHMoam5pLCBq
X2VuY29kaW5nX3BhcmFtZXRlcnMpOwotICBlbmNvZGluZy5tYXhfYml0cmF0ZV9icHMgPSBKYXZh
VG9OYXRpdmVPcHRpb25hbEludChqbmksIGpfbWF4X2JpdHJhdGUpOwotICBTY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gal9taW5fYml0cmF0ZSA9Ci0gICAgICBKYXZhX0VuY29kaW5nX2dldE1p
bkJpdHJhdGVCcHMoam5pLCBqX2VuY29kaW5nX3BhcmFtZXRlcnMpOwotICBlbmNvZGluZy5taW5f
Yml0cmF0ZV9icHMgPSBKYXZhVG9OYXRpdmVPcHRpb25hbEludChqbmksIGpfbWluX2JpdHJhdGUp
OwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9tYXhfZnJhbWVyYXRlID0KLSAgICAg
IEphdmFfRW5jb2RpbmdfZ2V0TWF4RnJhbWVyYXRlKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJz
KTsKLSAgZW5jb2RpbmcubWF4X2ZyYW1lcmF0ZSA9IEphdmFUb05hdGl2ZU9wdGlvbmFsSW50KGpu
aSwgal9tYXhfZnJhbWVyYXRlKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfbnVt
X3RlbXBvcmFsX2xheWVycyA9Ci0gICAgICBKYXZhX0VuY29kaW5nX2dldE51bVRlbXBvcmFsTGF5
ZXJzKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJzKTsKLSAgZW5jb2RpbmcubnVtX3RlbXBvcmFs
X2xheWVycyA9Ci0gICAgICBKYXZhVG9OYXRpdmVPcHRpb25hbEludChqbmksIGpfbnVtX3RlbXBv
cmFsX2xheWVycyk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX3NjYWxlX3Jlc29s
dXRpb25fZG93bl9ieSA9Ci0gICAgICBKYXZhX0VuY29kaW5nX2dldFNjYWxlUmVzb2x1dGlvbkRv
d25CeShqbmksIGpfZW5jb2RpbmdfcGFyYW1ldGVycyk7Ci0gIGVuY29kaW5nLnNjYWxlX3Jlc29s
dXRpb25fZG93bl9ieSA9Ci0gICAgICBKYXZhVG9OYXRpdmVPcHRpb25hbERvdWJsZShqbmksIGpf
c2NhbGVfcmVzb2x1dGlvbl9kb3duX2J5KTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+
IGpfc3NyYyA9Ci0gICAgICBKYXZhX0VuY29kaW5nX2dldFNzcmMoam5pLCBqX2VuY29kaW5nX3Bh
cmFtZXRlcnMpOwotICBpZiAoIUlzTnVsbChqbmksIGpfc3NyYykpCi0gICAgZW5jb2Rpbmcuc3Ny
YyA9IEphdmFUb05hdGl2ZUxvbmcoam5pLCBqX3NzcmMpOwotICByZXR1cm4gZW5jb2Rpbmc7Ci19
Ci0KLVJ0cFBhcmFtZXRlcnMgSmF2YVRvTmF0aXZlUnRwUGFyYW1ldGVycyhKTklFbnYqIGpuaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpv
YmplY3Q+JiBqX3BhcmFtZXRlcnMpIHsKLSAgUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0g
IFNjb3BlZEphdmFMb2NhbFJlZjxqc3RyaW5nPiBqX3RyYW5zYWN0aW9uX2lkID0KLSAgICAgIEph
dmFfUnRwUGFyYW1ldGVyc19nZXRUcmFuc2FjdGlvbklkKGpuaSwgal9wYXJhbWV0ZXJzKTsKLSAg
cGFyYW1ldGVycy50cmFuc2FjdGlvbl9pZCA9IEphdmFUb05hdGl2ZVN0cmluZyhqbmksIGpfdHJh
bnNhY3Rpb25faWQpOwotCi0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2RlZ3JhZGF0
aW9uX3ByZWZlcmVuY2UgPQotICAgICAgSmF2YV9SdHBQYXJhbWV0ZXJzX2dldERlZ3JhZGF0aW9u
UHJlZmVyZW5jZShqbmksIGpfcGFyYW1ldGVycyk7Ci0gIGlmICghSXNOdWxsKGpuaSwgal9kZWdy
YWRhdGlvbl9wcmVmZXJlbmNlKSkgewotICAgIHBhcmFtZXRlcnMuZGVncmFkYXRpb25fcHJlZmVy
ZW5jZSA9Ci0gICAgICAgIEphdmFUb05hdGl2ZURlZ3JhZGF0aW9uUHJlZmVyZW5jZShqbmksIGpf
ZGVncmFkYXRpb25fcHJlZmVyZW5jZSk7Ci0gIH0KLQotICBTY29wZWRKYXZhTG9jYWxSZWY8am9i
amVjdD4gal9ydGNwID0KLSAgICAgIEphdmFfUnRwUGFyYW1ldGVyc19nZXRSdGNwKGpuaSwgal9w
YXJhbWV0ZXJzKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpzdHJpbmc+IGpfcnRjcF9jbmFtZSA9
IEphdmFfUnRjcF9nZXRDbmFtZShqbmksIGpfcnRjcCk7Ci0gIGpib29sZWFuIGpfcnRjcF9yZWR1
Y2VkX3NpemUgPSBKYXZhX1J0Y3BfZ2V0UmVkdWNlZFNpemUoam5pLCBqX3J0Y3ApOwotICBwYXJh
bWV0ZXJzLnJ0Y3AuY25hbWUgPSBKYXZhVG9OYXRpdmVTdHJpbmcoam5pLCBqX3J0Y3BfY25hbWUp
OwotICBwYXJhbWV0ZXJzLnJ0Y3AucmVkdWNlZF9zaXplID0gal9ydGNwX3JlZHVjZWRfc2l6ZTsK
LQotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9oZWFkZXJfZXh0ZW5zaW9ucyA9Ci0g
ICAgICBKYXZhX1J0cFBhcmFtZXRlcnNfZ2V0SGVhZGVyRXh0ZW5zaW9ucyhqbmksIGpfcGFyYW1l
dGVycyk7Ci0gIGZvciAoY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9oZWFkZXJfZXh0ZW5zaW9u
IDoKLSAgICAgICBJdGVyYWJsZShqbmksIGpfaGVhZGVyX2V4dGVuc2lvbnMpKSB7Ci0gICAgUnRw
RXh0ZW5zaW9uIGhlYWRlcl9leHRlbnNpb247Ci0gICAgaGVhZGVyX2V4dGVuc2lvbi51cmkgPSBK
YXZhVG9TdGRTdHJpbmcoCi0gICAgICAgIGpuaSwgSmF2YV9IZWFkZXJFeHRlbnNpb25fZ2V0VXJp
KGpuaSwgal9oZWFkZXJfZXh0ZW5zaW9uKSk7Ci0gICAgaGVhZGVyX2V4dGVuc2lvbi5pZCA9IEph
dmFfSGVhZGVyRXh0ZW5zaW9uX2dldElkKGpuaSwgal9oZWFkZXJfZXh0ZW5zaW9uKTsKLSAgICBo
ZWFkZXJfZXh0ZW5zaW9uLmVuY3J5cHQgPQotICAgICAgICBKYXZhX0hlYWRlckV4dGVuc2lvbl9n
ZXRFbmNyeXB0ZWQoam5pLCBqX2hlYWRlcl9leHRlbnNpb24pOwotICAgIHBhcmFtZXRlcnMuaGVh
ZGVyX2V4dGVuc2lvbnMucHVzaF9iYWNrKGhlYWRlcl9leHRlbnNpb24pOwotICB9Ci0KLSAgLy8g
Q29udmVydCBlbmNvZGluZ3MuCi0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2VuY29k
aW5ncyA9Ci0gICAgICBKYXZhX1J0cFBhcmFtZXRlcnNfZ2V0RW5jb2RpbmdzKGpuaSwgal9wYXJh
bWV0ZXJzKTsKLSAgZm9yIChjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2VuY29kaW5nX3BhcmFt
ZXRlcnMgOgotICAgICAgIEl0ZXJhYmxlKGpuaSwgal9lbmNvZGluZ3MpKSB7Ci0gICAgUnRwRW5j
b2RpbmdQYXJhbWV0ZXJzIGVuY29kaW5nID0KLSAgICAgICAgSmF2YVRvTmF0aXZlUnRwRW5jb2Rp
bmdQYXJhbWV0ZXJzKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJzKTsKLSAgICBwYXJhbWV0ZXJz
LmVuY29kaW5ncy5wdXNoX2JhY2soZW5jb2RpbmcpOwotICB9Ci0KLSAgLy8gQ29udmVydCBjb2Rl
Y3MuCi0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2NvZGVjcyA9Ci0gICAgICBKYXZh
X1J0cFBhcmFtZXRlcnNfZ2V0Q29kZWNzKGpuaSwgal9wYXJhbWV0ZXJzKTsKLSAgZm9yIChjb25z
dCBKYXZhUmVmPGpvYmplY3Q+JiBqX2NvZGVjIDogSXRlcmFibGUoam5pLCBqX2NvZGVjcykpIHsK
LSAgICBSdHBDb2RlY1BhcmFtZXRlcnMgY29kZWM7Ci0gICAgY29kZWMucGF5bG9hZF90eXBlID0g
SmF2YV9Db2RlY19nZXRQYXlsb2FkVHlwZShqbmksIGpfY29kZWMpOwotICAgIGNvZGVjLm5hbWUg
PSBKYXZhVG9TdGRTdHJpbmcoam5pLCBKYXZhX0NvZGVjX2dldE5hbWUoam5pLCBqX2NvZGVjKSk7
Ci0gICAgY29kZWMua2luZCA9IEphdmFUb05hdGl2ZU1lZGlhVHlwZShqbmksIEphdmFfQ29kZWNf
Z2V0S2luZChqbmksIGpfY29kZWMpKTsKLSAgICBjb2RlYy5jbG9ja19yYXRlID0KLSAgICAgICAg
SmF2YVRvTmF0aXZlT3B0aW9uYWxJbnQoam5pLCBKYXZhX0NvZGVjX2dldENsb2NrUmF0ZShqbmks
IGpfY29kZWMpKTsKLSAgICBjb2RlYy5udW1fY2hhbm5lbHMgPQotICAgICAgICBKYXZhVG9OYXRp
dmVPcHRpb25hbEludChqbmksIEphdmFfQ29kZWNfZ2V0TnVtQ2hhbm5lbHMoam5pLCBqX2NvZGVj
KSk7Ci0gICAgYXV0byBwYXJhbWV0ZXJzX21hcCA9Ci0gICAgICAgIEphdmFUb05hdGl2ZVN0cmlu
Z01hcChqbmksIEphdmFfQ29kZWNfZ2V0UGFyYW1ldGVycyhqbmksIGpfY29kZWMpKTsKLSAgICBj
b2RlYy5wYXJhbWV0ZXJzLmluc2VydChwYXJhbWV0ZXJzX21hcC5iZWdpbigpLCBwYXJhbWV0ZXJz
X21hcC5lbmQoKSk7Ci0gICAgcGFyYW1ldGVycy5jb2RlY3MucHVzaF9iYWNrKGNvZGVjKTsKLSAg
fQotICByZXR1cm4gcGFyYW1ldGVyczsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+
IE5hdGl2ZVRvSmF2YVJ0cFBhcmFtZXRlcnMoCi0gICAgSk5JRW52KiBlbnYsCi0gICAgY29uc3Qg
UnRwUGFyYW1ldGVycyYgcGFyYW1ldGVycykgewotICByZXR1cm4gSmF2YV9SdHBQYXJhbWV0ZXJz
X0NvbnN0cnVjdG9yKAotICAgICAgZW52LCBOYXRpdmVUb0phdmFTdHJpbmcoZW52LCBwYXJhbWV0
ZXJzLnRyYW5zYWN0aW9uX2lkKSwKLSAgICAgIHBhcmFtZXRlcnMuZGVncmFkYXRpb25fcHJlZmVy
ZW5jZS5oYXNfdmFsdWUoKQotICAgICAgICAgID8gSmF2YV9EZWdyYWRhdGlvblByZWZlcmVuY2Vf
ZnJvbU5hdGl2ZUluZGV4KAotICAgICAgICAgICAgICAgIGVudiwgc3RhdGljX2Nhc3Q8aW50Pigq
cGFyYW1ldGVycy5kZWdyYWRhdGlvbl9wcmVmZXJlbmNlKSkKLSAgICAgICAgICA6IG51bGxwdHIs
Ci0gICAgICBOYXRpdmVUb0phdmFSdHBSdGNwUGFyYW1ldGVycyhlbnYsIHBhcmFtZXRlcnMucnRj
cCksCi0gICAgICBOYXRpdmVUb0phdmFMaXN0KGVudiwgcGFyYW1ldGVycy5oZWFkZXJfZXh0ZW5z
aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgJk5hdGl2ZVRvSmF2YVJ0cEhlYWRlckV4dGVu
c2lvblBhcmFtZXRlciksCi0gICAgICBOYXRpdmVUb0phdmFMaXN0KGVudiwgcGFyYW1ldGVycy5l
bmNvZGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICZOYXRpdmVUb0phdmFSdHBFbmNvZGlu
Z1BhcmFtZXRlciksCi0gICAgICBOYXRpdmVUb0phdmFMaXN0KGVudiwgcGFyYW1ldGVycy5jb2Rl
Y3MsICZOYXRpdmVUb0phdmFSdHBDb2RlY1BhcmFtZXRlcikpOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF9w
YXJhbWV0ZXJzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF9wYXJhbWV0ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDNiY2QzNDNmYWUyMDQxYzU5Mzk3YWNiZTcyNWU0MzYyODM0ZjM3NjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBf
cGFyYW1ldGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1JUUF9QQVJBTUVURVJTX0hf
Ci0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfUENfUlRQX1BBUkFNRVRFUlNfSF8KLQotI2lu
Y2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAiYXBpL3J0cF9wYXJhbWV0ZXJzLmgiCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvc2NvcGVkX2phdmFfcmVmLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLVJ0cEVuY29kaW5nUGFyYW1ldGVycyBK
YXZhVG9OYXRpdmVSdHBFbmNvZGluZ1BhcmFtZXRlcnMoCi0gICAgSk5JRW52KiBlbnYsCi0gICAg
Y29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9lbmNvZGluZ19wYXJhbWV0ZXJzKTsKLQotUnRwUGFy
YW1ldGVycyBKYXZhVG9OYXRpdmVSdHBQYXJhbWV0ZXJzKEpOSUVudiogam5pLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpf
cGFyYW1ldGVycyk7Ci1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhUnRw
UGFyYW1ldGVycygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBSdHBQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
YwotCi0jZW5kaWYgIC8vIFNES19BTkRST0lEX1NSQ19KTklfUENfUlRQX1BBUkFNRVRFUlNfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nk
ay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3JlY2VpdmVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfcmVjZWl2
ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkN2U5NTQ4NzI0ZTFlNjQ3N2Fi
MWFmZjNhZjllNjY2MDc0NmNlYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfcmVjZWl2ZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3Ny
Yy9qbmkvcGMvcnRwX3JlY2VpdmVyLmgiCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0
ZWRfcGVlcmNvbm5lY3Rpb25fam5pL1J0cFJlY2VpdmVyX2puaS5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9p
ZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9w
Yy9tZWRpYV9zdHJlYW1fdHJhY2suaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3Bj
L3J0cF9wYXJhbWV0ZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7
Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIEFkYXB0ZXIgYmV0d2VlbiB0aGUgQysrIFJ0cFJlY2VpdmVy
T2JzZXJ2ZXJJbnRlcmZhY2UgYW5kIHRoZSBKYXZhCi0vLyBSdHBSZWNlaXZlci5PYnNlcnZlciBp
bnRlcmZhY2UuIFdyYXBzIGFuIGluc3RhbmNlIG9mIHRoZSBKYXZhIGludGVyZmFjZSBhbmQKLS8v
IGRpc3BhdGNoZXMgQysrIGNhbGxiYWNrcyB0byBKYXZhLgotY2xhc3MgUnRwUmVjZWl2ZXJPYnNl
cnZlckpuaSA6IHB1YmxpYyBSdHBSZWNlaXZlck9ic2VydmVySW50ZXJmYWNlIHsKLSBwdWJsaWM6
Ci0gIFJ0cFJlY2VpdmVyT2JzZXJ2ZXJKbmkoSk5JRW52KiBlbnYsIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfb2JzZXJ2ZXIpCi0gICAgICA6IGpfb2JzZXJ2ZXJfZ2xvYmFsXyhlbnYsIGpfb2Jz
ZXJ2ZXIpIHt9Ci0KLSAgflJ0cFJlY2VpdmVyT2JzZXJ2ZXJKbmkoKSBvdmVycmlkZSA9IGRlZmF1
bHQ7Ci0KLSAgdm9pZCBPbkZpcnN0UGFja2V0UmVjZWl2ZWQoY3JpY2tldDo6TWVkaWFUeXBlIG1l
ZGlhX3R5cGUpIG92ZXJyaWRlIHsKLSAgICBKTklFbnYqIGNvbnN0IGVudiA9IEF0dGFjaEN1cnJl
bnRUaHJlYWRJZk5lZWRlZCgpOwotICAgIEphdmFfT2JzZXJ2ZXJfb25GaXJzdFBhY2tldFJlY2Vp
dmVkKGVudiwgal9vYnNlcnZlcl9nbG9iYWxfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5hdGl2ZVRvSmF2YU1lZGlhVHlwZShlbnYsIG1lZGlhX3R5cGUpKTsKLSAg
fQotCi0gcHJpdmF0ZToKLSAgY29uc3QgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBqX29i
c2VydmVyX2dsb2JhbF87Ci19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotU2NvcGVkSmF2YUxvY2Fs
UmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YVJ0cFJlY2VpdmVyKAotICAgIEpOSUVudiogZW52LAot
ICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBSZWNlaXZlckludGVyZmFjZT4gcmVjZWl2ZXIpIHsK
LSAgLy8gUmVjZWl2ZXIgaXMgbm93IG93bmVkIGJ5IEphdmEgb2JqZWN0LCBhbmQgd2lsbCBiZSBm
cmVlZCBmcm9tIHRoZXJlLgotICByZXR1cm4gSmF2YV9SdHBSZWNlaXZlcl9Db25zdHJ1Y3Rvcihl
bnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nRnJvbVBvaW50
ZXIocmVjZWl2ZXIucmVsZWFzZSgpKSk7Ci19Ci0KLUphdmFSdHBSZWNlaXZlckdsb2JhbE93bmVy
OjpKYXZhUnRwUmVjZWl2ZXJHbG9iYWxPd25lcigKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25z
dCBKYXZhUmVmPGpvYmplY3Q+JiBqX3JlY2VpdmVyKQotICAgIDogal9yZWNlaXZlcl8oZW52LCBq
X3JlY2VpdmVyKSB7fQotCi1KYXZhUnRwUmVjZWl2ZXJHbG9iYWxPd25lcjo6SmF2YVJ0cFJlY2Vp
dmVyR2xvYmFsT3duZXIoCi0gICAgSmF2YVJ0cFJlY2VpdmVyR2xvYmFsT3duZXImJiBvdGhlcikg
PSBkZWZhdWx0OwotCi1KYXZhUnRwUmVjZWl2ZXJHbG9iYWxPd25lcjo6fkphdmFSdHBSZWNlaXZl
ckdsb2JhbE93bmVyKCkgewotICBpZiAoal9yZWNlaXZlcl8ub2JqKCkpCi0gICAgSmF2YV9SdHBS
ZWNlaXZlcl9kaXNwb3NlKEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpLCBqX3JlY2VpdmVy
Xyk7Ci19Ci0KLXN0YXRpYyBqbG9uZyBKTklfUnRwUmVjZWl2ZXJfR2V0VHJhY2soSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3Jl
Y2VpdmVyX3BvaW50ZXIpIHsKLSAgLy8gTWVkaWFTdHJlYW1UcmFjayB3aWxsIGhhdmUgc2hhcmVk
IG93bmVyc2hpcCBieSB0aGUgTWVkaWFTdHJlYW1UcmFjayBKYXZhCi0gIC8vIG9iamVjdC4KLSAg
cmV0dXJuIGpsb25nRnJvbVBvaW50ZXIoCi0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFJlY2Vp
dmVySW50ZXJmYWNlKj4oal9ydHBfcmVjZWl2ZXJfcG9pbnRlcikKLSAgICAgICAgICAtPnRyYWNr
KCkKLSAgICAgICAgICAucmVsZWFzZSgpKTsKLX0KLQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiBKTklfUnRwUmVjZWl2ZXJfR2V0UGFyYW1ldGVycygKLSAgICBKTklFbnYqIGpu
aSwKLSAgICBqbG9uZyBqX3J0cF9yZWNlaXZlcl9wb2ludGVyKSB7Ci0gIFJ0cFBhcmFtZXRlcnMg
cGFyYW1ldGVycyA9Ci0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNl
Kj4oal9ydHBfcmVjZWl2ZXJfcG9pbnRlcikKLSAgICAgICAgICAtPkdldFBhcmFtZXRlcnMoKTsK
LSAgcmV0dXJuIE5hdGl2ZVRvSmF2YVJ0cFBhcmFtZXRlcnMoam5pLCBwYXJhbWV0ZXJzKTsKLX0K
LQotc3RhdGljIFNjb3BlZEphdmFMb2NhbFJlZjxqc3RyaW5nPiBKTklfUnRwUmVjZWl2ZXJfR2V0
SWQoCi0gICAgSk5JRW52KiBqbmksCi0gICAgamxvbmcgal9ydHBfcmVjZWl2ZXJfcG9pbnRlcikg
ewotICByZXR1cm4gTmF0aXZlVG9KYXZhU3RyaW5nKAotICAgICAgam5pLAotICAgICAgcmVpbnRl
cnByZXRfY2FzdDxSdHBSZWNlaXZlckludGVyZmFjZSo+KGpfcnRwX3JlY2VpdmVyX3BvaW50ZXIp
LT5pZCgpKTsKLX0KLQotc3RhdGljIGpsb25nIEpOSV9SdHBSZWNlaXZlcl9TZXRPYnNlcnZlcigK
LSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3J0cF9yZWNlaXZlcl9wb2ludGVyLAotICAg
IGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9vYnNlcnZlcikgewotICBSdHBSZWNlaXZl
ck9ic2VydmVySm5pKiBydHBSZWNlaXZlck9ic2VydmVyID0KLSAgICAgIG5ldyBSdHBSZWNlaXZl
ck9ic2VydmVySm5pKGpuaSwgal9vYnNlcnZlcik7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVj
ZWl2ZXJJbnRlcmZhY2UqPihqX3J0cF9yZWNlaXZlcl9wb2ludGVyKQotICAgICAgLT5TZXRPYnNl
cnZlcihydHBSZWNlaXZlck9ic2VydmVyKTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIocnRw
UmVjZWl2ZXJPYnNlcnZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9SdHBSZWNlaXZlcl9VbnNl
dE9ic2VydmVyKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamxvbmcgal9ydHBfcmVjZWl2ZXJfcG9pbnRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfb2JzZXJ2ZXJfcG9pbnRlcikgewotICBy
ZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNlKj4oal9ydHBfcmVjZWl2ZXJfcG9p
bnRlcikKLSAgICAgIC0+U2V0T2JzZXJ2ZXIobnVsbHB0cik7Ci0gIFJ0cFJlY2VpdmVyT2JzZXJ2
ZXJKbmkqIG9ic2VydmVyID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVjZWl2ZXJPYnNl
cnZlckpuaSo+KGpfb2JzZXJ2ZXJfcG9pbnRlcik7Ci0gIGlmIChvYnNlcnZlcikgewotICAgIGRl
bGV0ZSBvYnNlcnZlcjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBKTklfUnRwUmVjZWl2ZXJfU2V0
RnJhbWVEZWNyeXB0b3IoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9mcmFtZV9kZWNyeXB0
b3JfcG9pbnRlcikgewotICByZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNlKj4o
al9ydHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAtPlNldEZyYW1lRGVjcnlwdG9yKHJlaW50ZXJw
cmV0X2Nhc3Q8RnJhbWVEZWNyeXB0b3JJbnRlcmZhY2UqPigKLSAgICAgICAgICBqX2ZyYW1lX2Rl
Y3J5cHRvcl9wb2ludGVyKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3JlY2VpdmVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3Bj
L3J0cF9yZWNlaXZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDhiYTBlOGRm
YmNmOGNlZTUzOGRhN2Y3M2ZlMmNlZjM3N2M3MTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3JlY2VpdmVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRS
T0lEX1NSQ19KTklfUENfUlRQX1JFQ0VJVkVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19K
TklfUENfUlRQX1JFQ0VJVkVSX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLQotI2luY2x1ZGUgImFw
aS9ydHBfcmVjZWl2ZXJfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZl
X2FwaS9qbmkvc2NvcGVkX2phdmFfcmVmLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNw
YWNlIGpuaSB7Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFSdHBS
ZWNlaXZlcigKLSAgICBKTklFbnYqIGVudiwKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8UnRwUmVj
ZWl2ZXJJbnRlcmZhY2U+IHJlY2VpdmVyKTsKLQotLy8gVGFrZXMgb3duZXJzaGlwIG9mIHRoZSBw
YXNzZWQgfGpfcmVjZWl2ZXJ8IGFuZCBzdG9yZXMgaXQgYXMgYSBnbG9iYWwKLS8vIHJlZmVyZW5j
ZS4gV2lsbCBjYWxsIGRpc3Bvc2UoKSBpbiB0aGUgZHRvci4KLWNsYXNzIEphdmFSdHBSZWNlaXZl
ckdsb2JhbE93bmVyIHsKLSBwdWJsaWM6Ci0gIEphdmFSdHBSZWNlaXZlckdsb2JhbE93bmVyKEpO
SUVudiogZW52LCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3JlY2VpdmVyKTsKLSAgSmF2YVJ0
cFJlY2VpdmVyR2xvYmFsT3duZXIoSmF2YVJ0cFJlY2VpdmVyR2xvYmFsT3duZXImJiBvdGhlcik7
Ci0gIH5KYXZhUnRwUmVjZWl2ZXJHbG9iYWxPd25lcigpOwotCi0gcHJpdmF0ZToKLSAgU2NvcGVk
SmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBqX3JlY2VpdmVyXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9T
UkNfSk5JX1BDX1JUUF9SRUNFSVZFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfc2VuZGVy
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvc3JjL2puaS9wYy9ydHBfc2VuZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0MTFlNWRjOGM1NDI5MjViMmZmOGYxNTYzZWFkMzBmYzZkYzBjNTE5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3NlbmRlci5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfc2VuZGVyLmgiCi0KLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVlcmNvbm5lY3Rpb25fam5pL1J0cFNlbmRlcl9qbmkuaCIK
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL3NyYy9qbmkvcGMvcnRwX3BhcmFtZXRlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7
Ci1uYW1lc3BhY2Ugam5pIHsKLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRv
SmF2YVJ0cFNlbmRlcigKLSAgICBKTklFbnYqIGVudiwKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8
UnRwU2VuZGVySW50ZXJmYWNlPiBzZW5kZXIpIHsKLSAgaWYgKCFzZW5kZXIpCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci0gIC8vIFNlbmRlciBpcyBub3cgb3duZWQgYnkgdGhlIEphdmEgb2JqZWN0LCBh
bmQgd2lsbCBiZSBmcmVlZCBmcm9tCi0gIC8vIFJ0cFNlbmRlci5kaXNwb3NlKCksIGNhbGxlZCBi
eSBQZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCkgb3IgZ2V0U2VuZGVycygpLgotICByZXR1cm4gSmF2
YV9SdHBTZW5kZXJfQ29uc3RydWN0b3IoZW52LCBqbG9uZ0Zyb21Qb2ludGVyKHNlbmRlci5yZWxl
YXNlKCkpKTsKLX0KLQotc3RhdGljIGpib29sZWFuIEpOSV9SdHBTZW5kZXJfU2V0VHJhY2soSk5J
RW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBq
X3J0cF9zZW5kZXJfcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpsb25nIGpfdHJhY2tfcG9pbnRlcikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxS
dHBTZW5kZXJJbnRlcmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgIC0+U2V0VHJh
Y2socmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal90cmFja19w
b2ludGVyKSk7Ci19Ci0KLWpsb25nIEpOSV9SdHBTZW5kZXJfR2V0VHJhY2soSk5JRW52KiBqbmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3NlbmRlcl9wb2ludGVy
KSB7Ci0gIC8vIE1lZGlhU3RyZWFtVHJhY2sgd2lsbCBoYXZlIHNoYXJlZCBvd25lcnNoaXAgYnkg
dGhlIE1lZGlhU3RyZWFtVHJhY2sgSmF2YQotICAvLyBvYmplY3QuCi0gIHJldHVybiBqbG9uZ0Zy
b21Qb2ludGVyKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxSdHBTZW5kZXJJbnRlcmZhY2UqPihq
X3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgICAgICAtPnRyYWNrKCkKLSAgICAgICAgICAucmVs
ZWFzZSgpKTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1J0cFNlbmRlcl9TZXRTdHJlYW1zKAotICAg
IEpOSUVudiogam5pLAotICAgIGpsb25nIGpfcnRwX3NlbmRlcl9wb2ludGVyLAotICAgIGNvbnN0
IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9zdHJlYW1fbGFiZWxzKSB7Ci0gIHJlaW50ZXJwcmV0
X2Nhc3Q8UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAt
PlNldFN0cmVhbXMoSmF2YUxpc3RUb05hdGl2ZVZlY3RvcjxzdGQ6OnN0cmluZywganN0cmluZz4o
Ci0gICAgICAgICAgam5pLCBqX3N0cmVhbV9sYWJlbHMsICZKYXZhVG9OYXRpdmVTdHJpbmcpKTsK
LX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEpOSV9SdHBTZW5kZXJfR2V0U3RyZWFt
cygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3J0cF9zZW5kZXJfcG9pbnRlcikgewot
ICBTY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4gKCpjb252ZXJ0X2Z1bmN0aW9uKShKTklFbnYq
LCBjb25zdCBzdGQ6OnN0cmluZyYpID0KLSAgICAgICZOYXRpdmVUb0phdmFTdHJpbmc7Ci0gIHJl
dHVybiBOYXRpdmVUb0phdmFMaXN0KAotICAgICAgam5pLAotICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxSdHBTZW5kZXJJbnRlcmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlciktPnN0cmVhbV9pZHMo
KSwKLSAgICAgIGNvbnZlcnRfZnVuY3Rpb24pOwotfQotCi1qbG9uZyBKTklfUnRwU2VuZGVyX0dl
dER0bWZTZW5kZXIoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIpIHsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50
ZXIoCi0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFNlbmRlckludGVyZmFjZSo+KGpfcnRwX3Nl
bmRlcl9wb2ludGVyKQotICAgICAgICAgIC0+R2V0RHRtZlNlbmRlcigpCi0gICAgICAgICAgLnJl
bGVhc2UoKSk7Ci19Ci0KLWpib29sZWFuIEpOSV9SdHBTZW5kZXJfU2V0UGFyYW1ldGVycygKLSAg
ICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3J0cF9zZW5kZXJfcG9pbnRlciwKLSAgICBjb25z
dCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfcGFyYW1ldGVycykgewotICBpZiAoSXNOdWxsKGpu
aSwgal9wYXJhbWV0ZXJzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBSdHBQYXJhbWV0
ZXJzIHBhcmFtZXRlcnMgPSBKYXZhVG9OYXRpdmVSdHBQYXJhbWV0ZXJzKGpuaSwgal9wYXJhbWV0
ZXJzKTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwU2VuZGVySW50ZXJmYWNlKj4oal9y
dHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAtPlNldFBhcmFtZXRlcnMocGFyYW1ldGVycykKLSAg
ICAgIC5vaygpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1J0cFNlbmRl
cl9HZXRQYXJhbWV0ZXJzKAotICAgIEpOSUVudiogam5pLAotICAgIGpsb25nIGpfcnRwX3NlbmRl
cl9wb2ludGVyKSB7Ci0gIFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9Ci0gICAgICByZWludGVy
cHJldF9jYXN0PFJ0cFNlbmRlckludGVyZmFjZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKQotICAg
ICAgICAgIC0+R2V0UGFyYW1ldGVycygpOwotICByZXR1cm4gTmF0aXZlVG9KYXZhUnRwUGFyYW1l
dGVycyhqbmksIHBhcmFtZXRlcnMpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8anN0cmluZz4g
Sk5JX1J0cFNlbmRlcl9HZXRJZChKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3NlbmRlcl9wb2ludGVyKSB7Ci0g
IHJldHVybiBOYXRpdmVUb0phdmFTdHJpbmcoCi0gICAgICBqbmksIHJlaW50ZXJwcmV0X2Nhc3Q8
UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpLT5pZCgpKTsKLX0KLQot
c3RhdGljIHZvaWQgSk5JX1J0cFNlbmRlcl9TZXRGcmFtZUVuY3J5cHRvcihKTklFbnYqIGpuaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9ydHBf
c2VuZGVyX3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpsb25nIGpfZnJhbWVfZW5jcnlwdG9yX3BvaW50ZXIpIHsKLSAgcmVpbnRlcnByZXRfY2Fz
dDxSdHBTZW5kZXJJbnRlcmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgIC0+U2V0
RnJhbWVFbmNyeXB0b3IocmVpbnRlcnByZXRfY2FzdDxGcmFtZUVuY3J5cHRvckludGVyZmFjZSo+
KAotICAgICAgICAgIGpfZnJhbWVfZW5jcnlwdG9yX3BvaW50ZXIpKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9y
dHBfc2VuZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF9zZW5kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDc4MmNhOTE1Zjg3YzVmYjA0OWIxZWU4MTAyMGYzMGQ3ODJjZDkyNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF9zZW5k
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19SVFBfU0VOREVSX0hfCi0jZGVmaW5lIFNE
S19BTkRST0lEX1NSQ19KTklfUENfUlRQX1NFTkRFUl9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0K
LSNpbmNsdWRlICJhcGkvcnRwX3NlbmRlcl9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9uYXRpdmVfYXBpL2puaS9zY29wZWRfamF2YV9yZWYuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2
ZVRvSmF2YVJ0cFNlbmRlcigKLSAgICBKTklFbnYqIGVudiwKLSAgICBydGM6OnNjb3BlZF9yZWZw
dHI8UnRwU2VuZGVySW50ZXJmYWNlPiBzZW5kZXIpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19
ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9Q
Q19SVFBfU0VOREVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF90cmFuc2NlaXZlci5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Ny
Yy9qbmkvcGMvcnRwX3RyYW5zY2VpdmVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3ZDhjZmRlZjQ5ZDc0ZDAyNjE2ZjMxMTU1N2QzYzFmYzdiZGQzMmM2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3RyYW5zY2VpdmVy
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTggVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF90cmFuc2NlaXZlci5oIgotCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJj
b25uZWN0aW9uX2puaS9SdHBUcmFuc2NlaXZlcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9p
ZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3Jj
L2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvbWVk
aWFfc3RyZWFtX3RyYWNrLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBf
cGFyYW1ldGVycy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvcnRwX3JlY2Vp
dmVyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9ydHBfc2VuZGVyLmgiCi0K
LW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLVNj
b3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFSdHBUcmFuc2NlaXZlckRpcmVj
dGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBydHBf
dHJhbnNjZWl2ZXJfZGlyZWN0aW9uKSB7Ci0gIHJldHVybiBKYXZhX1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uX2Zyb21OYXRpdmVJbmRleCgKLSAgICAgIGpuaSwgc3RhdGljX2Nhc3Q8aW50PihydHBf
dHJhbnNjZWl2ZXJfZGlyZWN0aW9uKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1SdHBUcmFu
c2NlaXZlckluaXQgSmF2YVRvTmF0aXZlUnRwVHJhbnNjZWl2ZXJJbml0KAotICAgIEpOSUVudiog
am5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfaW5pdCkgewotICBSdHBUcmFuc2Nl
aXZlckluaXQgaW5pdDsKLQotICAvLyBDb252ZXJ0IHRoZSBkaXJlY3Rpb24uCi0gIGluaXQuZGly
ZWN0aW9uID0gc3RhdGljX2Nhc3Q8UnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24+KAotICAgICAgSmF2
YV9SdHBUcmFuc2NlaXZlckluaXRfZ2V0RGlyZWN0aW9uTmF0aXZlSW5kZXgoam5pLCBqX2luaXQp
KTsKLQotICAvLyBDb252ZXJ0IHRoZSBzdHJlYW0gaWRzLgotICBTY29wZWRKYXZhTG9jYWxSZWY8
am9iamVjdD4gal9zdHJlYW1faWRzID0KLSAgICAgIEphdmFfUnRwVHJhbnNjZWl2ZXJJbml0X2dl
dFN0cmVhbUlkcyhqbmksIGpfaW5pdCk7Ci0gIGluaXQuc3RyZWFtX2lkcyA9IEphdmFMaXN0VG9O
YXRpdmVWZWN0b3I8c3RkOjpzdHJpbmcsIGpzdHJpbmc+KAotICAgICAgam5pLCBqX3N0cmVhbV9p
ZHMsICZKYXZhVG9OYXRpdmVTdHJpbmcpOwotCi0gIC8vIENvbnZlcnQgdGhlIHNlbmQgZW5jb2Rp
bmdzLgotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9zZW5kX2VuY29kaW5ncyA9Ci0g
ICAgICBKYXZhX1J0cFRyYW5zY2VpdmVySW5pdF9nZXRTZW5kRW5jb2RpbmdzKGpuaSwgal9pbml0
KTsKLSAgaW5pdC5zZW5kX2VuY29kaW5ncyA9IEphdmFMaXN0VG9OYXRpdmVWZWN0b3I8UnRwRW5j
b2RpbmdQYXJhbWV0ZXJzLCBqb2JqZWN0PigKLSAgICAgIGpuaSwgal9zZW5kX2VuY29kaW5ncywg
JkphdmFUb05hdGl2ZVJ0cEVuY29kaW5nUGFyYW1ldGVycyk7Ci0gIHJldHVybiBpbml0OwotfQot
Ci1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9KYXZhUnRwVHJhbnNjZWl2ZXIo
Ci0gICAgSk5JRW52KiBlbnYsCi0gICAgcnRjOjpzY29wZWRfcmVmcHRyPFJ0cFRyYW5zY2VpdmVy
SW50ZXJmYWNlPiB0cmFuc2NlaXZlcikgewotICBpZiAoIXRyYW5zY2VpdmVyKSB7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci0gIH0KLSAgLy8gVHJhbnNjZWl2ZXIgd2lsbCBub3cgaGF2ZSBzaGFyZWQg
b3duZXJzaGlwIGJ5IHRoZSBKYXZhIG9iamVjdC4KLSAgcmV0dXJuIEphdmFfUnRwVHJhbnNjZWl2
ZXJfQ29uc3RydWN0b3IoCi0gICAgICBlbnYsIGpsb25nRnJvbVBvaW50ZXIodHJhbnNjZWl2ZXIu
cmVsZWFzZSgpKSk7Ci19Ci0KLUphdmFSdHBUcmFuc2NlaXZlckdsb2JhbE93bmVyOjpKYXZhUnRw
VHJhbnNjZWl2ZXJHbG9iYWxPd25lcigKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBKYXZh
UmVmPGpvYmplY3Q+JiBqX3RyYW5zY2VpdmVyKQotICAgIDogal90cmFuc2NlaXZlcl8oZW52LCBq
X3RyYW5zY2VpdmVyKSB7fQotCi1KYXZhUnRwVHJhbnNjZWl2ZXJHbG9iYWxPd25lcjo6SmF2YVJ0
cFRyYW5zY2VpdmVyR2xvYmFsT3duZXIoCi0gICAgSmF2YVJ0cFRyYW5zY2VpdmVyR2xvYmFsT3du
ZXImJiBvdGhlcikgPSBkZWZhdWx0OwotCi1KYXZhUnRwVHJhbnNjZWl2ZXJHbG9iYWxPd25lcjo6
fkphdmFSdHBUcmFuc2NlaXZlckdsb2JhbE93bmVyKCkgewotICBpZiAoal90cmFuc2NlaXZlcl8u
b2JqKCkpIHsKLSAgICBKYXZhX1J0cFRyYW5zY2VpdmVyX2Rpc3Bvc2UoQXR0YWNoQ3VycmVudFRo
cmVhZElmTmVlZGVkKCksIGpfdHJhbnNjZWl2ZXJfKTsKLSAgfQotfQotCi1TY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gSk5JX1J0cFRyYW5zY2VpdmVyX0dldE1lZGlhVHlwZSgKLSAgICBKTklF
bnYqIGpuaSwKLSAgICBqbG9uZyBqX3J0cF90cmFuc2NlaXZlcl9wb2ludGVyKSB7Ci0gIHJldHVy
biBOYXRpdmVUb0phdmFNZWRpYVR5cGUoCi0gICAgICBqbmksIHJlaW50ZXJwcmV0X2Nhc3Q8UnRw
VHJhbnNjZWl2ZXJJbnRlcmZhY2UqPihqX3J0cF90cmFuc2NlaXZlcl9wb2ludGVyKQotICAgICAg
ICAgICAgICAgLT5tZWRpYV90eXBlKCkpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8anN0cmlu
Zz4gSk5JX1J0cFRyYW5zY2VpdmVyX0dldE1pZCgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9u
ZyBqX3J0cF90cmFuc2NlaXZlcl9wb2ludGVyKSB7Ci0gIGFic2w6Om9wdGlvbmFsPHN0ZDo6c3Ry
aW5nPiBtaWQgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxSdHBUcmFuc2NlaXZlckludGVyZmFj
ZSo+KGpfcnRwX3RyYW5zY2VpdmVyX3BvaW50ZXIpCi0gICAgICAgICAgLT5taWQoKTsKLSAgcmV0
dXJuIE5hdGl2ZVRvSmF2YVN0cmluZyhqbmksIG1pZCk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiBKTklfUnRwVHJhbnNjZWl2ZXJfR2V0U2VuZGVyKAotICAgIEpOSUVudiogam5p
LAotICAgIGpsb25nIGpfcnRwX3RyYW5zY2VpdmVyX3BvaW50ZXIpIHsKLSAgcmV0dXJuIE5hdGl2
ZVRvSmF2YVJ0cFNlbmRlcigKLSAgICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxSdHBUcmFuc2Nl
aXZlckludGVyZmFjZSo+KGpfcnRwX3RyYW5zY2VpdmVyX3BvaW50ZXIpCi0gICAgICAgICAgICAg
ICAtPnNlbmRlcigpKTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IEpOSV9SdHBU
cmFuc2NlaXZlcl9HZXRSZWNlaXZlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3J0
cF90cmFuc2NlaXZlcl9wb2ludGVyKSB7Ci0gIHJldHVybiBOYXRpdmVUb0phdmFSdHBSZWNlaXZl
cigKLSAgICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxSdHBUcmFuc2NlaXZlckludGVyZmFjZSo+
KGpfcnRwX3RyYW5zY2VpdmVyX3BvaW50ZXIpCi0gICAgICAgICAgICAgICAtPnJlY2VpdmVyKCkp
OwotfQotCi1qYm9vbGVhbiBKTklfUnRwVHJhbnNjZWl2ZXJfU3RvcHBlZChKTklFbnYqIGpuaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3RyYW5zY2Vp
dmVyX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwVHJhbnNjZWl2ZXJJ
bnRlcmZhY2UqPihqX3J0cF90cmFuc2NlaXZlcl9wb2ludGVyKQotICAgICAgLT5zdG9wcGVkKCk7
Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBKTklfUnRwVHJhbnNjZWl2ZXJfRGly
ZWN0aW9uKAotICAgIEpOSUVudiogam5pLAotICAgIGpsb25nIGpfcnRwX3RyYW5zY2VpdmVyX3Bv
aW50ZXIpIHsKLSAgcmV0dXJuIE5hdGl2ZVRvSmF2YVJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKAot
ICAgICAgam5pLCByZWludGVycHJldF9jYXN0PFJ0cFRyYW5zY2VpdmVySW50ZXJmYWNlKj4oal9y
dHBfdHJhbnNjZWl2ZXJfcG9pbnRlcikKLSAgICAgICAgICAgICAgIC0+ZGlyZWN0aW9uKCkpOwot
fQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gSk5JX1J0cFRyYW5zY2VpdmVyX0N1cnJl
bnREaXJlY3Rpb24oCi0gICAgSk5JRW52KiBqbmksCi0gICAgamxvbmcgal9ydHBfdHJhbnNjZWl2
ZXJfcG9pbnRlcikgewotICBhYnNsOjpvcHRpb25hbDxSdHBUcmFuc2NlaXZlckRpcmVjdGlvbj4g
ZGlyZWN0aW9uID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwVHJhbnNjZWl2ZXJJbnRlcmZh
Y2UqPihqX3J0cF90cmFuc2NlaXZlcl9wb2ludGVyKQotICAgICAgICAgIC0+Y3VycmVudF9kaXJl
Y3Rpb24oKTsKLSAgcmV0dXJuIGRpcmVjdGlvbiA/IE5hdGl2ZVRvSmF2YVJ0cFRyYW5zY2VpdmVy
RGlyZWN0aW9uKGpuaSwgKmRpcmVjdGlvbikKLSAgICAgICAgICAgICAgICAgICA6IG51bGxwdHI7
Ci19Ci0KLXZvaWQgSk5JX1J0cFRyYW5zY2VpdmVyX1N0b3AoSk5JRW52KiBqbmksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3RyYW5zY2VpdmVyX3BvaW50ZXIpIHsK
LSAgcmVpbnRlcnByZXRfY2FzdDxSdHBUcmFuc2NlaXZlckludGVyZmFjZSo+KGpfcnRwX3RyYW5z
Y2VpdmVyX3BvaW50ZXIpLT5TdG9wKCk7Ci19Ci0KLXZvaWQgSk5JX1J0cFRyYW5zY2VpdmVyX1Nl
dERpcmVjdGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3J0cF90cmFuc2NlaXZl
cl9wb2ludGVyLAotICAgIGNvbnN0IGJhc2U6OmFuZHJvaWQ6OkphdmFQYXJhbVJlZjxqb2JqZWN0
PiYgal9ydHBfdHJhbnNjZWl2ZXJfZGlyZWN0aW9uKSB7Ci0gIGlmIChJc051bGwoam5pLCBqX3J0
cF90cmFuc2NlaXZlcl9kaXJlY3Rpb24pKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJ0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PFJ0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uPigKLSAgICAgIEphdmFfUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb25fZ2V0TmF0aXZlSW5k
ZXgoam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqX3J0cF90cmFuc2NlaXZlcl9kaXJlY3Rpb24pKTsKLSAgcmVpbnRlcnByZXRfY2FzdDxSdHBU
cmFuc2NlaXZlckludGVyZmFjZSo+KGpfcnRwX3RyYW5zY2VpdmVyX3BvaW50ZXIpCi0gICAgICAt
PlNldERpcmVjdGlvbihkaXJlY3Rpb24pOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF90cmFuc2NlaXZlci5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQv
c3JjL2puaS9wYy9ydHBfdHJhbnNjZWl2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTk2Mjc2Y2E5ZDQ4NTRlNDFiYTFiNzYyY2VlZjdhYTAyNjU1NGI5NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3J0cF90cmFuc2NlaXZl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
OCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
I2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1JUUF9UUkFOU0NFSVZFUl9IXwotI2RlZmlu
ZSBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1JUUF9UUkFOU0NFSVZFUl9IXwotCi0jaW5jbHVkZSA8
am5pLmg+Ci0KLSNpbmNsdWRlICJhcGkvcnRwX3RyYW5zY2VpdmVyX2ludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL3Njb3BlZF9qYXZhX3JlZi5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1SdHBUcmFuc2NlaXZlckluaXQg
SmF2YVRvTmF0aXZlUnRwVHJhbnNjZWl2ZXJJbml0KAotICAgIEpOSUVudiogam5pLAotICAgIGNv
bnN0IEphdmFSZWY8am9iamVjdD4mIGpfaW5pdCk7Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PiBOYXRpdmVUb0phdmFSdHBUcmFuc2NlaXZlcigKLSAgICBKTklFbnYqIGVudiwKLSAgICBy
dGM6OnNjb3BlZF9yZWZwdHI8UnRwVHJhbnNjZWl2ZXJJbnRlcmZhY2U+IHRyYW5zY2VpdmVyKTsK
LQotLy8gVGhpcyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG9mIHRoZSB8al90cmFuc2NlaXZlcnwg
YW5kIHN0b3JlcyBpdCBhcyBhIGdsb2JhbAotLy8gcmVmZXJlbmNlLiBUaGlzIGNhbGxzIHRoZSBK
YXZhIFRyYW5zY2VpdmVyJ3MgZGlzcG9zZSgpIG1ldGhvZCB3aXRoIHRoZSBkdG9yLgotY2xhc3Mg
SmF2YVJ0cFRyYW5zY2VpdmVyR2xvYmFsT3duZXIgewotIHB1YmxpYzoKLSAgSmF2YVJ0cFRyYW5z
Y2VpdmVyR2xvYmFsT3duZXIoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdHJhbnNjZWl2ZXIpOwotICBKYXZhUnRw
VHJhbnNjZWl2ZXJHbG9iYWxPd25lcihKYXZhUnRwVHJhbnNjZWl2ZXJHbG9iYWxPd25lciYmIG90
aGVyKTsKLSAgfkphdmFSdHBUcmFuc2NlaXZlckdsb2JhbE93bmVyKCk7Ci0KLSBwcml2YXRlOgot
ICBTY29wZWRKYXZhR2xvYmFsUmVmPGpvYmplY3Q+IGpfdHJhbnNjZWl2ZXJfOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNE
S19BTkRST0lEX1NSQ19KTklfUENfUlRQX1RSQU5TQ0VJVkVSX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5p
L3BjL3NkcF9vYnNlcnZlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvc2RwX29ic2VydmVyLmNjCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmYzU5ZDE3NDlhMDNhMTg5MjY2OTBmMWFkZTMxNTdhOGZkZmQ5
MDRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
cGMvc2RwX29ic2VydmVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvc2RwX29ic2Vy
dmVyLmgiCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2Vu
ZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9TZHBPYnNlcnZlcl9qbmkuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgInNkay9tZWRpYV9jb25zdHJh
aW50cy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1DcmVhdGVT
ZHBPYnNlcnZlckpuaTo6Q3JlYXRlU2RwT2JzZXJ2ZXJKbmkoCi0gICAgSk5JRW52KiBlbnYsCi0g
ICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9vYnNlcnZlciwKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCi0gICAgOiBqX29ic2VydmVyX2dsb2Jh
bF8oZW52LCBqX29ic2VydmVyKSwKLSAgICAgIGNvbnN0cmFpbnRzXyhzdGQ6Om1vdmUoY29uc3Ry
YWludHMpKSB7fQotCi1DcmVhdGVTZHBPYnNlcnZlckpuaTo6fkNyZWF0ZVNkcE9ic2VydmVySm5p
KCkgPSBkZWZhdWx0OwotCi12b2lkIENyZWF0ZVNkcE9ic2VydmVySm5pOjpPblN1Y2Nlc3MoU2Vz
c2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlKiBkZXNjKSB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNo
Q3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIEphdmFfU2RwT2JzZXJ2ZXJfb25DcmVhdGVTdWNj
ZXNzKGVudiwgal9vYnNlcnZlcl9nbG9iYWxfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOYXRpdmVUb0phdmFTZXNzaW9uRGVzY3JpcHRpb24oZW52LCBkZXNjKSk7Ci0gIC8v
IE9uU3VjY2VzcyB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBkZXNjcmlwdGlvbiAodGhlcmUn
cyBhIFRPRE8gdG8gbWFrZQotICAvLyBpdCB1c2UgdW5pcXVlX3B0ci4uLikuCi0gIGRlbGV0ZSBk
ZXNjOwotfQotCi12b2lkIENyZWF0ZVNkcE9ic2VydmVySm5pOjpPbkZhaWx1cmUod2VicnRjOjpS
VENFcnJvciBlcnJvcikgewotICBKTklFbnYqIGVudiA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5l
ZWRlZCgpOwotICBKYXZhX1NkcE9ic2VydmVyX29uQ3JlYXRlRmFpbHVyZShlbnYsIGpfb2JzZXJ2
ZXJfZ2xvYmFsXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVG9K
YXZhU3RyaW5nKGVudiwgZXJyb3IubWVzc2FnZSgpKSk7Ci19Ci0KLVNldFNkcE9ic2VydmVySm5p
OjpTZXRTZHBPYnNlcnZlckpuaSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBKYXZhUmVm
PGpvYmplY3Q+JiBqX29ic2VydmVyLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUNvbnN0cmFp
bnRzPiBjb25zdHJhaW50cykKLSAgICA6IGpfb2JzZXJ2ZXJfZ2xvYmFsXyhlbnYsIGpfb2JzZXJ2
ZXIpLAotICAgICAgY29uc3RyYWludHNfKHN0ZDo6bW92ZShjb25zdHJhaW50cykpIHt9Ci0KLVNl
dFNkcE9ic2VydmVySm5pOjp+U2V0U2RwT2JzZXJ2ZXJKbmkoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQg
U2V0U2RwT2JzZXJ2ZXJKbmk6Ok9uU3VjY2VzcygpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRhY2hD
dXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgSmF2YV9TZHBPYnNlcnZlcl9vblNldFN1Y2Nlc3Mo
ZW52LCBqX29ic2VydmVyX2dsb2JhbF8pOwotfQotCi12b2lkIFNldFNkcE9ic2VydmVySm5pOjpP
bkZhaWx1cmUod2VicnRjOjpSVENFcnJvciBlcnJvcikgewotICBKTklFbnYqIGVudiA9IEF0dGFj
aEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBKYXZhX1NkcE9ic2VydmVyX29uU2V0RmFpbHVy
ZShlbnYsIGpfb2JzZXJ2ZXJfZ2xvYmFsXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgZXJyb3IubWVzc2FnZSgpKSk7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
cGMvc2RwX29ic2VydmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3NkcF9vYnNlcnZlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2OGRlZDc2ZTdkOWViMDg0NWM1NmE5MzQ3YWNhNTRjMjE2MDJlYWIw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMv
c2RwX29ic2VydmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfUENfU0RQX09CU0VSVkVSX0hf
Ci0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfUENfU0RQX09CU0VSVkVSX0hfCi0KLSNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYXBpL3BlZXJfY29u
bmVjdGlvbl9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9o
ZWxwZXJzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zZXNzaW9uX2Rlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAic2RrL21lZGlhX2NvbnN0cmFpbnRzLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLWNsYXNzIENyZWF0ZVNkcE9ic2VydmVySm5p
IDogcHVibGljIENyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbk9ic2VydmVyIHsKLSBwdWJsaWM6Ci0g
IENyZWF0ZVNkcE9ic2VydmVySm5pKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX29ic2VydmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpOwotICB+
Q3JlYXRlU2RwT2JzZXJ2ZXJKbmkoKSBvdmVycmlkZTsKLQotICBNZWRpYUNvbnN0cmFpbnRzKiBj
b25zdHJhaW50cygpIHsgcmV0dXJuIGNvbnN0cmFpbnRzXy5nZXQoKTsgfQotCi0gIHZvaWQgT25T
dWNjZXNzKFNlc3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSogZGVzYykgb3ZlcnJpZGU7Ci0gIHZv
aWQgT25GYWlsdXJlKFJUQ0Vycm9yIGVycm9yKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIGNv
bnN0IFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4gal9vYnNlcnZlcl9nbG9iYWxfOwotICBz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHNfOwotfTsKLQotY2xh
c3MgU2V0U2RwT2JzZXJ2ZXJKbmkgOiBwdWJsaWMgU2V0U2Vzc2lvbkRlc2NyaXB0aW9uT2JzZXJ2
ZXIgewotIHB1YmxpYzoKLSAgU2V0U2RwT2JzZXJ2ZXJKbmkoSk5JRW52KiBlbnYsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfb2JzZXJ2ZXIsCi0gICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50
cyk7Ci0gIH5TZXRTZHBPYnNlcnZlckpuaSgpIG92ZXJyaWRlOwotCi0gIE1lZGlhQ29uc3RyYWlu
dHMqIGNvbnN0cmFpbnRzKCkgeyByZXR1cm4gY29uc3RyYWludHNfLmdldCgpOyB9Ci0KLSAgdm9p
ZCBPblN1Y2Nlc3MoKSBvdmVycmlkZTsKLSAgdm9pZCBPbkZhaWx1cmUoUlRDRXJyb3IgZXJyb3Ip
IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgY29uc3QgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2Jq
ZWN0PiBqX29ic2VydmVyX2dsb2JhbF87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUNvbnN0cmFp
bnRzPiBjb25zdHJhaW50c187Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19TRFBfT0JT
RVJWRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvc2Vzc2lvbl9kZXNjcmlwdGlvbi5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvcGMvc2Vzc2lvbl9kZXNjcmlwdGlvbi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWIzMzUyMTVkYzBhYTc2NjYxNmRjMTdjMTc0ODA2MzVmYTc5MjE5OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3Nlc3Npb25fZGVzY3Jp
cHRpb24uY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zZXNzaW9uX2Rlc2NyaXB0aW9u
LmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJydGNfYmFzZS9sb2dnaW5nLmgi
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9TZXNz
aW9uRGVzY3JpcHRpb25fam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9q
bmkvamF2YV90eXBlcy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBl
cnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotc3RkOjp1bmlx
dWVfcHRyPFNlc3Npb25EZXNjcmlwdGlvbkludGVyZmFjZT4gSmF2YVRvTmF0aXZlU2Vzc2lvbkRl
c2NyaXB0aW9uKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4m
IGpfc2RwKSB7Ci0gIHN0ZDo6c3RyaW5nIHN0ZF90eXBlID0gSmF2YVRvU3RkU3RyaW5nKAotICAg
ICAgam5pLCBKYXZhX1Nlc3Npb25EZXNjcmlwdGlvbl9nZXRUeXBlSW5DYW5vbmljYWxGb3JtKGpu
aSwgal9zZHApKTsKLSAgc3RkOjpzdHJpbmcgc3RkX2Rlc2NyaXB0aW9uID0KLSAgICAgIEphdmFU
b1N0ZFN0cmluZyhqbmksIEphdmFfU2Vzc2lvbkRlc2NyaXB0aW9uX2dldERlc2NyaXB0aW9uKGpu
aSwgal9zZHApKTsKLSAgYWJzbDo6b3B0aW9uYWw8U2RwVHlwZT4gc2RwX3R5cGVfbWF5YmUgPSBT
ZHBUeXBlRnJvbVN0cmluZyhzdGRfdHlwZSk7Ci0gIGlmICghc2RwX3R5cGVfbWF5YmUpIHsKLSAg
ICBSVENfTE9HKExTX0VSUk9SKSA8PCAiVW5leHBlY3RlZCBTRFAgdHlwZTogIiA8PCBzdGRfdHlw
ZTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICByZXR1cm4gQ3JlYXRlU2Vzc2lvbkRlc2Ny
aXB0aW9uKCpzZHBfdHlwZV9tYXliZSwgc3RkX2Rlc2NyaXB0aW9uKTsKLX0KLQotU2NvcGVkSmF2
YUxvY2FsUmVmPGpvYmplY3Q+IE5hdGl2ZVRvSmF2YVNlc3Npb25EZXNjcmlwdGlvbigKLSAgICBK
TklFbnYqIGpuaSwKLSAgICBjb25zdCBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UqIGRlc2Mp
IHsKLSAgc3RkOjpzdHJpbmcgc2RwOwotICBSVENfQ0hFQ0soZGVzYy0+VG9TdHJpbmcoJnNkcCkp
IDw8ICJnb3Qgc28gZmFyOiAiIDw8IHNkcDsKLSAgcmV0dXJuIEphdmFfU2Vzc2lvbkRlc2NyaXB0
aW9uX0NvbnN0cnVjdG9yKAotICAgICAgam5pLAotICAgICAgSmF2YV9UeXBlX2Zyb21DYW5vbmlj
YWxGb3JtKGpuaSwgTmF0aXZlVG9KYXZhU3RyaW5nKGpuaSwgZGVzYy0+dHlwZSgpKSksCi0gICAg
ICBOYXRpdmVUb0phdmFTdHJpbmcoam5pLCBzZHApKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpu
aQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zZXNzaW9uX2Rl
c2NyaXB0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL3Nlc3Npb25fZGVzY3JpcHRpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmUzMDg0NzRhNzk5OTA3ODg2NzVmMTNiOWQyNDIzZGJmMjQ1NzJh
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3Bj
L3Nlc3Npb25fZGVzY3JpcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19TRVNTSU9O
X0RFU0NSSVBUSU9OX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfUENfU0VTU0lPTl9E
RVNDUklQVElPTl9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0j
aW5jbHVkZSAiYXBpL2pzZXAuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2pu
aS9zY29wZWRfamF2YV9yZWYuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5p
IHsKLQotc3RkOjp1bmlxdWVfcHRyPFNlc3Npb25EZXNjcmlwdGlvbkludGVyZmFjZT4gSmF2YVRv
TmF0aXZlU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEph
dmFSZWY8am9iamVjdD4mIGpfc2RwKTsKLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5h
dGl2ZVRvSmF2YVNlc3Npb25EZXNjcmlwdGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25z
dCBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UqIGRlc2MpOwotCi19ICAvLyBuYW1lc3BhY2Ug
am5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JD
X0pOSV9QQ19TRVNTSU9OX0RFU0NSSVBUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3NzbF9j
ZXJ0aWZpY2F0ZV92ZXJpZmllcl93cmFwcGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zc2xfY2VydGlmaWNhdGVf
dmVyaWZpZXJfd3JhcHBlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRlZjNi
ODA0OWM0NTRkNGNlNDNmZmViMGZjZWFiMGJhODI4ZDU5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3NzbF9jZXJ0aWZpY2F0ZV92ZXJpZmll
cl93cmFwcGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvcGMvc3NsX2NlcnRpZmljYXRl
X3ZlcmlmaWVyX3dyYXBwZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVl
cmNvbm5lY3Rpb25fam5pL1NTTENlcnRpZmljYXRlVmVyaWZpZXJfam5pLmgiCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvY2xhc3NfbG9hZGVyLmgiCi0jaW5jbHVkZSAic2Rr
L2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRj
IHsKLW5hbWVzcGFjZSBqbmkgewotCi1TU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyV3JhcHBlcjo6U1NM
Q2VydGlmaWNhdGVWZXJpZmllcldyYXBwZXIoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3Qg
SmF2YVJlZjxqb2JqZWN0PiYgc3NsX2NlcnRpZmljYXRlX3ZlcmlmaWVyKQotICAgIDogc3NsX2Nl
cnRpZmljYXRlX3ZlcmlmaWVyXyhqbmksIHNzbF9jZXJ0aWZpY2F0ZV92ZXJpZmllcikge30KLQot
U1NMQ2VydGlmaWNhdGVWZXJpZmllcldyYXBwZXI6On5TU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyV3Jh
cHBlcigpID0gZGVmYXVsdDsKLQotYm9vbCBTU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyV3JhcHBlcjo6
VmVyaWZ5KAotICAgIGNvbnN0IHJ0Yzo6U1NMQ2VydGlmaWNhdGUmIGNlcnRpZmljYXRlKSB7Ci0g
IEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0KLSAgLy8gU2Vy
aWFsaXplIHRoZSBkZXIgZW5jb2Rpbmcgb2YgdGhlIGNlcnQgaW50byBhIGpieXRlQXJyYXkKLSAg
cnRjOjpCdWZmZXIgY2VydF9kZXJfYnVmZmVyOwotICBjZXJ0aWZpY2F0ZS5Ub0RFUigmY2VydF9k
ZXJfYnVmZmVyKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpieXRlQXJyYXk+IGpuaV9idWZmZXIo
Ci0gICAgICBqbmksIGpuaS0+TmV3Qnl0ZUFycmF5KGNlcnRfZGVyX2J1ZmZlci5zaXplKCkpKTsK
LSAgam5pLT5TZXRCeXRlQXJyYXlSZWdpb24oCi0gICAgICBqbmlfYnVmZmVyLm9iaigpLCAwLCBj
ZXJ0X2Rlcl9idWZmZXIuc2l6ZSgpLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBqYnl0
ZSo+KGNlcnRfZGVyX2J1ZmZlci5kYXRhKCkpKTsKLQotICByZXR1cm4gSmF2YV9TU0xDZXJ0aWZp
Y2F0ZVZlcmlmaWVyX3ZlcmlmeShqbmksIHNzbF9jZXJ0aWZpY2F0ZV92ZXJpZmllcl8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpuaV9idWZmZXIpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9z
cmMvam5pL3BjL3NzbF9jZXJ0aWZpY2F0ZV92ZXJpZmllcl93cmFwcGVyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3Nz
bF9jZXJ0aWZpY2F0ZV92ZXJpZmllcl93cmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhjODgzZjQ0NWJhNDdhNDdiMjU5MTA1YzE3OWJhMzI0NTM4MDA3NDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zc2xfY2VydGlm
aWNhdGVfdmVyaWZpZXJfd3JhcHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1NTTF9D
RVJUSUZJQ0FURV9WRVJJRklFUl9XUkFQUEVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19K
TklfUENfU1NMX0NFUlRJRklDQVRFX1ZFUklGSUVSX1dSQVBQRVJfSF8KLQotI2luY2x1ZGUgPGpu
aS5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgInJ0Y19iYXNlL3NzbF9jZXJ0aWZp
Y2F0ZS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLQot
bmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8gV3JhcHBlciBmb3IgSmF2
YSBTU0xDZXJ0aWZpYWN0ZVZlcmlmaWVyIGNsYXNzLiBEZWxlZ2F0ZXMgbWV0aG9kIGNhbGxzIHRo
cm91Z2gKLS8vIEpOSSBhbmQgd3JhcHMgdGhlIGVuY29kZXIgaW5zaWRlIFNTTENlcnRpZmljYXRl
VmVyaWZpZXJXcmFwcGVyLgotY2xhc3MgU1NMQ2VydGlmaWNhdGVWZXJpZmllcldyYXBwZXIgOiBw
dWJsaWMgcnRjOjpTU0xDZXJ0aWZpY2F0ZVZlcmlmaWVyIHsKLSBwdWJsaWM6Ci0gIFNTTENlcnRp
ZmljYXRlVmVyaWZpZXJXcmFwcGVyKAotICAgICAgSk5JRW52KiBqbmksCi0gICAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBzc2xfY2VydGlmaWNhdGVfdmVyaWZpZXIpOwotICB+U1NMQ2VydGlm
aWNhdGVWZXJpZmllcldyYXBwZXIoKSBvdmVycmlkZTsKLQotICBib29sIFZlcmlmeShjb25zdCBy
dGM6OlNTTENlcnRpZmljYXRlJiBjZXJ0aWZpY2F0ZSkgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgot
ICBjb25zdCBTY29wZWRKYXZhR2xvYmFsUmVmPGpvYmplY3Q+IHNzbF9jZXJ0aWZpY2F0ZV92ZXJp
Zmllcl87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
Ci0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19TU0xfQ0VSVElGSUNBVEVfVkVS
SUZJRVJfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zdGF0c19vYnNlcnZlci5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Ny
Yy9qbmkvcGMvc3RhdHNfb2JzZXJ2ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZkNGEzMWRmMWMxZTk5ZjhmMWJhMmE4NTFiOWZlY2U5OTNiYzcyMDAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy9zdGF0c19vYnNlcnZlci5j
YworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3N0YXRzX29ic2VydmVyLmgiCi0KLSNpbmNs
dWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVlcmNvbm5l
Y3Rpb25fam5pL1N0YXRzT2JzZXJ2ZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2Vu
ZXJhdGVkX3BlZXJjb25uZWN0aW9uX2puaS9TdGF0c1JlcG9ydF9qbmkuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBqbmkgewotCi1uYW1lc3BhY2UgewotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4g
TmF0aXZlVG9KYXZhU3RhdHNSZXBvcnRWYWx1ZSgKLSAgICBKTklFbnYqIGVudiwKLSAgICBjb25z
dCBydGM6OnNjb3BlZF9yZWZwdHI8U3RhdHNSZXBvcnQ6OlZhbHVlPiYgdmFsdWVfcHRyKSB7Ci0g
IC8vIFNob3VsZCB3ZSB1c2UgdGhlICcubmFtZScgZW51bSB2YWx1ZSBoZXJlIGluc3RlYWQgb2Yg
Y29udmVydGluZyB0aGUKLSAgLy8gbmFtZSB0byBhIHN0cmluZz8KLSAgcmV0dXJuIEphdmFfVmFs
dWVfQ29uc3RydWN0b3IoCi0gICAgICBlbnYsIE5hdGl2ZVRvSmF2YVN0cmluZyhlbnYsIHZhbHVl
X3B0ci0+ZGlzcGxheV9uYW1lKCkpLAotICAgICAgTmF0aXZlVG9KYXZhU3RyaW5nKGVudiwgdmFs
dWVfcHRyLT5Ub1N0cmluZygpKSk7Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0QXJy
YXk+IE5hdGl2ZVRvSmF2YVN0YXRzUmVwb3J0VmFsdWVBcnJheSgKLSAgICBKTklFbnYqIGVudiwK
LSAgICBjb25zdCBTdGF0c1JlcG9ydDo6VmFsdWVzJiB2YWx1ZV9tYXApIHsKLSAgLy8gSWdub3Jl
IHRoZSBrZXlzIGFuZCBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGUgdmFsdWVzLgotICBzdGQ6OnZl
Y3RvcjxTdGF0c1JlcG9ydDo6VmFsdWVQdHI+IHZhbHVlczsKLSAgZm9yIChjb25zdCBhdXRvJiBp
dCA6IHZhbHVlX21hcCkKLSAgICB2YWx1ZXMucHVzaF9iYWNrKGl0LnNlY29uZCk7Ci0gIHJldHVy
biBOYXRpdmVUb0phdmFPYmplY3RBcnJheShlbnYsIHZhbHVlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9yZ193ZWJydGNfU3RhdHNSZXBvcnRfMDAwMjRWYWx1ZV9jbGF6eihl
bnYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5hdGl2ZVRvSmF2YVN0YXRz
UmVwb3J0VmFsdWUpOwotfQotCi1TY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gTmF0aXZlVG9K
YXZhU3RhdHNSZXBvcnQoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RhdHNSZXBvcnQmIHJlcG9ydCkgewotICBy
ZXR1cm4gSmF2YV9TdGF0c1JlcG9ydF9Db25zdHJ1Y3RvcigKLSAgICAgIGVudiwgTmF0aXZlVG9K
YXZhU3RyaW5nKGVudiwgcmVwb3J0LmlkKCktPlRvU3RyaW5nKCkpLAotICAgICAgTmF0aXZlVG9K
YXZhU3RyaW5nKGVudiwgcmVwb3J0LlR5cGVUb1N0cmluZygpKSwgcmVwb3J0LnRpbWVzdGFtcCgp
LAotICAgICAgTmF0aXZlVG9KYXZhU3RhdHNSZXBvcnRWYWx1ZUFycmF5KGVudiwgcmVwb3J0LnZh
bHVlcygpKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1TdGF0c09ic2VydmVySm5pOjpTdGF0
c09ic2VydmVySm5pKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX29ic2VydmVyKQotICAgIDogal9vYnNlcnZl
cl9nbG9iYWxfKGpuaSwgal9vYnNlcnZlcikge30KLQotU3RhdHNPYnNlcnZlckpuaTo6flN0YXRz
T2JzZXJ2ZXJKbmkoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgU3RhdHNPYnNlcnZlckpuaTo6T25Db21w
bGV0ZShjb25zdCBTdGF0c1JlcG9ydHMmIHJlcG9ydHMpIHsKLSAgSk5JRW52KiBlbnYgPSBBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RB
cnJheT4gal9yZXBvcnRzID0KLSAgICAgIE5hdGl2ZVRvSmF2YU9iamVjdEFycmF5KGVudiwgcmVw
b3J0cywgb3JnX3dlYnJ0Y19TdGF0c1JlcG9ydF9jbGF6eihlbnYpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgW10oSk5JRW52KiBlbnYsIGNvbnN0IFN0YXRzUmVwb3J0KiByZXBvcnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZVRvSmF2YVN0
YXRzUmVwb3J0KGVudiwgKnJlcG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgSmF2YV9TdGF0c09ic2VydmVyX29uQ29tcGxldGUoZW52LCBqX29ic2VydmVyX2dsb2Jh
bF8sIGpfcmVwb3J0cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvc3RhdHNfb2JzZXJ2ZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMv
c3RhdHNfb2JzZXJ2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmZDQzMzg0
YjkyNWJiNTEwZjM4NzNkMTAwZWI4ZTIzMmY2ZTNlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3BjL3N0YXRzX29ic2VydmVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19B
TkRST0lEX1NSQ19KTklfUENfU1RBVFNfT0JTRVJWRVJfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURf
U1JDX0pOSV9QQ19TVEFUU19PQlNFUlZFUl9IXwotCi0jaW5jbHVkZSAiYXBpL3BlZXJfY29ubmVj
dGlvbl9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxw
ZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIEFkYXB0
ZXIgZm9yIGEgSmF2YSBTdGF0c09ic2VydmVyIHByZXNlbnRpbmcgYSBDKysgU3RhdHNPYnNlcnZl
ciBhbmQKLS8vIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBmcm9tIEMrKyBiYWNrIHRvIEphdmEu
Ci1jbGFzcyBTdGF0c09ic2VydmVySm5pIDogcHVibGljIFN0YXRzT2JzZXJ2ZXIgewotIHB1Ymxp
YzoKLSAgU3RhdHNPYnNlcnZlckpuaShKTklFbnYqIGpuaSwgY29uc3QgSmF2YVJlZjxqb2JqZWN0
PiYgal9vYnNlcnZlcik7Ci0gIH5TdGF0c09ic2VydmVySm5pKCkgb3ZlcnJpZGU7Ci0KLSAgdm9p
ZCBPbkNvbXBsZXRlKGNvbnN0IFN0YXRzUmVwb3J0cyYgcmVwb3J0cykgb3ZlcnJpZGU7Ci0KLSBw
cml2YXRlOgotICBjb25zdCBTY29wZWRKYXZhR2xvYmFsUmVmPGpvYmplY3Q+IGpfb2JzZXJ2ZXJf
Z2xvYmFsXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1NUQVRTX09CU0VSVkVSX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3BjL3R1cm5fY3VzdG9taXplci5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvdHVybl9j
dXN0b21pemVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzkzZmNkN2MwYmYw
M2ZmNzI4NjNlOTE1Yjk3Y2VlZDUxMGNmMzFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvdHVybl9jdXN0b21pemVyLmNjCisrKyAvZGV2L251
bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgImFwaS90
dXJuX2N1c3RvbWl6ZXIuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfcGVlcmNv
bm5lY3Rpb25fam5pL1R1cm5DdXN0b21pemVyX2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lk
L25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMv
am5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7
Ci0KLVR1cm5DdXN0b21pemVyKiBHZXROYXRpdmVUdXJuQ3VzdG9taXplcigKLSAgICBKTklFbnYq
IGVudiwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3R1cm5fY3VzdG9taXplcikgewot
ICBpZiAoSXNOdWxsKGVudiwgal90dXJuX2N1c3RvbWl6ZXIpKQotICAgIHJldHVybiBudWxscHRy
OwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx3ZWJydGM6OlR1cm5DdXN0b21pemVyKj4oCi0g
ICAgICBKYXZhX1R1cm5DdXN0b21pemVyX2dldE5hdGl2ZVR1cm5DdXN0b21pemVyKGVudiwgal90
dXJuX2N1c3RvbWl6ZXIpKTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1R1cm5DdXN0b21pemVyX0Zy
ZWVUdXJuQ3VzdG9taXplcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqbG9uZyBqX3R1cm5fY3Vz
dG9taXplcl9wb2ludGVyKSB7Ci0gIGRlbGV0ZSByZWludGVycHJldF9jYXN0PFR1cm5DdXN0b21p
emVyKj4oal90dXJuX2N1c3RvbWl6ZXJfcG9pbnRlcik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBq
bmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvdHVybl9jdXN0
b21pemVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvam5pL3BjL3R1cm5fY3VzdG9taXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNTkyMzRmYzc2NDRkYjUyZWRjYzU0NGZlMzVkNGZlNDc4N2VmNzVjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvdHVybl9j
dXN0b21pemVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfUENfVFVSTl9DVVNUT01JWkVSX0hf
Ci0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfUENfVFVSTl9DVVNUT01JWkVSX0hfCi0KLSNp
bmNsdWRlICJhcGkvdHVybl9jdXN0b21pemVyLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0
aXZlX2FwaS9qbmkvc2NvcGVkX2phdmFfcmVmLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFt
ZXNwYWNlIGpuaSB7Ci0KLVR1cm5DdXN0b21pemVyKiBHZXROYXRpdmVUdXJuQ3VzdG9taXplcigK
LSAgICBKTklFbnYqIGVudiwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3R1cm5fY3Vz
dG9taXplcik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMK
LQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1RVUk5fQ1VTVE9NSVpFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9wYy92aWRlby5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvcGMvdmlkZW8uY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNTI1ODQzNmVmODBkNjEwZDkxYjI0NzUxMjYwMTRmNjE4
NWJmODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9wYy92aWRlby5jYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3BjL3ZpZGVvLmgiCi0KLSNp
bmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJhcGkvdmlkZW9f
Y29kZWNzL3ZpZGVvX2RlY29kZXJfZmFjdG9yeS5oIgotI2luY2x1ZGUgImFwaS92aWRlb19jb2Rl
Y3MvdmlkZW9fZW5jb2Rlcl9mYWN0b3J5LmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5o
IgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2FuZHJvaWRfdmlkZW9fdHJhY2tfc291cmNlLmgi
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19kZWNvZGVyX2ZhY3Rvcnlfd3Jh
cHBlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZW5jb2Rlcl9mYWN0
b3J5X3dyYXBwZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQot
VmlkZW9FbmNvZGVyRmFjdG9yeSogQ3JlYXRlVmlkZW9FbmNvZGVyRmFjdG9yeSgKLSAgICBKTklF
bnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2VuY29kZXJfZmFjdG9yeSkg
ewotICByZXR1cm4gSXNOdWxsKGpuaSwgal9lbmNvZGVyX2ZhY3RvcnkpCi0gICAgICAgICAgICAg
PyBudWxscHRyCi0gICAgICAgICAgICAgOiBuZXcgVmlkZW9FbmNvZGVyRmFjdG9yeVdyYXBwZXIo
am5pLCBqX2VuY29kZXJfZmFjdG9yeSk7Ci19Ci0KLVZpZGVvRGVjb2RlckZhY3RvcnkqIENyZWF0
ZVZpZGVvRGVjb2RlckZhY3RvcnkoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2YVJl
Zjxqb2JqZWN0PiYgal9kZWNvZGVyX2ZhY3RvcnkpIHsKLSAgcmV0dXJuIElzTnVsbChqbmksIGpf
ZGVjb2Rlcl9mYWN0b3J5KQotICAgICAgICAgICAgID8gbnVsbHB0cgotICAgICAgICAgICAgIDog
bmV3IFZpZGVvRGVjb2RlckZhY3RvcnlXcmFwcGVyKGpuaSwgal9kZWNvZGVyX2ZhY3RvcnkpOwot
fQotCi12b2lkKiBDcmVhdGVWaWRlb1NvdXJjZShKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJ0Yzo6VGhyZWFkKiBzaWduYWxpbmdfdGhyZWFkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgcnRjOjpUaHJlYWQqIHdvcmtlcl90aHJlYWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBqYm9vbGVhbiBpc19zY3JlZW5jYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgamJv
b2xlYW4gYWxpZ25fdGltZXN0YW1wcykgewotICBydGM6OnNjb3BlZF9yZWZwdHI8QW5kcm9pZFZp
ZGVvVHJhY2tTb3VyY2U+IHNvdXJjZSgKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U+KAotICAgICAgICAgIHNpZ25hbGluZ190aHJlYWQsIGVu
diwgaXNfc2NyZWVuY2FzdCwgYWxpZ25fdGltZXN0YW1wcykpOwotICByZXR1cm4gc291cmNlLnJl
bGVhc2UoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2puaS9wYy92aWRlby5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9wYy92aWRlby5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmJjNjQwNmExYTBlZjM5OGJiMzg5MjE3MjA4MDViY2Qy
YzJkYThhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvcGMvdmlkZW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9QQ19WSURFT19IXwotI2RlZmlu
ZSBTREtfQU5EUk9JRF9TUkNfSk5JX1BDX1ZJREVPX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLQot
I2luY2x1ZGUgImFwaS9zY29wZWRfcmVmcHRyLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGhyZWFk
LmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvc2NvcGVkX2phdmFfcmVm
LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotY2xhc3MgVmlkZW9FbmNvZGVyRmFjdG9yeTsKLWNs
YXNzIFZpZGVvRGVjb2RlckZhY3Rvcnk7Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLVZpZGVvRW5jb2RlckZhY3RvcnkqIENy
ZWF0ZVZpZGVvRW5jb2RlckZhY3RvcnkoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3QgSmF2
YVJlZjxqb2JqZWN0PiYgal9lbmNvZGVyX2ZhY3RvcnkpOwotCi1WaWRlb0RlY29kZXJGYWN0b3J5
KiBDcmVhdGVWaWRlb0RlY29kZXJGYWN0b3J5KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0
IEphdmFSZWY8am9iamVjdD4mIGpfZGVjb2Rlcl9mYWN0b3J5KTsKLQotdm9pZCogQ3JlYXRlVmlk
ZW9Tb3VyY2UoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICBydGM6OlRocmVh
ZCogc2lnbmFsaW5nX3RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ0Yzo6VGhyZWFk
KiB3b3JrZXJfdGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gaXNfc2Ny
ZWVuY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGFsaWduX3RpbWVzdGFt
cHMpOwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNl
bmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9QQ19WSURFT19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS9zY29wZWRfamF2YV9yZWZfY291bnRlZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvc2NvcGVkX2phdmFfcmVmX2NvdW50
ZWQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZjhjN2FkZTUwYzIyOWZmOWQw
OTdhY2ZlN2U0OTZhM2I0MzY2NzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2Rr
L2FuZHJvaWQvc3JjL2puaS9zY29wZWRfamF2YV9yZWZfY291bnRlZC5jYworKysgL2Rldi9udWxs
CkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTkgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9zcmMvam5pL3Njb3BlZF9qYXZhX3JlZl9jb3VudGVkLmgiCi0KLSNpbmNsdWRlICJzZGsv
YW5kcm9pZC9nZW5lcmF0ZWRfYmFzZV9qbmkvUmVmQ291bnRlZF9qbmkuaCIKLQotbmFtZXNwYWNl
IHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8gc3RhdGljCi1TY29wZWRKYXZhUmVmQ291
bnRlZCBTY29wZWRKYXZhUmVmQ291bnRlZDo6UmV0YWluKAotICAgIEpOSUVudiogam5pLAotICAg
IGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfb2JqZWN0KSB7Ci0gIEphdmFfUmVmQ291bnRlZF9y
ZXRhaW4oam5pLCBqX29iamVjdCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpCi0gICAgICA8PCAi
VW5leHBlY3RlZCBqYXZhIGV4Y2VwdGlvbiBmcm9tIGphdmEgSmF2YVJlZkNvdW50ZWQucmV0YWlu
KCkiOwotICByZXR1cm4gQWRvcHQoam5pLCBqX29iamVjdCk7Ci19Ci0KLVNjb3BlZEphdmFSZWZD
b3VudGVkOjp+U2NvcGVkSmF2YVJlZkNvdW50ZWQoKSB7Ci0gIGlmICghal9vYmplY3RfLmlzX251
bGwoKSkgewotICAgIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7
Ci0gICAgSmF2YV9SZWZDb3VudGVkX3JlbGVhc2Uoam5pLCBqX29iamVjdF8pOwotICAgIENIRUNL
X0VYQ0VQVElPTihqbmkpCi0gICAgICAgIDw8ICJVbmV4cGVjdGVkIGphdmEgZXhjZXB0aW9uIGZy
b20gamF2YSBSZWZDb3VudGVkLnJlbGVhc2UoKSI7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS9zY29wZWRfamF2
YV9yZWZfY291bnRlZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvc3JjL2puaS9zY29wZWRfamF2YV9yZWZfY291bnRlZC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjhmMTgzMWI0ZjMxYjMwOTQ1Mzk2NmIyYzQwMDRkZGJl
NWE2YjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvc2NvcGVkX2phdmFfcmVmX2NvdW50ZWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTkgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfU0NPUEVE
X0pBVkFfUkVGX0NPVU5URURfSF8KLSNkZWZpbmUgU0RLX0FORFJPSURfU1JDX0pOSV9TQ09QRURf
SkFWQV9SRUZfQ09VTlRFRF9IXwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9q
bmkvc2NvcGVkX2phdmFfcmVmLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpu
aSB7Ci0KLS8vIEhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgamF2YSBvYmplY3QgaW1wbGVtZW50aW5n
IHRoZSBSZWZDb3VudGVkIGludGVyZmFjZSwgYW5kCi0vLyBjYWxscyBpdHMgcmVsZWFzZSgpIG1l
dGhvZCBmcm9tIHRoZSBkZXN0cnVjdG9yLgotY2xhc3MgU2NvcGVkSmF2YVJlZkNvdW50ZWQgewot
IHB1YmxpYzoKLSAgLy8gVGFrZXMgb3ZlciB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlLgotICBzdGF0
aWMgU2NvcGVkSmF2YVJlZkNvdW50ZWQgQWRvcHQoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX29iamVjdCkg
ewotICAgIHJldHVybiBTY29wZWRKYXZhUmVmQ291bnRlZChqbmksIGpfb2JqZWN0KTsKLSAgfQot
Ci0gIC8vIFJldGFpbnMgdGhlIGphdmEgb2JqZWN0IGZvciB0aGUgbGl2ZSB0aW1lIG9mIHRoaXMg
b2JqZWN0LgotICBzdGF0aWMgU2NvcGVkSmF2YVJlZkNvdW50ZWQgUmV0YWluKEpOSUVudiogam5p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfb2JqZWN0KTsKLSAgU2NvcGVkSmF2YVJlZkNvdW50ZWQoU2NvcGVkSmF2YVJlZkNv
dW50ZWQmJiBvdGhlcikgPSBkZWZhdWx0OwotCi0gIC8vIFRPRE8obmlzc2UpOiBJbXBsZW1lbnQg
bW92ZSBhc3NpZ25tZW50IGFuZCBjb3B5IG9wZXJhdGlvbnMgd2hlbiBuZWVkZWQuCi0gIFNjb3Bl
ZEphdmFSZWZDb3VudGVkKGNvbnN0IFNjb3BlZEphdmFSZWZDb3VudGVkJiBvdGhlcikgPSBkZWxl
dGU7Ci0gIFNjb3BlZEphdmFSZWZDb3VudGVkJiBvcGVyYXRvcj0oY29uc3QgU2NvcGVkSmF2YVJl
ZkNvdW50ZWQmKSA9IGRlbGV0ZTsKLQotICB+U2NvcGVkSmF2YVJlZkNvdW50ZWQoKTsKLQotIHBy
aXZhdGU6Ci0gIC8vIEFkb3B0cyByZWZlcmVuY2UuCi0gIFNjb3BlZEphdmFSZWZDb3VudGVkKEpO
SUVudiogam5pLCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX29iamVjdCkKLSAgICAgIDogal9v
YmplY3RfKGpuaSwgal9vYmplY3QpIHt9Ci0KLSAgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0
PiBqX29iamVjdF87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLSNlbmRpZiAgLy8gU0RLX0FORFJPSURfU1JDX0pOSV9TQ09QRURfSkFWQV9SRUZf
Q09VTlRFRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS90aW1lc3RhbXBfYWxpZ25lci5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
dGltZXN0YW1wX2FsaWduZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYzVm
ZDlkOWY4NTI1OTQ1ZDgwMmZlZWY5MjlkMGY2NjEyNjY5OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS90aW1lc3RhbXBfYWxpZ25lci5jYworKysg
L2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTggVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRl
IDxqbmkuaD4KLQotI2luY2x1ZGUgInJ0Y19iYXNlL3RpbWVfdXRpbHMuaCIKLSNpbmNsdWRlICJy
dGNfYmFzZS90aW1lc3RhbXBfYWxpZ25lci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVy
YXRlZF92aWRlb19qbmkvVGltZXN0YW1wQWxpZ25lcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNw
YWNlIGpuaSB7Ci0KLXN0YXRpYyBqbG9uZyBKTklfVGltZXN0YW1wQWxpZ25lcl9SdGNUaW1lTmFu
b3MoSk5JRW52KiBlbnYpIHsKLSAgcmV0dXJuIHJ0Yzo6VGltZU5hbm9zKCk7Ci19Ci0KLXN0YXRp
YyBqbG9uZyBKTklfVGltZXN0YW1wQWxpZ25lcl9DcmVhdGVUaW1lc3RhbXBBbGlnbmVyKEpOSUVu
diogZW52KSB7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKG5ldyBydGM6OlRpbWVzdGFtcEFs
aWduZXIoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEpOSV9UaW1lc3RhbXBBbGlnbmVyX1JlbGVhc2VU
aW1lc3RhbXBBbGlnbmVyKAotICAgIEpOSUVudiogZW52LAotICAgIGpsb25nIHRpbWVzdGFtcF9h
bGlnbmVyKSB7Ci0gIGRlbGV0ZSByZWludGVycHJldF9jYXN0PHJ0Yzo6VGltZXN0YW1wQWxpZ25l
cio+KHRpbWVzdGFtcF9hbGlnbmVyKTsKLX0KLQotc3RhdGljIGpsb25nIEpOSV9UaW1lc3RhbXBB
bGlnbmVyX1RyYW5zbGF0ZVRpbWVzdGFtcCgKLSAgICBKTklFbnYqIGVudiwKLSAgICBqbG9uZyB0
aW1lc3RhbXBfYWxpZ25lciwKLSAgICBqbG9uZyBjYW1lcmFfdGltZV9ucykgewotICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxydGM6OlRpbWVzdGFtcEFsaWduZXIqPih0aW1lc3RhbXBfYWxpZ25l
cikKLSAgICAgICAgICAgICAtPlRyYW5zbGF0ZVRpbWVzdGFtcChjYW1lcmFfdGltZV9ucyAvIHJ0
Yzo6a051bU5hbm9zZWNzUGVyTWljcm9zZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcnRjOjpUaW1lTWljcm9zKCkpICoKLSAgICAgICAgIHJ0Yzo6a051bU5hbm9zZWNzUGVy
TWljcm9zZWM7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fY29kZWNfaW5mby5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fY29k
ZWNfaW5mby5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxOGExZDIzZmM1YmYw
ZDlhZTVjNWUzMDI2NmIzZThhOGI3OGRkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2NvZGVjX2luZm8uY2MKKysrIC9kZXYvbnVsbApA
QCAtMSwzNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS92aWRlb19jb2RlY19pbmZvLmgiCi0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9n
ZW5lcmF0ZWRfdmlkZW9fam5pL1ZpZGVvQ29kZWNJbmZvX2puaS5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9p
ZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNl
IGpuaSB7Ci0KLVNkcFZpZGVvRm9ybWF0IFZpZGVvQ29kZWNJbmZvVG9TZHBWaWRlb0Zvcm1hdChK
TklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2luZm8pIHsKLSAgcmV0dXJuIFNkcFZpZGVvRm9y
bWF0KAotICAgICAgSmF2YVRvTmF0aXZlU3RyaW5nKGpuaSwgSmF2YV9WaWRlb0NvZGVjSW5mb19n
ZXROYW1lKGpuaSwgal9pbmZvKSksCi0gICAgICBKYXZhVG9OYXRpdmVTdHJpbmdNYXAoam5pLCBK
YXZhX1ZpZGVvQ29kZWNJbmZvX2dldFBhcmFtcyhqbmksIGpfaW5mbykpKTsKLX0KLQotU2NvcGVk
SmF2YUxvY2FsUmVmPGpvYmplY3Q+IFNkcFZpZGVvRm9ybWF0VG9WaWRlb0NvZGVjSW5mbygKLSAg
ICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KSB7Ci0gIFNj
b3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX3BhcmFtcyA9Ci0gICAgICBOYXRpdmVUb0phdmFT
dHJpbmdNYXAoam5pLCBmb3JtYXQucGFyYW1ldGVycyk7Ci0gIHJldHVybiBKYXZhX1ZpZGVvQ29k
ZWNJbmZvX0NvbnN0cnVjdG9yKAotICAgICAgam5pLCBOYXRpdmVUb0phdmFTdHJpbmcoam5pLCBm
b3JtYXQubmFtZSksIGpfcGFyYW1zKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19jb2RlY19pbmZvLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMv
am5pL3ZpZGVvX2NvZGVjX2luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdi
MDczMDg2YTViNTVjZGY3NzlmNjczOGJmN2RjNzg0Yjk4NjJkZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2NvZGVjX2luZm8uaAorKysg
L2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYg
U0RLX0FORFJPSURfU1JDX0pOSV9WSURFT19DT0RFQ19JTkZPX0hfCi0jZGVmaW5lIFNES19BTkRS
T0lEX1NSQ19KTklfVklERU9fQ09ERUNfSU5GT19IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLSNp
bmNsdWRlICJhcGkvdmlkZW9fY29kZWNzL3NkcF92aWRlb19mb3JtYXQuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewot
bmFtZXNwYWNlIGpuaSB7Ci0KLVNkcFZpZGVvRm9ybWF0IFZpZGVvQ29kZWNJbmZvVG9TZHBWaWRl
b0Zvcm1hdChKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBpbmZvKTsKLVNjb3BlZEphdmFMb2Nh
bFJlZjxqb2JqZWN0PiBTZHBWaWRlb0Zvcm1hdFRvVmlkZW9Db2RlY0luZm8oCi0gICAgSk5JRW52
KiBqbmksCi0gICAgY29uc3QgU2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCk7Ci0KLX0gIC8vIG5hbWVz
cGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9J
RF9TUkNfSk5JX1ZJREVPX0NPREVDX0lORk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fY29k
ZWNfc3RhdHVzLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19jb2RlY19zdGF0dXMuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGUzNGQ2ZDY5ZTJhNTYzYTA3MGE3ZTcxOGIyNWRhNTcwNDMyOTQyMTgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19jb2RlY19zdGF0dXMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19jb2RlY19z
dGF0dXMuaCIKLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF92aWRlb19qbmkvVmlk
ZW9Db2RlY1N0YXR1c19qbmkuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5p
IHsKLQotaW50MzJfdCBKYXZhVG9OYXRpdmVWaWRlb0NvZGVjU3RhdHVzKAotICAgIEpOSUVudiog
ZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9fY29kZWNfc3RhdHVzKSB7
Ci0gIHJldHVybiBKYXZhX1ZpZGVvQ29kZWNTdGF0dXNfZ2V0TnVtYmVyKGVudiwgal92aWRlb19j
b2RlY19zdGF0dXMpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2NvZGVjX3N0YXR1cy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19jb2RlY19zdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3YmQ0NjM0
MDQyZGU1ZDEzYzI2ZGE4NGZiMjYzYzk3MDBjOWIzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2NvZGVjX3N0YXR1cy5oCisrKyAvZGV2
L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtf
QU5EUk9JRF9TUkNfSk5JX1ZJREVPX0NPREVDX1NUQVRVU19IXwotI2RlZmluZSBTREtfQU5EUk9J
RF9TUkNfSk5JX1ZJREVPX0NPREVDX1NUQVRVU19IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5j
bHVkZSA8c3RkaW50Lmg+Ci0KLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9z
Y29wZWRfamF2YV9yZWYuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsK
LWludDMyX3QgSmF2YVRvTmF0aXZlVmlkZW9Db2RlY1N0YXR1cygKLSAgICBKTklFbnYqIGVudiwK
LSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3ZpZGVvX2NvZGVjX3N0YXR1cyk7Ci19ICAv
LyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gU0RL
X0FORFJPSURfU1JDX0pOSV9WSURFT19DT0RFQ19TVEFUVVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
dmlkZW9fZGVjb2Rlcl9mYWN0b3J5X3dyYXBwZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2RlY29kZXJfZmFj
dG9yeV93cmFwcGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDkyNDA0OTNh
NWMxMGYyMGU4YmU5OTU4MmY5YzdiMDZhMTFmY2IzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZGVjb2Rlcl9mYWN0b3J5X3dyYXBwZXIu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19kZWNvZGVyX2ZhY3Rvcnlfd3JhcHBl
ci5oIgotCi0jaW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy9zZHBfdmlkZW9fZm9ybWF0LmgiCi0j
aW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy92aWRlb19kZWNvZGVyLmgiCi0jaW5jbHVkZSAicnRj
X2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF92aWRlb19q
bmkvVmlkZW9EZWNvZGVyRmFjdG9yeV9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9uYXRp
dmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92
aWRlb19jb2RlY19pbmZvLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19k
ZWNvZGVyX3dyYXBwZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsK
LQotVmlkZW9EZWNvZGVyRmFjdG9yeVdyYXBwZXI6OlZpZGVvRGVjb2RlckZhY3RvcnlXcmFwcGVy
KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGRlY29kZXJf
ZmFjdG9yeSkKLSAgICA6IGRlY29kZXJfZmFjdG9yeV8oam5pLCBkZWNvZGVyX2ZhY3RvcnkpIHt9
Ci1WaWRlb0RlY29kZXJGYWN0b3J5V3JhcHBlcjo6flZpZGVvRGVjb2RlckZhY3RvcnlXcmFwcGVy
KCkgPSBkZWZhdWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8VmlkZW9EZWNvZGVyPiBWaWRlb0RlY29k
ZXJGYWN0b3J5V3JhcHBlcjo6Q3JlYXRlVmlkZW9EZWNvZGVyKAotICAgIGNvbnN0IFNkcFZpZGVv
Rm9ybWF0JiBmb3JtYXQpIHsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZO
ZWVkZWQoKTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfY29kZWNfaW5mbyA9Ci0g
ICAgICBTZHBWaWRlb0Zvcm1hdFRvVmlkZW9Db2RlY0luZm8oam5pLCBmb3JtYXQpOwotICBTY29w
ZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gZGVjb2RlciA9IEphdmFfVmlkZW9EZWNvZGVyRmFjdG9y
eV9jcmVhdGVEZWNvZGVyKAotICAgICAgam5pLCBkZWNvZGVyX2ZhY3RvcnlfLCBqX2NvZGVjX2lu
Zm8pOwotICBpZiAoIWRlY29kZXIub2JqKCkpCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIHJldHVy
biBKYXZhVG9OYXRpdmVWaWRlb0RlY29kZXIoam5pLCBkZWNvZGVyKTsKLX0KLQotc3RkOjp2ZWN0
b3I8U2RwVmlkZW9Gb3JtYXQ+IFZpZGVvRGVjb2RlckZhY3RvcnlXcmFwcGVyOjpHZXRTdXBwb3J0
ZWRGb3JtYXRzKCkKLSAgICBjb25zdCB7Ci0gIEpOSUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRo
cmVhZElmTmVlZGVkKCk7Ci0gIHJldHVybiBKYXZhVG9OYXRpdmVWZWN0b3I8U2RwVmlkZW9Gb3Jt
YXQ+KAotICAgICAgZW52LCBKYXZhX1ZpZGVvRGVjb2RlckZhY3RvcnlfZ2V0U3VwcG9ydGVkQ29k
ZWNzKGVudiwgZGVjb2Rlcl9mYWN0b3J5XyksCi0gICAgICAmVmlkZW9Db2RlY0luZm9Ub1NkcFZp
ZGVvRm9ybWF0KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19kZWNvZGVyX2ZhY3Rvcnlfd3JhcHBlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2puaS92aWRlb19kZWNvZGVyX2ZhY3Rvcnlfd3JhcHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyMTIyZmRjMDA4NmM5ZjgzZjU5M2RhNmE4NjU5MDNkZTkwYTYxNTJlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZGVj
b2Rlcl9mYWN0b3J5X3dyYXBwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FORFJPSURfU1JDX0pOSV9WSURFT19ERUNP
REVSX0ZBQ1RPUllfV1JBUFBFUl9IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVP
X0RFQ09ERVJfRkFDVE9SWV9XUkFQUEVSX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLQotI2luY2x1
ZGUgImFwaS92aWRlb19jb2RlY3MvdmlkZW9fZGVjb2Rlcl9mYWN0b3J5LmgiCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsK
LW5hbWVzcGFjZSBqbmkgewotCi0vLyBXcmFwcGVyIGZvciBKYXZhIFZpZGVvRGVjb2RlckZhY3Rv
cnkgY2xhc3MuIERlbGVnYXRlcyBtZXRob2QgY2FsbHMgdGhyb3VnaAotLy8gSk5JIGFuZCB3cmFw
cyB0aGUgZGVjb2RlciBpbnNpZGUgVmlkZW9EZWNvZGVyV3JhcHBlci4KLWNsYXNzIFZpZGVvRGVj
b2RlckZhY3RvcnlXcmFwcGVyIDogcHVibGljIFZpZGVvRGVjb2RlckZhY3RvcnkgewotIHB1Ymxp
YzoKLSAgVmlkZW9EZWNvZGVyRmFjdG9yeVdyYXBwZXIoSk5JRW52KiBqbmksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGRlY29kZXJfZmFjdG9y
eSk7Ci0gIH5WaWRlb0RlY29kZXJGYWN0b3J5V3JhcHBlcigpIG92ZXJyaWRlOwotCi0gIHN0ZDo6
dmVjdG9yPFNkcFZpZGVvRm9ybWF0PiBHZXRTdXBwb3J0ZWRGb3JtYXRzKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0RlY29kZXI+IENyZWF0ZVZpZGVvRGVjb2RlcigK
LSAgICAgIGNvbnN0IFNkcFZpZGVvRm9ybWF0JiBmb3JtYXQpIG92ZXJyaWRlOwotCi0gcHJpdmF0
ZToKLSAgY29uc3QgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBkZWNvZGVyX2ZhY3Rvcnlf
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0j
ZW5kaWYgIC8vIFNES19BTkRST0lEX1NSQ19KTklfVklERU9fREVDT0RFUl9GQUNUT1JZX1dSQVBQ
RVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZGVjb2Rlcl9mYWxsYmFjay5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
dmlkZW9fZGVjb2Rlcl9mYWxsYmFjay5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTY3ODI4MGY2OWJjMTMxZjNmNTY2NTQwZjMyMzIwMGE2YjhhZGVjOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2RlY29kZXJfZmFsbGJh
Y2suY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJhcGkvdmlkZW9fY29kZWNzL3ZpZGVvX2Rl
Y29kZXJfc29mdHdhcmVfZmFsbGJhY2tfd3JhcHBlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lk
L2dlbmVyYXRlZF92aWRlb19qbmkvVmlkZW9EZWNvZGVyRmFsbGJhY2tfam5pLmgiCi0jaW5jbHVk
ZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgInNkay9hbmRy
b2lkL3NyYy9qbmkvdmlkZW9fZGVjb2Rlcl93cmFwcGVyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMg
ewotbmFtZXNwYWNlIGpuaSB7Ci0KLXN0YXRpYyBqbG9uZyBKTklfVmlkZW9EZWNvZGVyRmFsbGJh
Y2tfQ3JlYXRlRGVjb2RlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUGFyYW1S
ZWY8am9iamVjdD4mIGpfZmFsbGJhY2tfZGVjb2RlciwKLSAgICBjb25zdCBKYXZhUGFyYW1SZWY8
am9iamVjdD4mIGpfcHJpbWFyeV9kZWNvZGVyKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0Rl
Y29kZXI+IGZhbGxiYWNrX2RlY29kZXIgPQotICAgICAgSmF2YVRvTmF0aXZlVmlkZW9EZWNvZGVy
KGpuaSwgal9mYWxsYmFja19kZWNvZGVyKTsKLSAgc3RkOjp1bmlxdWVfcHRyPFZpZGVvRGVjb2Rl
cj4gcHJpbWFyeV9kZWNvZGVyID0KLSAgICAgIEphdmFUb05hdGl2ZVZpZGVvRGVjb2Rlcihqbmks
IGpfcHJpbWFyeV9kZWNvZGVyKTsKLQotICBWaWRlb0RlY29kZXIqIG5hdGl2ZVdyYXBwZXIgPQot
ICAgICAgQ3JlYXRlVmlkZW9EZWNvZGVyU29mdHdhcmVGYWxsYmFja1dyYXBwZXIoc3RkOjptb3Zl
KGZhbGxiYWNrX2RlY29kZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptb3ZlKHByaW1hcnlfZGVjb2RlcikpCi0gICAgICAgICAgLnJlbGVh
c2UoKTsKLQotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihuYXRpdmVXcmFwcGVyKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2puaS92aWRlb19kZWNvZGVyX3dyYXBwZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2RlY29kZXJfd3JhcHBl
ci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRjNmUxNTc0YzZiMWY3NDhjOGNm
MTM5MzM4ZjgxNDUwMDE2MmNhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvam5pL3ZpZGVvX2RlY29kZXJfd3JhcHBlci5jYworKysgL2Rldi9udWxsCkBA
IC0xLDI4MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJv
aWQvc3JjL2puaS92aWRlb19kZWNvZGVyX3dyYXBwZXIuaCIKLQotI2luY2x1ZGUgImFwaS92aWRl
by92aWRlb19mcmFtZS5oIgotI2luY2x1ZGUgIm1vZHVsZXMvdmlkZW9fY29kaW5nL2luY2x1ZGUv
dmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAibW9kdWxlcy92aWRlb19jb2Rpbmcv
dXRpbGl0eS92cDhfaGVhZGVyX3BhcnNlci5oIgotI2luY2x1ZGUgIm1vZHVsZXMvdmlkZW9fY29k
aW5nL3V0aWxpdHkvdnA5X3VuY29tcHJlc3NlZF9oZWFkZXJfcGFyc2VyLmgiCi0jaW5jbHVkZSAi
cnRjX2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL251bWVyaWNzL3NhZmVfY29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1lX3V0aWxzLmgiCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVvX2puaS9WaWRlb0RlY29kZXJXcmFwcGVyX2puaS5o
IgotI2luY2x1ZGUgInNkay9hbmRyb2lkL2dlbmVyYXRlZF92aWRlb19qbmkvVmlkZW9EZWNvZGVy
X2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL25hdGl2ZV9hcGkvam5pL2phdmFfdHlwZXMu
aCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2VuY29kZWRfaW1hZ2UuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2NvZGVjX3N0YXR1cy5oIgotI2luY2x1ZGUg
InNkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZnJhbWUuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7
Ci1uYW1lc3BhY2Ugam5pIHsKLQotbmFtZXNwYWNlIHsKLS8vIFJUUCB0aW1lc3RhbXBzIGFyZSA5
MCBrSHouCi1jb25zdCBpbnQ2NF90IGtOdW1SdHBUaWNrc1Blck1pbGxpc2VjID0gOTAwMDAgLyBy
dGM6OmtOdW1NaWxsaXNlY3NQZXJTZWM7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEc3QsIHR5cGVu
YW1lIFNyYz4KLWlubGluZSBhYnNsOjpvcHRpb25hbDxEc3Q+IGNhc3Rfb3B0aW9uYWwoY29uc3Qg
YWJzbDo6b3B0aW9uYWw8U3JjPiYgdmFsdWUpIHsKLSAgcmV0dXJuIHZhbHVlID8gYWJzbDo6b3B0
aW9uYWw8RHN0PihydGM6OmRjaGVja2VkX2Nhc3Q8RHN0LCBTcmM+KCp2YWx1ZSkpCi0gICAgICAg
ICAgICAgICA6IGFic2w6Om51bGxvcHQ7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotVmlkZW9EZWNv
ZGVyV3JhcHBlcjo6VmlkZW9EZWNvZGVyV3JhcHBlcihKTklFbnYqIGpuaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgZGVj
b2RlcikKLSAgICA6IGRlY29kZXJfKGpuaSwgZGVjb2RlciksCi0gICAgICBpbXBsZW1lbnRhdGlv
bl9uYW1lXyhKYXZhVG9TdGRTdHJpbmcoCi0gICAgICAgICAgam5pLAotICAgICAgICAgIEphdmFf
VmlkZW9EZWNvZGVyX2dldEltcGxlbWVudGF0aW9uTmFtZShqbmksIGRlY29kZXIpKSksCi0gICAg
ICBpbml0aWFsaXplZF8oZmFsc2UpLAotICAgICAgcXBfcGFyc2luZ19lbmFibGVkXyh0cnVlKSAg
Ly8gUVAgcGFyc2luZyBzdGFydHMgZW5hYmxlZCBhbmQgd2UgZGlzYWJsZSBpdAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRlY29kZXIgcHJvdmlkZXMgZnJhbWVz
LgotCi17Ci0gIGRlY29kZXJfdGhyZWFkX2NoZWNrZXJfLkRldGFjaCgpOwotfQotCi1WaWRlb0Rl
Y29kZXJXcmFwcGVyOjp+VmlkZW9EZWNvZGVyV3JhcHBlcigpID0gZGVmYXVsdDsKLQotaW50MzJf
dCBWaWRlb0RlY29kZXJXcmFwcGVyOjpJbml0RGVjb2RlKGNvbnN0IFZpZGVvQ29kZWMqIGNvZGVj
X3NldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMy
X3QgbnVtYmVyX29mX2NvcmVzKSB7Ci0gIFJUQ19EQ0hFQ0tfUlVOX09OKCZkZWNvZGVyX3RocmVh
ZF9jaGVja2VyXyk7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
KCk7Ci0gIGNvZGVjX3NldHRpbmdzXyA9ICpjb2RlY19zZXR0aW5nczsKLSAgbnVtYmVyX29mX2Nv
cmVzXyA9IG51bWJlcl9vZl9jb3JlczsKLSAgcmV0dXJuIEluaXREZWNvZGVJbnRlcm5hbChqbmkp
OwotfQotCi1pbnQzMl90IFZpZGVvRGVjb2RlcldyYXBwZXI6OkluaXREZWNvZGVJbnRlcm5hbChK
TklFbnYqIGpuaSkgewotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gc2V0dGluZ3MgPSBK
YXZhX1NldHRpbmdzX0NvbnN0cnVjdG9yKAotICAgICAgam5pLCBudW1iZXJfb2ZfY29yZXNfLCBj
b2RlY19zZXR0aW5nc18ud2lkdGgsIGNvZGVjX3NldHRpbmdzXy5oZWlnaHQpOwotCi0gIFNjb3Bl
ZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBjYWxsYmFjayA9Ci0gICAgICBKYXZhX1ZpZGVvRGVjb2Rl
cldyYXBwZXJfY3JlYXRlRGVjb2RlckNhbGxiYWNrKGpuaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmdGcm9tUG9pbnRlcih0aGlzKSk7
Ci0KLSAgaW50MzJfdCBzdGF0dXMgPSBKYXZhVG9OYXRpdmVWaWRlb0NvZGVjU3RhdHVzKAotICAg
ICAgam5pLCBKYXZhX1ZpZGVvRGVjb2Rlcl9pbml0RGVjb2RlKGpuaSwgZGVjb2Rlcl8sIHNldHRp
bmdzLCBjYWxsYmFjaykpOwotICBSVENfTE9HKExTX0lORk8pIDw8ICJpbml0RGVjb2RlOiAiIDw8
IHN0YXR1czsKLSAgaWYgKHN0YXR1cyA9PSBXRUJSVENfVklERU9fQ09ERUNfT0spIHsKLSAgICBp
bml0aWFsaXplZF8gPSB0cnVlOwotICB9Ci0KLSAgLy8gVGhlIGRlY29kZXIgd2FzIHJlaW5pdGlh
bGl6ZWQgc28gcmUtZW5hYmxlIHRoZSBRUCBwYXJzaW5nIGluIGNhc2UgaXQgc3RvcHMKLSAgLy8g
cHJvdmlkaW5nIFFQIHZhbHVlcy4KLSAgcXBfcGFyc2luZ19lbmFibGVkXyA9IHRydWU7Ci0KLSAg
cmV0dXJuIHN0YXR1czsKLX0KLQotaW50MzJfdCBWaWRlb0RlY29kZXJXcmFwcGVyOjpEZWNvZGUo
Ci0gICAgY29uc3QgRW5jb2RlZEltYWdlJiBpbWFnZV9wYXJhbSwKLSAgICBib29sIG1pc3Npbmdf
ZnJhbWVzLAotICAgIGludDY0X3QgcmVuZGVyX3RpbWVfbXMpIHsKLSAgUlRDX0RDSEVDS19SVU5f
T04oJmRlY29kZXJfdGhyZWFkX2NoZWNrZXJfKTsKLSAgaWYgKCFpbml0aWFsaXplZF8pIHsKLSAg
ICAvLyBNb3N0IGxpa2VseSBpbml0aWFsaXppbmcgdGhlIGNvZGVjIGZhaWxlZC4KLSAgICByZXR1
cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwotICB9Ci0KLSAgLy8gTWFr
ZSBhIG11dGFibGUgY29weSBzbyB3ZSBjYW4gbW9kaWZ5IHRoZSB0aW1lc3RhbXAuCi0gIEVuY29k
ZWRJbWFnZSBpbnB1dF9pbWFnZShpbWFnZV9wYXJhbSk7Ci0gIC8vIFdlIHVzZSBSVFAgdGltZXN0
YW1wIGZvciBjYXB0dXJlIHRpbWUgYmVjYXVzZSBjYXB0dXJlX3RpbWVfbXNfIGlzIGFsd2F5cyAw
LgotICBpbnB1dF9pbWFnZS5jYXB0dXJlX3RpbWVfbXNfID0KLSAgICAgIGlucHV0X2ltYWdlLlRp
bWVzdGFtcCgpIC8ga051bVJ0cFRpY2tzUGVyTWlsbGlzZWM7Ci0KLSAgRnJhbWVFeHRyYUluZm8g
ZnJhbWVfZXh0cmFfaW5mbzsKLSAgZnJhbWVfZXh0cmFfaW5mby50aW1lc3RhbXBfbnMgPQotICAg
ICAgaW5wdXRfaW1hZ2UuY2FwdHVyZV90aW1lX21zXyAqIHJ0Yzo6a051bU5hbm9zZWNzUGVyTWls
bGlzZWM7Ci0gIGZyYW1lX2V4dHJhX2luZm8udGltZXN0YW1wX3J0cCA9IGlucHV0X2ltYWdlLlRp
bWVzdGFtcCgpOwotICBmcmFtZV9leHRyYV9pbmZvLnRpbWVzdGFtcF9udHAgPSBpbnB1dF9pbWFn
ZS5udHBfdGltZV9tc187Ci0gIGZyYW1lX2V4dHJhX2luZm8ucXAgPQotICAgICAgcXBfcGFyc2lu
Z19lbmFibGVkXyA/IFBhcnNlUVAoaW5wdXRfaW1hZ2UpIDogYWJzbDo6bnVsbG9wdDsKLSAgewot
ICAgIHJ0Yzo6Q3JpdFNjb3BlIGNzKCZmcmFtZV9leHRyYV9pbmZvc19sb2NrXyk7Ci0gICAgZnJh
bWVfZXh0cmFfaW5mb3NfLnB1c2hfYmFjayhmcmFtZV9leHRyYV9pbmZvKTsKLSAgfQotCi0gIEpO
SUVudiogZW52ID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZEphdmFM
b2NhbFJlZjxqb2JqZWN0PiBqaW5wdXRfaW1hZ2UgPQotICAgICAgTmF0aXZlVG9KYXZhRW5jb2Rl
ZEltYWdlKGVudiwgaW5wdXRfaW1hZ2UpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4g
ZGVjb2RlX2luZm87Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiByZXQgPQotICAgICAg
SmF2YV9WaWRlb0RlY29kZXJfZGVjb2RlKGVudiwgZGVjb2Rlcl8sIGppbnB1dF9pbWFnZSwgZGVj
b2RlX2luZm8pOwotICByZXR1cm4gSGFuZGxlUmV0dXJuQ29kZShlbnYsIHJldCwgImRlY29kZSIp
OwotfQotCi1pbnQzMl90IFZpZGVvRGVjb2RlcldyYXBwZXI6OlJlZ2lzdGVyRGVjb2RlQ29tcGxl
dGVDYWxsYmFjaygKLSAgICBEZWNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2spIHsKLSAgUlRD
X0RDSEVDS19SVU5TX1NFUklBTElaRUQoJmNhbGxiYWNrX3JhY2VfY2hlY2tlcl8pOwotICBjYWxs
YmFja18gPSBjYWxsYmFjazsKLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQot
aW50MzJfdCBWaWRlb0RlY29kZXJXcmFwcGVyOjpSZWxlYXNlKCkgewotICBKTklFbnYqIGpuaSA9
IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBpbnQzMl90IHN0YXR1cyA9IEphdmFU
b05hdGl2ZVZpZGVvQ29kZWNTdGF0dXMoCi0gICAgICBqbmksIEphdmFfVmlkZW9EZWNvZGVyX3Jl
bGVhc2Uoam5pLCBkZWNvZGVyXykpOwotICBSVENfTE9HKExTX0lORk8pIDw8ICJyZWxlYXNlOiAi
IDw8IHN0YXR1czsKLSAgewotICAgIHJ0Yzo6Q3JpdFNjb3BlIGNzKCZmcmFtZV9leHRyYV9pbmZv
c19sb2NrXyk7Ci0gICAgZnJhbWVfZXh0cmFfaW5mb3NfLmNsZWFyKCk7Ci0gIH0KLSAgaW5pdGlh
bGl6ZWRfID0gZmFsc2U7Ci0gIC8vIEl0IGlzIGFsbG93ZWQgdG8gcmVpbml0aWFsaXplIHRoZSBj
b2RlYyBvbiBhIGRpZmZlcmVudCB0aHJlYWQuCi0gIGRlY29kZXJfdGhyZWFkX2NoZWNrZXJfLkRl
dGFjaCgpOwotICByZXR1cm4gc3RhdHVzOwotfQotCi1ib29sIFZpZGVvRGVjb2RlcldyYXBwZXI6
OlByZWZlcnNMYXRlRGVjb2RpbmcoKSBjb25zdCB7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3Vy
cmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIHJldHVybiBKYXZhX1ZpZGVvRGVjb2Rlcl9nZXRQcmVm
ZXJzTGF0ZURlY29kaW5nKGpuaSwgZGVjb2Rlcl8pOwotfQotCi1jb25zdCBjaGFyKiBWaWRlb0Rl
Y29kZXJXcmFwcGVyOjpJbXBsZW1lbnRhdGlvbk5hbWUoKSBjb25zdCB7Ci0gIHJldHVybiBpbXBs
ZW1lbnRhdGlvbl9uYW1lXy5jX3N0cigpOwotfQotCi12b2lkIFZpZGVvRGVjb2RlcldyYXBwZXI6
Ok9uRGVjb2RlZEZyYW1lKAotICAgIEpOSUVudiogZW52LAotICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfZnJhbWUsCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9kZWNvZGVfdGlt
ZV9tcywKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3FwKSB7Ci0gIFJUQ19EQ0hFQ0tf
UlVOU19TRVJJQUxJWkVEKCZjYWxsYmFja19yYWNlX2NoZWNrZXJfKTsKLSAgY29uc3QgaW50NjRf
dCB0aW1lc3RhbXBfbnMgPSBHZXRKYXZhVmlkZW9GcmFtZVRpbWVzdGFtcE5zKGVudiwgal9mcmFt
ZSk7Ci0KLSAgRnJhbWVFeHRyYUluZm8gZnJhbWVfZXh0cmFfaW5mbzsKLSAgewotICAgIHJ0Yzo6
Q3JpdFNjb3BlIGNzKCZmcmFtZV9leHRyYV9pbmZvc19sb2NrXyk7Ci0KLSAgICBkbyB7Ci0gICAg
ICBpZiAoZnJhbWVfZXh0cmFfaW5mb3NfLmVtcHR5KCkpIHsKLSAgICAgICAgUlRDX0xPRyhMU19X
QVJOSU5HKQotICAgICAgICAgICAgPDwgIkphdmEgZGVjb2RlciBwcm9kdWNlZCBhbiB1bmV4cGVj
dGVkIGZyYW1lOiAiIDw8IHRpbWVzdGFtcF9uczsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
Ci0gICAgICBmcmFtZV9leHRyYV9pbmZvID0gZnJhbWVfZXh0cmFfaW5mb3NfLmZyb250KCk7Ci0g
ICAgICBmcmFtZV9leHRyYV9pbmZvc18ucG9wX2Zyb250KCk7Ci0gICAgICAvLyBJZiB0aGUgZGVj
b2RlciBtaWdodCBkcm9wIGZyYW1lcyBzbyBpdGVyYXRlIHRocm91Z2ggdGhlIHF1ZXVlIHVudGls
IHdlCi0gICAgICAvLyBmaW5kIGEgbWF0Y2hpbmcgdGltZXN0YW1wLgotICAgIH0gd2hpbGUgKGZy
YW1lX2V4dHJhX2luZm8udGltZXN0YW1wX25zICE9IHRpbWVzdGFtcF9ucyk7Ci0gIH0KLQotICBW
aWRlb0ZyYW1lIGZyYW1lID0KLSAgICAgIEphdmFUb05hdGl2ZUZyYW1lKGVudiwgal9mcmFtZSwg
ZnJhbWVfZXh0cmFfaW5mby50aW1lc3RhbXBfcnRwKTsKLSAgZnJhbWUuc2V0X250cF90aW1lX21z
KGZyYW1lX2V4dHJhX2luZm8udGltZXN0YW1wX250cCk7Ci0KLSAgYWJzbDo6b3B0aW9uYWw8aW50
MzJfdD4gZGVjb2RpbmdfdGltZV9tcyA9Ci0gICAgICBKYXZhVG9OYXRpdmVPcHRpb25hbEludChl
bnYsIGpfZGVjb2RlX3RpbWVfbXMpOwotCi0gIGFic2w6Om9wdGlvbmFsPHVpbnQ4X3Q+IGRlY29k
ZXJfcXAgPQotICAgICAgY2FzdF9vcHRpb25hbDx1aW50OF90LCBpbnQzMl90PihKYXZhVG9OYXRp
dmVPcHRpb25hbEludChlbnYsIGpfcXApKTsKLSAgLy8gSWYgdGhlIGRlY29kZXIgcHJvdmlkZXMg
UVAgdmFsdWVzIGl0c2VsZiwgbm8gbmVlZCB0byBwYXJzZSB0aGUgYml0c3RyZWFtLgotICAvLyBF
bmFibGUgUVAgcGFyc2luZyBpZiBkZWNvZGVyIGRvZXMgbm90IHByb3ZpZGUgUVAgdmFsdWVzIGl0
c2VsZi4KLSAgcXBfcGFyc2luZ19lbmFibGVkXyA9ICFkZWNvZGVyX3FwLmhhc192YWx1ZSgpOwot
ICBjYWxsYmFja18tPkRlY29kZWQoZnJhbWUsIGRlY29kaW5nX3RpbWVfbXMsCi0gICAgICAgICAg
ICAgICAgICAgICBkZWNvZGVyX3FwID8gZGVjb2Rlcl9xcCA6IGZyYW1lX2V4dHJhX2luZm8ucXAp
OwotfQotCi1WaWRlb0RlY29kZXJXcmFwcGVyOjpGcmFtZUV4dHJhSW5mbzo6RnJhbWVFeHRyYUlu
Zm8oKSA9IGRlZmF1bHQ7Ci1WaWRlb0RlY29kZXJXcmFwcGVyOjpGcmFtZUV4dHJhSW5mbzo6RnJh
bWVFeHRyYUluZm8oY29uc3QgRnJhbWVFeHRyYUluZm8mKSA9Ci0gICAgZGVmYXVsdDsKLVZpZGVv
RGVjb2RlcldyYXBwZXI6OkZyYW1lRXh0cmFJbmZvOjp+RnJhbWVFeHRyYUluZm8oKSA9IGRlZmF1
bHQ7Ci0KLWludDMyX3QgVmlkZW9EZWNvZGVyV3JhcHBlcjo6SGFuZGxlUmV0dXJuQ29kZShKTklF
bnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1ldGhvZF9uYW1lKSB7Ci0gIGludDMy
X3QgdmFsdWUgPSBKYXZhVG9OYXRpdmVWaWRlb0NvZGVjU3RhdHVzKGpuaSwgal92YWx1ZSk7Ci0g
IGlmICh2YWx1ZSA+PSAwKSB7ICAvLyBPSyBvciBOT19PVVRQVVQKLSAgICByZXR1cm4gdmFsdWU7
Ci0gIH0KLQotICBSVENfTE9HKExTX1dBUk5JTkcpIDw8IG1ldGhvZF9uYW1lIDw8ICI6ICIgPDwg
dmFsdWU7Ci0gIGlmICh2YWx1ZSA9PSBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdB
UkUgfHwKLSAgICAgIHZhbHVlID09IFdFQlJUQ19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVEKSB7
ICAvLyBDcml0aWNhbCBlcnJvci4KLSAgICBSVENfTE9HKExTX1dBUk5JTkcpIDw8ICJKYXZhIGRl
Y29kZXIgcmVxdWVzdGVkIHNvZnR3YXJlIGZhbGxiYWNrLiI7Ci0gICAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRTsKLSAgfQotCi0gIC8vIFRyeSByZXNldHRpbmcg
dGhlIGNvZGVjLgotICBpZiAoUmVsZWFzZSgpID09IFdFQlJUQ19WSURFT19DT0RFQ19PSyAmJgot
ICAgICAgSW5pdERlY29kZUludGVybmFsKGpuaSkgPT0gV0VCUlRDX1ZJREVPX0NPREVDX09LKSB7
Ci0gICAgUlRDX0xPRyhMU19XQVJOSU5HKSA8PCAiUmVzZXQgSmF2YSBkZWNvZGVyLiI7Ci0gICAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgfQotCi0gIFJUQ19MT0coTFNfV0FS
TklORykgPDwgIlVuYWJsZSB0byByZXNldCBKYXZhIGRlY29kZXIuIjsKLSAgcmV0dXJuIFdFQlJU
Q19WSURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRTsKLX0KLQotYWJzbDo6b3B0aW9uYWw8dWlu
dDhfdD4gVmlkZW9EZWNvZGVyV3JhcHBlcjo6UGFyc2VRUCgKLSAgICBjb25zdCBFbmNvZGVkSW1h
Z2UmIGlucHV0X2ltYWdlKSB7Ci0gIGlmIChpbnB1dF9pbWFnZS5xcF8gIT0gLTEpIHsKLSAgICBy
ZXR1cm4gaW5wdXRfaW1hZ2UucXBfOwotICB9Ci0KLSAgYWJzbDo6b3B0aW9uYWw8dWludDhfdD4g
cXA7Ci0gIHN3aXRjaCAoY29kZWNfc2V0dGluZ3NfLmNvZGVjVHlwZSkgewotICAgIGNhc2Uga1Zp
ZGVvQ29kZWNWUDg6IHsKLSAgICAgIGludCBxcF9pbnQ7Ci0gICAgICBpZiAodnA4OjpHZXRRcChp
bnB1dF9pbWFnZS5kYXRhKCksIGlucHV0X2ltYWdlLnNpemUoKSwgJnFwX2ludCkpIHsKLSAgICAg
ICAgcXAgPSBxcF9pbnQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBr
VmlkZW9Db2RlY1ZQOTogewotICAgICAgaW50IHFwX2ludDsKLSAgICAgIGlmICh2cDk6OkdldFFw
KGlucHV0X2ltYWdlLmRhdGEoKSwgaW5wdXRfaW1hZ2Uuc2l6ZSgpLCAmcXBfaW50KSkgewotICAg
ICAgICBxcCA9IHFwX2ludDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IGtWaWRlb0NvZGVjSDI2NDogewotICAgICAgaDI2NF9iaXRzdHJlYW1fcGFyc2VyXy5QYXJzZUJp
dHN0cmVhbShpbnB1dF9pbWFnZS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2ltYWdlLnNpemUoKSk7Ci0gICAgICBpbnQgcXBfaW50Owot
ICAgICAgaWYgKGgyNjRfYml0c3RyZWFtX3BhcnNlcl8uR2V0TGFzdFNsaWNlUXAoJnFwX2ludCkp
IHsKLSAgICAgICAgcXAgPSBxcF9pbnQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOyAgLy8gRGVmYXVsdCBpcyB0byBub3QgcHJvdmlkZSBR
UC4KLSAgfQotICByZXR1cm4gcXA7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxWaWRlb0RlY29kZXI+
IEphdmFUb05hdGl2ZVZpZGVvRGVjb2RlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBqX2RlY29kZXIpIHsKLSAgY29uc3QgamxvbmcgbmF0aXZlX2RlY29k
ZXIgPQotICAgICAgSmF2YV9WaWRlb0RlY29kZXJfY3JlYXRlTmF0aXZlVmlkZW9EZWNvZGVyKGpu
aSwgal9kZWNvZGVyKTsKLSAgVmlkZW9EZWNvZGVyKiBkZWNvZGVyOwotICBpZiAobmF0aXZlX2Rl
Y29kZXIgPT0gMCkgewotICAgIGRlY29kZXIgPSBuZXcgVmlkZW9EZWNvZGVyV3JhcHBlcihqbmks
IGpfZGVjb2Rlcik7Ci0gIH0gZWxzZSB7Ci0gICAgZGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VmlkZW9EZWNvZGVyKj4obmF0aXZlX2RlY29kZXIpOwotICB9Ci0gIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8VmlkZW9EZWNvZGVyPihkZWNvZGVyKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGpuaQot
fSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19kZWNvZGVyX3dy
YXBwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3NyYy9qbmkvdmlkZW9fZGVjb2Rlcl93cmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGE3ZjY4Njg3MmM3YTQ5MjcxOTFmMTVhYzk4OTk4ZTA3YjVlNjFkYTMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19k
ZWNvZGVyX3dyYXBwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfVklERU9fREVDT0RFUl9X
UkFQUEVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfVklERU9fREVDT0RFUl9XUkFQ
UEVSX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8
ZGVxdWU+Ci0KLSNpbmNsdWRlICJhcGkvdmlkZW9fY29kZWNzL3ZpZGVvX2RlY29kZXIuaCIKLSNp
bmNsdWRlICJjb21tb25fdmlkZW8vaDI2NC9oMjY0X2JpdHN0cmVhbV9wYXJzZXIuaCIKLSNpbmNs
dWRlICJydGNfYmFzZS9yYWNlX2NoZWNrZXIuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aHJlYWRf
Y2hlY2tlci5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8gV3JhcHMgYSBKYXZh
IGRlY29kZXIgYW5kIGRlbGVnYXRlcyBhbGwgY2FsbHMgdG8gaXQuCi1jbGFzcyBWaWRlb0RlY29k
ZXJXcmFwcGVyIDogcHVibGljIFZpZGVvRGVjb2RlciB7Ci0gcHVibGljOgotICBWaWRlb0RlY29k
ZXJXcmFwcGVyKEpOSUVudiogam5pLCBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBkZWNvZGVyKTsK
LSAgflZpZGVvRGVjb2RlcldyYXBwZXIoKSBvdmVycmlkZTsKLQotICBpbnQzMl90IEluaXREZWNv
ZGUoY29uc3QgVmlkZW9Db2RlYyogY29kZWNfc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90IG51bWJlcl9vZl9jb3Jlcykgb3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBEZWNvZGUo
Y29uc3QgRW5jb2RlZEltYWdlJiBpbnB1dF9pbWFnZSwKLSAgICAgICAgICAgICAgICAgYm9vbCBt
aXNzaW5nX2ZyYW1lcywKLSAgICAgICAgICAgICAgICAgaW50NjRfdCByZW5kZXJfdGltZV9tcykg
b3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBSZWdpc3RlckRlY29kZUNvbXBsZXRlQ2FsbGJhY2soCi0g
ICAgICBEZWNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2spIG92ZXJyaWRlOwotCi0gIC8vIFRP
RE8oc2FrYWwpOiBUaGlzIGlzIG5vdCBhbHdheXMgY2FsbGVkIG9uIHRoZSBjb3JyZWN0IHRocmVh
ZC4gSXQgaXMgY2FsbGVkCi0gIC8vIGZyb20gVkNNR2VuZXJpY0RlY29kZXIgZGVzdHJ1Y3RvciB3
aGljaCBpcyBvbiBhIGRpZmZlcmVudCB0aHJlYWQgYnV0IGlzCi0gIC8vIHN0aWxsIHNhZmUgYW5k
IHN5bmNocm9ub3VzLgotICBpbnQzMl90IFJlbGVhc2UoKSBvdmVycmlkZSBSVENfTk9fVEhSRUFE
X1NBRkVUWV9BTkFMWVNJUzsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRlY29kZXIgcHJl
ZmVyIHRvIGRlY29kZSBmcmFtZXMgbGF0ZS4KLSAgLy8gVGhhdCBpcywgaXQgY2FuIG5vdCBkZWNv
ZGUgaW5maW5pdGUgbnVtYmVyIG9mIGZyYW1lcyBiZWZvcmUgdGhlIGRlY29kZWQKLSAgLy8gZnJh
bWUgaXMgY29uc3VtZWQuCi0gIGJvb2wgUHJlZmVyc0xhdGVEZWNvZGluZygpIGNvbnN0IG92ZXJy
aWRlOwotCi0gIGNvbnN0IGNoYXIqIEltcGxlbWVudGF0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gIC8vIFdyYXBzIHRoZSBmcmFtZSB0byBhIEFuZHJvaWRWaWRlb0J1ZmZlciBhbmQgcGFz
c2VzIGl0IHRvIHRoZSBjYWxsYmFjay4KLSAgdm9pZCBPbkRlY29kZWRGcmFtZShKTklFbnYqIGVu
diwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2ZyYW1l
LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZGVjb2Rl
X3RpbWVfbXMsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYg
al9xcCk7Ci0KLSBwcml2YXRlOgotICBzdHJ1Y3QgRnJhbWVFeHRyYUluZm8gewotICAgIGludDY0
X3QgdGltZXN0YW1wX25zOyAgLy8gVXNlZCBhcyBhbiBpZGVudGlmaWVyIG9mIHRoZSBmcmFtZS4K
LQotICAgIHVpbnQzMl90IHRpbWVzdGFtcF9ydHA7Ci0gICAgaW50NjRfdCB0aW1lc3RhbXBfbnRw
OwotICAgIGFic2w6Om9wdGlvbmFsPHVpbnQ4X3Q+IHFwOwotCi0gICAgRnJhbWVFeHRyYUluZm8o
KTsKLSAgICBGcmFtZUV4dHJhSW5mbyhjb25zdCBGcmFtZUV4dHJhSW5mbyYpOwotICAgIH5GcmFt
ZUV4dHJhSW5mbygpOwotICB9OwotCi0gIGludDMyX3QgSW5pdERlY29kZUludGVybmFsKEpOSUVu
diogam5pKSBSVENfUlVOX09OKGRlY29kZXJfdGhyZWFkX2NoZWNrZXJfKTsKLQotICAvLyBUYWtl
cyBKYXZhIFZpZGVvQ29kZWNTdGF0dXMsIGhhbmRsZXMgaXQgYW5kIHJldHVybnMgV0VCUlRDX1ZJ
REVPX0NPREVDXyoKLSAgLy8gc3RhdHVzIGNvZGUuCi0gIGludDMyX3QgSGFuZGxlUmV0dXJuQ29k
ZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIGpfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBtZXRob2RfbmFtZSkKLSAgICAgIFJUQ19SVU5fT04oZGVjb2Rlcl90aHJlYWRfY2hlY2tlcl8p
OwotCi0gIGFic2w6Om9wdGlvbmFsPHVpbnQ4X3Q+IFBhcnNlUVAoY29uc3QgRW5jb2RlZEltYWdl
JiBpbnB1dF9pbWFnZSkKLSAgICAgIFJUQ19SVU5fT04oZGVjb2Rlcl90aHJlYWRfY2hlY2tlcl8p
OwotCi0gIGNvbnN0IFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4gZGVjb2Rlcl87Ci0gIGNv
bnN0IHN0ZDo6c3RyaW5nIGltcGxlbWVudGF0aW9uX25hbWVfOwotCi0gIHJ0Yzo6VGhyZWFkQ2hl
Y2tlciBkZWNvZGVyX3RocmVhZF9jaGVja2VyXzsKLSAgLy8gQ2FsbGJhY2tzIG11c3QgYmUgZXhl
Y3V0ZWQgc2VxdWVudGlhbGx5IG9uIGFuIGFyYml0cmFyeSB0aHJlYWQuIFdlIGRvIG5vdAotICAv
LyBvd24gdGhpcyB0aHJlYWQgc28gYSB0aHJlYWQgY2hlY2tlciBjYW5ub3QgYmUgdXNlZC4KLSAg
cnRjOjpSYWNlQ2hlY2tlciBjYWxsYmFja19yYWNlX2NoZWNrZXJfOwotCi0gIC8vIEluaXRpYWxp
emVkIG9uIEluaXREZWNvZGUgYW5kIGltbXV0YWJsZSBhZnRlciB0aGF0LgotICBWaWRlb0NvZGVj
IGNvZGVjX3NldHRpbmdzXyBSVENfR1VBUkRFRF9CWShkZWNvZGVyX3RocmVhZF9jaGVja2VyXyk7
Ci0gIGludDMyX3QgbnVtYmVyX29mX2NvcmVzXyBSVENfR1VBUkRFRF9CWShkZWNvZGVyX3RocmVh
ZF9jaGVja2VyXyk7Ci0KLSAgYm9vbCBpbml0aWFsaXplZF8gUlRDX0dVQVJERURfQlkoZGVjb2Rl
cl90aHJlYWRfY2hlY2tlcl8pOwotICBIMjY0Qml0c3RyZWFtUGFyc2VyIGgyNjRfYml0c3RyZWFt
X3BhcnNlcl8KLSAgICAgIFJUQ19HVUFSREVEX0JZKGRlY29kZXJfdGhyZWFkX2NoZWNrZXJfKTsK
LQotICBEZWNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2tfIFJUQ19HVUFSREVEX0JZKGNhbGxi
YWNrX3JhY2VfY2hlY2tlcl8pOwotCi0gIC8vIEFjY2Vzc2VkIGJvdGggb24gdGhlIGRlY29kZXIg
dGhyZWFkIGFuZCB0aGUgY2FsbGJhY2sgdGhyZWFkLgotICBzdGQ6OmF0b21pYzxib29sPiBxcF9w
YXJzaW5nX2VuYWJsZWRfOwotICBydGM6OkNyaXRpY2FsU2VjdGlvbiBmcmFtZV9leHRyYV9pbmZv
c19sb2NrXzsKLSAgc3RkOjpkZXF1ZTxGcmFtZUV4dHJhSW5mbz4gZnJhbWVfZXh0cmFfaW5mb3Nf
Ci0gICAgICBSVENfR1VBUkRFRF9CWShmcmFtZV9leHRyYV9pbmZvc19sb2NrXyk7Ci19OwotCi0v
KiBJZiB0aGUgal9kZWNvZGVyIGlzIGEgd3JhcHBlZCBuYXRpdmUgZGVjb2RlciwgdW53cmFwIGl0
LiBJZiBpdCBpcyBub3QsCi0gKiB3cmFwIGl0IGluIGEgVmlkZW9EZWNvZGVyV3JhcHBlci4KLSAq
Lwotc3RkOjp1bmlxdWVfcHRyPFZpZGVvRGVjb2Rlcj4gSmF2YVRvTmF0aXZlVmlkZW9EZWNvZGVy
KAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZGVjb2Rl
cik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2Vu
ZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVPX0RFQ09ERVJfV1JBUFBFUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS92aWRlb19lbmNvZGVyX2ZhY3Rvcnlfd3JhcHBlci5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlk
ZW9fZW5jb2Rlcl9mYWN0b3J5X3dyYXBwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ2YTZjZmFmMmQxZjVhYmNmYTk4Y2JhMDExM2YxNWJlM2JiZjAyM2YuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19lbmNvZGVyX2Zh
Y3Rvcnlfd3JhcHBlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19lbmNvZGVy
X2ZhY3Rvcnlfd3JhcHBlci5oIgotCi0jaW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy92aWRlb19l
bmNvZGVyLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL2dlbmVyYXRlZF92aWRlb19qbmkvVmlkZW9FbmNvZGVyRmFjdG9yeV9qbmkuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9jbGFzc19sb2FkZXIuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9qYXZhX3R5cGVzLmgiCi0jaW5jbHVkZSAi
c2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19jb2RlY19pbmZvLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS92aWRlb19lbmNvZGVyX3dyYXBwZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLW5hbWVzcGFjZSB7Ci1jbGFzcyBWaWRlb0VuY29kZXJTZWxl
Y3RvcldyYXBwZXIKLSAgICA6IHB1YmxpYyBWaWRlb0VuY29kZXJGYWN0b3J5OjpFbmNvZGVyU2Vs
ZWN0b3JJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgVmlkZW9FbmNvZGVyU2VsZWN0b3JXcmFwcGVy
KEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJl
Zjxqb2JqZWN0PiYgZW5jb2Rlcl9zZWxlY3RvcikKLSAgICAgIDogZW5jb2Rlcl9zZWxlY3Rvcl8o
am5pLCBlbmNvZGVyX3NlbGVjdG9yKSB7fQotCi0gIHZvaWQgT25DdXJyZW50RW5jb2Rlcihjb25z
dCBTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KSBvdmVycmlkZSB7Ci0gICAgSk5JRW52KiBqbmkgPSBB
dHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgICBTY29wZWRKYXZhTG9jYWxSZWY8am9i
amVjdD4gal9jb2RlY19pbmZvID0KLSAgICAgICAgU2RwVmlkZW9Gb3JtYXRUb1ZpZGVvQ29kZWNJ
bmZvKGpuaSwgZm9ybWF0KTsKLSAgICBKYXZhX1ZpZGVvRW5jb2RlclNlbGVjdG9yX29uQ3VycmVu
dEVuY29kZXIoam5pLCBlbmNvZGVyX3NlbGVjdG9yXywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgal9jb2RlY19pbmZvKTsKLSAgfQotCi0gIGFic2w6Om9w
dGlvbmFsPFNkcFZpZGVvRm9ybWF0PiBPbkF2YWlsYWJsZUJpdHJhdGUoCi0gICAgICBjb25zdCBE
YXRhUmF0ZSYgcmF0ZSkgb3ZlcnJpZGUgewotICAgIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVu
dFRocmVhZElmTmVlZGVkKCk7Ci0gICAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGNvZGVj
X2luZm8gPQotICAgICAgICBKYXZhX1ZpZGVvRW5jb2RlclNlbGVjdG9yX29uQXZhaWxhYmxlQml0
cmF0ZShqbmksIGVuY29kZXJfc2VsZWN0b3JfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlLmticHM8aW50PigpKTsKLSAgICBpZiAoY29k
ZWNfaW5mby5pc19udWxsKCkpIHsKLSAgICAgIHJldHVybiBhYnNsOjpudWxsb3B0OwotICAgIH0K
LSAgICByZXR1cm4gVmlkZW9Db2RlY0luZm9Ub1NkcFZpZGVvRm9ybWF0KGpuaSwgY29kZWNfaW5m
byk7Ci0gIH0KLQotICBhYnNsOjpvcHRpb25hbDxTZHBWaWRlb0Zvcm1hdD4gT25FbmNvZGVyQnJv
a2VuKCkgb3ZlcnJpZGUgewotICAgIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElm
TmVlZGVkKCk7Ci0gICAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGNvZGVjX2luZm8gPQot
ICAgICAgICBKYXZhX1ZpZGVvRW5jb2RlclNlbGVjdG9yX29uRW5jb2RlckJyb2tlbihqbmksIGVu
Y29kZXJfc2VsZWN0b3JfKTsKLSAgICBpZiAoY29kZWNfaW5mby5pc19udWxsKCkpIHsKLSAgICAg
IHJldHVybiBhYnNsOjpudWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gVmlkZW9Db2RlY0luZm9U
b1NkcFZpZGVvRm9ybWF0KGpuaSwgY29kZWNfaW5mbyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNv
bnN0IFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4gZW5jb2Rlcl9zZWxlY3Rvcl87Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2UKLQotVmlkZW9FbmNvZGVyRmFjdG9yeVdyYXBwZXI6OlZpZGVvRW5j
b2RlckZhY3RvcnlXcmFwcGVyKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIGVuY29kZXJfZmFjdG9yeSkKLSAgICA6IGVuY29kZXJfZmFjdG9yeV8oam5pLCBl
bmNvZGVyX2ZhY3RvcnkpIHsKLSAgY29uc3QgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RBcnJh
eT4gal9zdXBwb3J0ZWRfY29kZWNzID0KLSAgICAgIEphdmFfVmlkZW9FbmNvZGVyRmFjdG9yeV9n
ZXRTdXBwb3J0ZWRDb2RlY3Moam5pLCBlbmNvZGVyX2ZhY3RvcnkpOwotICBzdXBwb3J0ZWRfZm9y
bWF0c18gPSBKYXZhVG9OYXRpdmVWZWN0b3I8U2RwVmlkZW9Gb3JtYXQ+KAotICAgICAgam5pLCBq
X3N1cHBvcnRlZF9jb2RlY3MsICZWaWRlb0NvZGVjSW5mb1RvU2RwVmlkZW9Gb3JtYXQpOwotICBj
b25zdCBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFycmF5PiBqX2ltcGxlbWVudGF0aW9ucyA9
Ci0gICAgICBKYXZhX1ZpZGVvRW5jb2RlckZhY3RvcnlfZ2V0SW1wbGVtZW50YXRpb25zKGpuaSwg
ZW5jb2Rlcl9mYWN0b3J5KTsKLSAgaW1wbGVtZW50YXRpb25zXyA9IEphdmFUb05hdGl2ZVZlY3Rv
cjxTZHBWaWRlb0Zvcm1hdD4oCi0gICAgICBqbmksIGpfaW1wbGVtZW50YXRpb25zLCAmVmlkZW9D
b2RlY0luZm9Ub1NkcFZpZGVvRm9ybWF0KTsKLX0KLVZpZGVvRW5jb2RlckZhY3RvcnlXcmFwcGVy
Ojp+VmlkZW9FbmNvZGVyRmFjdG9yeVdyYXBwZXIoKSA9IGRlZmF1bHQ7Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxWaWRlb0VuY29kZXI+IFZpZGVvRW5jb2RlckZhY3RvcnlXcmFwcGVyOjpDcmVhdGVWaWRl
b0VuY29kZXIoCi0gICAgY29uc3QgU2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkgewotICBKTklFbnYq
IGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRKYXZhTG9jYWxS
ZWY8am9iamVjdD4gal9jb2RlY19pbmZvID0KLSAgICAgIFNkcFZpZGVvRm9ybWF0VG9WaWRlb0Nv
ZGVjSW5mbyhqbmksIGZvcm1hdCk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBlbmNv
ZGVyID0gSmF2YV9WaWRlb0VuY29kZXJGYWN0b3J5X2NyZWF0ZUVuY29kZXIoCi0gICAgICBqbmks
IGVuY29kZXJfZmFjdG9yeV8sIGpfY29kZWNfaW5mbyk7Ci0gIGlmICghZW5jb2Rlci5vYmooKSkK
LSAgICByZXR1cm4gbnVsbHB0cjsKLSAgcmV0dXJuIEphdmFUb05hdGl2ZVZpZGVvRW5jb2Rlcihq
bmksIGVuY29kZXIpOwotfQotCi1zdGQ6OnZlY3RvcjxTZHBWaWRlb0Zvcm1hdD4gVmlkZW9FbmNv
ZGVyRmFjdG9yeVdyYXBwZXI6OkdldFN1cHBvcnRlZEZvcm1hdHMoKQotICAgIGNvbnN0IHsKLSAg
cmV0dXJuIHN1cHBvcnRlZF9mb3JtYXRzXzsKLX0KLQotc3RkOjp2ZWN0b3I8U2RwVmlkZW9Gb3Jt
YXQ+IFZpZGVvRW5jb2RlckZhY3RvcnlXcmFwcGVyOjpHZXRJbXBsZW1lbnRhdGlvbnMoKQotICAg
IGNvbnN0IHsKLSAgcmV0dXJuIGltcGxlbWVudGF0aW9uc187Ci19Ci0KLVZpZGVvRW5jb2RlckZh
Y3Rvcnk6OkNvZGVjSW5mbyBWaWRlb0VuY29kZXJGYWN0b3J5V3JhcHBlcjo6UXVlcnlWaWRlb0Vu
Y29kZXIoCi0gICAgY29uc3QgU2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkgY29uc3QgewotICBKTklF
bnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gal9jb2RlY19pbmZvID0KLSAgICAgIFNkcFZpZGVvRm9ybWF0VG9WaWRl
b0NvZGVjSW5mbyhqbmksIGZvcm1hdCk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBl
bmNvZGVyID0gSmF2YV9WaWRlb0VuY29kZXJGYWN0b3J5X2NyZWF0ZUVuY29kZXIoCi0gICAgICBq
bmksIGVuY29kZXJfZmFjdG9yeV8sIGpfY29kZWNfaW5mbyk7Ci0KLSAgQ29kZWNJbmZvIGNvZGVj
X2luZm87Ci0gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB3cmFwcGVkIG5hdGl2ZSBzb2Z0d2FyZSBl
bmNvZGVyIGltcGxlbWVudGF0aW9uLgotICBjb2RlY19pbmZvLmlzX2hhcmR3YXJlX2FjY2VsZXJh
dGVkID0gSXNIYXJkd2FyZVZpZGVvRW5jb2RlcihqbmksIGVuY29kZXIpOwotICBjb2RlY19pbmZv
Lmhhc19pbnRlcm5hbF9zb3VyY2UgPSBmYWxzZTsKLSAgcmV0dXJuIGNvZGVjX2luZm87Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxWaWRlb0VuY29kZXJGYWN0b3J5OjpFbmNvZGVyU2VsZWN0b3JJbnRl
cmZhY2U+Ci1WaWRlb0VuY29kZXJGYWN0b3J5V3JhcHBlcjo6R2V0RW5jb2RlclNlbGVjdG9yKCkg
Y29uc3QgewotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwot
ICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gc2VsZWN0b3IgPQotICAgICAgSmF2YV9WaWRl
b0VuY29kZXJGYWN0b3J5X2dldEVuY29kZXJTZWxlY3RvcihqbmksIGVuY29kZXJfZmFjdG9yeV8p
OwotICBpZiAoc2VsZWN0b3IuaXNfbnVsbCgpKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0K
LQotICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxWaWRlb0VuY29kZXJTZWxlY3RvcldyYXBwZXI+
KGpuaSwgc2VsZWN0b3IpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3Bh
Y2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2VuY29kZXJfZmFjdG9yeV93cmFwcGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvam5pL3ZpZGVvX2VuY29kZXJfZmFjdG9yeV93cmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc5OWFlMGYyYmNmOWMyYzlmNDFiYWQ3ZTIxOWU0YTAxYTAyMTAxYWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19lbmNvZGVyX2ZhY3Rvcnlfd3JhcHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVP
X0VOQ09ERVJfRkFDVE9SWV9XUkFQUEVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklf
VklERU9fRU5DT0RFUl9GQUNUT1JZX1dSQVBQRVJfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImFwaS92aWRlb19jb2RlY3Mvc2RwX3ZpZGVvX2Zv
cm1hdC5oIgotI2luY2x1ZGUgImFwaS92aWRlb19jb2RlY3MvdmlkZW9fZW5jb2Rlcl9mYWN0b3J5
LmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1l
c3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi0vLyBXcmFwcGVyIGZvciBKYXZhIFZp
ZGVvRW5jb2RlckZhY3RvcnkgY2xhc3MuIERlbGVnYXRlcyBtZXRob2QgY2FsbHMgdGhyb3VnaAot
Ly8gSk5JIGFuZCB3cmFwcyB0aGUgZW5jb2RlciBpbnNpZGUgVmlkZW9FbmNvZGVyV3JhcHBlci4K
LWNsYXNzIFZpZGVvRW5jb2RlckZhY3RvcnlXcmFwcGVyIDogcHVibGljIFZpZGVvRW5jb2RlckZh
Y3RvcnkgewotIHB1YmxpYzoKLSAgVmlkZW9FbmNvZGVyRmFjdG9yeVdyYXBwZXIoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4m
IGVuY29kZXJfZmFjdG9yeSk7Ci0gIH5WaWRlb0VuY29kZXJGYWN0b3J5V3JhcHBlcigpIG92ZXJy
aWRlOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0VuY29kZXI+IENyZWF0ZVZpZGVvRW5jb2Rl
cigKLSAgICAgIGNvbnN0IFNkcFZpZGVvRm9ybWF0JiBmb3JtYXQpIG92ZXJyaWRlOwotCi0gIC8v
IFJldHVybnMgYSBsaXN0IG9mIHN1cHBvcnRlZCBjb2RlY3MgaW4gb3JkZXIgb2YgcHJlZmVyZW5j
ZS4KLSAgc3RkOjp2ZWN0b3I8U2RwVmlkZW9Gb3JtYXQ+IEdldFN1cHBvcnRlZEZvcm1hdHMoKSBj
b25zdCBvdmVycmlkZTsKLQotICBzdGQ6OnZlY3RvcjxTZHBWaWRlb0Zvcm1hdD4gR2V0SW1wbGVt
ZW50YXRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgQ29kZWNJbmZvIFF1ZXJ5VmlkZW9FbmNv
ZGVyKGNvbnN0IFNkcFZpZGVvRm9ybWF0JiBmb3JtYXQpIGNvbnN0IG92ZXJyaWRlOwotCi0gIHN0
ZDo6dW5pcXVlX3B0cjxFbmNvZGVyU2VsZWN0b3JJbnRlcmZhY2U+IEdldEVuY29kZXJTZWxlY3Rv
cigpIGNvbnN0IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgY29uc3QgU2NvcGVkSmF2YUdsb2Jh
bFJlZjxqb2JqZWN0PiBlbmNvZGVyX2ZhY3RvcnlfOwotICBzdGQ6OnZlY3RvcjxTZHBWaWRlb0Zv
cm1hdD4gc3VwcG9ydGVkX2Zvcm1hdHNfOwotICBzdGQ6OnZlY3RvcjxTZHBWaWRlb0Zvcm1hdD4g
aW1wbGVtZW50YXRpb25zXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVPX0VOQ09E
RVJfRkFDVE9SWV9XUkFQUEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2VuY29kZXJfZmFs
bGJhY2suY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsv
YW5kcm9pZC9zcmMvam5pL3ZpZGVvX2VuY29kZXJfZmFsbGJhY2suY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ1ODE1NzJhYmY2MTFlYWI5YzMxMTlhOGQ3N2EwNWQxZWZlMTYzMDYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19lbmNvZGVyX2ZhbGxiYWNrLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAiYXBpL3ZpZGVv
X2NvZGVjcy92aWRlb19lbmNvZGVyX3NvZnR3YXJlX2ZhbGxiYWNrX3dyYXBwZXIuaCIKLSNpbmNs
dWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfdmlkZW9fam5pL1ZpZGVvRW5jb2RlckZhbGxiYWNr
X2puaS5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2VuY29kZXJfd3JhcHBlci5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1zdGF0aWMgamxvbmcgSk5JX1Zp
ZGVvRW5jb2RlckZhbGxiYWNrX0NyZWF0ZUVuY29kZXIoCi0gICAgSk5JRW52KiBqbmksCi0gICAg
Y29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2ZhbGxiYWNrX2VuY29kZXIsCi0gICAgY29u
c3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3ByaW1hcnlfZW5jb2RlcikgewotICBzdGQ6OnVu
aXF1ZV9wdHI8VmlkZW9FbmNvZGVyPiBmYWxsYmFja19lbmNvZGVyID0KLSAgICAgIEphdmFUb05h
dGl2ZVZpZGVvRW5jb2RlcihqbmksIGpfZmFsbGJhY2tfZW5jb2Rlcik7Ci0gIHN0ZDo6dW5pcXVl
X3B0cjxWaWRlb0VuY29kZXI+IHByaW1hcnlfZW5jb2RlciA9Ci0gICAgICBKYXZhVG9OYXRpdmVW
aWRlb0VuY29kZXIoam5pLCBqX3ByaW1hcnlfZW5jb2Rlcik7Ci0KLSAgVmlkZW9FbmNvZGVyKiBu
YXRpdmVXcmFwcGVyID0KLSAgICAgIENyZWF0ZVZpZGVvRW5jb2RlclNvZnR3YXJlRmFsbGJhY2tX
cmFwcGVyKHN0ZDo6bW92ZShmYWxsYmFja19lbmNvZGVyKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShwcmltYXJ5X2VuY29kZXIpKQot
ICAgICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIobmF0aXZl
V3JhcHBlcik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZW5jb2Rlcl93cmFwcGVyLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19lbmNvZGVyX3dyYXBwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NmIx
MmNlNTNkMGZkYmJmMWMzMjk0NjM3NzY4NTNiMmU0MmM0ZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19lbmNvZGVyX3dyYXBwZXIuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNyBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lu
Y2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZW5jb2Rlcl93cmFwcGVyLmgiCi0KLSNp
bmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiY29tbW9uX3ZpZGVvL2gyNjQvaDI2NF9jb21t
b24uaCIKLSNpbmNsdWRlICJtb2R1bGVzL3ZpZGVvX2NvZGluZy9pbmNsdWRlL3ZpZGVvX2NvZGVj
X2ludGVyZmFjZS5oIgotI2luY2x1ZGUgIm1vZHVsZXMvdmlkZW9fY29kaW5nL2luY2x1ZGUvdmlk
ZW9fZXJyb3JfY29kZXMuaCIKLSNpbmNsdWRlICJtb2R1bGVzL3ZpZGVvX2NvZGluZy91dGlsaXR5
L3ZwOF9oZWFkZXJfcGFyc2VyLmgiCi0jaW5jbHVkZSAibW9kdWxlcy92aWRlb19jb2RpbmcvdXRp
bGl0eS92cDlfdW5jb21wcmVzc2VkX2hlYWRlcl9wYXJzZXIuaCIKLSNpbmNsdWRlICJydGNfYmFz
ZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvdGFza191dGlscy90b19xdWV1ZWRfdGFz
ay5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL3RpbWVfdXRpbHMuaCIKLSNpbmNsdWRlICJzZGsvYW5k
cm9pZC9nZW5lcmF0ZWRfdmlkZW9fam5pL1ZpZGVvRW5jb2RlcldyYXBwZXJfam5pLmgiCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVvX2puaS9WaWRlb0VuY29kZXJfam5pLmgi
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvY2xhc3NfbG9hZGVyLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvbmF0aXZlX2FwaS9qbmkvamF2YV90eXBlcy5oIgotI2luY2x1
ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvZW5jb2RlZF9pbWFnZS5oIgotI2luY2x1ZGUgInNkay9h
bmRyb2lkL3NyYy9qbmkvdmlkZW9fY29kZWNfc3RhdHVzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMg
ewotbmFtZXNwYWNlIGpuaSB7Ci0KLVZpZGVvRW5jb2RlcldyYXBwZXI6OlZpZGVvRW5jb2Rlcldy
YXBwZXIoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZW5jb2RlcikKLSAgICA6IGVuY29kZXJfKGpu
aSwgal9lbmNvZGVyKSwgaW50X2FycmF5X2NsYXNzXyhHZXRDbGFzcyhqbmksICJbSSIpKSB7Ci0g
IGluaXRpYWxpemVkXyA9IGZhbHNlOwotICBudW1fcmVzZXRzXyA9IDA7Ci0KLSAgLy8gR2V0IGJp
dHJhdGUgbGltaXRzIGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhpcyBpcyBhIHN0YXRpYyBwcm9wZXJ0
eSBvZiB0aGUKLSAgLy8gZW5jb2RlciBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlIGJl
Zm9yZSBpdCBpcyBpbml0aWFsaXplZC4KLSAgZW5jb2Rlcl9pbmZvXy5yZXNvbHV0aW9uX2JpdHJh
dGVfbGltaXRzID0gR2V0UmVzb2x1dGlvbkJpdHJhdGVMaW1pdHMoam5pKTsKLX0KLVZpZGVvRW5j
b2RlcldyYXBwZXI6On5WaWRlb0VuY29kZXJXcmFwcGVyKCkgPSBkZWZhdWx0OwotCi1pbnQgVmlk
ZW9FbmNvZGVyV3JhcHBlcjo6SW5pdEVuY29kZShjb25zdCBWaWRlb0NvZGVjKiBjb2RlY19zZXR0
aW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNldHRpbmdz
JiBzZXR0aW5ncykgewotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRl
ZCgpOwotCi0gIGNvZGVjX3NldHRpbmdzXyA9ICpjb2RlY19zZXR0aW5nczsKLSAgY2FwYWJpbGl0
aWVzXyA9IHNldHRpbmdzLmNhcGFiaWxpdGllczsKLSAgbnVtYmVyX29mX2NvcmVzXyA9IHNldHRp
bmdzLm51bWJlcl9vZl9jb3JlczsKLSAgbnVtX3Jlc2V0c18gPSAwOwotCi0gIHJldHVybiBJbml0
RW5jb2RlSW50ZXJuYWwoam5pKTsKLX0KLQotaW50MzJfdCBWaWRlb0VuY29kZXJXcmFwcGVyOjpJ
bml0RW5jb2RlSW50ZXJuYWwoSk5JRW52KiBqbmkpIHsKLSAgYm9vbCBhdXRvbWF0aWNfcmVzaXpl
X29uOwotICBzd2l0Y2ggKGNvZGVjX3NldHRpbmdzXy5jb2RlY1R5cGUpIHsKLSAgICBjYXNlIGtW
aWRlb0NvZGVjVlA4OgotICAgICAgYXV0b21hdGljX3Jlc2l6ZV9vbiA9IGNvZGVjX3NldHRpbmdz
Xy5WUDgoKS0+YXV0b21hdGljUmVzaXplT247Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtWaWRl
b0NvZGVjVlA5OgotICAgICAgYXV0b21hdGljX3Jlc2l6ZV9vbiA9IGNvZGVjX3NldHRpbmdzXy5W
UDkoKS0+YXV0b21hdGljUmVzaXplT247Ci0gICAgICBnb2ZfLlNldEdvZkluZm9WUDkoVGVtcG9y
YWxTdHJ1Y3R1cmVNb2RlOjprVGVtcG9yYWxTdHJ1Y3R1cmVNb2RlMSk7Ci0gICAgICBnb2ZfaWR4
XyA9IDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYXV0b21hdGljX3Jlc2l6
ZV9vbiA9IHRydWU7Ci0gIH0KLQotICBSVENfRENIRUNLKGNhcGFiaWxpdGllc18pOwotICBTY29w
ZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gY2FwYWJpbGl0aWVzID0KLSAgICAgIEphdmFfQ2FwYWJp
bGl0aWVzX0NvbnN0cnVjdG9yKGpuaSwgY2FwYWJpbGl0aWVzXy0+bG9zc19ub3RpZmljYXRpb24p
OwotCi0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBzZXR0aW5ncyA9IEphdmFfU2V0dGlu
Z3NfQ29uc3RydWN0b3IoCi0gICAgICBqbmksIG51bWJlcl9vZl9jb3Jlc18sIGNvZGVjX3NldHRp
bmdzXy53aWR0aCwgY29kZWNfc2V0dGluZ3NfLmhlaWdodCwKLSAgICAgIHN0YXRpY19jYXN0PGlu
dD4oY29kZWNfc2V0dGluZ3NfLnN0YXJ0Qml0cmF0ZSksCi0gICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGNvZGVjX3NldHRpbmdzXy5tYXhGcmFtZXJhdGUpLAotICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
b2RlY19zZXR0aW5nc18ubnVtYmVyT2ZTaW11bGNhc3RTdHJlYW1zKSwKLSAgICAgIGF1dG9tYXRp
Y19yZXNpemVfb24sIGNhcGFiaWxpdGllcyk7Ci0KLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmpl
Y3Q+IGNhbGxiYWNrID0KLSAgICAgIEphdmFfVmlkZW9FbmNvZGVyV3JhcHBlcl9jcmVhdGVFbmNv
ZGVyQ2FsbGJhY2soam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqbG9uZ0Zyb21Qb2ludGVyKHRoaXMpKTsKLQotICBpbnQzMl90IHN0YXR1
cyA9IEphdmFUb05hdGl2ZVZpZGVvQ29kZWNTdGF0dXMoCi0gICAgICBqbmksIEphdmFfVmlkZW9F
bmNvZGVyX2luaXRFbmNvZGUoam5pLCBlbmNvZGVyXywgc2V0dGluZ3MsIGNhbGxiYWNrKSk7Ci0g
IFJUQ19MT0coTFNfSU5GTykgPDwgImluaXRFbmNvZGU6ICIgPDwgc3RhdHVzOwotCi0gIGVuY29k
ZXJfaW5mb18uc3VwcG9ydHNfbmF0aXZlX2hhbmRsZSA9IHRydWU7Ci0gIGVuY29kZXJfaW5mb18u
aW1wbGVtZW50YXRpb25fbmFtZSA9IEdldEltcGxlbWVudGF0aW9uTmFtZShqbmkpOwotICBlbmNv
ZGVyX2luZm9fLnNjYWxpbmdfc2V0dGluZ3MgPSBHZXRTY2FsaW5nU2V0dGluZ3NJbnRlcm5hbChq
bmkpOwotICBlbmNvZGVyX2luZm9fLmlzX2hhcmR3YXJlX2FjY2VsZXJhdGVkID0gSXNIYXJkd2Fy
ZVZpZGVvRW5jb2RlcihqbmksIGVuY29kZXJfKTsKLSAgZW5jb2Rlcl9pbmZvXy5oYXNfaW50ZXJu
YWxfc291cmNlID0gZmFsc2U7Ci0KLSAgaWYgKHN0YXR1cyA9PSBXRUJSVENfVklERU9fQ09ERUNf
T0spIHsKLSAgICBpbml0aWFsaXplZF8gPSB0cnVlOwotICB9Ci0gIHJldHVybiBzdGF0dXM7Ci19
Ci0KLWludDMyX3QgVmlkZW9FbmNvZGVyV3JhcHBlcjo6UmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNh
bGxiYWNrKAotICAgIEVuY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjaykgewotICBjYWxsYmFj
a18gPSBjYWxsYmFjazsKLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50
MzJfdCBWaWRlb0VuY29kZXJXcmFwcGVyOjpSZWxlYXNlKCkgewotICBKTklFbnYqIGpuaSA9IEF0
dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotCi0gIGludDMyX3Qgc3RhdHVzID0gSmF2YVRv
TmF0aXZlVmlkZW9Db2RlY1N0YXR1cygKLSAgICAgIGpuaSwgSmF2YV9WaWRlb0VuY29kZXJfcmVs
ZWFzZShqbmksIGVuY29kZXJfKSk7Ci0gIFJUQ19MT0coTFNfSU5GTykgPDwgInJlbGVhc2U6ICIg
PDwgc3RhdHVzOwotICBmcmFtZV9leHRyYV9pbmZvc18uY2xlYXIoKTsKLSAgaW5pdGlhbGl6ZWRf
ID0gZmFsc2U7Ci0KLSAgcmV0dXJuIHN0YXR1czsKLX0KLQotaW50MzJfdCBWaWRlb0VuY29kZXJX
cmFwcGVyOjpFbmNvZGUoCi0gICAgY29uc3QgVmlkZW9GcmFtZSYgZnJhbWUsCi0gICAgY29uc3Qg
c3RkOjp2ZWN0b3I8VmlkZW9GcmFtZVR5cGU+KiBmcmFtZV90eXBlcykgewotICBpZiAoIWluaXRp
YWxpemVkXykgewotICAgIC8vIE1vc3QgbGlrZWx5IGluaXRpYWxpemluZyB0aGUgY29kZWMgZmFp
bGVkLgotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdBUkU7Ci0g
IH0KLQotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotCi0g
IC8vIENvbnN0cnVjdCBlbmNvZGUgaW5mby4KLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3RB
cnJheT4gal9mcmFtZV90eXBlcyA9Ci0gICAgICBOYXRpdmVUb0phdmFGcmFtZVR5cGVBcnJheShq
bmksICpmcmFtZV90eXBlcyk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBlbmNvZGVf
aW5mbyA9Ci0gICAgICBKYXZhX0VuY29kZUluZm9fQ29uc3RydWN0b3Ioam5pLCBqX2ZyYW1lX3R5
cGVzKTsKLQotICBGcmFtZUV4dHJhSW5mbyBpbmZvOwotICBpbmZvLmNhcHR1cmVfdGltZV9ucyA9
IGZyYW1lLnRpbWVzdGFtcF91cygpICogcnRjOjprTnVtTmFub3NlY3NQZXJNaWNyb3NlYzsKLSAg
aW5mby50aW1lc3RhbXBfcnRwID0gZnJhbWUudGltZXN0YW1wKCk7Ci0gIGZyYW1lX2V4dHJhX2lu
Zm9zXy5wdXNoX2JhY2soaW5mbyk7Ci0KLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpf
ZnJhbWUgPSBOYXRpdmVUb0phdmFWaWRlb0ZyYW1lKGpuaSwgZnJhbWUpOwotICBTY29wZWRKYXZh
TG9jYWxSZWY8am9iamVjdD4gcmV0ID0KLSAgICAgIEphdmFfVmlkZW9FbmNvZGVyX2VuY29kZShq
bmksIGVuY29kZXJfLCBqX2ZyYW1lLCBlbmNvZGVfaW5mbyk7Ci0gIFJlbGVhc2VKYXZhVmlkZW9G
cmFtZShqbmksIGpfZnJhbWUpOwotICByZXR1cm4gSGFuZGxlUmV0dXJuQ29kZShqbmksIHJldCwg
ImVuY29kZSIpOwotfQotCi12b2lkIFZpZGVvRW5jb2RlcldyYXBwZXI6OlNldFJhdGVzKGNvbnN0
IFJhdGVDb250cm9sUGFyYW1ldGVycyYgcGFyYW1ldGVycykgewotICBKTklFbnYqIGpuaSA9IEF0
dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotCi0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2Jq
ZWN0PiBqX2JpdHJhdGVfYWxsb2NhdGlvbiA9Ci0gICAgICBUb0phdmFCaXRyYXRlQWxsb2NhdGlv
bihqbmksIHBhcmFtZXRlcnMuYml0cmF0ZSk7Ci0gIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0
PiByZXQgPSBKYXZhX1ZpZGVvRW5jb2Rlcl9zZXRSYXRlQWxsb2NhdGlvbigKLSAgICAgIGpuaSwg
ZW5jb2Rlcl8sIGpfYml0cmF0ZV9hbGxvY2F0aW9uLAotICAgICAgKGppbnQpKHBhcmFtZXRlcnMu
ZnJhbWVyYXRlX2ZwcyArIDAuNSkpOwotICBIYW5kbGVSZXR1cm5Db2RlKGpuaSwgcmV0LCAic2V0
UmF0ZUFsbG9jYXRpb24iKTsKLX0KLQotVmlkZW9FbmNvZGVyOjpFbmNvZGVySW5mbyBWaWRlb0Vu
Y29kZXJXcmFwcGVyOjpHZXRFbmNvZGVySW5mbygpIGNvbnN0IHsKLSAgcmV0dXJuIGVuY29kZXJf
aW5mb187Ci19Ci0KLVZpZGVvRW5jb2RlcldyYXBwZXI6OlNjYWxpbmdTZXR0aW5ncwotVmlkZW9F
bmNvZGVyV3JhcHBlcjo6R2V0U2NhbGluZ1NldHRpbmdzSW50ZXJuYWwoSk5JRW52KiBqbmkpIGNv
bnN0IHsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpfc2NhbGluZ19zZXR0aW5ncyA9
Ci0gICAgICBKYXZhX1ZpZGVvRW5jb2Rlcl9nZXRTY2FsaW5nU2V0dGluZ3Moam5pLCBlbmNvZGVy
Xyk7Ci0gIGJvb2wgaXNPbiA9Ci0gICAgICBKYXZhX1ZpZGVvRW5jb2RlcldyYXBwZXJfZ2V0U2Nh
bGluZ1NldHRpbmdzT24oam5pLCBqX3NjYWxpbmdfc2V0dGluZ3MpOwotCi0gIGlmICghaXNPbikK
LSAgICByZXR1cm4gU2NhbGluZ1NldHRpbmdzOjprT2ZmOwotCi0gIGFic2w6Om9wdGlvbmFsPGlu
dD4gbG93ID0gSmF2YVRvTmF0aXZlT3B0aW9uYWxJbnQoCi0gICAgICBqbmksCi0gICAgICBKYXZh
X1ZpZGVvRW5jb2RlcldyYXBwZXJfZ2V0U2NhbGluZ1NldHRpbmdzTG93KGpuaSwgal9zY2FsaW5n
X3NldHRpbmdzKSk7Ci0gIGFic2w6Om9wdGlvbmFsPGludD4gaGlnaCA9IEphdmFUb05hdGl2ZU9w
dGlvbmFsSW50KAotICAgICAgam5pLAotICAgICAgSmF2YV9WaWRlb0VuY29kZXJXcmFwcGVyX2dl
dFNjYWxpbmdTZXR0aW5nc0hpZ2goam5pLCBqX3NjYWxpbmdfc2V0dGluZ3MpKTsKLQotICBpZiAo
bG93ICYmIGhpZ2gpCi0gICAgcmV0dXJuIFNjYWxpbmdTZXR0aW5ncygqbG93LCAqaGlnaCk7Ci0K
LSAgc3dpdGNoIChjb2RlY19zZXR0aW5nc18uY29kZWNUeXBlKSB7Ci0gICAgY2FzZSBrVmlkZW9D
b2RlY1ZQODogewotICAgICAgLy8gU2FtZSBhcyBpbiB2cDhfaW1wbC5jYy4KLSAgICAgIHN0YXRp
YyBjb25zdCBpbnQga0xvd1ZwOFFwVGhyZXNob2xkID0gMjk7Ci0gICAgICBzdGF0aWMgY29uc3Qg
aW50IGtIaWdoVnA4UXBUaHJlc2hvbGQgPSA5NTsKLSAgICAgIHJldHVybiBTY2FsaW5nU2V0dGlu
Z3MobG93LnZhbHVlX29yKGtMb3dWcDhRcFRocmVzaG9sZCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhpZ2gudmFsdWVfb3Ioa0hpZ2hWcDhRcFRocmVzaG9sZCkpOwotICAgIH0KLSAg
ICBjYXNlIGtWaWRlb0NvZGVjVlA5OiB7Ci0gICAgICAvLyBRUCBpcyBvYnRhaW5lZCBmcm9tIFZQ
OS1iaXRzdHJlYW0sIHNvIHRoZSBRUCBjb3JyZXNwb25kcyB0byB0aGUKLSAgICAgIC8vIGJpdHN0
cmVhbSByYW5nZSBvZiBbMCwgMjU1XSBhbmQgbm90IHRoZSB1c2VyLWxldmVsIHJhbmdlIG9mIFsw
LDYzXS4KLSAgICAgIHN0YXRpYyBjb25zdCBpbnQga0xvd1ZwOVFwVGhyZXNob2xkID0gOTY7Ci0g
ICAgICBzdGF0aWMgY29uc3QgaW50IGtIaWdoVnA5UXBUaHJlc2hvbGQgPSAxODU7Ci0KLSAgICAg
IHJldHVybiBWaWRlb0VuY29kZXI6OlNjYWxpbmdTZXR0aW5ncyhrTG93VnA5UXBUaHJlc2hvbGQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0hpZ2hWcDlRcFRo
cmVzaG9sZCk7Ci0gICAgfQotICAgIGNhc2Uga1ZpZGVvQ29kZWNIMjY0OiB7Ci0gICAgICAvLyBT
YW1lIGFzIGluIGgyNjRfZW5jb2Rlcl9pbXBsLmNjLgotICAgICAgc3RhdGljIGNvbnN0IGludCBr
TG93SDI2NFFwVGhyZXNob2xkID0gMjQ7Ci0gICAgICBzdGF0aWMgY29uc3QgaW50IGtIaWdoSDI2
NFFwVGhyZXNob2xkID0gMzc7Ci0gICAgICByZXR1cm4gU2NhbGluZ1NldHRpbmdzKGxvdy52YWx1
ZV9vcihrTG93SDI2NFFwVGhyZXNob2xkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGlnaC52YWx1ZV9vcihrSGlnaEgyNjRRcFRocmVzaG9sZCkpOwotICAgIH0KLSAgICBkZWZhdWx0
OgotICAgICAgcmV0dXJuIFNjYWxpbmdTZXR0aW5nczo6a09mZjsKLSAgfQotfQotCi1zdGQ6OnZl
Y3RvcjxWaWRlb0VuY29kZXI6OlJlc29sdXRpb25CaXRyYXRlTGltaXRzPgotVmlkZW9FbmNvZGVy
V3JhcHBlcjo6R2V0UmVzb2x1dGlvbkJpdHJhdGVMaW1pdHMoSk5JRW52KiBqbmkpIGNvbnN0IHsK
LSAgc3RkOjp2ZWN0b3I8VmlkZW9FbmNvZGVyOjpSZXNvbHV0aW9uQml0cmF0ZUxpbWl0cz4gcmVz
b2x1dGlvbl9iaXRyYXRlX2xpbWl0czsKLQotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdEFy
cmF5PiBqX2JpdHJhdGVfbGltaXRzX2FycmF5ID0KLSAgICAgIEphdmFfVmlkZW9FbmNvZGVyX2dl
dFJlc29sdXRpb25CaXRyYXRlTGltaXRzKGpuaSwgZW5jb2Rlcl8pOwotCi0gIGNvbnN0IGpzaXpl
IG51bV90aHJlc2hvbGRzID0KLSAgICAgIGpuaS0+R2V0QXJyYXlMZW5ndGgoal9iaXRyYXRlX2xp
bWl0c19hcnJheS5vYmooKSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3RocmVzaG9sZHM7
ICsraSkgewotICAgIFNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBqX2JpdHJhdGVfbGltaXRz
ID0gU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+KAotICAgICAgICBqbmksIGpuaS0+R2V0T2Jq
ZWN0QXJyYXlFbGVtZW50KGpfYml0cmF0ZV9saW1pdHNfYXJyYXkub2JqKCksIGkpKTsKLQotICAg
IGppbnQgZnJhbWVfc2l6ZV9waXhlbHMgPQotICAgICAgICBKYXZhX1Jlc29sdXRpb25CaXRyYXRl
TGltaXRzX2dldEZyYW1lU2l6ZVBpeGVscyhqbmksIGpfYml0cmF0ZV9saW1pdHMpOwotICAgIGpp
bnQgbWluX3N0YXJ0X2JpdHJhdGVfYnBzID0KLSAgICAgICAgSmF2YV9SZXNvbHV0aW9uQml0cmF0
ZUxpbWl0c19nZXRNaW5TdGFydEJpdHJhdGVCcHMoam5pLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX2JpdHJhdGVfbGltaXRzKTsK
LSAgICBqaW50IG1pbl9iaXRyYXRlX2JwcyA9Ci0gICAgICAgIEphdmFfUmVzb2x1dGlvbkJpdHJh
dGVMaW1pdHNfZ2V0TWluQml0cmF0ZUJwcyhqbmksIGpfYml0cmF0ZV9saW1pdHMpOwotICAgIGpp
bnQgbWF4X2JpdHJhdGVfYnBzID0KLSAgICAgICAgSmF2YV9SZXNvbHV0aW9uQml0cmF0ZUxpbWl0
c19nZXRNYXhCaXRyYXRlQnBzKGpuaSwgal9iaXRyYXRlX2xpbWl0cyk7Ci0KLSAgICByZXNvbHV0
aW9uX2JpdHJhdGVfbGltaXRzLnB1c2hfYmFjayhWaWRlb0VuY29kZXI6OlJlc29sdXRpb25CaXRy
YXRlTGltaXRzKAotICAgICAgICBmcmFtZV9zaXplX3BpeGVscywgbWluX3N0YXJ0X2JpdHJhdGVf
YnBzLCBtaW5fYml0cmF0ZV9icHMsCi0gICAgICAgIG1heF9iaXRyYXRlX2JwcykpOwotICB9Ci0K
LSAgcmV0dXJuIHJlc29sdXRpb25fYml0cmF0ZV9saW1pdHM7Ci19Ci0KLXZvaWQgVmlkZW9FbmNv
ZGVyV3JhcHBlcjo6T25FbmNvZGVkRnJhbWUoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3Qg
SmF2YVJlZjxqb2JqZWN0PiYgal9lbmNvZGVkX2ltYWdlKSB7Ci0gIEVuY29kZWRJbWFnZSBmcmFt
ZSA9IEphdmFUb05hdGl2ZUVuY29kZWRJbWFnZShqbmksIGpfZW5jb2RlZF9pbWFnZSk7Ci0gIGlu
dDY0X3QgY2FwdHVyZV90aW1lX25zID0KLSAgICAgIEdldEphdmFFbmNvZGVkSW1hZ2VDYXB0dXJl
VGltZU5zKGpuaSwgal9lbmNvZGVkX2ltYWdlKTsKLQotICAvLyBFbmNvZGVkIGZyYW1lcyBhcmUg
ZGVsaXZlcmVkIGluIHRoZSBvcmRlciByZWNlaXZlZCwgYnV0IHNvbWUgb2YgdGhlbQotICAvLyBt
YXkgYmUgZHJvcHBlZCwgc28gcmVtb3ZlIHJlY29yZHMgb2YgZnJhbWVzIG9sZGVyIHRoYW4gdGhl
IGN1cnJlbnQKLSAgLy8gb25lLgotICAvLwotICAvLyBOT1RFOiBpZiB0aGUgY3VycmVudCBmcmFt
ZSBpcyBhc3NvY2lhdGVkIHdpdGggRW5jb2RlciBBLCBpbiB0aGUgdGltZQotICAvLyBzaW5jZSB0
aGlzIGZyYW1lIHdhcyByZWNlaXZlZCwgRW5jb2RlciBBIGNvdWxkIGhhdmUgYmVlbgotICAvLyBS
ZWxlYXNlKCknZWQsIEVuY29kZXIgQiBJbml0RW5jb2RlKCknZWQgKGR1ZSB0byByZXVzZSBvZiBF
bmNvZGVyIEEpLAotICAvLyBhbmQgZnJhbWVzIHJlY2VpdmVkIGJ5IEVuY29kZXIgQi4gVGh1cyB0
aGVyZSBtYXkgYmUgZnJhbWVfZXh0cmFfaW5mb3MKLSAgLy8gZW50cmllcyB0aGF0IGRvbid0IGJl
bG9uZyB0byB1cywgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8KLSAgLy8gcmVtb3Zl
IHRoZW0uIFJlbW92aW5nIG9ubHkgdGhvc2UgZW50cmllcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50
IGZyYW1lCi0gIC8vIHByb3ZpZGVzIHRoaXMgZ3VhcmFudGVlLgotICB3aGlsZSAoIWZyYW1lX2V4
dHJhX2luZm9zXy5lbXB0eSgpICYmCi0gICAgICAgICBmcmFtZV9leHRyYV9pbmZvc18uZnJvbnQo
KS5jYXB0dXJlX3RpbWVfbnMgPCBjYXB0dXJlX3RpbWVfbnMpIHsKLSAgICBmcmFtZV9leHRyYV9p
bmZvc18ucG9wX2Zyb250KCk7Ci0gIH0KLSAgaWYgKGZyYW1lX2V4dHJhX2luZm9zXy5lbXB0eSgp
IHx8Ci0gICAgICBmcmFtZV9leHRyYV9pbmZvc18uZnJvbnQoKS5jYXB0dXJlX3RpbWVfbnMgIT0g
Y2FwdHVyZV90aW1lX25zKSB7Ci0gICAgUlRDX0xPRyhMU19XQVJOSU5HKQotICAgICAgICA8PCAi
SmF2YSBlbmNvZGVyIHByb2R1Y2VkIGFuIHVuZXhwZWN0ZWQgZnJhbWUgd2l0aCB0aW1lc3RhbXA6
ICIKLSAgICAgICAgPDwgY2FwdHVyZV90aW1lX25zOwotICAgIHJldHVybjsKLSAgfQotICBGcmFt
ZUV4dHJhSW5mbyBmcmFtZV9leHRyYV9pbmZvID0gc3RkOjptb3ZlKGZyYW1lX2V4dHJhX2luZm9z
Xy5mcm9udCgpKTsKLSAgZnJhbWVfZXh0cmFfaW5mb3NfLnBvcF9mcm9udCgpOwotCi0gIC8vIFRo
aXMgaXMgYSBiaXQgc3VidGxlLiBUaGUgfGZyYW1lfCB2YXJpYWJsZSBmcm9tIHRoZSBsYW1iZGEg
Y2FwdHVyZSBpcwotICAvLyBjb25zdC4gV2hpY2ggaW1wbGllcyB0aGF0IChpKSB3ZSBuZWVkIHRv
IG1ha2UgYSBjb3B5IHRvIGJlIGFibGUgdG8KLSAgLy8gd3JpdGUgdG8gdGhlIG1ldGFkYXRhLCBh
bmQgKGlpKSB3ZSBzaG91bGQgYXZvaWQgdXNpbmcgdGhlIC5kYXRhKCkKLSAgLy8gbWV0aG9kIChp
bmNsdWRpbmcgaW1wbGljaXQgY29udmVyc2lvbiB0byBBcnJheVZpZXcpIG9uIHRoZSBub24tY29u
c3QKLSAgLy8gY29weSwgc2luY2UgdGhhdCB3b3VsZCB0cmlnZ2V0IGEgY29weSBvcGVyYXRpb24g
b24gdGhlIHVuZGVybHlpbmcKLSAgLy8gQ29weU9uV3JpdGVCdWZmZXIuCi0gIEVuY29kZWRJbWFn
ZSBmcmFtZV9jb3B5ID0gZnJhbWU7Ci0KLSAgZnJhbWVfY29weS5TZXRUaW1lc3RhbXAoZnJhbWVf
ZXh0cmFfaW5mby50aW1lc3RhbXBfcnRwKTsKLSAgZnJhbWVfY29weS5jYXB0dXJlX3RpbWVfbXNf
ID0gY2FwdHVyZV90aW1lX25zIC8gcnRjOjprTnVtTmFub3NlY3NQZXJNaWxsaXNlYzsKLQotICBS
VFBGcmFnbWVudGF0aW9uSGVhZGVyIGhlYWRlciA9IFBhcnNlRnJhZ21lbnRhdGlvbkhlYWRlcihm
cmFtZSk7Ci0gIGlmIChmcmFtZV9jb3B5LnFwXyA8IDApCi0gICAgZnJhbWVfY29weS5xcF8gPSBQ
YXJzZVFwKGZyYW1lKTsKLQotICBDb2RlY1NwZWNpZmljSW5mbyBpbmZvKFBhcnNlQ29kZWNTcGVj
aWZpY0luZm8oZnJhbWUpKTsKLQotICBjYWxsYmFja18tPk9uRW5jb2RlZEltYWdlKGZyYW1lX2Nv
cHksICZpbmZvLCAmaGVhZGVyKTsKLX0KLQotaW50MzJfdCBWaWRlb0VuY29kZXJXcmFwcGVyOjpI
YW5kbGVSZXR1cm5Db2RlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWV0
aG9kX25hbWUpIHsKLSAgaW50MzJfdCB2YWx1ZSA9IEphdmFUb05hdGl2ZVZpZGVvQ29kZWNTdGF0
dXMoam5pLCBqX3ZhbHVlKTsKLSAgaWYgKHZhbHVlID49IDApIHsgIC8vIE9LIG9yIE5PX09VVFBV
VAotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIFJUQ19MT0coTFNfV0FSTklORykgPDwgbWV0
aG9kX25hbWUgPDwgIjogIiA8PCB2YWx1ZTsKLSAgaWYgKHZhbHVlID09IFdFQlJUQ19WSURFT19D
T0RFQ19GQUxMQkFDS19TT0ZUV0FSRSB8fAotICAgICAgdmFsdWUgPT0gV0VCUlRDX1ZJREVPX0NP
REVDX1VOSU5JVElBTElaRUQpIHsgIC8vIENyaXRpY2FsIGVycm9yLgotICAgIFJUQ19MT0coTFNf
V0FSTklORykgPDwgIkphdmEgZW5jb2RlciByZXF1ZXN0ZWQgc29mdHdhcmUgZmFsbGJhY2suIjsK
LSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwotICB9Ci0K
LSAgLy8gVHJ5IHJlc2V0dGluZyB0aGUgY29kZWMuCi0gIGlmIChSZWxlYXNlKCkgPT0gV0VCUlRD
X1ZJREVPX0NPREVDX09LICYmCi0gICAgICBJbml0RW5jb2RlSW50ZXJuYWwoam5pKSA9PSBXRUJS
VENfVklERU9fQ09ERUNfT0spIHsKLSAgICBSVENfTE9HKExTX1dBUk5JTkcpIDw8ICJSZXNldCBK
YXZhIGVuY29kZXIuIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICB9
Ci0KLSAgUlRDX0xPRyhMU19XQVJOSU5HKSA8PCAiVW5hYmxlIHRvIHJlc2V0IEphdmEgZW5jb2Rl
ci4iOwotICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwotfQot
Ci1SVFBGcmFnbWVudGF0aW9uSGVhZGVyIFZpZGVvRW5jb2RlcldyYXBwZXI6OlBhcnNlRnJhZ21l
bnRhdGlvbkhlYWRlcigKLSAgICBydGM6OkFycmF5Vmlldzxjb25zdCB1aW50OF90PiBidWZmZXIp
IHsKLSAgUlRQRnJhZ21lbnRhdGlvbkhlYWRlciBoZWFkZXI7Ci0gIGlmIChjb2RlY19zZXR0aW5n
c18uY29kZWNUeXBlID09IGtWaWRlb0NvZGVjSDI2NCkgewotICAgIGgyNjRfYml0c3RyZWFtX3Bh
cnNlcl8uUGFyc2VCaXRzdHJlYW0oYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0KLSAg
ICAvLyBGb3IgSC4yNjQgc2VhcmNoIGZvciBzdGFydCBjb2Rlcy4KLSAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxIMjY0OjpOYWx1SW5kZXg+IG5hbHVfaWR4cyA9Ci0gICAgICAgIEgyNjQ6OkZpbmROYWx1
SW5kaWNlcyhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICBpZiAobmFsdV9pZHhz
LmVtcHR5KCkpIHsKLSAgICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJTdGFydCBjb2RlIGlzIG5v
dCBmb3VuZCEiOwotICAgICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkRhdGE6IiA8PCBidWZmZXJb
MF0gPDwgIiAiIDw8IGJ1ZmZlclsxXSA8PCAiICIKLSAgICAgICAgICAgICAgICAgICAgICAgIDw8
IGJ1ZmZlclsyXSA8PCAiICIgPDwgYnVmZmVyWzNdIDw8ICIgIiA8PCBidWZmZXJbNF0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIDw8ICIgIiA8PCBidWZmZXJbNV07Ci0gICAgfQotICAgIGhlYWRl
ci5WZXJpZnlBbmRBbGxvY2F0ZUZyYWdtZW50YXRpb25IZWFkZXIobmFsdV9pZHhzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYWx1X2lkeHMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgIGhlYWRlci5mcmFnbWVudGF0aW9uT2Zmc2V0W2ldID0gbmFsdV9pZHhzW2ldLnBheWxvYWRf
c3RhcnRfb2Zmc2V0OwotICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25MZW5ndGhbaV0gPSBuYWx1
X2lkeHNbaV0ucGF5bG9hZF9zaXplOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBHZW5lcmF0
ZSBhIGhlYWRlciBkZXNjcmliaW5nIGEgc2luZ2xlIGZyYWdtZW50LgotICAgIGhlYWRlci5WZXJp
ZnlBbmRBbGxvY2F0ZUZyYWdtZW50YXRpb25IZWFkZXIoMSk7Ci0gICAgaGVhZGVyLmZyYWdtZW50
YXRpb25PZmZzZXRbMF0gPSAwOwotICAgIGhlYWRlci5mcmFnbWVudGF0aW9uTGVuZ3RoWzBdID0g
YnVmZmVyLnNpemUoKTsKLSAgfQotICByZXR1cm4gaGVhZGVyOwotfQotCi1pbnQgVmlkZW9FbmNv
ZGVyV3JhcHBlcjo6UGFyc2VRcChydGM6OkFycmF5Vmlldzxjb25zdCB1aW50OF90PiBidWZmZXIp
IHsKLSAgaW50IHFwOwotICBib29sIHN1Y2Nlc3M7Ci0gIHN3aXRjaCAoY29kZWNfc2V0dGluZ3Nf
LmNvZGVjVHlwZSkgewotICAgIGNhc2Uga1ZpZGVvQ29kZWNWUDg6Ci0gICAgICBzdWNjZXNzID0g
dnA4OjpHZXRRcChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCAmcXApOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBrVmlkZW9Db2RlY1ZQOToKLSAgICAgIHN1Y2Nlc3MgPSB2cDk6OkdldFFw
KGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCksICZxcCk7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIGtWaWRlb0NvZGVjSDI2NDoKLSAgICAgIHN1Y2Nlc3MgPSBoMjY0X2JpdHN0cmVhbV9wYXJz
ZXJfLkdldExhc3RTbGljZVFwKCZxcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgLy8g
RGVmYXVsdCBpcyB0byBub3QgcHJvdmlkZSBRUC4KLSAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBzdWNjZXNzID8gcXAgOiAtMTsgIC8vIC0xIG1lYW5z
IHVua25vd24gUVAuCi19Ci0KLUNvZGVjU3BlY2lmaWNJbmZvIFZpZGVvRW5jb2RlcldyYXBwZXI6
OlBhcnNlQ29kZWNTcGVjaWZpY0luZm8oCi0gICAgY29uc3QgRW5jb2RlZEltYWdlJiBmcmFtZSkg
ewotICBjb25zdCBib29sIGtleV9mcmFtZSA9IGZyYW1lLl9mcmFtZVR5cGUgPT0gVmlkZW9GcmFt
ZVR5cGU6OmtWaWRlb0ZyYW1lS2V5OwotCi0gIENvZGVjU3BlY2lmaWNJbmZvIGluZm87Ci0gIGlu
Zm8uY29kZWNUeXBlID0gY29kZWNfc2V0dGluZ3NfLmNvZGVjVHlwZTsKLQotICBzd2l0Y2ggKGNv
ZGVjX3NldHRpbmdzXy5jb2RlY1R5cGUpIHsKLSAgICBjYXNlIGtWaWRlb0NvZGVjVlA4OgotICAg
ICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOC5ub25SZWZlcmVuY2UgPSBmYWxzZTsKLSAgICAgIGlu
Zm8uY29kZWNTcGVjaWZpYy5WUDgudGVtcG9yYWxJZHggPSBrTm9UZW1wb3JhbElkeDsKLSAgICAg
IGluZm8uY29kZWNTcGVjaWZpYy5WUDgubGF5ZXJTeW5jID0gZmFsc2U7Ci0gICAgICBpbmZvLmNv
ZGVjU3BlY2lmaWMuVlA4LmtleUlkeCA9IGtOb0tleUlkeDsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2Uga1ZpZGVvQ29kZWNWUDk6Ci0gICAgICBpZiAoa2V5X2ZyYW1lKSB7Ci0gICAgICAgIGdvZl9p
ZHhfID0gMDsKLSAgICAgIH0KLSAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuaW50ZXJfcGlj
X3ByZWRpY3RlZCA9IGtleV9mcmFtZSA/IGZhbHNlIDogdHJ1ZTsKLSAgICAgIGluZm8uY29kZWNT
cGVjaWZpYy5WUDkuZmxleGlibGVfbW9kZSA9IGZhbHNlOwotICAgICAgaW5mby5jb2RlY1NwZWNp
ZmljLlZQOS5zc19kYXRhX2F2YWlsYWJsZSA9IGtleV9mcmFtZSA/IHRydWUgOiBmYWxzZTsKLSAg
ICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkudGVtcG9yYWxfaWR4ID0ga05vVGVtcG9yYWxJZHg7
Ci0gICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnRlbXBvcmFsX3VwX3N3aXRjaCA9IHRydWU7
Ci0gICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LmludGVyX2xheWVyX3ByZWRpY3RlZCA9IGZh
bHNlOwotICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5nb2ZfaWR4ID0KLSAgICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90Pihnb2ZfaWR4XysrICUgZ29mXy5udW1fZnJhbWVzX2luX2dvZik7
Ci0gICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5Lm51bV9zcGF0aWFsX2xheWVycyA9IDE7Ci0g
ICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LmZpcnN0X2ZyYW1lX2luX3BpY3R1cmUgPSB0cnVl
OwotICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5lbmRfb2ZfcGljdHVyZSA9IHRydWU7Ci0g
ICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNwYXRpYWxfbGF5ZXJfcmVzb2x1dGlvbl9wcmVz
ZW50ID0gZmFsc2U7Ci0gICAgICBpZiAoaW5mby5jb2RlY1NwZWNpZmljLlZQOS5zc19kYXRhX2F2
YWlsYWJsZSkgewotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNwYXRpYWxfbGF5ZXJf
cmVzb2x1dGlvbl9wcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQ
OS53aWR0aFswXSA9IGZyYW1lLl9lbmNvZGVkV2lkdGg7Ci0gICAgICAgIGluZm8uY29kZWNTcGVj
aWZpYy5WUDkuaGVpZ2h0WzBdID0gZnJhbWUuX2VuY29kZWRIZWlnaHQ7Ci0gICAgICAgIGluZm8u
Y29kZWNTcGVjaWZpYy5WUDkuZ29mLkNvcHlHb2ZJbmZvVlA5KGdvZl8pOwotICAgICAgfQotICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIGlu
Zm87Ci19Ci0KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBWaWRlb0VuY29kZXJXcmFwcGVy
OjpUb0phdmFCaXRyYXRlQWxsb2NhdGlvbigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBW
aWRlb0JpdHJhdGVBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKSB7Ci0gIFNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0QXJyYXk+IGpfYWxsb2NhdGlvbl9hcnJheSgKLSAgICAgIGpuaSwgam5pLT5OZXdP
YmplY3RBcnJheShrTWF4U3BhdGlhbExheWVycywgaW50X2FycmF5X2NsYXNzXy5vYmooKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qIGluaXRpYWwgKi8pKTsKLSAg
Zm9yIChpbnQgc3BhdGlhbF9pID0gMDsgc3BhdGlhbF9pIDwga01heFNwYXRpYWxMYXllcnM7ICsr
c3BhdGlhbF9pKSB7Ci0gICAgc3RkOjphcnJheTxpbnQzMl90LCBrTWF4VGVtcG9yYWxTdHJlYW1z
PiBzcGF0aWFsX2xheWVyOwotICAgIGZvciAoaW50IHRlbXBvcmFsX2kgPSAwOyB0ZW1wb3JhbF9p
IDwga01heFRlbXBvcmFsU3RyZWFtczsgKyt0ZW1wb3JhbF9pKSB7Ci0gICAgICBzcGF0aWFsX2xh
eWVyW3RlbXBvcmFsX2ldID0gYWxsb2NhdGlvbi5HZXRCaXRyYXRlKHNwYXRpYWxfaSwgdGVtcG9y
YWxfaSk7Ci0gICAgfQotCi0gICAgU2NvcGVkSmF2YUxvY2FsUmVmPGppbnRBcnJheT4gal9hcnJh
eV9zcGF0aWFsX2xheWVyID0KLSAgICAgICAgTmF0aXZlVG9KYXZhSW50QXJyYXkoam5pLCBzcGF0
aWFsX2xheWVyKTsKLSAgICBqbmktPlNldE9iamVjdEFycmF5RWxlbWVudChqX2FsbG9jYXRpb25f
YXJyYXkub2JqKCksIHNwYXRpYWxfaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
X2FycmF5X3NwYXRpYWxfbGF5ZXIub2JqKCkpOwotICB9Ci0gIHJldHVybiBKYXZhX0JpdHJhdGVB
bGxvY2F0aW9uX0NvbnN0cnVjdG9yKGpuaSwgal9hbGxvY2F0aW9uX2FycmF5KTsKLX0KLQotc3Rk
OjpzdHJpbmcgVmlkZW9FbmNvZGVyV3JhcHBlcjo6R2V0SW1wbGVtZW50YXRpb25OYW1lKEpOSUVu
diogam5pKSBjb25zdCB7Ci0gIHJldHVybiBKYXZhVG9TdGRTdHJpbmcoCi0gICAgICBqbmksIEph
dmFfVmlkZW9FbmNvZGVyX2dldEltcGxlbWVudGF0aW9uTmFtZShqbmksIGVuY29kZXJfKSk7Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxWaWRlb0VuY29kZXI+IEphdmFUb05hdGl2ZVZpZGVvRW5jb2Rl
cigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX2VuY29k
ZXIpIHsKLSAgY29uc3QgamxvbmcgbmF0aXZlX2VuY29kZXIgPQotICAgICAgSmF2YV9WaWRlb0Vu
Y29kZXJfY3JlYXRlTmF0aXZlVmlkZW9FbmNvZGVyKGpuaSwgal9lbmNvZGVyKTsKLSAgVmlkZW9F
bmNvZGVyKiBlbmNvZGVyOwotICBpZiAobmF0aXZlX2VuY29kZXIgPT0gMCkgewotICAgIGVuY29k
ZXIgPSBuZXcgVmlkZW9FbmNvZGVyV3JhcHBlcihqbmksIGpfZW5jb2Rlcik7Ci0gIH0gZWxzZSB7
Ci0gICAgZW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmlkZW9FbmNvZGVyKj4obmF0aXZlX2Vu
Y29kZXIpOwotICB9Ci0gIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9FbmNvZGVyPihlbmNv
ZGVyKTsKLX0KLQotYm9vbCBJc0hhcmR3YXJlVmlkZW9FbmNvZGVyKEpOSUVudiogam5pLCBjb25z
dCBKYXZhUmVmPGpvYmplY3Q+JiBqX2VuY29kZXIpIHsKLSAgcmV0dXJuIEphdmFfVmlkZW9FbmNv
ZGVyX2lzSGFyZHdhcmVFbmNvZGVyKGpuaSwgal9lbmNvZGVyKTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19l
bmNvZGVyX3dyYXBwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZW5jb2Rlcl93cmFwcGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzIzYmM4YTYzNDQ3NzJhOGUxYzRhYTg0MjZiNDhlYjRm
Y2Y2YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2pu
aS92aWRlb19lbmNvZGVyX3dyYXBwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklfVklERU9f
RU5DT0RFUl9XUkFQUEVSX0hfCi0jZGVmaW5lIFNES19BTkRST0lEX1NSQ19KTklfVklERU9fRU5D
T0RFUl9XUkFQUEVSX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxkZXF1ZT4KLSNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYWJzbC90eXBl
cy9vcHRpb25hbC5oIgotI2luY2x1ZGUgImFwaS92aWRlb19jb2RlY3MvdmlkZW9fZW5jb2Rlci5o
IgotI2luY2x1ZGUgImNvbW1vbl92aWRlby9oMjY0L2gyNjRfYml0c3RyZWFtX3BhcnNlci5oIgot
I2luY2x1ZGUgIm1vZHVsZXMvdmlkZW9fY29kaW5nL2NvZGVjcy92cDkvaW5jbHVkZS92cDlfZ2xv
YmFscy5oIgotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2ZyYW1lLmgiCi0KLW5hbWVzcGFjZSB3
ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLS8vIFdyYXBzIGEgSmF2YSBlbmNvZGVyIGFuZCBk
ZWxlZ2F0ZXMgYWxsIGNhbGxzIHRvIGl0LgotY2xhc3MgVmlkZW9FbmNvZGVyV3JhcHBlciA6IHB1
YmxpYyBWaWRlb0VuY29kZXIgewotIHB1YmxpYzoKLSAgVmlkZW9FbmNvZGVyV3JhcHBlcihKTklF
bnYqIGpuaSwgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal9lbmNvZGVyKTsKLSAgflZpZGVvRW5j
b2RlcldyYXBwZXIoKSBvdmVycmlkZTsKLQotICBpbnQzMl90IEluaXRFbmNvZGUoY29uc3QgVmlk
ZW9Db2RlYyogY29kZWNfc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBTZXR0
aW5ncyYgc2V0dGluZ3MpIG92ZXJyaWRlOwotCi0gIGludDMyX3QgUmVnaXN0ZXJFbmNvZGVDb21w
bGV0ZUNhbGxiYWNrKAotICAgICAgRW5jb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSBvdmVy
cmlkZTsKLQotICBpbnQzMl90IFJlbGVhc2UoKSBvdmVycmlkZTsKLQotICBpbnQzMl90IEVuY29k
ZShjb25zdCBWaWRlb0ZyYW1lJiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8VmlkZW9GcmFtZVR5cGU+KiBmcmFtZV90eXBlcykgb3ZlcnJpZGU7Ci0KLSAgdm9pZCBT
ZXRSYXRlcyhjb25zdCBSYXRlQ29udHJvbFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpIG92ZXJyaWRl
OwotCi0gIEVuY29kZXJJbmZvIEdldEVuY29kZXJJbmZvKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
Ly8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEpOSS4KLSAgdm9pZCBPbkVuY29kZWRGcmFtZShK
TklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+
JiBqX2VuY29kZWRfaW1hZ2UpOwotCi0gcHJpdmF0ZToKLSAgc3RydWN0IEZyYW1lRXh0cmFJbmZv
IHsKLSAgICBpbnQ2NF90IGNhcHR1cmVfdGltZV9uczsgIC8vIFVzZWQgYXMgYW4gaWRlbnRpZmll
ciBvZiB0aGUgZnJhbWUuCi0KLSAgICB1aW50MzJfdCB0aW1lc3RhbXBfcnRwOwotICB9OwotCi0g
IGludDMyX3QgSW5pdEVuY29kZUludGVybmFsKEpOSUVudiogam5pKTsKLQotICAvLyBUYWtlcyBK
YXZhIFZpZGVvQ29kZWNTdGF0dXMsIGhhbmRsZXMgaXQgYW5kIHJldHVybnMgV0VCUlRDX1ZJREVP
X0NPREVDXyoKLSAgLy8gc3RhdHVzIGNvZGUuCi0gIGludDMyX3QgSGFuZGxlUmV0dXJuQ29kZShK
TklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9i
amVjdD4mIGpfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBt
ZXRob2RfbmFtZSk7Ci0KLSAgUlRQRnJhZ21lbnRhdGlvbkhlYWRlciBQYXJzZUZyYWdtZW50YXRp
b25IZWFkZXIoCi0gICAgICBydGM6OkFycmF5Vmlldzxjb25zdCB1aW50OF90PiBidWZmZXIpOwot
ICBpbnQgUGFyc2VRcChydGM6OkFycmF5Vmlldzxjb25zdCB1aW50OF90PiBidWZmZXIpOwotICBD
b2RlY1NwZWNpZmljSW5mbyBQYXJzZUNvZGVjU3BlY2lmaWNJbmZvKGNvbnN0IEVuY29kZWRJbWFn
ZSYgZnJhbWUpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gVG9KYXZhQml0cmF0ZUFs
bG9jYXRpb24oCi0gICAgICBKTklFbnYqIGpuaSwKLSAgICAgIGNvbnN0IFZpZGVvQml0cmF0ZUFs
bG9jYXRpb24mIGFsbG9jYXRpb24pOwotICBzdGQ6OnN0cmluZyBHZXRJbXBsZW1lbnRhdGlvbk5h
bWUoSk5JRW52KiBqbmkpIGNvbnN0OwotCi0gIFNjYWxpbmdTZXR0aW5ncyBHZXRTY2FsaW5nU2V0
dGluZ3NJbnRlcm5hbChKTklFbnYqIGpuaSkgY29uc3Q7Ci0KLSAgc3RkOjp2ZWN0b3I8UmVzb2x1
dGlvbkJpdHJhdGVMaW1pdHM+IEdldFJlc29sdXRpb25CaXRyYXRlTGltaXRzKAotICAgICAgSk5J
RW52KiBqbmkpIGNvbnN0OwotCi0gIGNvbnN0IFNjb3BlZEphdmFHbG9iYWxSZWY8am9iamVjdD4g
ZW5jb2Rlcl87Ci0gIGNvbnN0IFNjb3BlZEphdmFHbG9iYWxSZWY8amNsYXNzPiBpbnRfYXJyYXlf
Y2xhc3NfOwotCi0gIHN0ZDo6ZGVxdWU8RnJhbWVFeHRyYUluZm8+IGZyYW1lX2V4dHJhX2luZm9z
XzsKLSAgRW5jb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrXzsKLSAgYm9vbCBpbml0aWFsaXpl
ZF87Ci0gIGludCBudW1fcmVzZXRzXzsKLSAgYWJzbDo6b3B0aW9uYWw8VmlkZW9FbmNvZGVyOjpD
YXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllc187Ci0gIGludCBudW1iZXJfb2ZfY29yZXNfOwotICBW
aWRlb0NvZGVjIGNvZGVjX3NldHRpbmdzXzsKLSAgRW5jb2RlckluZm8gZW5jb2Rlcl9pbmZvXzsK
LSAgSDI2NEJpdHN0cmVhbVBhcnNlciBoMjY0X2JpdHN0cmVhbV9wYXJzZXJfOwotCi0gIC8vIFZQ
OSB2YXJpYWJsZXMgdG8gcG9wdWxhdGUgY29kZWMgc3BlY2lmaWMgc3RydWN0dXJlLgotICBHb2ZJ
bmZvVlA5IGdvZl87ICAvLyBDb250YWlucyBlYWNoIGZyYW1lJ3MgdGVtcG9yYWwgaW5mb3JtYXRp
b24gZm9yCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vbi1mbGV4aWJsZSBWUDkgbW9kZS4KLSAg
c2l6ZV90IGdvZl9pZHhfOwotfTsKLQotLyogSWYgdGhlIGpfZW5jb2RlciBpcyBhIHdyYXBwZWQg
bmF0aXZlIGVuY29kZXIsIHVud3JhcCBpdC4gSWYgaXQgaXMgbm90LAotICogd3JhcCBpdCBpbiBh
IFZpZGVvRW5jb2RlcldyYXBwZXIuCi0gKi8KLXN0ZDo6dW5pcXVlX3B0cjxWaWRlb0VuY29kZXI+
IEphdmFUb05hdGl2ZVZpZGVvRW5jb2RlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBK
YXZhUmVmPGpvYmplY3Q+JiBqX2VuY29kZXIpOwotCi1ib29sIElzSGFyZHdhcmVWaWRlb0VuY29k
ZXIoSk5JRW52KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfZW5jb2Rlcik7Ci0KLX0g
IC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBT
REtfQU5EUk9JRF9TUkNfSk5JX1ZJREVPX0VOQ09ERVJfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2puaS92aWRlb19mcmFtZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fZnJhbWUuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ1N2ZlOGY5Yjc0ODQ3ZGM5NWQ1MmVmZGZkYzdiMTIwMWVmYTM1YjIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19mcmFtZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19mcmFtZS5oIgotCi0j
aW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYXBpL3Njb3BlZF9yZWZwdHIuaCIKLSNpbmNs
dWRlICJjb21tb25fdmlkZW8vaW5jbHVkZS92aWRlb19mcmFtZV9idWZmZXIuaCIKLSNpbmNsdWRl
ICJydGNfYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAicnRjX2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVk
ZSAicnRjX2Jhc2Uva2VlcF9yZWZfdW50aWxfZG9uZS5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2xv
Z2dpbmcuaCIKLSNpbmNsdWRlICJydGNfYmFzZS90aW1lX3V0aWxzLmgiCi0jaW5jbHVkZSAic2Rr
L2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVvX2puaS9WaWRlb0ZyYW1lX2puaS5oIgotI2luY2x1ZGUg
InNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9p
ZC9zcmMvam5pL3dyYXBwZWRfbmF0aXZlX2k0MjBfYnVmZmVyLmgiCi0KLW5hbWVzcGFjZSB3ZWJy
dGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEFuZHJvaWRWaWRl
b0k0MjBCdWZmZXIgOiBwdWJsaWMgSTQyMEJ1ZmZlckludGVyZmFjZSB7Ci0gcHVibGljOgotICAv
LyBBZG9wdHMgYW5kIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgSmF2YSBWaWRlb0ZyYW1lLkJ1ZmZl
ci4gSS5lLiByZXRhaW4oKQotICAvLyB3aWxsIG5vdCBiZSBjYWxsZWQsIGJ1dCByZWxlYXNlKCkg
d2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcmV0dXJuZWQKLSAgLy8gQW5kcm9pZFZpZGVvQnVmZmVy
IGlzIGRlc3Ryb3llZC4KLSAgc3RhdGljIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBbmRyb2lkVmlkZW9J
NDIwQnVmZmVyPiBBZG9wdCgKLSAgICAgIEpOSUVudiogam5pLAotICAgICAgaW50IHdpZHRoLAot
ICAgICAgaW50IGhlaWdodCwKLSAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9f
ZnJhbWVfYnVmZmVyKTsKLQotIHByb3RlY3RlZDoKLSAgLy8gU2hvdWxkIG5vdCBiZSBjYWxsZWQg
ZGlyZWN0bHkuIEFkb3B0cyB0aGUgYnVmZmVyLiBVc2UgQWRvcHQoKSBpbnN0ZWFkIGZvcgotICAv
LyBjbGFyaXR5LgotICBBbmRyb2lkVmlkZW9JNDIwQnVmZmVyKEpOSUVudiogam5pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8am9iamVj
dD4mIGpfdmlkZW9fZnJhbWVfYnVmZmVyKTsKLSAgfkFuZHJvaWRWaWRlb0k0MjBCdWZmZXIoKSBv
dmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IHVpbnQ4X3QqIERhdGFZKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZGF0YV95XzsgfQotICBjb25zdCB1aW50OF90KiBEYXRhVSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGRhdGFfdV87IH0KLSAgY29uc3QgdWludDhfdCogRGF0YVYoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBkYXRhX3ZfOyB9Ci0KLSAgaW50IFN0cmlkZVkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBzdHJpZGVfeV87IH0KLSAgaW50IFN0cmlkZVUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBzdHJpZGVfdV87IH0KLSAgaW50IFN0cmlkZVYoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBzdHJpZGVfdl87IH0KLQotICBpbnQgd2lkdGgoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB3aWR0aF87IH0KLSAgaW50IGhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGhlaWdodF87IH0KLQotICBjb25zdCBpbnQgd2lkdGhfOwotICBjb25zdCBpbnQgaGVpZ2h0
XzsKLSAgLy8gSG9sZHMgYSBWaWRlb0ZyYW1lLkk0MjBCdWZmZXIuCi0gIGNvbnN0IFNjb3BlZEph
dmFHbG9iYWxSZWY8am9iamVjdD4gal92aWRlb19mcmFtZV9idWZmZXJfOwotCi0gIGNvbnN0IHVp
bnQ4X3QqIGRhdGFfeV87Ci0gIGNvbnN0IHVpbnQ4X3QqIGRhdGFfdV87Ci0gIGNvbnN0IHVpbnQ4
X3QqIGRhdGFfdl87Ci0gIGludCBzdHJpZGVfeV87Ci0gIGludCBzdHJpZGVfdV87Ci0gIGludCBz
dHJpZGVfdl87Ci19OwotCi1ydGM6OnNjb3BlZF9yZWZwdHI8QW5kcm9pZFZpZGVvSTQyMEJ1ZmZl
cj4gQW5kcm9pZFZpZGVvSTQyMEJ1ZmZlcjo6QWRvcHQoCi0gICAgSk5JRW52KiBqbmksCi0gICAg
aW50IHdpZHRoLAotICAgIGludCBoZWlnaHQsCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYg
al92aWRlb19mcmFtZV9idWZmZXIpIHsKLSAgcmV0dXJuIG5ldyBydGM6OlJlZkNvdW50ZWRPYmpl
Y3Q8QW5kcm9pZFZpZGVvSTQyMEJ1ZmZlcj4oCi0gICAgICBqbmksIHdpZHRoLCBoZWlnaHQsIGpf
dmlkZW9fZnJhbWVfYnVmZmVyKTsKLX0KLQotQW5kcm9pZFZpZGVvSTQyMEJ1ZmZlcjo6QW5kcm9p
ZFZpZGVvSTQyMEJ1ZmZlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBpbnQgd2lkdGgsCi0gICAg
aW50IGhlaWdodCwKLSAgICBjb25zdCBKYXZhUmVmPGpvYmplY3Q+JiBqX3ZpZGVvX2ZyYW1lX2J1
ZmZlcikKLSAgICA6IHdpZHRoXyh3aWR0aCksCi0gICAgICBoZWlnaHRfKGhlaWdodCksCi0gICAg
ICBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcl8oam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcikgewotICBT
Y29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9kYXRhX3kgPQotICAgICAgSmF2YV9JNDIwQnVm
ZmVyX2dldERhdGFZKGpuaSwgal92aWRlb19mcmFtZV9idWZmZXIpOwotICBTY29wZWRKYXZhTG9j
YWxSZWY8am9iamVjdD4gal9kYXRhX3UgPQotICAgICAgSmF2YV9JNDIwQnVmZmVyX2dldERhdGFV
KGpuaSwgal92aWRlb19mcmFtZV9idWZmZXIpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVj
dD4gal9kYXRhX3YgPQotICAgICAgSmF2YV9JNDIwQnVmZmVyX2dldERhdGFWKGpuaSwgal92aWRl
b19mcmFtZV9idWZmZXIpOwotCi0gIGRhdGFfeV8gPQotICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RhdGFfeS5vYmooKSkpOwot
ICBkYXRhX3VfID0KLSAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihqbmktPkdldERp
cmVjdEJ1ZmZlckFkZHJlc3Moal9kYXRhX3Uub2JqKCkpKTsKLSAgZGF0YV92XyA9Ci0gICAgICBz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpf
ZGF0YV92Lm9iaigpKSk7Ci0KLSAgc3RyaWRlX3lfID0gSmF2YV9JNDIwQnVmZmVyX2dldFN0cmlk
ZVkoam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcik7Ci0gIHN0cmlkZV91XyA9IEphdmFfSTQyMEJ1
ZmZlcl9nZXRTdHJpZGVVKGpuaSwgal92aWRlb19mcmFtZV9idWZmZXIpOwotICBzdHJpZGVfdl8g
PSBKYXZhX0k0MjBCdWZmZXJfZ2V0U3RyaWRlVihqbmksIGpfdmlkZW9fZnJhbWVfYnVmZmVyKTsK
LX0KLQotQW5kcm9pZFZpZGVvSTQyMEJ1ZmZlcjo6fkFuZHJvaWRWaWRlb0k0MjBCdWZmZXIoKSB7
Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIEphdmFf
QnVmZmVyX3JlbGVhc2Uoam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcl8pOwotfQotCi19ICAvLyBu
YW1lc3BhY2UKLQotaW50NjRfdCBHZXRKYXZhVmlkZW9GcmFtZVRpbWVzdGFtcE5zKEpOSUVudiog
am5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIGpfdmlkZW9fZnJhbWUpIHsKLSAgcmV0dXJuIEphdmFfVmlkZW9GcmFtZV9nZXRU
aW1lc3RhbXBOcyhqbmksIGpfdmlkZW9fZnJhbWUpOwotfQotCi1ydGM6OnNjb3BlZF9yZWZwdHI8
QW5kcm9pZFZpZGVvQnVmZmVyPiBBbmRyb2lkVmlkZW9CdWZmZXI6OkFkb3B0KAotICAgIEpOSUVu
diogam5pLAotICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9fZnJhbWVfYnVmZmVy
KSB7Ci0gIHJldHVybiBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PEFuZHJvaWRWaWRlb0J1ZmZl
cj4oam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpfdmlkZW9fZnJhbWVfYnVmZmVyKTsKLX0KLQotcnRjOjpzY29wZWRfcmVmcHRyPEFu
ZHJvaWRWaWRlb0J1ZmZlcj4gQW5kcm9pZFZpZGVvQnVmZmVyOjpDcmVhdGUoCi0gICAgSk5JRW52
KiBqbmksCi0gICAgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal92aWRlb19mcmFtZV9idWZmZXIp
IHsKLSAgSmF2YV9CdWZmZXJfcmV0YWluKGpuaSwgal92aWRlb19mcmFtZV9idWZmZXIpOwotICBy
ZXR1cm4gQWRvcHQoam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcik7Ci19Ci0KLUFuZHJvaWRWaWRl
b0J1ZmZlcjo6QW5kcm9pZFZpZGVvQnVmZmVyKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0
IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9fZnJhbWVfYnVmZmVyKQotICAgIDogd2lkdGhfKEph
dmFfQnVmZmVyX2dldFdpZHRoKGpuaSwgal92aWRlb19mcmFtZV9idWZmZXIpKSwKLSAgICAgIGhl
aWdodF8oSmF2YV9CdWZmZXJfZ2V0SGVpZ2h0KGpuaSwgal92aWRlb19mcmFtZV9idWZmZXIpKSwK
LSAgICAgIGpfdmlkZW9fZnJhbWVfYnVmZmVyXyhqbmksIGpfdmlkZW9fZnJhbWVfYnVmZmVyKSB7
fQotCi1BbmRyb2lkVmlkZW9CdWZmZXI6On5BbmRyb2lkVmlkZW9CdWZmZXIoKSB7Ci0gIEpOSUVu
diogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIEphdmFfQnVmZmVyX3Jl
bGVhc2Uoam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcl8pOwotfQotCi1jb25zdCBTY29wZWRKYXZh
R2xvYmFsUmVmPGpvYmplY3Q+JiBBbmRyb2lkVmlkZW9CdWZmZXI6OnZpZGVvX2ZyYW1lX2J1ZmZl
cigpCi0gICAgY29uc3QgewotICByZXR1cm4gal92aWRlb19mcmFtZV9idWZmZXJfOwotfQotCi1y
dGM6OnNjb3BlZF9yZWZwdHI8QW5kcm9pZFZpZGVvQnVmZmVyPiBBbmRyb2lkVmlkZW9CdWZmZXI6
OkNyb3BBbmRTY2FsZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBpbnQgY3JvcF94LAotICAgIGlu
dCBjcm9wX3ksCi0gICAgaW50IGNyb3Bfd2lkdGgsCi0gICAgaW50IGNyb3BfaGVpZ2h0LAotICAg
IGludCBzY2FsZV93aWR0aCwKLSAgICBpbnQgc2NhbGVfaGVpZ2h0KSB7Ci0gIHJldHVybiBBZG9w
dChqbmksIEphdmFfQnVmZmVyX2Nyb3BBbmRTY2FsZShqbmksIGpfdmlkZW9fZnJhbWVfYnVmZmVy
XywgY3JvcF94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JvcF95LCBjcm9wX3dpZHRoLCBjcm9wX2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjYWxlX3dpZHRoLCBzY2FsZV9oZWlnaHQpKTsKLX0KLQot
VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZSBBbmRyb2lkVmlkZW9CdWZmZXI6OnR5cGUoKSBjb25zdCB7
Ci0gIHJldHVybiBUeXBlOjprTmF0aXZlOwotfQotCi1pbnQgQW5kcm9pZFZpZGVvQnVmZmVyOjp3
aWR0aCgpIGNvbnN0IHsKLSAgcmV0dXJuIHdpZHRoXzsKLX0KLQotaW50IEFuZHJvaWRWaWRlb0J1
ZmZlcjo6aGVpZ2h0KCkgY29uc3QgewotICByZXR1cm4gaGVpZ2h0XzsKLX0KLQotcnRjOjpzY29w
ZWRfcmVmcHRyPEk0MjBCdWZmZXJJbnRlcmZhY2U+IEFuZHJvaWRWaWRlb0J1ZmZlcjo6VG9JNDIw
KCkgewotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBT
Y29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal9pNDIwX2J1ZmZlciA9Ci0gICAgICBKYXZhX0J1
ZmZlcl90b0k0MjAoam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcl8pOwotCi0gIC8vIFdlIGRvbid0
IG5lZWQgdG8gcmV0YWluIHRoZSBidWZmZXIgYmVjYXVzZSB0b0k0MjAgcmV0dXJucyBhIG5ldyBv
YmplY3QgdGhhdAotICAvLyB3ZSBhcmUgYXNzdW1lZCB0byB0YWtlIHRoZSBvd25lcnNoaXAgb2Yu
Ci0gIHJldHVybiBBbmRyb2lkVmlkZW9JNDIwQnVmZmVyOjpBZG9wdChqbmksIHdpZHRoXywgaGVp
Z2h0Xywgal9pNDIwX2J1ZmZlcik7Ci19Ci0KLVZpZGVvRnJhbWUgSmF2YVRvTmF0aXZlRnJhbWUo
Sk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFSZWY8
am9iamVjdD4mIGpfdmlkZW9fZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHRpbWVzdGFtcF9ydHApIHsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IGpf
dmlkZW9fZnJhbWVfYnVmZmVyID0KLSAgICAgIEphdmFfVmlkZW9GcmFtZV9nZXRCdWZmZXIoam5p
LCBqX3ZpZGVvX2ZyYW1lKTsKLSAgaW50IHJvdGF0aW9uID0gSmF2YV9WaWRlb0ZyYW1lX2dldFJv
dGF0aW9uKGpuaSwgal92aWRlb19mcmFtZSk7Ci0gIGludDY0X3QgdGltZXN0YW1wX25zID0gSmF2
YV9WaWRlb0ZyYW1lX2dldFRpbWVzdGFtcE5zKGpuaSwgal92aWRlb19mcmFtZSk7Ci0gIHJ0Yzo6
c2NvcGVkX3JlZnB0cjxBbmRyb2lkVmlkZW9CdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICBBbmRyb2lk
VmlkZW9CdWZmZXI6OkNyZWF0ZShqbmksIGpfdmlkZW9fZnJhbWVfYnVmZmVyKTsKLSAgcmV0dXJu
IFZpZGVvRnJhbWU6OkJ1aWxkZXIoKQotICAgICAgLnNldF92aWRlb19mcmFtZV9idWZmZXIoYnVm
ZmVyKQotICAgICAgLnNldF90aW1lc3RhbXBfcnRwKHRpbWVzdGFtcF9ydHApCi0gICAgICAuc2V0
X3RpbWVzdGFtcF9tcyh0aW1lc3RhbXBfbnMgLyBydGM6OmtOdW1OYW5vc2Vjc1Blck1pbGxpc2Vj
KQotICAgICAgLnNldF9yb3RhdGlvbihzdGF0aWNfY2FzdDxWaWRlb1JvdGF0aW9uPihyb3RhdGlv
bikpCi0gICAgICAuYnVpbGQoKTsKLX0KLQotU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IE5h
dGl2ZVRvSmF2YVZpZGVvRnJhbWUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWaWRlb0ZyYW1lJiBmcmFtZSkgewot
ICBydGM6OnNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZUJ1ZmZlcj4gYnVmZmVyID0gZnJhbWUudmlk
ZW9fZnJhbWVfYnVmZmVyKCk7Ci0KLSAgaWYgKGJ1ZmZlci0+dHlwZSgpID09IFZpZGVvRnJhbWVC
dWZmZXI6OlR5cGU6OmtOYXRpdmUpIHsKLSAgICBBbmRyb2lkVmlkZW9CdWZmZXIqIGFuZHJvaWRf
YnVmZmVyID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8QW5kcm9pZFZpZGVvQnVmZmVyKj4oYnVmZmVy
LmdldCgpKTsKLSAgICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4gal92aWRlb19mcmFtZV9i
dWZmZXIoCi0gICAgICAgIGpuaSwgYW5kcm9pZF9idWZmZXItPnZpZGVvX2ZyYW1lX2J1ZmZlcigp
KTsKLSAgICBKYXZhX0J1ZmZlcl9yZXRhaW4oam5pLCBqX3ZpZGVvX2ZyYW1lX2J1ZmZlcik7Ci0g
ICAgcmV0dXJuIEphdmFfVmlkZW9GcmFtZV9Db25zdHJ1Y3RvcigKLSAgICAgICAgam5pLCBqX3Zp
ZGVvX2ZyYW1lX2J1ZmZlciwgc3RhdGljX2Nhc3Q8amludD4oZnJhbWUucm90YXRpb24oKSksCi0g
ICAgICAgIHN0YXRpY19jYXN0PGpsb25nPihmcmFtZS50aW1lc3RhbXBfdXMoKSAqCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBydGM6OmtOdW1OYW5vc2Vjc1Blck1pY3Jvc2VjKSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgcmV0dXJuIEphdmFfVmlkZW9GcmFtZV9Db25zdHJ1Y3RvcigKLSAgICAgICAg
am5pLCBXcmFwSTQyMEJ1ZmZlcihqbmksIGJ1ZmZlci0+VG9JNDIwKCkpLAotICAgICAgICBzdGF0
aWNfY2FzdDxqaW50PihmcmFtZS5yb3RhdGlvbigpKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8amxv
bmc+KGZyYW1lLnRpbWVzdGFtcF91cygpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0
Yzo6a051bU5hbm9zZWNzUGVyTWljcm9zZWMpKTsKLSAgfQotfQotCi12b2lkIFJlbGVhc2VKYXZh
VmlkZW9GcmFtZShKTklFbnYqIGpuaSwgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal92aWRlb19m
cmFtZSkgewotICBKYXZhX1ZpZGVvRnJhbWVfcmVsZWFzZShqbmksIGpfdmlkZW9fZnJhbWUpOwot
fQotCi19ICAvLyBuYW1lc3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvam5pL3ZpZGVvX2ZyYW1lLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX2ZyYW1lLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY2YjU2OWEzZTVhNDI3M2JmZGQzZDViMGVlODE1OGMwYzVmNTIz
NGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92
aWRlb19mcmFtZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2lmbmRlZiBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVPX0ZSQU1FX0hfCi0jZGVm
aW5lIFNES19BTkRST0lEX1NSQ19KTklfVklERU9fRlJBTUVfSF8KLQotI2luY2x1ZGUgPGpuaS5o
PgotCi0jaW5jbHVkZSAiYXBpL3ZpZGVvL3ZpZGVvX2ZyYW1lLmgiCi0jaW5jbHVkZSAiYXBpL3Zp
ZGVvL3ZpZGVvX2ZyYW1lX2J1ZmZlci5oIgotI2luY2x1ZGUgImFwaS92aWRlby92aWRlb19yb3Rh
dGlvbi5oIgotI2luY2x1ZGUgInJ0Y19iYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAic2RrL2Fu
ZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBqbmkgewotCi1jbGFzcyBBbmRyb2lkVmlkZW9CdWZmZXIgOiBwdWJsaWMgVmlkZW9GcmFt
ZUJ1ZmZlciB7Ci0gcHVibGljOgotICAvLyBDcmVhdGVzIGEgbmF0aXZlIFZpZGVvRnJhbWVCdWZm
ZXIgZnJvbSBhIEphdmEgVmlkZW9GcmFtZS5CdWZmZXIuCi0gIHN0YXRpYyBydGM6OnNjb3BlZF9y
ZWZwdHI8QW5kcm9pZFZpZGVvQnVmZmVyPiBDcmVhdGUoCi0gICAgICBKTklFbnYqIGpuaSwKLSAg
ICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9fZnJhbWVfYnVmZmVyKTsKLQotICAv
LyBTaW1pbGFyIHRvIHRoZSBDcmVhdGUoKSBhYm92ZSwgYnV0IGFkb3B0cyBhbmQgdGFrZXMgb3du
ZXJzaGlwIG9mIHRoZSBKYXZhCi0gIC8vIFZpZGVvRnJhbWUuQnVmZmVyLiBJLmUuIHJldGFpbigp
IHdpbGwgbm90IGJlIGNhbGxlZCwgYnV0IHJlbGVhc2UoKSB3aWxsIGJlCi0gIC8vIGNhbGxlZCB3
aGVuIHRoZSByZXR1cm5lZCBBbmRyb2lkVmlkZW9CdWZmZXIgaXMgZGVzdHJveWVkLgotICBzdGF0
aWMgcnRjOjpzY29wZWRfcmVmcHRyPEFuZHJvaWRWaWRlb0J1ZmZlcj4gQWRvcHQoCi0gICAgICBK
TklFbnYqIGpuaSwKLSAgICAgIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9fZnJhbWVf
YnVmZmVyKTsKLQotICB+QW5kcm9pZFZpZGVvQnVmZmVyKCkgb3ZlcnJpZGU7Ci0KLSAgY29uc3Qg
U2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiYgdmlkZW9fZnJhbWVfYnVmZmVyKCkgY29uc3Q7
Ci0KLSAgLy8gQ3JvcHMgYSByZWdpb24gZGVmaW5lZCBieSB8Y3JvcF94fCwgfGNyb3BfeXwsIHxj
cm9wX3dpZHRofCBhbmQKLSAgLy8gfGNyb3BfaGVpZ2h0fC4gU2NhbGVzIGl0IHRvIHNpemUgfHNj
YWxlX3dpZHRofCB4IHxzY2FsZV9oZWlnaHR8LgotICBydGM6OnNjb3BlZF9yZWZwdHI8QW5kcm9p
ZFZpZGVvQnVmZmVyPiBDcm9wQW5kU2NhbGUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3JvcF94LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNyb3Bf
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjcm9wX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNyb3BfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjYWxlX3dpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjYWxlX2hl
aWdodCk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIFNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5
LiBBZG9wdHMgdGhlIEphdmEgVmlkZW9GcmFtZS5CdWZmZXIuIFVzZQotICAvLyBDcmVhdGUoKSBv
ciBBZG9wdCgpIGluc3RlYWQgZm9yIGNsYXJpdHkuCi0gIEFuZHJvaWRWaWRlb0J1ZmZlcihKTklF
bnYqIGpuaSwgY29uc3QgSmF2YVJlZjxqb2JqZWN0PiYgal92aWRlb19mcmFtZV9idWZmZXIpOwot
Ci0gcHJpdmF0ZToKLSAgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIGludCB3aWR0aCgp
IGNvbnN0IG92ZXJyaWRlOwotICBpbnQgaGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgcnRj
OjpzY29wZWRfcmVmcHRyPEk0MjBCdWZmZXJJbnRlcmZhY2U+IFRvSTQyMCgpIG92ZXJyaWRlOwot
Ci0gIGNvbnN0IGludCB3aWR0aF87Ci0gIGNvbnN0IGludCBoZWlnaHRfOwotICAvLyBIb2xkcyBh
IFZpZGVvRnJhbWUuQnVmZmVyLgotICBjb25zdCBTY29wZWRKYXZhR2xvYmFsUmVmPGpvYmplY3Q+
IGpfdmlkZW9fZnJhbWVfYnVmZmVyXzsKLX07Ci0KLVZpZGVvRnJhbWUgSmF2YVRvTmF0aXZlRnJh
bWUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFS
ZWY8am9iamVjdD4mIGpfdmlkZW9fZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHRpbWVzdGFtcF9ydHApOwotCi0vLyBOT1RFOiBSZXR1cm5zIGEgbmV3IHZpZGVv
IGZyYW1lIHRoYXQgaGFzIHRvIGJlIHJlbGVhc2VkIGJ5IGNhbGxpbmcKLS8vIFJlbGVhc2VKYXZh
VmlkZW9GcmFtZS4KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBOYXRpdmVUb0phdmFWaWRl
b0ZyYW1lKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVmlkZW9GcmFtZSYgZnJhbWUpOwotdm9pZCBSZWxlYXNlSmF2
YVZpZGVvRnJhbWUoSk5JRW52KiBqbmksIGNvbnN0IEphdmFSZWY8am9iamVjdD4mIGpfdmlkZW9f
ZnJhbWUpOwotCi1pbnQ2NF90IEdldEphdmFWaWRlb0ZyYW1lVGltZXN0YW1wTnMoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVJlZjxq
b2JqZWN0PiYgal92aWRlb19mcmFtZSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVPX0ZS
QU1FX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX3NpbmsuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX3Npbmsu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MzIxMDg0ZDAyMzljOWU0ZmFmMTIw
YzJjY2U3NTc5ZGFmY2RiNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS92aWRlb19zaW5rLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvdmlk
ZW9fc2luay5oIgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVvX2puaS9W
aWRlb1Npbmtfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19mcmFt
ZS5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi1WaWRlb1NpbmtX
cmFwcGVyOjpWaWRlb1NpbmtXcmFwcGVyKEpOSUVudiogam5pLCBjb25zdCBKYXZhUmVmPGpvYmpl
Y3Q+JiBqX3NpbmspCi0gICAgOiBqX3NpbmtfKGpuaSwgal9zaW5rKSB7fQotCi1WaWRlb1NpbmtX
cmFwcGVyOjp+VmlkZW9TaW5rV3JhcHBlcigpIHt9Ci0KLXZvaWQgVmlkZW9TaW5rV3JhcHBlcjo6
T25GcmFtZShjb25zdCBWaWRlb0ZyYW1lJiBmcmFtZSkgewotICBKTklFbnYqIGpuaSA9IEF0dGFj
aEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9iamVjdD4g
al9mcmFtZSA9IE5hdGl2ZVRvSmF2YVZpZGVvRnJhbWUoam5pLCBmcmFtZSk7Ci0gIEphdmFfVmlk
ZW9TaW5rX29uRnJhbWUoam5pLCBqX3NpbmtfLCBqX2ZyYW1lKTsKLSAgUmVsZWFzZUphdmFWaWRl
b0ZyYW1lKGpuaSwgal9mcmFtZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdmlkZW9fc2luay5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRl
b19zaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNjU0NTQzNGI5ODg5ZTYx
YzI3MmYyMWMzNDExMjQwOGZhODQzMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb19zaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFNES19BTkRST0lEX1NSQ19KTklf
VklERU9fU0lOS19IXwotI2RlZmluZSBTREtfQU5EUk9JRF9TUkNfSk5JX1ZJREVPX1NJTktfSF8K
LQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAiYXBpL21lZGlhX3N0cmVhbV9pbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5h
bWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGpuaSB7Ci0KLWNsYXNzIFZpZGVvU2lua1dyYXBw
ZXIgOiBwdWJsaWMgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8VmlkZW9GcmFtZT4gewotIHB1Ymxp
YzoKLSAgVmlkZW9TaW5rV3JhcHBlcihKTklFbnYqIGpuaSwgY29uc3QgSmF2YVJlZjxqb2JqZWN0
PiYgal9zaW5rKTsKLSAgflZpZGVvU2lua1dyYXBwZXIoKSBvdmVycmlkZTsKLQotIHByaXZhdGU6
Ci0gIHZvaWQgT25GcmFtZShjb25zdCBWaWRlb0ZyYW1lJiBmcmFtZSkgb3ZlcnJpZGU7Ci0KLSAg
Y29uc3QgU2NvcGVkSmF2YUdsb2JhbFJlZjxqb2JqZWN0PiBqX3NpbmtfOwotfTsKLQotfSAgLy8g
bmFtZXNwYWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNES19B
TkRST0lEX1NSQ19KTklfVklERU9fU0lOS19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb190cmFj
ay5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3NyYy9qbmkvdmlkZW9fdHJhY2suY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDcwYmVkYzEyY2ZhYWI3MGY5MzMwZmQ3MjkzMmU4MzYxODBmYjlkYmYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92aWRlb190cmFjay5jYworKysg
L2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRl
IDxqbmkuaD4KLQotI2luY2x1ZGUgImFwaS9tZWRpYV9zdHJlYW1faW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVvX2puaS9WaWRlb1RyYWNrX2puaS5oIgot
I2luY2x1ZGUgInNkay9hbmRyb2lkL3NyYy9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJz
ZGsvYW5kcm9pZC9zcmMvam5pL3ZpZGVvX3NpbmsuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1u
YW1lc3BhY2Ugam5pIHsKLQotc3RhdGljIHZvaWQgSk5JX1ZpZGVvVHJhY2tfQWRkU2luayhKTklF
bnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9uYXRp
dmVfdHJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfbmF0
aXZlX3NpbmspIHsKLSAgcmVpbnRlcnByZXRfY2FzdDxWaWRlb1RyYWNrSW50ZXJmYWNlKj4oal9u
YXRpdmVfdHJhY2spCi0gICAgICAtPkFkZE9yVXBkYXRlU2luaygKLSAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPFZpZGVvRnJhbWU+Kj4oal9uYXRpdmVf
c2luayksCi0gICAgICAgICAgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotc3RhdGljIHZv
aWQgSk5JX1ZpZGVvVHJhY2tfUmVtb3ZlU2luayhKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9uYXRpdmVfdHJhY2ssCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfbmF0aXZlX3NpbmspIHsKLSAgcmVp
bnRlcnByZXRfY2FzdDxWaWRlb1RyYWNrSW50ZXJmYWNlKj4oal9uYXRpdmVfdHJhY2spCi0gICAg
ICAtPlJlbW92ZVNpbmsocmVpbnRlcnByZXRfY2FzdDxydGM6OlZpZGVvU2lua0ludGVyZmFjZTxW
aWRlb0ZyYW1lPio+KAotICAgICAgICAgIGpfbmF0aXZlX3NpbmspKTsKLX0KLQotc3RhdGljIGps
b25nIEpOSV9WaWRlb1RyYWNrX1dyYXBTaW5rKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgc2luaykg
ewotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihuZXcgVmlkZW9TaW5rV3JhcHBlcihqbmksIHNp
bmspKTsKLX0KLQotc3RhdGljIHZvaWQgSk5JX1ZpZGVvVHJhY2tfRnJlZVNpbmsoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBqX25hdGl2ZV9z
aW5rKSB7Ci0gIGRlbGV0ZSByZWludGVycHJldF9jYXN0PHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNl
PFZpZGVvRnJhbWU+Kj4oal9uYXRpdmVfc2luayk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkK
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvdnA4X2NvZGVjLmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3Jj
L2puaS92cDhfY29kZWMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYTVhNjJh
OGQ3MTYzMmEwNmVmN2JjYWVhNGM5YTFhZGMxMzUxMTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92cDhfY29kZWMuY2MKKysrIC9kZXYvbnVsbApA
QCAtMSwzMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE3IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8am5pLmg+Ci0K
LSNpbmNsdWRlICJtb2R1bGVzL3ZpZGVvX2NvZGluZy9jb2RlY3MvdnA4L2luY2x1ZGUvdnA4Lmgi
Ci0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2xpYnZweF92cDhfam5pL0xpYnZweFZw
OERlY29kZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX2xpYnZweF92
cDhfam5pL0xpYnZweFZwOEVuY29kZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3Jj
L2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSBqbmkg
ewotCi1zdGF0aWMgamxvbmcgSk5JX0xpYnZweFZwOEVuY29kZXJfQ3JlYXRlRW5jb2RlcihKTklF
bnYqIGpuaSkgewotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihWUDhFbmNvZGVyOjpDcmVhdGUo
bnVsbHB0cikucmVsZWFzZSgpKTsKLX0KLQotc3RhdGljIGpsb25nIEpOSV9MaWJ2cHhWcDhEZWNv
ZGVyX0NyZWF0ZURlY29kZXIoSk5JRW52KiBqbmkpIHsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50
ZXIoVlA4RGVjb2Rlcjo6Q3JlYXRlKCkucmVsZWFzZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvc3JjL2puaS92cDlfY29kZWMu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC9zcmMvam5pL3ZwOV9jb2RlYy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ5
Y2E3OTNjZTI4NzBmOWU3N2QyMGIxZTNjYzhlZGEwMmI3Y2FjOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3ZwOV9jb2RlYy5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTcgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDxqbmku
aD4KLQotI2luY2x1ZGUgIm1vZHVsZXMvdmlkZW9fY29kaW5nL2NvZGVjcy92cDkvaW5jbHVkZS92
cDkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfbGlidnB4X3ZwOV9qbmkvTGli
dnB4VnA5RGVjb2Rlcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9pZC9nZW5lcmF0ZWRfbGli
dnB4X3ZwOV9qbmkvTGlidnB4VnA5RW5jb2Rlcl9qbmkuaCIKLSNpbmNsdWRlICJzZGsvYW5kcm9p
ZC9zcmMvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNl
IGpuaSB7Ci0KLXN0YXRpYyBqbG9uZyBKTklfTGlidnB4VnA5RW5jb2Rlcl9DcmVhdGVFbmNvZGVy
KEpOSUVudiogam5pKSB7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKFZQOUVuY29kZXI6OkNy
ZWF0ZSgpLnJlbGVhc2UoKSk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBKTklfTGlidnB4VnA5RW5j
b2Rlcl9Jc1N1cHBvcnRlZChKTklFbnYqIGpuaSkgewotICByZXR1cm4gIVN1cHBvcnRlZFZQOUNv
ZGVjcygpLmVtcHR5KCk7Ci19Ci0KLXN0YXRpYyBqbG9uZyBKTklfTGlidnB4VnA5RGVjb2Rlcl9D
cmVhdGVEZWNvZGVyKEpOSUVudiogam5pKSB7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKFZQ
OURlY29kZXI6OkNyZWF0ZSgpLnJlbGVhc2UoKSk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBKTklf
TGlidnB4VnA5RGVjb2Rlcl9Jc1N1cHBvcnRlZChKTklFbnYqIGpuaSkgewotICByZXR1cm4gIVN1
cHBvcnRlZFZQOUNvZGVjcygpLmVtcHR5KCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0g
IC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkvd3JhcHBlZF9uYXRpdmVfaTQy
MF9idWZmZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC9zcmMvam5pL3dyYXBwZWRfbmF0aXZlX2k0MjBfYnVmZmVyLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmM1NDNlOGMyZjBjMDkwZWY5NjMwMzQ3ZGU4MDM1OTVk
NWE3NGJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9q
bmkvd3JhcHBlZF9uYXRpdmVfaTQyMF9idWZmZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0MCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNyBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgInNkay9hbmRyb2lkL3Ny
Yy9qbmkvd3JhcHBlZF9uYXRpdmVfaTQyMF9idWZmZXIuaCIKLQotI2luY2x1ZGUgInNkay9hbmRy
b2lkL2dlbmVyYXRlZF92aWRlb19qbmkvV3JhcHBlZE5hdGl2ZUk0MjBCdWZmZXJfam5pLmgiCi0j
aW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ug
d2VicnRjIHsKLW5hbWVzcGFjZSBqbmkgewotCi0vLyBUT0RPKG1hZ2plZCk6IFdyaXRlIGEgdGVz
dCBmb3IgdGhpcyBmdW5jdGlvbi4KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBXcmFwSTQy
MEJ1ZmZlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBydGM6OnNjb3BlZF9yZWZwdHI8
STQyMEJ1ZmZlckludGVyZmFjZT4mIGk0MjBfYnVmZmVyKSB7Ci0gIFNjb3BlZEphdmFMb2NhbFJl
Zjxqb2JqZWN0PiB5X2J1ZmZlciA9Ci0gICAgICBOZXdEaXJlY3RCeXRlQnVmZmVyKGpuaSwgY29u
c3RfY2FzdDx1aW50OF90Kj4oaTQyMF9idWZmZXItPkRhdGFZKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBpNDIwX2J1ZmZlci0+U3RyaWRlWSgpICogaTQyMF9idWZmZXItPmhlaWdodCgp
KTsKLSAgU2NvcGVkSmF2YUxvY2FsUmVmPGpvYmplY3Q+IHVfYnVmZmVyID0KLSAgICAgIE5ld0Rp
cmVjdEJ5dGVCdWZmZXIoam5pLCBjb25zdF9jYXN0PHVpbnQ4X3QqPihpNDIwX2J1ZmZlci0+RGF0
YVUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGk0MjBfYnVmZmVyLT5TdHJpZGVVKCkg
KiBpNDIwX2J1ZmZlci0+Q2hyb21hSGVpZ2h0KCkpOwotICBTY29wZWRKYXZhTG9jYWxSZWY8am9i
amVjdD4gdl9idWZmZXIgPQotICAgICAgTmV3RGlyZWN0Qnl0ZUJ1ZmZlcihqbmksIGNvbnN0X2Nh
c3Q8dWludDhfdCo+KGk0MjBfYnVmZmVyLT5EYXRhVigpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgaTQyMF9idWZmZXItPlN0cmlkZVYoKSAqIGk0MjBfYnVmZmVyLT5DaHJvbWFIZWlnaHQo
KSk7Ci0KLSAgcmV0dXJuIEphdmFfV3JhcHBlZE5hdGl2ZUk0MjBCdWZmZXJfQ29uc3RydWN0b3Io
Ci0gICAgICBqbmksIGk0MjBfYnVmZmVyLT53aWR0aCgpLCBpNDIwX2J1ZmZlci0+aGVpZ2h0KCks
IHlfYnVmZmVyLAotICAgICAgaTQyMF9idWZmZXItPlN0cmlkZVkoKSwgdV9idWZmZXIsIGk0MjBf
YnVmZmVyLT5TdHJpZGVVKCksIHZfYnVmZmVyLAotICAgICAgaTQyMF9idWZmZXItPlN0cmlkZVYo
KSwgamxvbmdGcm9tUG9pbnRlcihpNDIwX2J1ZmZlci5nZXQoKSkpOwotfQotCi19ICAvLyBuYW1l
c3BhY2Ugam5pCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3dyYXBw
ZWRfbmF0aXZlX2k0MjBfYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3dyYXBwZWRfbmF0aXZlX2k0MjBfYnVmZmVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYWQwNjJjYzZmMWQ3OGQ0NGU2YTFj
NzZmNmE3ZjRkNWMwNWM0ZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2Fu
ZHJvaWQvc3JjL2puaS93cmFwcGVkX25hdGl2ZV9pNDIwX2J1ZmZlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgU0RLX0FO
RFJPSURfU1JDX0pOSV9XUkFQUEVEX05BVElWRV9JNDIwX0JVRkZFUl9IXwotI2RlZmluZSBTREtf
QU5EUk9JRF9TUkNfSk5JX1dSQVBQRURfTkFUSVZFX0k0MjBfQlVGRkVSX0hfCi0KLSNpbmNsdWRl
IDxqbmkuaD4KLQotI2luY2x1ZGUgImFwaS92aWRlby92aWRlb19mcmFtZV9idWZmZXIuaCIKLSNp
bmNsdWRlICJzZGsvYW5kcm9pZC9uYXRpdmVfYXBpL2puaS9zY29wZWRfamF2YV9yZWYuaCIKLQot
bmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsKLQotLy8gVGhpcyBmdW5jdGlvbiB3
cmFwcyB0aGUgQysrIEk0MjAgYnVmZmVyIGFuZCByZXR1cm5zIGEgSmF2YQotLy8gVmlkZW9GcmFt
ZS5JNDIwQnVmZmVyIGFzIGEgam9iamVjdC4KLVNjb3BlZEphdmFMb2NhbFJlZjxqb2JqZWN0PiBX
cmFwSTQyMEJ1ZmZlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBydGM6OnNjb3BlZF9y
ZWZwdHI8STQyMEJ1ZmZlckludGVyZmFjZT4mIGk0MjBfYnVmZmVyKTsKLQotfSAgLy8gbmFtZXNw
YWNlIGpuaQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFNES19BTkRST0lE
X1NSQ19KTklfV1JBUFBFRF9OQVRJVkVfSTQyMF9CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3NyYy9qbmkv
eXV2X2hlbHBlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3Nkay9hbmRyb2lkL3NyYy9qbmkveXV2X2hlbHBlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTgxMmJjOTUyNzBkYzgzOWQ2Yzc4M2EyMTBmY2U3ZDIxZGNlZTE2Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC9zcmMvam5pL3l1dl9oZWxwZXIu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
I2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvZ2VuZXJhdGVkX3ZpZGVv
X2puaS9ZdXZIZWxwZXJfam5pLmgiCi0jaW5jbHVkZSAic2RrL2FuZHJvaWQvc3JjL2puaS9qbmlf
aGVscGVycy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9j
b252ZXJ0LmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L3Bs
YW5hcl9mdW5jdGlvbnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2Ugam5pIHsK
LQotdm9pZCBKTklfWXV2SGVscGVyX0NvcHlQbGFuZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NyYywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBzcmNfc3RyaWRlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZHN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdF9zdHJpZGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGppbnQgaGVpZ2h0KSB7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNyYyA9Ci0gICAgICBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfc3JjLm9iaigp
KSk7Ci0gIHVpbnQ4X3QqIGRzdCA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5pLT5H
ZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfZHN0Lm9iaigpKSk7Ci0KLSAgbGlieXV2OjpDb3B5UGxh
bmUoc3JjLCBzcmNfc3RyaWRlLCBkc3QsIGRzdF9zdHJpZGUsIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci12b2lkIEpOSV9ZdXZIZWxwZXJfSTQyMENvcHkoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NyY195LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjX3N0cmlkZV95LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9zcmNfdSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY19zdHJpZGVfdSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfc3JjX3YsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBzcmNfc3RyaWRlX3YsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RzdF95LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0X3N0cmlkZV95LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kc3RfdSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdF9zdHJpZGVfdSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZHN0X3Ys
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBkc3Rfc3RyaWRlX3YsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaW50IGhlaWdodCkgewotICBjb25zdCB1aW50OF90KiBzcmNfeSA9Ci0gICAgICBzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfc3Jj
X3kub2JqKCkpKTsKLSAgY29uc3QgdWludDhfdCogc3JjX3UgPQotICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3NyY191Lm9iaigp
KSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNyY192ID0KLSAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfdi5vYmooKSkpOwotICB1
aW50OF90KiBkc3RfeSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJl
Y3RCdWZmZXJBZGRyZXNzKGpfZHN0X3kub2JqKCkpKTsKLSAgdWludDhfdCogZHN0X3UgPQotICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2Rz
dF91Lm9iaigpKSk7Ci0gIHVpbnQ4X3QqIGRzdF92ID0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3Rfdi5vYmooKSkpOwotCi0gIGxp
Ynl1djo6STQyMENvcHkoc3JjX3ksIHNyY19zdHJpZGVfeSwgc3JjX3UsIHNyY19zdHJpZGVfdSwg
c3JjX3YsCi0gICAgICAgICAgICAgICAgICAgc3JjX3N0cmlkZV92LCBkc3RfeSwgZHN0X3N0cmlk
ZV95LCBkc3RfdSwgZHN0X3N0cmlkZV91LAotICAgICAgICAgICAgICAgICAgIGRzdF92LCBkc3Rf
c3RyaWRlX3YsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1zdGF0aWMgdm9pZCBKTklfWXV2SGVscGVy
X0k0MjBUb05WMTIoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NyY195LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjX3N0cmlkZV95LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9z
cmNfdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY19zdHJp
ZGVfdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFy
YW1SZWY8am9iamVjdD4mIGpfc3JjX3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamludCBzcmNfc3RyaWRlX3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RzdF95LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0X3N0cmlkZV95LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9k
c3RfdXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBkc3Rfc3Ry
aWRlX3V2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgd2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBoZWlnaHQpIHsKLSAg
Y29uc3QgdWludDhfdCogc3JjX3kgPQotICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3NyY195Lm9iaigpKSk7Ci0gIGNvbnN0IHVp
bnQ4X3QqIHNyY191ID0KLSAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihqbmktPkdl
dERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfdS5vYmooKSkpOwotICBjb25zdCB1aW50OF90KiBz
cmNfdiA9Ci0gICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oam5pLT5HZXREaXJlY3RC
dWZmZXJBZGRyZXNzKGpfc3JjX3Yub2JqKCkpKTsKLSAgdWludDhfdCogZHN0X3kgPQotICAgICAg
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RzdF95
Lm9iaigpKSk7Ci0gIHVpbnQ4X3QqIGRzdF91diA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfZHN0X3V2Lm9iaigpKSk7Ci0KLSAgbGli
eXV2OjpJNDIwVG9OVjEyKHNyY195LCBzcmNfc3RyaWRlX3ksIHNyY191LCBzcmNfc3RyaWRlX3Us
IHNyY192LAotICAgICAgICAgICAgICAgICAgICAgc3JjX3N0cmlkZV92LCBkc3RfeSwgZHN0X3N0
cmlkZV95LCBkc3RfdXYsIGRzdF9zdHJpZGVfdXYsCi0gICAgICAgICAgICAgICAgICAgICB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBKTklfWXV2SGVscGVyX0k0MjBSb3RhdGUoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9i
amVjdD4mIGpfc3JjX3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY19z
dHJpZGVfeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJl
Zjxqb2JqZWN0PiYgal9zcmNfdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQg
c3JjX3N0cmlkZV91LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBh
cmFtUmVmPGpvYmplY3Q+JiBqX3NyY192LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
amludCBzcmNfc3RyaWRlX3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBK
YXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZHN0X3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaW50IGRzdF9zdHJpZGVfeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kc3RfdSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppbnQgZHN0X3N0cmlkZV91LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RzdF92LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgamludCBkc3Rfc3RyaWRlX3YsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqaW50IHNyY193aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
bnQgc3JjX2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgcm90YXRp
b25fbW9kZSkgewotICBjb25zdCB1aW50OF90KiBzcmNfeSA9Ci0gICAgICBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfc3JjX3kub2JqKCkp
KTsKLSAgY29uc3QgdWludDhfdCogc3JjX3UgPQotICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3NyY191Lm9iaigpKSk7Ci0gIGNv
bnN0IHVpbnQ4X3QqIHNyY192ID0KLSAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihq
bmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfdi5vYmooKSkpOwotICB1aW50OF90KiBk
c3RfeSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJB
ZGRyZXNzKGpfZHN0X3kub2JqKCkpKTsKLSAgdWludDhfdCogZHN0X3UgPQotICAgICAgc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RzdF91Lm9iaigp
KSk7Ci0gIHVpbnQ4X3QqIGRzdF92ID0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqbmkt
PkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3Rfdi5vYmooKSkpOwotCi0gIGxpYnl1djo6STQy
MFJvdGF0ZShzcmNfeSwgc3JjX3N0cmlkZV95LCBzcmNfdSwgc3JjX3N0cmlkZV91LCBzcmNfdiwK
LSAgICAgICAgICAgICAgICAgICAgIHNyY19zdHJpZGVfdiwgZHN0X3ksIGRzdF9zdHJpZGVfeSwg
ZHN0X3UsIGRzdF9zdHJpZGVfdSwKLSAgICAgICAgICAgICAgICAgICAgIGRzdF92LCBkc3Rfc3Ry
aWRlX3YsIHNyY193aWR0aCwgc3JjX2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGxpYnl1djo6Um90YXRpb25Nb2RlPihyb3RhdGlvbl9tb2RlKSk7Ci19Ci0KLXZvaWQg
Sk5JX1l1dkhlbHBlcl9BQkdSVG9JNDIwKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX3NyYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjX3N0cmlkZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEphdmFQYXJhbVJlZjxqb2JqZWN0PiYgal9kc3RfeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0X3N0cmlkZV95LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSmF2YVBhcmFtUmVmPGpvYmplY3Q+JiBqX2RzdF91LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBkc3Rfc3RyaWRlX3UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKYXZhUGFyYW1SZWY8am9iamVjdD4mIGpfZHN0
X3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdF9zdHJpZGVfdiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjX3dpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamludCBzcmNfaGVpZ2h0KSB7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNy
YyA9Ci0gICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZm
ZXJBZGRyZXNzKGpfc3JjLm9iaigpKSk7Ci0gIHVpbnQ4X3QqIGRzdF95ID0KLSAgICAgIHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3RfeS5vYmoo
KSkpOwotICB1aW50OF90KiBkc3RfdSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oam5p
LT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfZHN0X3Uub2JqKCkpKTsKLSAgdWludDhfdCogZHN0
X3YgPQotICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRk
cmVzcyhqX2RzdF92Lm9iaigpKSk7Ci0KLSAgbGlieXV2OjpBQkdSVG9JNDIwKHNyYywgc3JjX3N0
cmlkZSwgZHN0X3ksIGRzdF9zdHJpZGVfeSwgZHN0X3UsIGRzdF9zdHJpZGVfdSwKLSAgICAgICAg
ICAgICAgICAgICAgIGRzdF92LCBkc3Rfc3RyaWRlX3YsIHNyY193aWR0aCwgc3JjX2hlaWdodCk7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqbmkKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRy
b2lkL3Rlc3RzL3Jlc291cmNlcy9yb2JvbGVjdHJpYy5wcm9wZXJ0aWVzIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvdGVzdHMvcmVzb3VyY2Vz
L3JvYm9sZWN0cmljLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNh
Y2I3ZTVkNTllYWYwYmFlNWRkYjU1ZGI5NTZhMjY4MzQ5MmYwMTQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvdGVzdHMvcmVzb3VyY2VzL3JvYm9sZWN0cmljLnBy
b3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1zZGs9MTksMjEsMjUsMjYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9h
bmRyb2lkL3Rlc3RzL3NyYy9vcmcvd2VicnRjL0FuZHJvaWRWaWRlb0RlY29kZXJUZXN0LmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9BbmRyb2lkVmlkZW9EZWNvZGVyVGVzdC5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWU4ZjZjM2IzNGY3OTRmZjMwNTE3YjBmOTQ3ODdiNTEz
NjBkZjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Rlc3Rz
L3NyYy9vcmcvd2VicnRjL0FuZHJvaWRWaWRlb0RlY29kZXJUZXN0LmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSw0MzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoLmFzc2Vy
dFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuYW55Owot
aW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNoZXJzLmFueUludDsKLWltcG9y
dCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnlMb25nOwotaW1wb3J0IHN0
YXRpYyBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNoZXJzLmVxOwotaW1wb3J0IHN0YXRpYyBvcmcu
bW9ja2l0by5Nb2NraXRvLmRvVGhyb3c7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tp
dG8uaW5PcmRlcjsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOwotaW1w
b3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnNweTsKLWltcG9ydCBzdGF0aWMgb3JnLm1v
Y2tpdG8uTW9ja2l0by52ZXJpZnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8u
d2hlbjsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQu
Z3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVj
SW5mby5Db2RlY0NhcGFiaWxpdGllczsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhRm9ybWF0
OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVy
OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1p
bXBvcnQgb3JnLmNocm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5u
ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1p
bXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwot
aW1wb3J0IG9yZy5tb2NraXRvLkFyZ3VtZW50Q2FwdG9yOwotaW1wb3J0IG9yZy5tb2NraXRvLklu
T3JkZXI7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2Nr
aXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmln
OwotaW1wb3J0IG9yZy53ZWJydGMuRW5jb2RlZEltYWdlLkZyYW1lVHlwZTsKLWltcG9ydCBvcmcu
d2VicnRjLkZha2VNZWRpYUNvZGVjV3JhcHBlci5TdGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlZp
ZGVvRGVjb2Rlci5EZWNvZGVJbmZvOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9GcmFtZS5JNDIw
QnVmZmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9GcmFtZS5UZXh0dXJlQnVmZmVyLlR5cGU7
Ci0KLUBSdW5XaXRoKExvY2FsUm9ib2xlY3RyaWNUZXN0UnVubmVyLmNsYXNzKQotQENvbmZpZyht
YW5pZmVzdCA9IENvbmZpZy5OT05FKQotcHVibGljIGNsYXNzIEFuZHJvaWRWaWRlb0RlY29kZXJU
ZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVmlkZW9EZWNvZGVyLlNldHRpbmdzIFRFU1Rf
REVDT0RFUl9TRVRUSU5HUyA9Ci0gICAgICBuZXcgVmlkZW9EZWNvZGVyLlNldHRpbmdzKC8qIG51
bWJlck9mQ29yZXM9ICovIDEsIC8qIHdpZHRoPSAqLyA2NDAsIC8qIGhlaWdodD0gKi8gNDgwKTsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX0ZPUk1BVCA9IENvZGVjQ2FwYWJpbGl0
aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hcjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9u
ZyBQT0xMX0RFTEFZX01TID0gMTA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgREVMSVZF
Ul9ERUNPREVEX0lNQUdFX0RFTEFZX01TID0gMTA7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
Ynl0ZVtdIEVOQ09ERURfVEVTVF9EQVRBID0gbmV3IGJ5dGVbXSB7MSwgMiwgMywgNCwgNSwgNiwg
NywgOCwgOSwgMTB9OwotCi0gIHByaXZhdGUgY2xhc3MgVGVzdERlY29kZXIgZXh0ZW5kcyBBbmRy
b2lkVmlkZW9EZWNvZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBkZWxpdmVyRGVjb2Rl
ZEZyYW1lTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gZGVsaXZlckRl
Y29kZWRGcmFtZURvbmUgPSB0cnVlOwotCi0gICAgcHVibGljIFRlc3REZWNvZGVyKE1lZGlhQ29k
ZWNXcmFwcGVyRmFjdG9yeSBtZWRpYUNvZGVjRmFjdG9yeSwgU3RyaW5nIGNvZGVjTmFtZSwKLSAg
ICAgICAgVmlkZW9Db2RlY01pbWVUeXBlIGNvZGVjVHlwZSwgaW50IGNvbG9yRm9ybWF0LCBFZ2xC
YXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCkgewotICAgICAgc3VwZXIobWVkaWFDb2RlY0ZhY3Rv
cnksIGNvZGVjTmFtZSwgY29kZWNUeXBlLCBjb2xvckZvcm1hdCwgc2hhcmVkQ29udGV4dCk7Ci0g
ICAgfQotCi0gICAgcHVibGljIHZvaWQgd2FpdERlbGl2ZXJEZWNvZGVkRnJhbWUoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgc3luY2hyb25pemVkIChkZWxpdmVyRGVjb2Rl
ZEZyYW1lTG9jaykgewotICAgICAgICBkZWxpdmVyRGVjb2RlZEZyYW1lRG9uZSA9IGZhbHNlOwot
ICAgICAgICBkZWxpdmVyRGVjb2RlZEZyYW1lTG9jay5ub3RpZnlBbGwoKTsKLSAgICAgICAgd2hp
bGUgKCFkZWxpdmVyRGVjb2RlZEZyYW1lRG9uZSkgewotICAgICAgICAgIGRlbGl2ZXJEZWNvZGVk
RnJhbWVMb2NrLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEBTdXBw
cmVzc1dhcm5pbmdzKCJXYWl0Tm90SW5Mb29wIikgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGlu
c2lkZSBhIGxvb3AuCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZGVsaXZlckRl
Y29kZWRGcmFtZSgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZGVsaXZlckRlY29kZWRGcmFtZUxv
Y2spIHsKLSAgICAgICAgaWYgKGRlbGl2ZXJEZWNvZGVkRnJhbWVEb25lKSB7Ci0gICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIGRlbGl2ZXJEZWNvZGVkRnJhbWVMb2NrLndhaXQoREVMSVZFUl9E
RUNPREVEX0lNQUdFX0RFTEFZX01TKTsKLSAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVycnVw
dCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoZGVsaXZlckRlY29kZWRGcmFtZURvbmUpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgc3VwZXIuZGVsaXZlckRlY29kZWRGcmFtZSgpOwotICAgICAgICBkZWxp
dmVyRGVjb2RlZEZyYW1lRG9uZSA9IHRydWU7Ci0gICAgICAgIGRlbGl2ZXJEZWNvZGVkRnJhbWVM
b2NrLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHBy
b3RlY3RlZCBTdXJmYWNlVGV4dHVyZUhlbHBlciBjcmVhdGVTdXJmYWNlVGV4dHVyZUhlbHBlcigp
IHsKLSAgICAgIHJldHVybiBtb2NrU3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgcmVsZWFzZVN1cmZhY2UoKSB7fQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFZpZGVvRnJhbWUuSTQyMEJ1ZmZlciBhbGxvY2F0ZUk0
MjBCdWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICBpbnQgY2hyb21hSGVpZ2h0
ID0gKGhlaWdodCArIDEpIC8gMjsKLSAgICAgIGludCBzdHJpZGVVViA9ICh3aWR0aCArIDEpIC8g
MjsKLSAgICAgIGludCB5UG9zID0gMDsKLSAgICAgIGludCB1UG9zID0geVBvcyArIHdpZHRoICog
aGVpZ2h0OwotICAgICAgaW50IHZQb3MgPSB1UG9zICsgc3RyaWRlVVYgKiBjaHJvbWFIZWlnaHQ7
Ci0KLSAgICAgIEJ5dGVCdWZmZXIgYnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh3
aWR0aCAqIGhlaWdodCArIDIgKiBzdHJpZGVVViAqIGNocm9tYUhlaWdodCk7Ci0KLSAgICAgIGJ1
ZmZlci5wb3NpdGlvbih5UG9zKTsKLSAgICAgIGJ1ZmZlci5saW1pdCh1UG9zKTsKLSAgICAgIEJ5
dGVCdWZmZXIgZGF0YVkgPSBidWZmZXIuc2xpY2UoKTsKLQotICAgICAgYnVmZmVyLnBvc2l0aW9u
KHVQb3MpOwotICAgICAgYnVmZmVyLmxpbWl0KHZQb3MpOwotICAgICAgQnl0ZUJ1ZmZlciBkYXRh
VSA9IGJ1ZmZlci5zbGljZSgpOwotCi0gICAgICBidWZmZXIucG9zaXRpb24odlBvcyk7Ci0gICAg
ICBidWZmZXIubGltaXQodlBvcyArIHN0cmlkZVVWICogY2hyb21hSGVpZ2h0KTsKLSAgICAgIEJ5
dGVCdWZmZXIgZGF0YVYgPSBidWZmZXIuc2xpY2UoKTsKLQotICAgICAgcmV0dXJuIEphdmFJNDIw
QnVmZmVyLndyYXAod2lkdGgsIGhlaWdodCwgZGF0YVksIHdpZHRoLCBkYXRhVSwgc3RyaWRlVVYs
IGRhdGFWLCBzdHJpZGVVViwKLSAgICAgICAgICAvKiByZWxlYXNlQ2FsbGJhY2s9ICovIG51bGwp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGNvcHlQbGFuZSgK
LSAgICAgICAgQnl0ZUJ1ZmZlciBzcmMsIGludCBzcmNTdHJpZGUsIEJ5dGVCdWZmZXIgZHN0LCBp
bnQgZHN0U3RyaWRlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKSB7Ci0gICAgICAgICAgZHN0LnB1dCh5ICogZHN0U3RyaWRlICsgeCwgc3JjLmdldCh5
ICogc3JjU3RyaWRlICsgeCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBjbGFzcyBUZXN0RGVjb2RlckJ1aWxkZXIgewotICAgIHByaXZhdGUgVmlkZW9Db2Rl
Y01pbWVUeXBlIGNvZGVjVHlwZSA9IFZpZGVvQ29kZWNNaW1lVHlwZS5WUDg7Ci0gICAgcHJpdmF0
ZSBib29sZWFuIHVzZVN1cmZhY2UgPSB0cnVlOwotCi0gICAgcHVibGljIFRlc3REZWNvZGVyQnVp
bGRlciBzZXRDb2RlY1R5cGUoVmlkZW9Db2RlY01pbWVUeXBlIGNvZGVjVHlwZSkgewotICAgICAg
dGhpcy5jb2RlY1R5cGUgPSBjb2RlY1R5cGU7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgVGVzdERlY29kZXJCdWlsZGVyIHNldFVzZVN1cmZhY2UoYm9vbGVhbiB1c2VT
dXJmYWNlKSB7Ci0gICAgICB0aGlzLnVzZVN1cmZhY2UgPSB1c2VTdXJmYWNlOwotICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3REZWNvZGVyIGJ1aWxkKCkgewotICAg
ICAgcmV0dXJuIG5ldyBUZXN0RGVjb2RlcigoU3RyaW5nIG5hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtPiBmYWtlTWVkaWFDb2RlY1dyYXBwZXIsCi0gICAgICAgICAgLyog
Y29kZWNOYW1lPSAqLyAib3JnLndlYnJ0Yy50ZXN0ZGVjb2RlciIsIGNvZGVjVHlwZSwgQ09MT1Jf
Rk9STUFULAotICAgICAgICAgIHVzZVN1cmZhY2UgPyBtb2NrRWdsQmFzZUNvbnRleHQgOiBudWxs
KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGYWtlRGVjb2RlckNhbGxi
YWNrIGltcGxlbWVudHMgVmlkZW9EZWNvZGVyLkNhbGxiYWNrIHsKLSAgICBwdWJsaWMgZmluYWwg
TGlzdDxWaWRlb0ZyYW1lPiBkZWNvZGVkRnJhbWVzOwotCi0gICAgcHVibGljIEZha2VEZWNvZGVy
Q2FsbGJhY2soKSB7Ci0gICAgICBkZWNvZGVkRnJhbWVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EZWNvZGVkRnJhbWUoVmlk
ZW9GcmFtZSBmcmFtZSwgSW50ZWdlciBkZWNvZGVUaW1lTXMsIEludGVnZXIgcXApIHsKLSAgICAg
IGZyYW1lLnJldGFpbigpOwotICAgICAgZGVjb2RlZEZyYW1lcy5hZGQoZnJhbWUpOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBmb3IgKFZpZGVvRnJhbWUgZnJh
bWUgOiBkZWNvZGVkRnJhbWVzKSBmcmFtZS5yZWxlYXNlKCk7Ci0gICAgICBkZWNvZGVkRnJhbWVz
LmNsZWFyKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBFbmNvZGVkSW1hZ2UgY3JlYXRlVGVz
dEVuY29kZWRJbWFnZSgpIHsKLSAgICByZXR1cm4gRW5jb2RlZEltYWdlLmJ1aWxkZXIoKQotICAg
ICAgICAuc2V0QnVmZmVyKEJ5dGVCdWZmZXIud3JhcChFTkNPREVEX1RFU1RfREFUQSksIG51bGwp
Ci0gICAgICAgIC5zZXRGcmFtZVR5cGUoRnJhbWVUeXBlLlZpZGVvRnJhbWVLZXkpCi0gICAgICAg
IC5zZXRDb21wbGV0ZUZyYW1lKHRydWUpCi0gICAgICAgIC5jcmVhdGVFbmNvZGVkSW1hZ2UoKTsK
LSAgfQotCi0gIEBNb2NrIHByaXZhdGUgRWdsQmFzZS5Db250ZXh0IG1vY2tFZ2xCYXNlQ29udGV4
dDsKLSAgQE1vY2sgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBtb2NrU3VyZmFjZVRleHR1
cmVIZWxwZXI7Ci0gIEBNb2NrIHByaXZhdGUgVmlkZW9EZWNvZGVyLkNhbGxiYWNrIG1vY2tEZWNv
ZGVyQ2FsbGJhY2s7Ci0gIHByaXZhdGUgRmFrZU1lZGlhQ29kZWNXcmFwcGVyIGZha2VNZWRpYUNv
ZGVjV3JhcHBlcjsKLSAgcHJpdmF0ZSBGYWtlRGVjb2RlckNhbGxiYWNrIGZha2VEZWNvZGVyQ2Fs
bGJhY2s7Ci0KLSAgQEJlZm9yZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBNb2NraXRv
QW5ub3RhdGlvbnMuaW5pdE1vY2tzKHRoaXMpOwotICAgIHdoZW4obW9ja1N1cmZhY2VUZXh0dXJl
SGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpCi0gICAgICAgIC50aGVuUmV0dXJuKG5ldyBTdXJm
YWNlVGV4dHVyZSgvKnRleE5hbWU9Ki8wKSk7Ci0gICAgTWVkaWFGb3JtYXQgb3V0cHV0Rm9ybWF0
ID0gbmV3IE1lZGlhRm9ybWF0KCk7Ci0gICAgLy8gVE9ETyhzYWthbCk6IEFkZCBtb3JlIGRldGFp
bHMgdG8gb3V0cHV0IGZvcm1hdCBhcyBuZWVkZWQuCi0gICAgZmFrZU1lZGlhQ29kZWNXcmFwcGVy
ID0gc3B5KG5ldyBGYWtlTWVkaWFDb2RlY1dyYXBwZXIob3V0cHV0Rm9ybWF0KSk7Ci0gICAgZmFr
ZURlY29kZXJDYWxsYmFjayA9IG5ldyBGYWtlRGVjb2RlckNhbGxiYWNrKCk7Ci0gIH0KLQotICBA
QWZ0ZXIKLSAgcHVibGljIHZvaWQgY2xlYW5VcCgpIHsKLSAgICBmYWtlRGVjb2RlckNhbGxiYWNr
LnJlbGVhc2UoKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJbml0KCkgewot
ICAgIC8vIFNldC11cC4KLSAgICBBbmRyb2lkVmlkZW9EZWNvZGVyIGRlY29kZXIgPQotICAgICAg
ICBuZXcgVGVzdERlY29kZXJCdWlsZGVyKCkuc2V0Q29kZWNUeXBlKFZpZGVvQ29kZWNNaW1lVHlw
ZS5WUDgpLmJ1aWxkKCk7Ci0KLSAgICAvLyBUZXN0LgotICAgIGFzc2VydFRoYXQoZGVjb2Rlci5p
bml0RGVjb2RlKFRFU1RfREVDT0RFUl9TRVRUSU5HUywgbW9ja0RlY29kZXJDYWxsYmFjaykpCi0g
ICAgICAgIC5pc0VxdWFsVG8oVmlkZW9Db2RlY1N0YXR1cy5PSyk7Ci0KLSAgICAvLyBWZXJpZnku
Ci0gICAgYXNzZXJ0VGhhdChmYWtlTWVkaWFDb2RlY1dyYXBwZXIuZ2V0U3RhdGUoKSkuaXNFcXVh
bFRvKFN0YXRlLkVYRUNVVElOR19SVU5OSU5HKTsKLQotICAgIE1lZGlhRm9ybWF0IG1lZGlhRm9y
bWF0ID0gZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmdldENvbmZpZ3VyZWRGb3JtYXQoKTsKLSAgICBh
c3NlcnRUaGF0KG1lZGlhRm9ybWF0KS5pc05vdE51bGwoKTsKLSAgICBhc3NlcnRUaGF0KG1lZGlh
Rm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX1dJRFRIKSkKLSAgICAgICAgLmlzRXF1
YWxUbyhURVNUX0RFQ09ERVJfU0VUVElOR1Mud2lkdGgpOwotICAgIGFzc2VydFRoYXQobWVkaWFG
b3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSEVJR0hUKSkKLSAgICAgICAgLmlzRXF1
YWxUbyhURVNUX0RFQ09ERVJfU0VUVElOR1MuaGVpZ2h0KTsKLSAgICBhc3NlcnRUaGF0KG1lZGlh
Rm9ybWF0LmdldFN0cmluZyhNZWRpYUZvcm1hdC5LRVlfTUlNRSkpCi0gICAgICAgIC5pc0VxdWFs
VG8oVmlkZW9Db2RlY01pbWVUeXBlLlZQOC5taW1lVHlwZSgpKTsKLSAgfQotCi0gIEBUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RSZWxlYXNlKCkgewotICAgIC8vIFNldC11cC4KLSAgICBBbmRyb2lk
VmlkZW9EZWNvZGVyIGRlY29kZXIgPSBuZXcgVGVzdERlY29kZXJCdWlsZGVyKCkuYnVpbGQoKTsK
LSAgICBkZWNvZGVyLmluaXREZWNvZGUoVEVTVF9ERUNPREVSX1NFVFRJTkdTLCBtb2NrRGVjb2Rl
ckNhbGxiYWNrKTsKLQotICAgIC8vIFRlc3QuCi0gICAgYXNzZXJ0VGhhdChkZWNvZGVyLnJlbGVh
c2UoKSkuaXNFcXVhbFRvKFZpZGVvQ29kZWNTdGF0dXMuT0spOwotCi0gICAgLy8gVmVyaWZ5Lgot
ICAgIGFzc2VydFRoYXQoZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmdldFN0YXRlKCkpLmlzRXF1YWxU
byhTdGF0ZS5SRUxFQVNFRCk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmVs
ZWFzZU11bHRpcGxlVGltZXMoKSB7Ci0gICAgLy8gU2V0LXVwLgotICAgIEFuZHJvaWRWaWRlb0Rl
Y29kZXIgZGVjb2RlciA9IG5ldyBUZXN0RGVjb2RlckJ1aWxkZXIoKS5idWlsZCgpOwotICAgIGRl
Y29kZXIuaW5pdERlY29kZShURVNUX0RFQ09ERVJfU0VUVElOR1MsIG1vY2tEZWNvZGVyQ2FsbGJh
Y2spOwotCi0gICAgLy8gVGVzdC4KLSAgICBhc3NlcnRUaGF0KGRlY29kZXIucmVsZWFzZSgpKS5p
c0VxdWFsVG8oVmlkZW9Db2RlY1N0YXR1cy5PSyk7Ci0gICAgYXNzZXJ0VGhhdChkZWNvZGVyLnJl
bGVhc2UoKSkuaXNFcXVhbFRvKFZpZGVvQ29kZWNTdGF0dXMuT0spOwotCi0gICAgLy8gVmVyaWZ5
LgotICAgIGFzc2VydFRoYXQoZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmdldFN0YXRlKCkpLmlzRXF1
YWxUbyhTdGF0ZS5SRUxFQVNFRCk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
RGVjb2RlUXVldWVzRGF0YSgpIHsKLSAgICAvLyBTZXQtdXAuCi0gICAgQW5kcm9pZFZpZGVvRGVj
b2RlciBkZWNvZGVyID0gbmV3IFRlc3REZWNvZGVyQnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgZGVj
b2Rlci5pbml0RGVjb2RlKFRFU1RfREVDT0RFUl9TRVRUSU5HUywgbW9ja0RlY29kZXJDYWxsYmFj
ayk7Ci0KLSAgICAvLyBUZXN0LgotICAgIGFzc2VydFRoYXQoZGVjb2Rlci5kZWNvZGUoY3JlYXRl
VGVzdEVuY29kZWRJbWFnZSgpLAotICAgICAgICAgICAgICAgICAgIG5ldyBEZWNvZGVJbmZvKC8q
IGlzTWlzc2luZ0ZyYW1lcz0gKi8gZmFsc2UsIC8qIHJlbmRlclRpbWVNcz0gKi8gMCkpKQotICAg
ICAgICAuaXNFcXVhbFRvKFZpZGVvQ29kZWNTdGF0dXMuT0spOwotCi0gICAgLy8gVmVyaWZ5Lgot
ICAgIEFyZ3VtZW50Q2FwdG9yPEludGVnZXI+IGluZGV4Q2FwdG9yID0gQXJndW1lbnRDYXB0b3Iu
Zm9yQ2xhc3MoSW50ZWdlci5jbGFzcyk7Ci0gICAgQXJndW1lbnRDYXB0b3I8SW50ZWdlcj4gb2Zm
c2V0Q2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoSW50ZWdlci5jbGFzcyk7Ci0gICAg
QXJndW1lbnRDYXB0b3I8SW50ZWdlcj4gc2l6ZUNhcHRvciA9IEFyZ3VtZW50Q2FwdG9yLmZvckNs
YXNzKEludGVnZXIuY2xhc3MpOwotICAgIHZlcmlmeShmYWtlTWVkaWFDb2RlY1dyYXBwZXIpCi0g
ICAgICAgIC5xdWV1ZUlucHV0QnVmZmVyKGluZGV4Q2FwdG9yLmNhcHR1cmUoKSwgb2Zmc2V0Q2Fw
dG9yLmNhcHR1cmUoKSwgc2l6ZUNhcHRvci5jYXB0dXJlKCksCi0gICAgICAgICAgICAvKiBwcmVz
ZW50YXRpb25UaW1lVXM9ICovIGFueUxvbmcoKSwKLSAgICAgICAgICAgIC8qIGZsYWdzPSAqLyBl
cSgwKSk7Ci0KLSAgICBCeXRlQnVmZmVyIGlucHV0QnVmZmVyID0gZmFrZU1lZGlhQ29kZWNXcmFw
cGVyLmdldElucHV0QnVmZmVycygpW2luZGV4Q2FwdG9yLmdldFZhbHVlKCldOwotICAgIENvZGVj
VGVzdEhlbHBlci5hc3NlcnRFcXVhbENvbnRlbnRzKAotICAgICAgICBFTkNPREVEX1RFU1RfREFU
QSwgaW5wdXRCdWZmZXIsIG9mZnNldENhcHRvci5nZXRWYWx1ZSgpLCBzaXplQ2FwdG9yLmdldFZh
bHVlKCkpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERlbGl2ZXJzT3V0cHV0
Qnl0ZUJ1ZmZlcnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIGJ5
dGVbXSB0ZXN0T3V0cHV0RGF0YSA9IENvZGVjVGVzdEhlbHBlci5nZW5lcmF0ZVJhbmRvbURhdGEo
Ci0gICAgICAgIFRFU1RfREVDT0RFUl9TRVRUSU5HUy53aWR0aCAqIFRFU1RfREVDT0RFUl9TRVRU
SU5HUy5oZWlnaHQgKiAzIC8gMik7Ci0gICAgZmluYWwgSTQyMEJ1ZmZlciBleHBlY3RlZERlbGl2
ZXJlZEJ1ZmZlciA9IENvZGVjVGVzdEhlbHBlci53cmFwSTQyMCgKLSAgICAgICAgVEVTVF9ERUNP
REVSX1NFVFRJTkdTLndpZHRoLCBURVNUX0RFQ09ERVJfU0VUVElOR1MuaGVpZ2h0LCB0ZXN0T3V0
cHV0RGF0YSk7Ci0KLSAgICAvLyBTZXQtdXAuCi0gICAgVGVzdERlY29kZXIgZGVjb2RlciA9IG5l
dyBUZXN0RGVjb2RlckJ1aWxkZXIoKS5zZXRVc2VTdXJmYWNlKC8qIHVzZVN1cmZhY2UgPSAqLyBm
YWxzZSkuYnVpbGQoKTsKLSAgICBkZWNvZGVyLmluaXREZWNvZGUoVEVTVF9ERUNPREVSX1NFVFRJ
TkdTLCBmYWtlRGVjb2RlckNhbGxiYWNrKTsKLSAgICBkZWNvZGVyLmRlY29kZShjcmVhdGVUZXN0
RW5jb2RlZEltYWdlKCksCi0gICAgICAgIG5ldyBEZWNvZGVJbmZvKC8qIGlzTWlzc2luZ0ZyYW1l
cz0gKi8gZmFsc2UsIC8qIHJlbmRlclRpbWVNcz0gKi8gMCkpOwotICAgIGZha2VNZWRpYUNvZGVj
V3JhcHBlci5hZGRPdXRwdXREYXRhKAotICAgICAgICB0ZXN0T3V0cHV0RGF0YSwgLyogcHJlc2Vu
dGF0aW9uVGltZXN0YW1wVXM9ICovIDAsIC8qIGZsYWdzPSAqLyAwKTsKLQotICAgIC8vIFRlc3Qu
Ci0gICAgZGVjb2Rlci53YWl0RGVsaXZlckRlY29kZWRGcmFtZSgpOwotCi0gICAgLy8gVmVyaWZ5
LgotICAgIGFzc2VydFRoYXQoZmFrZURlY29kZXJDYWxsYmFjay5kZWNvZGVkRnJhbWVzKS5oYXNT
aXplKDEpOwotICAgIFZpZGVvRnJhbWUgdmlkZW9GcmFtZSA9IGZha2VEZWNvZGVyQ2FsbGJhY2su
ZGVjb2RlZEZyYW1lcy5nZXQoMCk7Ci0gICAgYXNzZXJ0VGhhdCh2aWRlb0ZyYW1lKS5pc05vdE51
bGwoKTsKLSAgICBhc3NlcnRUaGF0KHZpZGVvRnJhbWUuZ2V0Um90YXRlZFdpZHRoKCkpLmlzRXF1
YWxUbyhURVNUX0RFQ09ERVJfU0VUVElOR1Mud2lkdGgpOwotICAgIGFzc2VydFRoYXQodmlkZW9G
cmFtZS5nZXRSb3RhdGVkSGVpZ2h0KCkpLmlzRXF1YWxUbyhURVNUX0RFQ09ERVJfU0VUVElOR1Mu
aGVpZ2h0KTsKLSAgICBhc3NlcnRUaGF0KHZpZGVvRnJhbWUuZ2V0Um90YXRpb24oKSkuaXNFcXVh
bFRvKDApOwotICAgIEk0MjBCdWZmZXIgZGVsaXZlcmVkQnVmZmVyID0gdmlkZW9GcmFtZS5nZXRC
dWZmZXIoKS50b0k0MjAoKTsKLSAgICBhc3NlcnRUaGF0KGRlbGl2ZXJlZEJ1ZmZlci5nZXREYXRh
WSgpKS5pc0VxdWFsVG8oZXhwZWN0ZWREZWxpdmVyZWRCdWZmZXIuZ2V0RGF0YVkoKSk7Ci0gICAg
YXNzZXJ0VGhhdChkZWxpdmVyZWRCdWZmZXIuZ2V0RGF0YVUoKSkuaXNFcXVhbFRvKGV4cGVjdGVk
RGVsaXZlcmVkQnVmZmVyLmdldERhdGFVKCkpOwotICAgIGFzc2VydFRoYXQoZGVsaXZlcmVkQnVm
ZmVyLmdldERhdGFWKCkpLmlzRXF1YWxUbyhleHBlY3RlZERlbGl2ZXJlZEJ1ZmZlci5nZXREYXRh
VigpKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZW5kZXJzT3V0cHV0VGV4
dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgLy8gU2V0LXVwLgotICAg
IFRlc3REZWNvZGVyIGRlY29kZXIgPSBuZXcgVGVzdERlY29kZXJCdWlsZGVyKCkuYnVpbGQoKTsK
LSAgICBkZWNvZGVyLmluaXREZWNvZGUoVEVTVF9ERUNPREVSX1NFVFRJTkdTLCBtb2NrRGVjb2Rl
ckNhbGxiYWNrKTsKLSAgICBkZWNvZGVyLmRlY29kZShjcmVhdGVUZXN0RW5jb2RlZEltYWdlKCks
Ci0gICAgICAgIG5ldyBEZWNvZGVJbmZvKC8qIGlzTWlzc2luZ0ZyYW1lcz0gKi8gZmFsc2UsIC8q
IHJlbmRlclRpbWVNcz0gKi8gMCkpOwotICAgIGludCBidWZmZXJJbmRleCA9Ci0gICAgICAgIGZh
a2VNZWRpYUNvZGVjV3JhcHBlci5hZGRPdXRwdXRUZXh0dXJlKC8qIHByZXNlbnRhdGlvblRpbWVz
dGFtcFVzPSAqLyAwLCAvKiBmbGFncz0gKi8gMCk7Ci0KLSAgICAvLyBUZXN0LgotICAgIGRlY29k
ZXIud2FpdERlbGl2ZXJEZWNvZGVkRnJhbWUoKTsKLQotICAgIC8vIFZlcmlmeS4KLSAgICB2ZXJp
ZnkoZmFrZU1lZGlhQ29kZWNXcmFwcGVyKS5yZWxlYXNlT3V0cHV0QnVmZmVyKGJ1ZmZlckluZGV4
LCAvKiByZW5kZXI9ICovIHRydWUpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dFN1cmZhY2VUZXh0dXJlU3RhbGxfRnJhbWVzRHJvcHBlZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IG51bUZyYW1lcyA9IDEwOwotICAgIC8vIE1heGltdW0g
bnVtYmVyIG9mIGZyYW1lIHRoZSBkZWNvZGVyIGNhbiBrZWVwIHF1ZXVlZCBvbiB0aGUgb3V0cHV0
IHNpZGUuCi0gICAgZmluYWwgaW50IG1heFF1ZXVlZEJ1ZmZlcnMgPSAzOwotCi0gICAgLy8gU2V0
LXVwLgotICAgIFRlc3REZWNvZGVyIGRlY29kZXIgPSBuZXcgVGVzdERlY29kZXJCdWlsZGVyKCku
YnVpbGQoKTsKLSAgICBkZWNvZGVyLmluaXREZWNvZGUoVEVTVF9ERUNPREVSX1NFVFRJTkdTLCBt
b2NrRGVjb2RlckNhbGxiYWNrKTsKLQotICAgIC8vIFRlc3QuCi0gICAgaW50W10gYnVmZmVySW5k
aWNlcyA9IG5ldyBpbnRbbnVtRnJhbWVzXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBp
KyspIHsKLSAgICAgIGRlY29kZXIuZGVjb2RlKGNyZWF0ZVRlc3RFbmNvZGVkSW1hZ2UoKSwKLSAg
ICAgICAgICBuZXcgRGVjb2RlSW5mbygvKiBpc01pc3NpbmdGcmFtZXM9ICovIGZhbHNlLCAvKiBy
ZW5kZXJUaW1lTXM9ICovIDApKTsKLSAgICAgIGJ1ZmZlckluZGljZXNbaV0gPQotICAgICAgICAg
IGZha2VNZWRpYUNvZGVjV3JhcHBlci5hZGRPdXRwdXRUZXh0dXJlKC8qIHByZXNlbnRhdGlvblRp
bWVzdGFtcFVzPSAqLyAwLCAvKiBmbGFncz0gKi8gMCk7Ci0gICAgICBkZWNvZGVyLndhaXREZWxp
dmVyRGVjb2RlZEZyYW1lKCk7Ci0gICAgfQotCi0gICAgLy8gVmVyaWZ5LgotICAgIEluT3JkZXIg
cmVsZWFzZU9yZGVyID0gaW5PcmRlcihmYWtlTWVkaWFDb2RlY1dyYXBwZXIpOwotICAgIHJlbGVh
c2VPcmRlci52ZXJpZnkoZmFrZU1lZGlhQ29kZWNXcmFwcGVyKQotICAgICAgICAucmVsZWFzZU91
dHB1dEJ1ZmZlcihidWZmZXJJbmRpY2VzWzBdLCAvKiByZW5kZXI9ICovIHRydWUpOwotICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgbnVtRnJhbWVzIC0gbWF4UXVldWVkQnVmZmVyczsgaSsrKSB7Ci0g
ICAgICByZWxlYXNlT3JkZXIudmVyaWZ5KGZha2VNZWRpYUNvZGVjV3JhcHBlcikKLSAgICAgICAg
ICAucmVsZWFzZU91dHB1dEJ1ZmZlcihidWZmZXJJbmRpY2VzW2ldLCAvKiByZW5kZXI9ICovIGZh
bHNlKTsKLSAgICB9Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGVsaXZlcnNS
ZW5kZXJlZEJ1ZmZlcnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8vIFNl
dC11cC4KLSAgICBUZXN0RGVjb2RlciBkZWNvZGVyID0gbmV3IFRlc3REZWNvZGVyQnVpbGRlcigp
LmJ1aWxkKCk7Ci0gICAgZGVjb2Rlci5pbml0RGVjb2RlKFRFU1RfREVDT0RFUl9TRVRUSU5HUywg
ZmFrZURlY29kZXJDYWxsYmFjayk7Ci0gICAgZGVjb2Rlci5kZWNvZGUoY3JlYXRlVGVzdEVuY29k
ZWRJbWFnZSgpLAotICAgICAgICBuZXcgRGVjb2RlSW5mbygvKiBpc01pc3NpbmdGcmFtZXM9ICov
IGZhbHNlLCAvKiByZW5kZXJUaW1lTXM9ICovIDApKTsKLSAgICBmYWtlTWVkaWFDb2RlY1dyYXBw
ZXIuYWRkT3V0cHV0VGV4dHVyZSgvKiBwcmVzZW50YXRpb25UaW1lc3RhbXBVcz0gKi8gMCwgLyog
ZmxhZ3M9ICovIDApOwotCi0gICAgLy8gUmVuZGVyIHRoZSBvdXRwdXQgYnVmZmVyLgotICAgIGRl
Y29kZXIud2FpdERlbGl2ZXJEZWNvZGVkRnJhbWUoKTsKLQotICAgIEFyZ3VtZW50Q2FwdG9yPFZp
ZGVvU2luaz4gdmlkZW9TaW5rQ2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoVmlkZW9T
aW5rLmNsYXNzKTsKLSAgICB2ZXJpZnkobW9ja1N1cmZhY2VUZXh0dXJlSGVscGVyKS5zdGFydExp
c3RlbmluZyh2aWRlb1NpbmtDYXB0b3IuY2FwdHVyZSgpKTsKLQotICAgIC8vIFRlc3QuCi0gICAg
UnVubmFibGUgcmVsZWFzZUNhbGxiYWNrID0gbW9jayhSdW5uYWJsZS5jbGFzcyk7Ci0gICAgVmlk
ZW9GcmFtZS5UZXh0dXJlQnVmZmVyIG91dHB1dFRleHR1cmVCdWZmZXIgPQotICAgICAgICBuZXcg
VGV4dHVyZUJ1ZmZlckltcGwoVEVTVF9ERUNPREVSX1NFVFRJTkdTLndpZHRoLCBURVNUX0RFQ09E
RVJfU0VUVElOR1MuaGVpZ2h0LCBUeXBlLk9FUywKLSAgICAgICAgICAgIC8qIGlkPSAqLyAwLAot
ICAgICAgICAgICAgLyogdHJhbnNmb3JtTWF0cml4PSAqLyBuZXcgTWF0cml4KCksCi0gICAgICAg
ICAgICAvKiB0b0k0MjBIYW5kbGVyPSAqLyBuZXcgSGFuZGxlcigpLCBuZXcgWXV2Q29udmVydGVy
KCksIHJlbGVhc2VDYWxsYmFjayk7Ci0gICAgVmlkZW9GcmFtZSBvdXRwdXRWaWRlb0ZyYW1lID0K
LSAgICAgICAgbmV3IFZpZGVvRnJhbWUob3V0cHV0VGV4dHVyZUJ1ZmZlciwgLyogcm90YXRpb249
ICovIDAsIC8qIHRpbWVzdGFtcE5zPSAqLyAwKTsKLSAgICB2aWRlb1NpbmtDYXB0b3IuZ2V0VmFs
dWUoKS5vbkZyYW1lKG91dHB1dFZpZGVvRnJhbWUpOwotICAgIG91dHB1dFZpZGVvRnJhbWUucmVs
ZWFzZSgpOwotCi0gICAgLy8gVmVyaWZ5LgotICAgIGFzc2VydFRoYXQoZmFrZURlY29kZXJDYWxs
YmFjay5kZWNvZGVkRnJhbWVzKS5oYXNTaXplKDEpOwotICAgIFZpZGVvRnJhbWUgdmlkZW9GcmFt
ZSA9IGZha2VEZWNvZGVyQ2FsbGJhY2suZGVjb2RlZEZyYW1lcy5nZXQoMCk7Ci0gICAgYXNzZXJ0
VGhhdCh2aWRlb0ZyYW1lKS5pc05vdE51bGwoKTsKLSAgICBhc3NlcnRUaGF0KHZpZGVvRnJhbWUu
Z2V0QnVmZmVyKCkpLmlzRXF1YWxUbyhvdXRwdXRUZXh0dXJlQnVmZmVyKTsKLQotICAgIGZha2VE
ZWNvZGVyQ2FsbGJhY2sucmVsZWFzZSgpOwotCi0gICAgdmVyaWZ5KHJlbGVhc2VDYWxsYmFjayku
cnVuKCk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmlndXJlRXhjZXB0
aW9uVHJpZ2dlclNXRmFsbGJhY2soKSB7Ci0gICAgLy8gU2V0LXVwLgotICAgIGRvVGhyb3cobmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRmFrZSBlcnJvciIpKQotICAgICAgICAud2hlbihmYWtl
TWVkaWFDb2RlY1dyYXBwZXIpCi0gICAgICAgIC5jb25maWd1cmUoYW55KCksIGFueSgpLCBhbnko
KSwgYW55SW50KCkpOwotCi0gICAgQW5kcm9pZFZpZGVvRGVjb2RlciBkZWNvZGVyID0gbmV3IFRl
c3REZWNvZGVyQnVpbGRlcigpLmJ1aWxkKCk7Ci0KLSAgICAvLyBUZXN0LgotICAgIGFzc2VydFRo
YXQoZGVjb2Rlci5pbml0RGVjb2RlKFRFU1RfREVDT0RFUl9TRVRUSU5HUywgbW9ja0RlY29kZXJD
YWxsYmFjaykpCi0gICAgICAgIC5pc0VxdWFsVG8oVmlkZW9Db2RlY1N0YXR1cy5GQUxMQkFDS19T
T0ZUV0FSRSk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRFeGNlcHRp
b25UcmlnZ2VyU1dGYWxsYmFjaygpIHsKLSAgICAvLyBTZXQtdXAuCi0gICAgZG9UaHJvdyhuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGYWtlIGVycm9yIikpLndoZW4oZmFrZU1lZGlhQ29kZWNX
cmFwcGVyKS5zdGFydCgpOwotCi0gICAgQW5kcm9pZFZpZGVvRGVjb2RlciBkZWNvZGVyID0gbmV3
IFRlc3REZWNvZGVyQnVpbGRlcigpLmJ1aWxkKCk7Ci0KLSAgICAvLyBUZXN0LgotICAgIGFzc2Vy
dFRoYXQoZGVjb2Rlci5pbml0RGVjb2RlKFRFU1RfREVDT0RFUl9TRVRUSU5HUywgbW9ja0RlY29k
ZXJDYWxsYmFjaykpCi0gICAgICAgIC5pc0VxdWFsVG8oVmlkZW9Db2RlY1N0YXR1cy5GQUxMQkFD
S19TT0ZUV0FSRSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Rlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVy
YUVudW1lcmF0aW9uVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvc2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRp
b25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNDdiNTU5ZGM2ODYz
MDM5YmVhZDMyMmU0MzI4NzAzMTYzNWY1NzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25UZXN0
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5h
c3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25B
bmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZTsKLQotaW1wb3J0IGphdmEu
dXRpbC5BcnJheXM7Ci1pbXBvcnQgb3JnLmNocm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2Jv
bGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1
bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5yb2JvbGVjdHJpYy5hbm5vdGF0aW9uLkNv
bmZpZzsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJl
Rm9ybWF0LkZyYW1lcmF0ZVJhbmdlOwotCi0vKioKLSAqIFRlc3RzIGZvciBDYW1lcmFFbnVtZXJh
dGlvbkFuZHJvaWQuCi0gKi8KLUBSdW5XaXRoKExvY2FsUm9ib2xlY3RyaWNUZXN0UnVubmVyLmNs
YXNzKQotQENvbmZpZyhtYW5pZmVzdCA9IENvbmZpZy5OT05FKQotcHVibGljIGNsYXNzIENhbWVy
YUVudW1lcmF0aW9uVGVzdCB7Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RHZXRDbG9zZXN0
U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBGcmFtZXJh
dGVSYW5nZSgxMDAwMCwgMzAwMDApLAotICAgICAgICBnZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVy
YXRlUmFuZ2UoCi0gICAgICAgICAgICBBcnJheXMuYXNMaXN0KG5ldyBGcmFtZXJhdGVSYW5nZSgx
MDAwMCwgMzAwMDApLCBuZXcgRnJhbWVyYXRlUmFuZ2UoMzAwMDAsIDMwMDAwKSksCi0gICAgICAg
ICAgICAzMCAvKiByZXF1ZXN0ZWRGcHMgKi8pKTsKLQotICAgIGFzc2VydEVxdWFscyhuZXcgRnJh
bWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwKLSAgICAgICAgZ2V0Q2xvc2VzdFN1cHBvcnRlZEZy
YW1lcmF0ZVJhbmdlKAotICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChuZXcgRnJhbWVyYXRlUmFu
Z2UoMCwgMzAwMDApLCBuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwKLSAgICAgICAg
ICAgICAgICBuZXcgRnJhbWVyYXRlUmFuZ2UoMTQwMDAsIDE2MDAwKSwgbmV3IEZyYW1lcmF0ZVJh
bmdlKDE1MDAwLCAxNTAwMCkpLAotICAgICAgICAgICAgMTUgLyogcmVxdWVzdGVkRnBzICovKSk7
Ci0KLSAgICBhc3NlcnRFcXVhbHMobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAyMDAwMCksCi0g
ICAgICAgIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgKLSAgICAgICAgICAgIEFy
cmF5cy5hc0xpc3QobmV3IEZyYW1lcmF0ZVJhbmdlKDE1MDAwLCAxNTAwMCksIG5ldyBGcmFtZXJh
dGVSYW5nZSgxMDAwMCwgMjAwMDApLAotICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVSYW5n
ZSgxMDAwMCwgMzAwMDApKSwKLSAgICAgICAgICAgIDEwIC8qIHJlcXVlc3RlZEZwcyAqLykpOwot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9Db2RlY1Rlc3RIZWxwZXIuamF2
YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lk
L3Rlc3RzL3NyYy9vcmcvd2VicnRjL0NvZGVjVGVzdEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwOGExMDcwN2Y4MGFkNWNlNDg4ZjJjMGNhN2VlNTg5MDEzZWJiZTNm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Rlc3RzL3NyYy9v
cmcvd2VicnRjL0NvZGVjVGVzdEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoLmFzc2VydFRoYXQ7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoLmFzc2VydFdpdGhNZXNzYWdlOwot
Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwot
Ci0vKioKLSAqIEhlbHBlciBtZXRob2RzIGZvciB7QGxpbmsgSGFyZHdhcmVWaWRlb0VuY29kZXJU
ZXN0fSBhbmQge0BsaW5rIEFuZHJvaWRWaWRlb0RlY29kZXJUZXN0fS4KLSAqLwotY2xhc3MgQ29k
ZWNUZXN0SGVscGVyIHsKLSAgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxDb250ZW50cyhieXRlW10g
ZXhwZWN0ZWQsIEJ5dGVCdWZmZXIgYWN0dWFsLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkgewotICAg
IGFzc2VydFRoYXQoc2l6ZSkuaXNFcXVhbFRvKGV4cGVjdGVkLmxlbmd0aCk7Ci0gICAgYXNzZXJ0
VGhhdChhY3R1YWwuY2FwYWNpdHkoKSkuaXNBdExlYXN0KG9mZnNldCArIHNpemUpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFzc2VydFdp
dGhNZXNzYWdlKCJBdCBpbmRleDogIiArIGkpLnRoYXQoYWN0dWFsLmdldChvZmZzZXQgKyBpKSku
aXNFcXVhbFRvKGV4cGVjdGVkW2ldKTsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgYnl0ZVtdIGdl
bmVyYXRlUmFuZG9tRGF0YShpbnQgbGVuZ3RoKSB7Ci0gICAgUmFuZG9tIHJhbmRvbSA9IG5ldyBS
YW5kb20oKTsKLSAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2xlbmd0aF07Ci0gICAgcmFuZG9t
Lm5leHRCeXRlcyhkYXRhKTsKLSAgICByZXR1cm4gZGF0YTsKLSAgfQotCi0gIHN0YXRpYyBWaWRl
b0ZyYW1lLkk0MjBCdWZmZXIgd3JhcEk0MjAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBieXRlW10g
ZGF0YSkgewotICAgIGZpbmFsIGludCBwb3NZID0gMDsKLSAgICBmaW5hbCBpbnQgcG9zVSA9IHdp
ZHRoICogaGVpZ2h0OwotICAgIGZpbmFsIGludCBwb3NWID0gcG9zVSArIHdpZHRoICogaGVpZ2h0
IC8gNDsKLSAgICBmaW5hbCBpbnQgZW5kViA9IHBvc1YgKyB3aWR0aCAqIGhlaWdodCAvIDQ7Ci0K
LSAgICBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoZGF0YS5s
ZW5ndGgpOwotICAgIGJ1ZmZlci5wdXQoZGF0YSk7Ci0KLSAgICBidWZmZXIubGltaXQocG9zVSk7
Ci0gICAgYnVmZmVyLnBvc2l0aW9uKHBvc1kpOwotICAgIEJ5dGVCdWZmZXIgZGF0YVkgPSBidWZm
ZXIuc2xpY2UoKTsKLQotICAgIGJ1ZmZlci5saW1pdChwb3NWKTsKLSAgICBidWZmZXIucG9zaXRp
b24ocG9zVSk7Ci0gICAgQnl0ZUJ1ZmZlciBkYXRhVSA9IGJ1ZmZlci5zbGljZSgpOwotCi0gICAg
YnVmZmVyLmxpbWl0KGVuZFYpOwotICAgIGJ1ZmZlci5wb3NpdGlvbihwb3NWKTsKLSAgICBCeXRl
QnVmZmVyIGRhdGFWID0gYnVmZmVyLnNsaWNlKCk7Ci0KLSAgICByZXR1cm4gSmF2YUk0MjBCdWZm
ZXIud3JhcCh3aWR0aCwgaGVpZ2h0LCBkYXRhWSwgd2lkdGgsIGRhdGFVLCB3aWR0aCAvIDIsIGRh
dGFWLCB3aWR0aCAvIDIsCi0gICAgICAgIC8qIHJlbGVhc2VDYWxsYmFjaz0gKi8gbnVsbCk7Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9hbmRyb2lkL3Rlc3RzL3NyYy9vcmcvd2VicnRjL0NyeXB0b09wdGlvbnNUZXN0Lmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9p
ZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DcnlwdG9PcHRpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmMDM4MTFlNmZjYWQ1MmM4NTA0ZDY4YzY3ZTkyNTc5Y2IyMmY0
OWQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Rlc3RzL3Ny
Yy9vcmcvd2VicnRjL0NyeXB0b09wdGlvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3
NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguVHJ1dGguYXNzZXJ0VGhhdDsKLQot
aW1wb3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9ib2xlY3RyaWNUZXN0UnVu
bmVyOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVu
V2l0aDsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuYW5ub3RhdGlvbi5Db25maWc7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5DcnlwdG9PcHRpb25zOwotCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVz
dFJ1bm5lci5jbGFzcykKLUBDb25maWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBj
bGFzcyBDcnlwdG9PcHRpb25zVGVzdCB7Ci0gIC8vIFZhbGlkYXRlcyB0aGUgYnVpbGRlciBidWls
ZHMgYnkgZGVmYXVsdCBhbGwgZmFsc2Ugb3B0aW9ucy4KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdEJ1aWxkZXJEZWZhdWx0c0FyZUZhbHNlKCkgewotICAgIENyeXB0b09wdGlvbnMgY3J5cHRv
T3B0aW9ucyA9IENyeXB0b09wdGlvbnMuYnVpbGRlcigpLmNyZWF0ZUNyeXB0b09wdGlvbnMoKTsK
LSAgICBhc3NlcnRUaGF0KGNyeXB0b09wdGlvbnMuZ2V0U3J0cCgpLmdldEVuYWJsZUdjbUNyeXB0
b1N1aXRlcygpKS5pc0ZhbHNlKCk7Ci0gICAgYXNzZXJ0VGhhdChjcnlwdG9PcHRpb25zLmdldFNy
dHAoKS5nZXRFbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRvQ2lwaGVyKCkpLmlzRmFsc2UoKTsKLSAg
ICBhc3NlcnRUaGF0KGNyeXB0b09wdGlvbnMuZ2V0U3J0cCgpLmdldEVuYWJsZUVuY3J5cHRlZFJ0
cEhlYWRlckV4dGVuc2lvbnMoKSkuaXNGYWxzZSgpOwotICAgIGFzc2VydFRoYXQoY3J5cHRvT3B0
aW9ucy5nZXRTRnJhbWUoKS5nZXRSZXF1aXJlRnJhbWVFbmNyeXB0aW9uKCkpLmlzRmFsc2UoKTsK
LSAgfQotCi0gIC8vIFZhbGlkYXRlcyB0aGUgYnVpbGRlciBzZXRzIHRoZSBjb3JyZWN0IHBhcmFt
ZXRlcnMuCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RCdWlsZGVyQ29ycmVjdGx5SW5pdGlh
bGl6aW5nR2NtQ3J5cHRvKCkgewotICAgIENyeXB0b09wdGlvbnMgY3J5cHRvT3B0aW9ucyA9Ci0g
ICAgICAgIENyeXB0b09wdGlvbnMuYnVpbGRlcigpLnNldEVuYWJsZUdjbUNyeXB0b1N1aXRlcyh0
cnVlKS5jcmVhdGVDcnlwdG9PcHRpb25zKCk7Ci0gICAgYXNzZXJ0VGhhdChjcnlwdG9PcHRpb25z
LmdldFNydHAoKS5nZXRFbmFibGVHY21DcnlwdG9TdWl0ZXMoKSkuaXNUcnVlKCk7Ci0gICAgYXNz
ZXJ0VGhhdChjcnlwdG9PcHRpb25zLmdldFNydHAoKS5nZXRFbmFibGVBZXMxMjhTaGExXzMyQ3J5
cHRvQ2lwaGVyKCkpLmlzRmFsc2UoKTsKLSAgICBhc3NlcnRUaGF0KGNyeXB0b09wdGlvbnMuZ2V0
U3J0cCgpLmdldEVuYWJsZUVuY3J5cHRlZFJ0cEhlYWRlckV4dGVuc2lvbnMoKSkuaXNGYWxzZSgp
OwotICAgIGFzc2VydFRoYXQoY3J5cHRvT3B0aW9ucy5nZXRTRnJhbWUoKS5nZXRSZXF1aXJlRnJh
bWVFbmNyeXB0aW9uKCkpLmlzRmFsc2UoKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RCdWlsZGVyQ29ycmVjdGx5SW5pdGlhbGl6aW5nQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhl
cigpIHsKLSAgICBDcnlwdG9PcHRpb25zIGNyeXB0b09wdGlvbnMgPQotICAgICAgICBDcnlwdG9P
cHRpb25zLmJ1aWxkZXIoKS5zZXRFbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRvQ2lwaGVyKHRydWUp
LmNyZWF0ZUNyeXB0b09wdGlvbnMoKTsKLSAgICBhc3NlcnRUaGF0KGNyeXB0b09wdGlvbnMuZ2V0
U3J0cCgpLmdldEVuYWJsZUdjbUNyeXB0b1N1aXRlcygpKS5pc0ZhbHNlKCk7Ci0gICAgYXNzZXJ0
VGhhdChjcnlwdG9PcHRpb25zLmdldFNydHAoKS5nZXRFbmFibGVBZXMxMjhTaGExXzMyQ3J5cHRv
Q2lwaGVyKCkpLmlzVHJ1ZSgpOwotICAgIGFzc2VydFRoYXQoY3J5cHRvT3B0aW9ucy5nZXRTcnRw
KCkuZ2V0RW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9ucygpKS5pc0ZhbHNlKCk7Ci0g
ICAgYXNzZXJ0VGhhdChjcnlwdG9PcHRpb25zLmdldFNGcmFtZSgpLmdldFJlcXVpcmVGcmFtZUVu
Y3J5cHRpb24oKSkuaXNGYWxzZSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dEJ1aWxkZXJDb3JyZWN0bHlJbml0aWFsaXppbmdFbmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25z
KCkgewotICAgIENyeXB0b09wdGlvbnMgY3J5cHRvT3B0aW9ucyA9Ci0gICAgICAgIENyeXB0b09w
dGlvbnMuYnVpbGRlcigpLnNldEVuYWJsZUVuY3J5cHRlZFJ0cEhlYWRlckV4dGVuc2lvbnModHJ1
ZSkuY3JlYXRlQ3J5cHRvT3B0aW9ucygpOwotICAgIGFzc2VydFRoYXQoY3J5cHRvT3B0aW9ucy5n
ZXRTcnRwKCkuZ2V0RW5hYmxlR2NtQ3J5cHRvU3VpdGVzKCkpLmlzRmFsc2UoKTsKLSAgICBhc3Nl
cnRUaGF0KGNyeXB0b09wdGlvbnMuZ2V0U3J0cCgpLmdldEVuYWJsZUFlczEyOFNoYTFfMzJDcnlw
dG9DaXBoZXIoKSkuaXNGYWxzZSgpOwotICAgIGFzc2VydFRoYXQoY3J5cHRvT3B0aW9ucy5nZXRT
cnRwKCkuZ2V0RW5hYmxlRW5jcnlwdGVkUnRwSGVhZGVyRXh0ZW5zaW9ucygpKS5pc1RydWUoKTsK
LSAgICBhc3NlcnRUaGF0KGNyeXB0b09wdGlvbnMuZ2V0U0ZyYW1lKCkuZ2V0UmVxdWlyZUZyYW1l
RW5jcnlwdGlvbigpKS5pc0ZhbHNlKCk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0QnVpbGRlckNvcnJlY3RseUluaXRpYWxpemluZ1JlcXVpcmVGcmFtZUVuY3J5cHRpb24oKSB7
Ci0gICAgQ3J5cHRvT3B0aW9ucyBjcnlwdG9PcHRpb25zID0KLSAgICAgICAgQ3J5cHRvT3B0aW9u
cy5idWlsZGVyKCkuc2V0UmVxdWlyZUZyYW1lRW5jcnlwdGlvbih0cnVlKS5jcmVhdGVDcnlwdG9P
cHRpb25zKCk7Ci0gICAgYXNzZXJ0VGhhdChjcnlwdG9PcHRpb25zLmdldFNydHAoKS5nZXRFbmFi
bGVHY21DcnlwdG9TdWl0ZXMoKSkuaXNGYWxzZSgpOwotICAgIGFzc2VydFRoYXQoY3J5cHRvT3B0
aW9ucy5nZXRTcnRwKCkuZ2V0RW5hYmxlQWVzMTI4U2hhMV8zMkNyeXB0b0NpcGhlcigpKS5pc0Zh
bHNlKCk7Ci0gICAgYXNzZXJ0VGhhdChjcnlwdG9PcHRpb25zLmdldFNydHAoKS5nZXRFbmFibGVF
bmNyeXB0ZWRSdHBIZWFkZXJFeHRlbnNpb25zKCkpLmlzRmFsc2UoKTsKLSAgICBhc3NlcnRUaGF0
KGNyeXB0b09wdGlvbnMuZ2V0U0ZyYW1lKCkuZ2V0UmVxdWlyZUZyYW1lRW5jcnlwdGlvbigpKS5p
c1RydWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvRmFrZU1lZGlh
Q29kZWNXcmFwcGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9GYWtlTWVkaWFDb2RlY1dyYXBw
ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyNWZhYTI0OWE5MTYzMjcz
YmNiYWVhY2I3OWZkNGQzYzdmMzUzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9GYWtlTWVkaWFDb2RlY1dyYXBwZXIuamF2
YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE4
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0
dXJlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlYzsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLk1lZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuTWVkaWFDcnlwdG87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9y
dCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5O
dWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBqYXZhLm5pby5C
eXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGls
Lkxpc3Q7Ci0KLS8qKgotICogRmFrZSBNZWRpYUNvZGVjIHRoYXQgaW1wbGVtZW50cyB0aGUgYmFz
aWMgc3RhdGUgbWFjaGluZS4KLSAqCi0gKiBAbm90ZSBUaGlzIGNsYXNzIGlzIG9ubHkgaW50ZW5k
ZWQgZm9yIHNpbmdsZS10aHJlYWRlZCB0ZXN0cyBhbmQgaXMgbm90IHRocmVhZC1zYWZlLgotICov
Ci1wdWJsaWMgY2xhc3MgRmFrZU1lZGlhQ29kZWNXcmFwcGVyIGltcGxlbWVudHMgTWVkaWFDb2Rl
Y1dyYXBwZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0lOUFVUX0JVRkZFUlMg
PSAxMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTV9PVVRQVVRfQlVGRkVSUyA9IDEw
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0VOQ09ERURfREFUQV9TSVpFX0JZVEVT
ID0gMV8wMDA7Ci0KLSAgLyoqCi0gICAqIE1lZGlhQ29kZWMgc3RhdGUgYXMgZGVmaW5lZCBieToK
LSAgICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvbWVk
aWEvTWVkaWFDb2RlYy5odG1sCi0gICAqLwotICBwdWJsaWMgZW51bSBTdGF0ZSB7Ci0gICAgU1RP
UFBFRF9DT05GSUdVUkVEKFByaW1hcnkuU1RPUFBFRCksCi0gICAgU1RPUFBFRF9VTklOSVRJQUxJ
WkVEKFByaW1hcnkuU1RPUFBFRCksCi0gICAgU1RPUFBFRF9FUlJPUihQcmltYXJ5LlNUT1BQRUQp
LAotICAgIEVYRUNVVElOR19GTFVTSEVEKFByaW1hcnkuRVhFQ1VUSU5HKSwKLSAgICBFWEVDVVRJ
TkdfUlVOTklORyhQcmltYXJ5LkVYRUNVVElORyksCi0gICAgRVhFQ1VUSU5HX0VORF9PRl9TVFJF
QU0oUHJpbWFyeS5FWEVDVVRJTkcpLAotICAgIFJFTEVBU0VEKFByaW1hcnkuUkVMRUFTRUQpOwot
Ci0gICAgcHVibGljIGVudW0gUHJpbWFyeSB7IFNUT1BQRUQsIEVYRUNVVElORywgUkVMRUFTRUQg
fQotCi0gICAgcHJpdmF0ZSBmaW5hbCBQcmltYXJ5IHByaW1hcnk7Ci0KLSAgICBTdGF0ZShQcmlt
YXJ5IHByaW1hcnkpIHsKLSAgICAgIHRoaXMucHJpbWFyeSA9IHByaW1hcnk7Ci0gICAgfQotCi0g
ICAgcHVibGljIFByaW1hcnkgZ2V0UHJpbWFyeSgpIHsKLSAgICAgIHJldHVybiBwcmltYXJ5Owot
ICAgIH0KLSAgfQotCi0gIC8qKiBSZXByZXNlbnRzIGFuIG91dHB1dCBidWZmZXIgdGhhdCB3aWxs
IGJlIHJldHVybmVkIGJ5IGRlcXVldWVPdXRwdXRCdWZmZXIuICovCi0gIHB1YmxpYyBzdGF0aWMg
Y2xhc3MgUXVldWVkT3V0cHV0QnVmZmVySW5mbyB7Ci0gICAgcHJpdmF0ZSBpbnQgaW5kZXg7Ci0g
ICAgcHJpdmF0ZSBpbnQgb2Zmc2V0OwotICAgIHByaXZhdGUgaW50IHNpemU7Ci0gICAgcHJpdmF0
ZSBsb25nIHByZXNlbnRhdGlvblRpbWVVczsKLSAgICBwcml2YXRlIGludCBmbGFnczsKLQotICAg
IHByaXZhdGUgUXVldWVkT3V0cHV0QnVmZmVySW5mbygKLSAgICAgICAgaW50IGluZGV4LCBpbnQg
b2Zmc2V0LCBpbnQgc2l6ZSwgbG9uZyBwcmVzZW50YXRpb25UaW1lVXMsIGludCBmbGFncykgewot
ICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgICB0aGlzLnNpemUgPSBzaXplOwotICAgICAgdGhpcy5wcmVzZW50YXRpb25UaW1lVXMgPSBw
cmVzZW50YXRpb25UaW1lVXM7Ci0gICAgICB0aGlzLmZsYWdzID0gZmxhZ3M7Ci0gICAgfQotCi0g
ICAgcHVibGljIHN0YXRpYyBRdWV1ZWRPdXRwdXRCdWZmZXJJbmZvIGNyZWF0ZSgKLSAgICAgICAg
aW50IGluZGV4LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgbG9uZyBwcmVzZW50YXRpb25UaW1lVXMs
IGludCBmbGFncykgewotICAgICAgcmV0dXJuIG5ldyBRdWV1ZWRPdXRwdXRCdWZmZXJJbmZvKGlu
ZGV4LCBvZmZzZXQsIHNpemUsIHByZXNlbnRhdGlvblRpbWVVcywgZmxhZ3MpOwotICAgIH0KLQot
ICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKSB7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQot
Ci0gICAgcHVibGljIGludCBnZXRPZmZzZXQoKSB7Ci0gICAgICByZXR1cm4gb2Zmc2V0OwotICAg
IH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0U2l6ZSgpIHsKLSAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQotICAgIHB1YmxpYyBsb25nIGdldFByZXNlbnRhdGlvblRpbWVVcygpIHsKLSAgICAgIHJl
dHVybiBwcmVzZW50YXRpb25UaW1lVXM7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRGbGFn
cygpIHsKLSAgICAgIHJldHVybiBmbGFnczsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0YXRl
IHN0YXRlID0gU3RhdGUuU1RPUFBFRF9VTklOSVRJQUxJWkVEOwotICBwcml2YXRlIEBOdWxsYWJs
ZSBNZWRpYUZvcm1hdCBjb25maWd1cmVkRm9ybWF0OwotICBwcml2YXRlIGludCBjb25maWd1cmVk
RmxhZ3M7Ci0gIHByaXZhdGUgZmluYWwgTWVkaWFGb3JtYXQgb3V0cHV0Rm9ybWF0OwotICBwcml2
YXRlIGZpbmFsIEJ5dGVCdWZmZXJbXSBpbnB1dEJ1ZmZlcnMgPSBuZXcgQnl0ZUJ1ZmZlcltOVU1f
SU5QVVRfQlVGRkVSU107Ci0gIHByaXZhdGUgZmluYWwgQnl0ZUJ1ZmZlcltdIG91dHB1dEJ1ZmZl
cnMgPSBuZXcgQnl0ZUJ1ZmZlcltOVU1fT1VUUFVUX0JVRkZFUlNdOwotICBwcml2YXRlIGZpbmFs
IGJvb2xlYW5bXSBpbnB1dEJ1ZmZlclJlc2VydmVkID0gbmV3IGJvb2xlYW5bTlVNX0lOUFVUX0JV
RkZFUlNdOwotICBwcml2YXRlIGZpbmFsIGJvb2xlYW5bXSBvdXRwdXRCdWZmZXJSZXNlcnZlZCA9
IG5ldyBib29sZWFuW05VTV9PVVRQVVRfQlVGRkVSU107Ci0gIHByaXZhdGUgZmluYWwgTGlzdDxR
dWV1ZWRPdXRwdXRCdWZmZXJJbmZvPiBxdWV1ZWRPdXRwdXRCdWZmZXJzID0gbmV3IEFycmF5TGlz
dDw+KCk7Ci0KLSAgcHVibGljIEZha2VNZWRpYUNvZGVjV3JhcHBlcihNZWRpYUZvcm1hdCBvdXRw
dXRGb3JtYXQpIHsKLSAgICB0aGlzLm91dHB1dEZvcm1hdCA9IG91dHB1dEZvcm1hdDsKLSAgfQot
Ci0gIC8qKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNpbXVsYXRlZCBzdGF0ZSBvZiBNZWRpYUNvZGVj
LiAqLwotICBwdWJsaWMgU3RhdGUgZ2V0U3RhdGUoKSB7Ci0gICAgcmV0dXJuIHN0YXRlOwotICB9
Ci0KLSAgLyoqIEdldHMgdGhlIGxhc3QgY29uZmlndXJlZCBtZWRpYSBmb3JtYXQgcGFzc2VkIHRv
IGNvbmZpZ3VyZS4gKi8KLSAgcHVibGljIEBOdWxsYWJsZSBNZWRpYUZvcm1hdCBnZXRDb25maWd1
cmVkRm9ybWF0KCkgewotICAgIHJldHVybiBjb25maWd1cmVkRm9ybWF0OwotICB9Ci0KLSAgLyoq
IFJldHVybnMgdGhlIGxhc3QgZmxhZ3MgcGFzc2VkIHRvIGNvbmZpZ3VyZS4gKi8KLSAgcHVibGlj
IGludCBnZXRDb25maWd1cmVkRmxhZ3MoKSB7Ci0gICAgcmV0dXJuIGNvbmZpZ3VyZWRGbGFnczsK
LSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgdGV4dHVyZSBidWZmZXIgdGhhdCB3aWxsIGJlIHJl
dHVybmVkIGJ5IGRlcXVldWVPdXRwdXRCdWZmZXIuIFJldHVybnMgaW5kZXggb2YgdGhlCi0gICAq
IGJ1ZmZlci4KLSAgICovCi0gIHB1YmxpYyBpbnQgYWRkT3V0cHV0VGV4dHVyZShsb25nIHByZXNl
bnRhdGlvblRpbWVzdGFtcFVzLCBpbnQgZmxhZ3MpIHsKLSAgICBpbnQgaW5kZXggPSBnZXRGcmVl
T3V0cHV0QnVmZmVyKCk7Ci0gICAgcXVldWVkT3V0cHV0QnVmZmVycy5hZGQoUXVldWVkT3V0cHV0
QnVmZmVySW5mby5jcmVhdGUoCi0gICAgICAgIGluZGV4LCAvKiBvZmZzZXQ9ICovIDAsIC8qIHNp
emU9ICovIDAsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzLCBmbGFncykpOwotICAgIHJldHVybiBp
bmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgYnl0ZSBidWZmZXIgYnVmZmVyIHRoYXQg
d2lsbCBiZSByZXR1cm5lZCBieSBkZXF1ZXVlT3V0cHV0QnVmZmVyLiBSZXR1cm5zIGluZGV4IG9m
IHRoZQotICAgKiBidWZmZXIuCi0gICAqLwotICBwdWJsaWMgaW50IGFkZE91dHB1dERhdGEoYnl0
ZVtdIGRhdGEsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMsIGludCBmbGFncykgewotICAg
IGludCBpbmRleCA9IGdldEZyZWVPdXRwdXRCdWZmZXIoKTsKLSAgICBCeXRlQnVmZmVyIG91dHB1
dEJ1ZmZlciA9IG91dHB1dEJ1ZmZlcnNbaW5kZXhdOwotCi0gICAgb3V0cHV0QnVmZmVyLmNsZWFy
KCk7Ci0gICAgb3V0cHV0QnVmZmVyLnB1dChkYXRhKTsKLSAgICBvdXRwdXRCdWZmZXIucmV3aW5k
KCk7Ci0KLSAgICBxdWV1ZWRPdXRwdXRCdWZmZXJzLmFkZChRdWV1ZWRPdXRwdXRCdWZmZXJJbmZv
LmNyZWF0ZSgKLSAgICAgICAgaW5kZXgsIC8qIG9mZnNldD0gKi8gMCwgZGF0YS5sZW5ndGgsIHBy
ZXNlbnRhdGlvblRpbWVzdGFtcFVzLCBmbGFncykpOwotICAgIHJldHVybiBpbmRleDsKLSAgfQot
Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBvdXRwdXQgYnVmZmVyIHRoYXQgaXMgbm90
IHJlc2VydmVkIGFuZCByZXNlcnZlcyBpdC4gSXQgd2lsbCBiZSBzdGF5IHJlc2VydmVkCi0gICAq
IHVudGlsIHJlbGVhc2VkIHdpdGggcmVsZWFzZU91dHB1dEJ1ZmZlci4KLSAgICovCi0gIHByaXZh
dGUgaW50IGdldEZyZWVPdXRwdXRCdWZmZXIoKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fT1VUUFVUX0JVRkZFUlM7IGkrKykgewotICAgICAgaWYgKCFvdXRwdXRCdWZmZXJSZXNlcnZl
ZFtpXSkgewotICAgICAgICBvdXRwdXRCdWZmZXJSZXNlcnZlZFtpXSA9IHRydWU7Ci0gICAgICAg
IHJldHVybiBpOwotICAgICAgfQotICAgIH0KLSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiQWxsIG91dHB1dCBidWZmZXJzIHJlc2VydmVkISIpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShNZWRpYUZvcm1hdCBmb3JtYXQsIFN1cmZhY2Ugc3VyZmFj
ZSwgTWVkaWFDcnlwdG8gY3J5cHRvLCBpbnQgZmxhZ3MpIHsKLSAgICBpZiAoc3RhdGUgIT0gU3Rh
dGUuU1RPUFBFRF9VTklOSVRJQUxJWkVEKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJFeHBlY3RlZCBzdGF0ZSBTVE9QUEVEX1VOSU5JVElBTElaRUQgYnV0IHdhcyAi
ICsgc3RhdGUpOwotICAgIH0KLSAgICBzdGF0ZSA9IFN0YXRlLlNUT1BQRURfQ09ORklHVVJFRDsK
LSAgICBjb25maWd1cmVkRm9ybWF0ID0gZm9ybWF0OwotICAgIGNvbmZpZ3VyZWRGbGFncyA9IGZs
YWdzOwotCi0gICAgZmluYWwgaW50IHdpZHRoID0gY29uZmlndXJlZEZvcm1hdC5nZXRJbnRlZ2Vy
KE1lZGlhRm9ybWF0LktFWV9XSURUSCk7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IGNvbmZpZ3Vy
ZWRGb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSEVJR0hUKTsKLSAgICBmaW5hbCBp
bnQgeXV2U2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogMyAvIDI7Ci0gICAgZmluYWwgaW50IGlucHV0
QnVmZmVyU2l6ZTsKLSAgICBmaW5hbCBpbnQgb3V0cHV0QnVmZmVyU2l6ZTsKLQotICAgIGlmICgo
ZmxhZ3MgJiBNZWRpYUNvZGVjLkNPTkZJR1VSRV9GTEFHX0VOQ09ERSkgIT0gMCkgewotICAgICAg
ZmluYWwgaW50IGNvbG9yRm9ybWF0ID0gY29uZmlndXJlZEZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlh
Rm9ybWF0LktFWV9DT0xPUl9GT1JNQVQpOwotCi0gICAgICBpbnB1dEJ1ZmZlclNpemUgPSBjb2xv
ckZvcm1hdCA9PSBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRTdXJmYWNlID8gMCA6IHl1
dlNpemU7Ci0gICAgICBvdXRwdXRCdWZmZXJTaXplID0gTUFYX0VOQ09ERURfREFUQV9TSVpFX0JZ
VEVTOwotICAgIH0gZWxzZSB7Ci0gICAgICBpbnB1dEJ1ZmZlclNpemUgPSBNQVhfRU5DT0RFRF9E
QVRBX1NJWkVfQllURVM7Ci0gICAgICBvdXRwdXRCdWZmZXJTaXplID0gc3VyZmFjZSAhPSBudWxs
ID8gMCA6IHl1dlNpemU7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dEJ1
ZmZlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlucHV0QnVmZmVyc1tpXSA9IEJ5dGVCdWZmZXIu
YWxsb2NhdGVEaXJlY3QoaW5wdXRCdWZmZXJTaXplKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBvdXRwdXRCdWZmZXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBvdXRwdXRCdWZmZXJz
W2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChvdXRwdXRCdWZmZXJTaXplKTsKLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3RhcnQoKSB7Ci0gICAgaWYgKHN0
YXRlICE9IFN0YXRlLlNUT1BQRURfQ09ORklHVVJFRCkgewotICAgICAgdGhyb3cgbmV3IElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbigiRXhwZWN0ZWQgc3RhdGUgU1RPUFBFRF9DT05GSUdVUkVEIGJ1dCB3
YXMgIiArIHN0YXRlKTsKLSAgICB9Ci0gICAgc3RhdGUgPSBTdGF0ZS5FWEVDVVRJTkdfUlVOTklO
RzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKLSAgICBpZiAo
c3RhdGUuZ2V0UHJpbWFyeSgpICE9IFN0YXRlLlByaW1hcnkuRVhFQ1VUSU5HKSB7Ci0gICAgICB0
aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJFeHBlY3RlZCBzdGF0ZSBFWEVDVVRJTkcg
YnV0IHdhcyAiICsgc3RhdGUpOwotICAgIH0KLSAgICBzdGF0ZSA9IFN0YXRlLkVYRUNVVElOR19G
TFVTSEVEOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAg
aWYgKHN0YXRlLmdldFByaW1hcnkoKSAhPSBTdGF0ZS5QcmltYXJ5LkVYRUNVVElORykgewotICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRXhwZWN0ZWQgc3RhdGUgRVhFQ1VU
SU5HIGJ1dCB3YXMgIiArIHN0YXRlKTsKLSAgICB9Ci0gICAgc3RhdGUgPSBTdGF0ZS5TVE9QUEVE
X1VOSU5JVElBTElaRUQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFz
ZSgpIHsKLSAgICBzdGF0ZSA9IFN0YXRlLlJFTEVBU0VEOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBpbnQgZGVxdWV1ZUlucHV0QnVmZmVyKGxvbmcgdGltZW91dFVzKSB7Ci0gICAgaWYg
KHN0YXRlICE9IFN0YXRlLkVYRUNVVElOR19GTFVTSEVEICYmIHN0YXRlICE9IFN0YXRlLkVYRUNV
VElOR19SVU5OSU5HKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAot
ICAgICAgICAgICJFeHBlY3RlZCBzdGF0ZSBFWEVDVVRJTkdfRkxVU0hFRCBvciBFWEVDVVRJTkdf
UlVOTklORyBidXQgd2FzICIgKyBzdGF0ZSk7Ci0gICAgfQotICAgIHN0YXRlID0gU3RhdGUuRVhF
Q1VUSU5HX1JVTk5JTkc7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9JTlBVVF9CVUZG
RVJTOyBpKyspIHsKLSAgICAgIGlmICghaW5wdXRCdWZmZXJSZXNlcnZlZFtpXSkgewotICAgICAg
ICBpbnB1dEJ1ZmZlclJlc2VydmVkW2ldID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBNZWRpYUNvZGVjLklORk9fVFJZX0FHQUlOX0xBVEVSOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHF1ZXVlSW5wdXRCdWZmZXIoCi0gICAg
ICBpbnQgaW5kZXgsIGludCBvZmZzZXQsIGludCBzaXplLCBsb25nIHByZXNlbnRhdGlvblRpbWVV
cywgaW50IGZsYWdzKSB7Ci0gICAgaWYgKHN0YXRlLmdldFByaW1hcnkoKSAhPSBTdGF0ZS5Qcmlt
YXJ5LkVYRUNVVElORykgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigi
RXhwZWN0ZWQgc3RhdGUgRVhFQ1VUSU5HIGJ1dCB3YXMgIiArIHN0YXRlKTsKLSAgICB9Ci0gICAg
aWYgKGZsYWdzICE9IDApIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbigKLSAgICAgICAgICAiRmxhZ3MgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBGYWtlTWVk
aWFDb2RlY1dyYXBwZXIuIik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBp
bnQgZGVxdWV1ZU91dHB1dEJ1ZmZlcihNZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbywgbG9uZyB0
aW1lb3V0VXMpIHsKLSAgICBpZiAoc3RhdGUuZ2V0UHJpbWFyeSgpICE9IFN0YXRlLlByaW1hcnku
RVhFQ1VUSU5HKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJFeHBl
Y3RlZCBzdGF0ZSBFWEVDVVRJTkcgYnV0IHdhcyAiICsgc3RhdGUpOwotICAgIH0KLQotICAgIGlm
IChxdWV1ZWRPdXRwdXRCdWZmZXJzLmlzRW1wdHkoKSkgewotICAgICAgcmV0dXJuIE1lZGlhQ29k
ZWMuSU5GT19UUllfQUdBSU5fTEFURVI7Ci0gICAgfQotICAgIFF1ZXVlZE91dHB1dEJ1ZmZlcklu
Zm8gb3V0cHV0QnVmZmVySW5mbyA9IHF1ZXVlZE91dHB1dEJ1ZmZlcnMucmVtb3ZlKC8qIGluZGV4
PSAqLyAwKTsKLSAgICBpbmZvLnNldChvdXRwdXRCdWZmZXJJbmZvLmdldE9mZnNldCgpLCBvdXRw
dXRCdWZmZXJJbmZvLmdldFNpemUoKSwKLSAgICAgICAgb3V0cHV0QnVmZmVySW5mby5nZXRQcmVz
ZW50YXRpb25UaW1lVXMoKSwgb3V0cHV0QnVmZmVySW5mby5nZXRGbGFncygpKTsKLSAgICByZXR1
cm4gb3V0cHV0QnVmZmVySW5mby5nZXRJbmRleCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHJlbGVhc2VPdXRwdXRCdWZmZXIoaW50IGluZGV4LCBib29sZWFuIHJlbmRlcikg
ewotICAgIGlmIChzdGF0ZS5nZXRQcmltYXJ5KCkgIT0gU3RhdGUuUHJpbWFyeS5FWEVDVVRJTkcp
IHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkV4cGVjdGVkIHN0YXRl
IEVYRUNVVElORyBidXQgd2FzICIgKyBzdGF0ZSk7Ci0gICAgfQotICAgIGlmICghb3V0cHV0QnVm
ZmVyUmVzZXJ2ZWRbaW5kZXhdKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi
UmVsZWFzZWQgb3V0cHV0IGJ1ZmZlciB3YXMgbm90IGluIHVzZS4iKTsKLSAgICB9Ci0gICAgb3V0
cHV0QnVmZmVyUmVzZXJ2ZWRbaW5kZXhdID0gZmFsc2U7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIEJ5dGVCdWZmZXJbXSBnZXRJbnB1dEJ1ZmZlcnMoKSB7Ci0gICAgcmV0dXJuIGlucHV0
QnVmZmVyczsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQnl0ZUJ1ZmZlcltdIGdldE91
dHB1dEJ1ZmZlcnMoKSB7Ci0gICAgcmV0dXJuIG91dHB1dEJ1ZmZlcnM7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIE1lZGlhRm9ybWF0IGdldE91dHB1dEZvcm1hdCgpIHsKLSAgICByZXR1
cm4gb3V0cHV0Rm9ybWF0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdXJmYWNlIGNy
ZWF0ZUlucHV0U3VyZmFjZSgpIHsKLSAgICByZXR1cm4gbmV3IFN1cmZhY2UobmV3IFN1cmZhY2VU
ZXh0dXJlKC8qIHRleE5hbWU9ICovIDApKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzZXRQYXJhbWV0ZXJzKEJ1bmRsZSBwYXJhbXMpIHt9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9HbEdlbmVyaWNEcmF3ZXJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0
Yy9HbEdlbmVyaWNEcmF3ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFmOTJiOWM0MjZiOTcxZTNjMjUyNmY4YWI0OGExYzI2NmFiYWFmMTMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvR2xHZW5l
cmljRHJhd2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTggVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcu
anVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9j
a2l0by5tb2NrOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnRpbWVzOwotaW1w
b3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeTsKLWltcG9ydCBzdGF0aWMgb3Jn
Lm1vY2tpdG8uTW9ja2l0by52ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcu
Y2hyb21pdW0udGVzdGluZy5sb2NhbC5Mb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lcjsKLWltcG9y
dCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcu
anVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3Jn
LnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotaW1wb3J0IG9yZy53ZWJydGMuR2xTaGFk
ZXI7Ci0KLUBSdW5XaXRoKExvY2FsUm9ib2xlY3RyaWNUZXN0UnVubmVyLmNsYXNzKQotQENvbmZp
ZyhtYW5pZmVzdCA9IENvbmZpZy5OT05FKQotcHVibGljIGNsYXNzIEdsR2VuZXJpY0RyYXdlclRl
c3QgewotICAvLyBTaW1wbGVzdCBwb3NzaWJsZSB2YWxpZCBnZW5lcmljIGZyYWdtZW50IHNoYWRl
ci4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1NIQURFUiA9ICJ2b2lk
IG1haW4oKSB7XG4iCi0gICAgICArICIgIGdsX0ZyYWdDb2xvciA9IHNhbXBsZSh0Yyk7XG4iCi0g
ICAgICArICJ9XG4iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVYVFVSRV9JRCA9IDM7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0W10gVEVYX01BVFJJWCA9Ci0gICAgICBuZXcg
ZmxvYXRbXSB7MSwgMiwgMywgNCwgLTEsIC0yLCAtMywgLTQsIDAsIDAsIDEsIDAsIDAsIDAsIDAs
IDF9OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlJBTUVfV0lEVEggPSA2NDA7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBGUkFNRV9IRUlHSFQgPSA0ODA7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBWSUVXUE9SVF9YID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IFZJRVdQT1JUX1kgPSA1OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklFV1BPUlRfV0lE
VEggPSA1MDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSUVXUE9SVF9IRUlHSFQgPSA1
MDA7Ci0KLSAgLy8gUmVwbGFjZSBPcGVuR0xFUyBHbFNoYWRlciBkZXBlbmRlbmN5IHdpdGggYSBt
b2NrLgotICBwcml2YXRlIGNsYXNzIEdsR2VuZXJpY0RyYXdlckZvclRlc3QgZXh0ZW5kcyBHbEdl
bmVyaWNEcmF3ZXIgewotICAgIHB1YmxpYyBHbEdlbmVyaWNEcmF3ZXJGb3JUZXN0KFN0cmluZyBn
ZW5lcmljRnJhZ21lbnRTb3VyY2UsIFNoYWRlckNhbGxiYWNrcyBzaGFkZXJDYWxsYmFja3MpIHsK
LSAgICAgIHN1cGVyKGdlbmVyaWNGcmFnbWVudFNvdXJjZSwgc2hhZGVyQ2FsbGJhY2tzKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBHbFNoYWRlciBjcmVhdGVTaGFkZXIoU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlKSB7Ci0gICAgICByZXR1cm4gbW9ja2VkU2hhZGVyOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgR2xTaGFkZXIgbW9ja2VkU2hhZGVyOwotICBwcml2YXRlIEdsR2VuZXJpY0Ry
YXdlciBnbEdlbmVyaWNEcmF3ZXI7Ci0gIHByaXZhdGUgR2xHZW5lcmljRHJhd2VyLlNoYWRlckNh
bGxiYWNrcyBtb2NrZWRDYWxsYmFja3M7Ci0KLSAgQEJlZm9yZQotICBwdWJsaWMgdm9pZCBzZXRV
cCgpIHsKLSAgICBtb2NrZWRTaGFkZXIgPSBtb2NrKEdsU2hhZGVyLmNsYXNzKTsKLSAgICBtb2Nr
ZWRDYWxsYmFja3MgPSBtb2NrKEdsR2VuZXJpY0RyYXdlci5TaGFkZXJDYWxsYmFja3MuY2xhc3Mp
OwotICAgIGdsR2VuZXJpY0RyYXdlciA9IG5ldyBHbEdlbmVyaWNEcmF3ZXJGb3JUZXN0KEZSQUdN
RU5UX1NIQURFUiwgbW9ja2VkQ2FsbGJhY2tzKTsKLSAgfQotCi0gIEBBZnRlcgotICBwdWJsaWMg
dm9pZCB0ZWFyRG93bigpIHsKLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMobW9ja2VkQ2Fs
bGJhY2tzKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPZXNGcmFnbWVudFNo
YWRlcigpIHsKLSAgICBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRPZXNGcmFnbWVudFNoYWRlciA9ICIj
ZXh0ZW5zaW9uIEdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgOiByZXF1aXJlXG4iCi0gICAgICAg
ICsgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgotICAgICAgICArICJ2YXJ5aW5nIHZlYzIg
dGM7XG4iCi0gICAgICAgICsgInVuaWZvcm0gc2FtcGxlckV4dGVybmFsT0VTIHRleDtcbiIKLSAg
ICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgICArICIgIGdsX0ZyYWdDb2xvciA9IHRl
eHR1cmUyRCh0ZXgsIHRjKTtcbiIKLSAgICAgICAgKyAifVxuIjsKLSAgICBmaW5hbCBTdHJpbmcg
b2VzRnJhZ21lbnRTaGFkZXIgPQotICAgICAgICBHbEdlbmVyaWNEcmF3ZXIuY3JlYXRlRnJhZ21l
bnRTaGFkZXJTdHJpbmcoRlJBR01FTlRfU0hBREVSLCBHbEdlbmVyaWNEcmF3ZXIuU2hhZGVyVHlw
ZS5PRVMpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZE9lc0ZyYWdtZW50U2hhZGVyLCBvZXNG
cmFnbWVudFNoYWRlcik7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmdiRnJh
Z21lbnRTaGFkZXIoKSB7Ci0gICAgZmluYWwgU3RyaW5nIGV4cGVjdGVkUmdiRnJhZ21lbnRTaGFk
ZXIgPSAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICAgICsgInZhcnlpbmcgdmVj
MiB0YztcbiIKLSAgICAgICAgKyAidW5pZm9ybSBzYW1wbGVyMkQgdGV4O1xuIgotICAgICAgICAr
ICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJE
KHRleCwgdGMpO1xuIgotICAgICAgICArICJ9XG4iOwotICAgIGZpbmFsIFN0cmluZyByZ2JGcmFn
bWVudFNoYWRlciA9Ci0gICAgICAgIEdsR2VuZXJpY0RyYXdlci5jcmVhdGVGcmFnbWVudFNoYWRl
clN0cmluZyhGUkFHTUVOVF9TSEFERVIsIEdsR2VuZXJpY0RyYXdlci5TaGFkZXJUeXBlLlJHQik7
Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUmdiRnJhZ21lbnRTaGFkZXIsIHJnYkZyYWdtZW50
U2hhZGVyKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RZdXZGcmFnbWVudFNo
YWRlcigpIHsKLSAgICBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRZdXZGcmFnbWVudFNoYWRlciA9ICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICAgKyAidmFyeWluZyB2ZWMyIHRjO1xu
IgotICAgICAgICArICJ1bmlmb3JtIHNhbXBsZXIyRCB5X3RleDtcbiIKLSAgICAgICAgKyAidW5p
Zm9ybSBzYW1wbGVyMkQgdV90ZXg7XG4iCi0gICAgICAgICsgInVuaWZvcm0gc2FtcGxlcjJEIHZf
dGV4O1xuIgotICAgICAgICArICJ2ZWM0IHNhbXBsZSh2ZWMyIHApIHtcbiIKLSAgICAgICAgKyAi
ICBmbG9hdCB5ID0gdGV4dHVyZTJEKHlfdGV4LCBwKS5yICogMS4xNjQzODtcbiIKLSAgICAgICAg
KyAiICBmbG9hdCB1ID0gdGV4dHVyZTJEKHVfdGV4LCBwKS5yO1xuIgotICAgICAgICArICIgIGZs
b2F0IHYgPSB0ZXh0dXJlMkQodl90ZXgsIHApLnI7XG4iCi0gICAgICAgICsgIiAgcmV0dXJuIHZl
YzQoeSArIDEuNTk2MDMgKiB2IC0gMC44NzQyMDIsXG4iCi0gICAgICAgICsgIiAgICB5IC0gMC4z
OTE3NjIgKiB1IC0gMC44MTI5NjggKiB2ICsgMC41MzE2NjgsXG4iCi0gICAgICAgICsgIiAgICB5
ICsgMi4wMTcyMyAqIHUgLSAxLjA4NTYzLCAxKTtcbiIKLSAgICAgICAgKyAifVxuIgotICAgICAg
ICArICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yID0gc2FtcGxl
KHRjKTtcbiIKLSAgICAgICAgKyAifVxuIjsKLSAgICBmaW5hbCBTdHJpbmcgeXV2RnJhZ21lbnRT
aGFkZXIgPQotICAgICAgICBHbEdlbmVyaWNEcmF3ZXIuY3JlYXRlRnJhZ21lbnRTaGFkZXJTdHJp
bmcoRlJBR01FTlRfU0hBREVSLCBHbEdlbmVyaWNEcmF3ZXIuU2hhZGVyVHlwZS5ZVVYpOwotICAg
IGFzc2VydEVxdWFscyhleHBlY3RlZFl1dkZyYWdtZW50U2hhZGVyLCB5dXZGcmFnbWVudFNoYWRl
cik7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2hhZGVyQ2FsbGJhY2tzT25l
UmdiRnJhbWUoKSB7Ci0gICAgZ2xHZW5lcmljRHJhd2VyLmRyYXdSZ2IoVEVYVFVSRV9JRCwgVEVY
X01BVFJJWCwgRlJBTUVfV0lEVEgsIEZSQU1FX0hFSUdIVCwgVklFV1BPUlRfWCwKLSAgICAgICAg
VklFV1BPUlRfWSwgVklFV1BPUlRfV0lEVEgsIFZJRVdQT1JUX0hFSUdIVCk7Ci0KLSAgICB2ZXJp
ZnkobW9ja2VkQ2FsbGJhY2tzKS5vbk5ld1NoYWRlcihtb2NrZWRTaGFkZXIpOwotICAgIHZlcmlm
eShtb2NrZWRDYWxsYmFja3MpCi0gICAgICAgIC5vblByZXBhcmVTaGFkZXIoCi0gICAgICAgICAg
ICBtb2NrZWRTaGFkZXIsIFRFWF9NQVRSSVgsIEZSQU1FX1dJRFRILCBGUkFNRV9IRUlHSFQsIFZJ
RVdQT1JUX1dJRFRILCBWSUVXUE9SVF9IRUlHSFQpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFNoYWRlckNhbGxiYWNrc1R3b1JnYkZyYW1lcygpIHsKLSAgICBnbEdlbmVyaWNE
cmF3ZXIuZHJhd1JnYihURVhUVVJFX0lELCBURVhfTUFUUklYLCBGUkFNRV9XSURUSCwgRlJBTUVf
SEVJR0hULCBWSUVXUE9SVF9YLAotICAgICAgICBWSUVXUE9SVF9ZLCBWSUVXUE9SVF9XSURUSCwg
VklFV1BPUlRfSEVJR0hUKTsKLSAgICBnbEdlbmVyaWNEcmF3ZXIuZHJhd1JnYihURVhUVVJFX0lE
LCBURVhfTUFUUklYLCBGUkFNRV9XSURUSCwgRlJBTUVfSEVJR0hULCBWSUVXUE9SVF9YLAotICAg
ICAgICBWSUVXUE9SVF9ZLCBWSUVXUE9SVF9XSURUSCwgVklFV1BPUlRfSEVJR0hUKTsKLQotICAg
IC8vIEV4cGVjdCBvbmx5IG9uZSBzaGFkZXIgdG8gYmUgY3JlYXRlZCwgYnV0IHR3byBmcmFtZXMg
dG8gYmUgZHJhd24uCi0gICAgdmVyaWZ5KG1vY2tlZENhbGxiYWNrcywgdGltZXMoMSkpLm9uTmV3
U2hhZGVyKG1vY2tlZFNoYWRlcik7Ci0gICAgdmVyaWZ5KG1vY2tlZENhbGxiYWNrcywgdGltZXMo
MikpCi0gICAgICAgIC5vblByZXBhcmVTaGFkZXIoCi0gICAgICAgICAgICBtb2NrZWRTaGFkZXIs
IFRFWF9NQVRSSVgsIEZSQU1FX1dJRFRILCBGUkFNRV9IRUlHSFQsIFZJRVdQT1JUX1dJRFRILCBW
SUVXUE9SVF9IRUlHSFQpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNoYWRl
ckNhbGxiYWNrc0NoYW5naW5nU2hhZGVyVHlwZSgpIHsKLSAgICBnbEdlbmVyaWNEcmF3ZXIuZHJh
d1JnYihURVhUVVJFX0lELCBURVhfTUFUUklYLCBGUkFNRV9XSURUSCwgRlJBTUVfSEVJR0hULCBW
SUVXUE9SVF9YLAotICAgICAgICBWSUVXUE9SVF9ZLCBWSUVXUE9SVF9XSURUSCwgVklFV1BPUlRf
SEVJR0hUKTsKLSAgICBnbEdlbmVyaWNEcmF3ZXIuZHJhd09lcyhURVhUVVJFX0lELCBURVhfTUFU
UklYLCBGUkFNRV9XSURUSCwgRlJBTUVfSEVJR0hULCBWSUVXUE9SVF9YLAotICAgICAgICBWSUVX
UE9SVF9ZLCBWSUVXUE9SVF9XSURUSCwgVklFV1BPUlRfSEVJR0hUKTsKLQotICAgIC8vIEV4cGVj
dCB0d28gc2hhZGVycyB0byBiZSBjcmVhdGVkLCBhbmQgdHdvIGZyYW1lcyB0byBiZSBkcmF3bi4K
LSAgICB2ZXJpZnkobW9ja2VkQ2FsbGJhY2tzLCB0aW1lcygyKSkub25OZXdTaGFkZXIobW9ja2Vk
U2hhZGVyKTsKLSAgICB2ZXJpZnkobW9ja2VkQ2FsbGJhY2tzLCB0aW1lcygyKSkKLSAgICAgICAg
Lm9uUHJlcGFyZVNoYWRlcigKLSAgICAgICAgICAgIG1vY2tlZFNoYWRlciwgVEVYX01BVFJJWCwg
RlJBTUVfV0lEVEgsIEZSQU1FX0hFSUdIVCwgVklFV1BPUlRfV0lEVEgsIFZJRVdQT1JUX0hFSUdI
VCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3Nkay9hbmRyb2lkL3Rlc3RzL3NyYy9vcmcvd2VicnRjL0hhcmR3YXJlVmlkZW9F
bmNvZGVyVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvSGFyZHdhcmVWaWRlb0VuY29kZXJU
ZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlY2E4OWY1NzVkNGQ1ODEz
ZjJiNzA3OGYxYzcxMjUwMzkxMTMzYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvSGFyZHdhcmVWaWRlb0VuY29kZXJUZXN0
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxOCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuY29tbW9u
LnRydXRoLlRydXRoLmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3Vt
ZW50TWF0Y2hlcnMuYW55OwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNo
ZXJzLmFueUludDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5h
bnlMb25nOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnNweTsKLWltcG9ydCBz
dGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnk7Ci0KLWltcG9ydCBhbmRyb2lkLm1lZGlh
Lk1lZGlhQ29kZWM7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLk1lZGlhRm9ybWF0OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7
Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9y
dCBvcmcuY2hyb21pdW0udGVzdGluZy5sb2NhbC5Mb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lcjsK
LWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0
IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcubW9ja2l0by5Bcmd1bWVudENh
cHRvcjsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tp
dG9Bbm5vdGF0aW9uczsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuYW5ub3RhdGlvbi5Db25maWc7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FbmNvZGVkSW1hZ2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FbmNv
ZGVkSW1hZ2UuRnJhbWVUeXBlOwotaW1wb3J0IG9yZy53ZWJydGMuRmFrZU1lZGlhQ29kZWNXcmFw
cGVyLlN0YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9Db2RlY1N0YXR1czsKLWltcG9ydCBv
cmcud2VicnRjLlZpZGVvRW5jb2RlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvRW5jb2Rlci5D
b2RlY1NwZWNpZmljSW5mbzsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvRW5jb2Rlci5FbmNvZGVJ
bmZvOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9FbmNvZGVyLlNldHRpbmdzOwotaW1wb3J0IG9y
Zy53ZWJydGMuVmlkZW9GcmFtZTsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvRnJhbWUuQnVmZmVy
OwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9GcmFtZS5JNDIwQnVmZmVyOwotCi1AUnVuV2l0aChM
b2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBDb25maWcobWFuaWZlc3QgPSBDb25m
aWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBIYXJkd2FyZVZpZGVvRW5jb2RlclRlc3QgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBWaWRlb0VuY29kZXIuU2V0dGluZ3MgVEVTVF9FTkNPREVSX1NFVFRJ
TkdTID0gbmV3IFNldHRpbmdzKAotICAgICAgLyogbnVtYmVyT2ZDb3Jlcz0gKi8gMSwKLSAgICAg
IC8qIHdpZHRoPSAqLyA2NDAsCi0gICAgICAvKiBoZWlnaHQ9ICovIDQ4MCwKLSAgICAgIC8qIHN0
YXJ0Qml0cmF0ZT0gKi8gMTAwMDAsCi0gICAgICAvKiBtYXhGcmFtZXJhdGU9ICovIDMwLAotICAg
ICAgLyogbnVtYmVyT2ZTaW11bGNhc3RTdHJlYW1zPSAqLyAxLAotICAgICAgLyogYXV0b21hdGlj
UmVzaXplT249ICovIHRydWUsCi0gICAgICAvKiBjYXBhYmlsaXRpZXM9ICovIG5ldyBWaWRlb0Vu
Y29kZXIuQ2FwYWJpbGl0aWVzKGZhbHNlIC8qIGxvc3NOb3RpZmljYXRpb24gKi8pKTsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBQT0xMX0RFTEFZX01TID0gMTA7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGxvbmcgREVMSVZFUl9FTkNPREVEX0lNQUdFX0RFTEFZX01TID0gMTA7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEVuY29kZXIgZXh0ZW5kcyBIYXJkd2FyZVZpZGVvRW5j
b2RlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgZGVsaXZlckVuY29kZWRJbWFnZUxvY2sg
PSBuZXcgT2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGRlbGl2ZXJFbmNvZGVkSW1hZ2VE
b25lID0gdHJ1ZTsKLQotICAgIFRlc3RFbmNvZGVyKE1lZGlhQ29kZWNXcmFwcGVyRmFjdG9yeSBt
ZWRpYUNvZGVjV3JhcHBlckZhY3RvcnksIFN0cmluZyBjb2RlY05hbWUsCi0gICAgICAgIFZpZGVv
Q29kZWNNaW1lVHlwZSBjb2RlY1R5cGUsIEludGVnZXIgc3VyZmFjZUNvbG9yRm9ybWF0LCBJbnRl
Z2VyIHl1dkNvbG9yRm9ybWF0LAotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcywg
aW50IGtleUZyYW1lSW50ZXJ2YWxTZWMsIGludCBmb3JjZUtleUZyYW1lSW50ZXJ2YWxNcywKLSAg
ICAgICAgQml0cmF0ZUFkanVzdGVyIGJpdHJhdGVBZGp1c3RlciwgRWdsQmFzZTE0LkNvbnRleHQg
c2hhcmVkQ29udGV4dCkgewotICAgICAgc3VwZXIobWVkaWFDb2RlY1dyYXBwZXJGYWN0b3J5LCBj
b2RlY05hbWUsIGNvZGVjVHlwZSwgc3VyZmFjZUNvbG9yRm9ybWF0LCB5dXZDb2xvckZvcm1hdCwK
LSAgICAgICAgICBwYXJhbXMsIGtleUZyYW1lSW50ZXJ2YWxTZWMsIGZvcmNlS2V5RnJhbWVJbnRl
cnZhbE1zLCBiaXRyYXRlQWRqdXN0ZXIsIHNoYXJlZENvbnRleHQpOwotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIHdhaXREZWxpdmVyRW5jb2RlZEltYWdlKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZGVsaXZlckVuY29kZWRJbWFnZUxvY2spIHsK
LSAgICAgICAgZGVsaXZlckVuY29kZWRJbWFnZURvbmUgPSBmYWxzZTsKLSAgICAgICAgZGVsaXZl
ckVuY29kZWRJbWFnZUxvY2subm90aWZ5QWxsKCk7Ci0gICAgICAgIHdoaWxlICghZGVsaXZlckVu
Y29kZWRJbWFnZURvbmUpIHsKLSAgICAgICAgICBkZWxpdmVyRW5jb2RlZEltYWdlTG9jay53YWl0
KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygi
V2FpdE5vdEluTG9vcCIpIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnNpZGUgYSBsb29wLgot
ICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGRlbGl2ZXJFbmNvZGVkSW1hZ2UoKSB7
Ci0gICAgICBzeW5jaHJvbml6ZWQgKGRlbGl2ZXJFbmNvZGVkSW1hZ2VMb2NrKSB7Ci0gICAgICAg
IGlmIChkZWxpdmVyRW5jb2RlZEltYWdlRG9uZSkgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICBkZWxpdmVyRW5jb2RlZEltYWdlTG9jay53YWl0KERFTElWRVJfRU5DT0RFRF9JTUFHRV9E
RUxBWV9NUyk7Ci0gICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewot
ICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5pbnRlcnJ1cHQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlbGl2ZXJF
bmNvZGVkSW1hZ2VEb25lKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHN1cGVyLmRlbGl2ZXJFbmNvZGVkSW1hZ2UoKTsKLSAgICAgICAgZGVsaXZlckVuY29kZWRJbWFn
ZURvbmUgPSB0cnVlOwotICAgICAgICBkZWxpdmVyRW5jb2RlZEltYWdlTG9jay5ub3RpZnlBbGwo
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBm
aWxsSW5wdXRCdWZmZXIoQnl0ZUJ1ZmZlciBidWZmZXIsIEJ1ZmZlciB2aWRlb0ZyYW1lQnVmZmVy
KSB7Ci0gICAgICBJNDIwQnVmZmVyIGk0MjBCdWZmZXIgPSB2aWRlb0ZyYW1lQnVmZmVyLnRvSTQy
MCgpOwotICAgICAgYnVmZmVyLnB1dChpNDIwQnVmZmVyLmdldERhdGFZKCkpOwotICAgICAgYnVm
ZmVyLnB1dChpNDIwQnVmZmVyLmdldERhdGFVKCkpOwotICAgICAgYnVmZmVyLnB1dChpNDIwQnVm
ZmVyLmdldERhdGFWKCkpOwotICAgICAgYnVmZmVyLmZsaXAoKTsKLSAgICAgIGk0MjBCdWZmZXIu
cmVsZWFzZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVGVzdEVuY29kZXJCdWls
ZGVyIHsKLSAgICBwcml2YXRlIFZpZGVvQ29kZWNNaW1lVHlwZSBjb2RlY1R5cGUgPSBWaWRlb0Nv
ZGVjTWltZVR5cGUuVlA4OwotCi0gICAgcHVibGljIFRlc3RFbmNvZGVyQnVpbGRlciBzZXRDb2Rl
Y1R5cGUoVmlkZW9Db2RlY01pbWVUeXBlIGNvZGVjVHlwZSkgewotICAgICAgdGhpcy5jb2RlY1R5
cGUgPSBjb2RlY1R5cGU7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
VGVzdEVuY29kZXIgYnVpbGQoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RFbmNvZGVyKChTdHJp
bmcgbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGZha2VNZWRpYUNv
ZGVjV3JhcHBlciwKLSAgICAgICAgICAib3JnLndlYnJ0Yy50ZXN0ZW5jb2RlciIsIGNvZGVjVHlw
ZSwKLSAgICAgICAgICAvKiBzdXJmYWNlQ29sb3JGb3JtYXQ9ICovIG51bGwsCi0gICAgICAgICAg
LyogeXV2Q29sb3JGb3JtYXQ9ICovIE1lZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzLkNP
TE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwKLSAgICAgICAgICAvKiBwYXJhbXM9ICovIG5ldyBIYXNo
TWFwPD4oKSwKLSAgICAgICAgICAvKiBrZXlGcmFtZUludGVydmFsU2VjPSAqLyAwLAotICAgICAg
ICAgIC8qIGZvcmNlS2V5RnJhbWVJbnRlcnZhbE1zPSAqLyAwLAotICAgICAgICAgIC8qIGJpdHJh
dGVBZGp1c3Rlcj0gKi8gbmV3IEJhc2VCaXRyYXRlQWRqdXN0ZXIoKSwKLSAgICAgICAgICAvKiBz
aGFyZWRDb250ZXh0PSAqLyBudWxsKTsKLSAgICB9Ci0gIH0KLQotICBATW9jayBWaWRlb0VuY29k
ZXIuQ2FsbGJhY2sgbW9ja0VuY29kZXJDYWxsYmFjazsKLSAgcHJpdmF0ZSBGYWtlTWVkaWFDb2Rl
Y1dyYXBwZXIgZmFrZU1lZGlhQ29kZWNXcmFwcGVyOwotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZv
aWQgc2V0VXAoKSB7Ci0gICAgTW9ja2l0b0Fubm90YXRpb25zLmluaXRNb2Nrcyh0aGlzKTsKLSAg
ICBNZWRpYUZvcm1hdCBvdXRwdXRGb3JtYXQgPSBuZXcgTWVkaWFGb3JtYXQoKTsKLSAgICAvLyBU
T0RPKHNha2FsKTogQWRkIG1vcmUgZGV0YWlscyB0byBvdXRwdXQgZm9ybWF0IGFzIG5lZWRlZC4K
LSAgICBmYWtlTWVkaWFDb2RlY1dyYXBwZXIgPSBzcHkobmV3IEZha2VNZWRpYUNvZGVjV3JhcHBl
cihvdXRwdXRGb3JtYXQpKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJbml0
KCkgewotICAgIC8vIFNldC11cC4KLSAgICBIYXJkd2FyZVZpZGVvRW5jb2RlciBlbmNvZGVyID0K
LSAgICAgICAgbmV3IFRlc3RFbmNvZGVyQnVpbGRlcigpLnNldENvZGVjVHlwZShWaWRlb0NvZGVj
TWltZVR5cGUuVlA4KS5idWlsZCgpOwotCi0gICAgLy8gVGVzdC4KLSAgICBhc3NlcnRUaGF0KGVu
Y29kZXIuaW5pdEVuY29kZShURVNUX0VOQ09ERVJfU0VUVElOR1MsIG1vY2tFbmNvZGVyQ2FsbGJh
Y2spKQotICAgICAgICAuaXNFcXVhbFRvKFZpZGVvQ29kZWNTdGF0dXMuT0spOwotCi0gICAgLy8g
VmVyaWZ5LgotICAgIGFzc2VydFRoYXQoZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmdldFN0YXRlKCkp
LmlzRXF1YWxUbyhTdGF0ZS5FWEVDVVRJTkdfUlVOTklORyk7Ci0KLSAgICBNZWRpYUZvcm1hdCBt
ZWRpYUZvcm1hdCA9IGZha2VNZWRpYUNvZGVjV3JhcHBlci5nZXRDb25maWd1cmVkRm9ybWF0KCk7
Ci0gICAgYXNzZXJ0VGhhdChtZWRpYUZvcm1hdCkuaXNOb3ROdWxsKCk7Ci0gICAgYXNzZXJ0VGhh
dChtZWRpYUZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9XSURUSCkpCi0gICAgICAg
IC5pc0VxdWFsVG8oVEVTVF9FTkNPREVSX1NFVFRJTkdTLndpZHRoKTsKLSAgICBhc3NlcnRUaGF0
KG1lZGlhRm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0hFSUdIVCkpCi0gICAgICAg
IC5pc0VxdWFsVG8oVEVTVF9FTkNPREVSX1NFVFRJTkdTLmhlaWdodCk7Ci0gICAgYXNzZXJ0VGhh
dChtZWRpYUZvcm1hdC5nZXRTdHJpbmcoTWVkaWFGb3JtYXQuS0VZX01JTUUpKQotICAgICAgICAu
aXNFcXVhbFRvKFZpZGVvQ29kZWNNaW1lVHlwZS5WUDgubWltZVR5cGUoKSk7Ci0KLSAgICBhc3Nl
cnRUaGF0KGZha2VNZWRpYUNvZGVjV3JhcHBlci5nZXRDb25maWd1cmVkRmxhZ3MoKSkKLSAgICAg
ICAgLmlzRXF1YWxUbyhNZWRpYUNvZGVjLkNPTkZJR1VSRV9GTEFHX0VOQ09ERSk7Ci0gIH0KLQot
ICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RW5jb2RlQnl0ZUJ1ZmZlcigpIHsKLSAgICAvLyBT
ZXQtdXAuCi0gICAgSGFyZHdhcmVWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5ldyBUZXN0RW5jb2Rl
ckJ1aWxkZXIoKS5idWlsZCgpOwotICAgIGVuY29kZXIuaW5pdEVuY29kZShURVNUX0VOQ09ERVJf
U0VUVElOR1MsIG1vY2tFbmNvZGVyQ2FsbGJhY2spOwotCi0gICAgLy8gVGVzdC4KLSAgICBieXRl
W10gaTQyMCA9IENvZGVjVGVzdEhlbHBlci5nZW5lcmF0ZVJhbmRvbURhdGEoCi0gICAgICAgIFRF
U1RfRU5DT0RFUl9TRVRUSU5HUy53aWR0aCAqIFRFU1RfRU5DT0RFUl9TRVRUSU5HUy5oZWlnaHQg
KiAzIC8gMik7Ci0gICAgZmluYWwgVmlkZW9GcmFtZS5JNDIwQnVmZmVyIHRlc3RCdWZmZXIgPQot
ICAgICAgICBDb2RlY1Rlc3RIZWxwZXIud3JhcEk0MjAoVEVTVF9FTkNPREVSX1NFVFRJTkdTLndp
ZHRoLCBURVNUX0VOQ09ERVJfU0VUVElOR1MuaGVpZ2h0LCBpNDIwKTsKLSAgICBmaW5hbCBWaWRl
b0ZyYW1lIHRlc3RGcmFtZSA9Ci0gICAgICAgIG5ldyBWaWRlb0ZyYW1lKHRlc3RCdWZmZXIsIC8q
IHJvdGF0aW9uPSAqLyAwLCAvKiB0aW1lc3RhbXBOcz0gKi8gMCk7Ci0gICAgYXNzZXJ0VGhhdChl
bmNvZGVyLmVuY29kZSh0ZXN0RnJhbWUsIG5ldyBFbmNvZGVJbmZvKG5ldyBGcmFtZVR5cGVbXSB7
RnJhbWVUeXBlLlZpZGVvRnJhbWVLZXl9KSkpCi0gICAgICAgIC5pc0VxdWFsVG8oVmlkZW9Db2Rl
Y1N0YXR1cy5PSyk7Ci0KLSAgICAvLyBWZXJpZnkuCi0gICAgQXJndW1lbnRDYXB0b3I8SW50ZWdl
cj4gaW5kZXhDYXB0b3IgPSBBcmd1bWVudENhcHRvci5mb3JDbGFzcyhJbnRlZ2VyLmNsYXNzKTsK
LSAgICBBcmd1bWVudENhcHRvcjxJbnRlZ2VyPiBvZmZzZXRDYXB0b3IgPSBBcmd1bWVudENhcHRv
ci5mb3JDbGFzcyhJbnRlZ2VyLmNsYXNzKTsKLSAgICBBcmd1bWVudENhcHRvcjxJbnRlZ2VyPiBz
aXplQ2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoSW50ZWdlci5jbGFzcyk7Ci0gICAg
dmVyaWZ5KGZha2VNZWRpYUNvZGVjV3JhcHBlcikKLSAgICAgICAgLnF1ZXVlSW5wdXRCdWZmZXIo
aW5kZXhDYXB0b3IuY2FwdHVyZSgpLCBvZmZzZXRDYXB0b3IuY2FwdHVyZSgpLCBzaXplQ2FwdG9y
LmNhcHR1cmUoKSwKLSAgICAgICAgICAgIGFueUxvbmcoKSwgYW55SW50KCkpOwotICAgIEJ5dGVC
dWZmZXIgYnVmZmVyID0gZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmdldElucHV0QnVmZmVycygpW2lu
ZGV4Q2FwdG9yLmdldFZhbHVlKCldOwotICAgIENvZGVjVGVzdEhlbHBlci5hc3NlcnRFcXVhbENv
bnRlbnRzKAotICAgICAgICBpNDIwLCBidWZmZXIsIG9mZnNldENhcHRvci5nZXRWYWx1ZSgpLCBz
aXplQ2FwdG9yLmdldFZhbHVlKCkpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dERlbGl2ZXJzT3V0cHV0RGF0YSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
ZmluYWwgaW50IG91dHB1dERhdGFMZW5ndGggPSAxMDA7Ci0KLSAgICAvLyBTZXQtdXAuCi0gICAg
VGVzdEVuY29kZXIgZW5jb2RlciA9IG5ldyBUZXN0RW5jb2RlckJ1aWxkZXIoKS5idWlsZCgpOwot
ICAgIGVuY29kZXIuaW5pdEVuY29kZShURVNUX0VOQ09ERVJfU0VUVElOR1MsIG1vY2tFbmNvZGVy
Q2FsbGJhY2spOwotICAgIGJ5dGVbXSBpNDIwID0gQ29kZWNUZXN0SGVscGVyLmdlbmVyYXRlUmFu
ZG9tRGF0YSgKLSAgICAgICAgVEVTVF9FTkNPREVSX1NFVFRJTkdTLndpZHRoICogVEVTVF9FTkNP
REVSX1NFVFRJTkdTLmhlaWdodCAqIDMgLyAyKTsKLSAgICBmaW5hbCBWaWRlb0ZyYW1lLkk0MjBC
dWZmZXIgdGVzdEJ1ZmZlciA9Ci0gICAgICAgIENvZGVjVGVzdEhlbHBlci53cmFwSTQyMChURVNU
X0VOQ09ERVJfU0VUVElOR1Mud2lkdGgsIFRFU1RfRU5DT0RFUl9TRVRUSU5HUy5oZWlnaHQsIGk0
MjApOwotICAgIGZpbmFsIFZpZGVvRnJhbWUgdGVzdEZyYW1lID0KLSAgICAgICAgbmV3IFZpZGVv
RnJhbWUodGVzdEJ1ZmZlciwgLyogcm90YXRpb249ICovIDAsIC8qIHRpbWVzdGFtcE5zPSAqLyA0
Mik7Ci0gICAgZW5jb2Rlci5lbmNvZGUodGVzdEZyYW1lLCBuZXcgRW5jb2RlSW5mbyhuZXcgRnJh
bWVUeXBlW10ge0ZyYW1lVHlwZS5WaWRlb0ZyYW1lS2V5fSkpOwotCi0gICAgLy8gVGVzdC4KLSAg
ICBieXRlW10gb3V0cHV0RGF0YSA9IENvZGVjVGVzdEhlbHBlci5nZW5lcmF0ZVJhbmRvbURhdGEo
b3V0cHV0RGF0YUxlbmd0aCk7Ci0gICAgZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmFkZE91dHB1dERh
dGEob3V0cHV0RGF0YSwKLSAgICAgICAgLyogcHJlc2VudGF0aW9uVGltZXN0YW1wVXM9ICovIDAs
Ci0gICAgICAgIC8qIGZsYWdzPSAqLyBNZWRpYUNvZGVjLkJVRkZFUl9GTEFHX1NZTkNfRlJBTUUp
OwotCi0gICAgZW5jb2Rlci53YWl0RGVsaXZlckVuY29kZWRJbWFnZSgpOwotCi0gICAgLy8gVmVy
aWZ5LgotICAgIEFyZ3VtZW50Q2FwdG9yPEVuY29kZWRJbWFnZT4gdmlkZW9GcmFtZUNhcHRvciA9
IEFyZ3VtZW50Q2FwdG9yLmZvckNsYXNzKEVuY29kZWRJbWFnZS5jbGFzcyk7Ci0gICAgdmVyaWZ5
KG1vY2tFbmNvZGVyQ2FsbGJhY2spCi0gICAgICAgIC5vbkVuY29kZWRGcmFtZSh2aWRlb0ZyYW1l
Q2FwdG9yLmNhcHR1cmUoKSwgYW55KENvZGVjU3BlY2lmaWNJbmZvLmNsYXNzKSk7Ci0KLSAgICBF
bmNvZGVkSW1hZ2UgdmlkZW9GcmFtZSA9IHZpZGVvRnJhbWVDYXB0b3IuZ2V0VmFsdWUoKTsKLSAg
ICBhc3NlcnRUaGF0KHZpZGVvRnJhbWUpLmlzTm90TnVsbCgpOwotICAgIGFzc2VydFRoYXQodmlk
ZW9GcmFtZS5lbmNvZGVkV2lkdGgpLmlzRXF1YWxUbyhURVNUX0VOQ09ERVJfU0VUVElOR1Mud2lk
dGgpOwotICAgIGFzc2VydFRoYXQodmlkZW9GcmFtZS5lbmNvZGVkSGVpZ2h0KS5pc0VxdWFsVG8o
VEVTVF9FTkNPREVSX1NFVFRJTkdTLmhlaWdodCk7Ci0gICAgYXNzZXJ0VGhhdCh2aWRlb0ZyYW1l
LnJvdGF0aW9uKS5pc0VxdWFsVG8oMCk7Ci0gICAgYXNzZXJ0VGhhdCh2aWRlb0ZyYW1lLmNhcHR1
cmVUaW1lTnMpLmlzRXF1YWxUbyg0Mik7Ci0gICAgYXNzZXJ0VGhhdCh2aWRlb0ZyYW1lLmNvbXBs
ZXRlRnJhbWUpLmlzVHJ1ZSgpOwotICAgIGFzc2VydFRoYXQodmlkZW9GcmFtZS5mcmFtZVR5cGUp
LmlzRXF1YWxUbyhGcmFtZVR5cGUuVmlkZW9GcmFtZUtleSk7Ci0gICAgQ29kZWNUZXN0SGVscGVy
LmFzc2VydEVxdWFsQ29udGVudHMoCi0gICAgICAgIG91dHB1dERhdGEsIHZpZGVvRnJhbWUuYnVm
ZmVyLCAvKiBvZmZzZXQ9ICovIDAsIHZpZGVvRnJhbWUuYnVmZmVyLmNhcGFjaXR5KCkpOwotICB9
Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFJlbGVhc2UoKSB7Ci0gICAgLy8gU2V0LXVw
LgotICAgIEhhcmR3YXJlVmlkZW9FbmNvZGVyIGVuY29kZXIgPSBuZXcgVGVzdEVuY29kZXJCdWls
ZGVyKCkuYnVpbGQoKTsKLSAgICBlbmNvZGVyLmluaXRFbmNvZGUoVEVTVF9FTkNPREVSX1NFVFRJ
TkdTLCBtb2NrRW5jb2RlckNhbGxiYWNrKTsKLQotICAgIC8vIFRlc3QuCi0gICAgYXNzZXJ0VGhh
dChlbmNvZGVyLnJlbGVhc2UoKSkuaXNFcXVhbFRvKFZpZGVvQ29kZWNTdGF0dXMuT0spOwotCi0g
ICAgLy8gVmVyaWZ5LgotICAgIGFzc2VydFRoYXQoZmFrZU1lZGlhQ29kZWNXcmFwcGVyLmdldFN0
YXRlKCkpLmlzRXF1YWxUbyhTdGF0ZS5SRUxFQVNFRCk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0UmVsZWFzZU11bHRpcGxlVGltZXMoKSB7Ci0gICAgLy8gU2V0LXVwLgotICAg
IEhhcmR3YXJlVmlkZW9FbmNvZGVyIGVuY29kZXIgPSBuZXcgVGVzdEVuY29kZXJCdWlsZGVyKCku
YnVpbGQoKTsKLSAgICBlbmNvZGVyLmluaXRFbmNvZGUoVEVTVF9FTkNPREVSX1NFVFRJTkdTLCBt
b2NrRW5jb2RlckNhbGxiYWNrKTsKLQotICAgIC8vIFRlc3QuCi0gICAgYXNzZXJ0VGhhdChlbmNv
ZGVyLnJlbGVhc2UoKSkuaXNFcXVhbFRvKFZpZGVvQ29kZWNTdGF0dXMuT0spOwotICAgIGFzc2Vy
dFRoYXQoZW5jb2Rlci5yZWxlYXNlKCkpLmlzRXF1YWxUbyhWaWRlb0NvZGVjU3RhdHVzLk9LKTsK
LQotICAgIC8vIFZlcmlmeS4KLSAgICBhc3NlcnRUaGF0KGZha2VNZWRpYUNvZGVjV3JhcHBlci5n
ZXRTdGF0ZSgpKS5pc0VxdWFsVG8oU3RhdGUuUkVMRUFTRUQpOwotICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGVUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9JY2VDYW5kaWRhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGUxNjk2OTQ3ODg1MDkzMGJjYTVmY2RlNWViZmY5NzZiOTIxMGM2OGMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvSWNlQ2Fu
ZGlkYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxOSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUuY29tbW9uLnRydXRoLlRydXRoLmFzc2VydFRoYXQ7Ci0KLWltcG9ydCBvcmcuY2hyb21pdW0u
dGVzdGluZy5sb2NhbC5Mb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lcjsKLWltcG9ydCBvcmcuanVu
aXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLnJv
Ym9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlk
YXRlOwotCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBDb25m
aWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBJY2VDYW5kaWRhdGVUZXN0
IHsKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEljZUNhbmRpZGF0ZUVxdWFscygpIHsKLSAg
ICBJY2VDYW5kaWRhdGUgYzEgPSBuZXcgSWNlQ2FuZGlkYXRlKAotICAgICAgICAiYXVkaW8iLCAw
LCAiY2FuZGlkYXRlOjE1MzIwODYwMDIgMSB1ZHAgMjEyMjE5NDY4NyAxOTIuMTY4Ljg2LjE0NCAz
NzEzOCB0eXAgaG9zdCIpOwotICAgIEljZUNhbmRpZGF0ZSBjMiA9IG5ldyBJY2VDYW5kaWRhdGUo
Ci0gICAgICAgICJhdWRpbyIsIDAsICJjYW5kaWRhdGU6MTUzMjA4NjAwMiAxIHVkcCAyMTIyMTk0
Njg3IDE5Mi4xNjguODYuMTQ0IDM3MTM4IHR5cCBob3N0Iik7Ci0KLSAgICAvLyBjMyBkaWZmZXIg
Ynkgc2RwTWlkCi0gICAgSWNlQ2FuZGlkYXRlIGMzID0gbmV3IEljZUNhbmRpZGF0ZSgKLSAgICAg
ICAgInZpZGVvIiwgMCwgImNhbmRpZGF0ZToxNTMyMDg2MDAyIDEgdWRwIDIxMjIxOTQ2ODcgMTky
LjE2OC44Ni4xNDQgMzcxMzggdHlwIGhvc3QiKTsKLSAgICAvLyBjNCBkaWZmZXIgYnkgc2RwTUxp
bmVJbmRleAotICAgIEljZUNhbmRpZGF0ZSBjNCA9IG5ldyBJY2VDYW5kaWRhdGUoCi0gICAgICAg
ICJhdWRpbyIsIDEsICJjYW5kaWRhdGU6MTUzMjA4NjAwMiAxIHVkcCAyMTIyMTk0Njg3IDE5Mi4x
NjguODYuMTQ0IDM3MTM4IHR5cCBob3N0Iik7Ci0gICAgLy8gYzUgZGlmZmVyIGJ5IHNkcC4KLSAg
ICBJY2VDYW5kaWRhdGUgYzUgPSBuZXcgSWNlQ2FuZGlkYXRlKAotICAgICAgICAiYXVkaW8iLCAw
LCAiY2FuZGlkYXRlOjE1MzIwODYwMDIgMSB1ZHAgMjEyMjE5NDY4NyAxOTIuMTY4Ljg2LjE0NCAz
NzEzOSB0eXAgaG9zdCIpOwotCi0gICAgYXNzZXJ0VGhhdChjMS5lcXVhbHMoYzIpKS5pc1RydWUo
KTsKLSAgICBhc3NlcnRUaGF0KGMyLmVxdWFscyhjMSkpLmlzVHJ1ZSgpOwotICAgIGFzc2VydFRo
YXQoYzEuZXF1YWxzKG51bGwpKS5pc0ZhbHNlKCk7Ci0gICAgYXNzZXJ0VGhhdChjMS5lcXVhbHMo
YzMpKS5pc0ZhbHNlKCk7Ci0gICAgYXNzZXJ0VGhhdChjMS5lcXVhbHMoYzQpKS5pc0ZhbHNlKCk7
Ci0gICAgYXNzZXJ0VGhhdChjNS5lcXVhbHMoYzEpKS5pc0ZhbHNlKCk7Ci0KLSAgICBPYmplY3Qg
bzIgPSBjMjsKLSAgICBhc3NlcnRUaGF0KGMxLmVxdWFscyhvMikpLmlzVHJ1ZSgpOwotICAgIGFz
c2VydFRoYXQobzIuZXF1YWxzKGMxKSkuaXNUcnVlKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9SZWZDb3VudERlbGVn
YXRlVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
c2RrL2FuZHJvaWQvdGVzdHMvc3JjL29yZy93ZWJydGMvUmVmQ291bnREZWxlZ2F0ZVRlc3QuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0NDljOGJiNzk2NDdmMWM2NjRkMjg1
YWRkYzY0ZTZiZWFjMTAwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvYW5k
cm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9SZWZDb3VudERlbGVnYXRlVGVzdC5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAyMCBUaGUgV2Vi
UlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRo
LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubmV2ZXI7Ci1p
bXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVyaWZ5OwotCi1pbXBvcnQgb3JnLmNo
cm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQg
b3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVu
aXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcu
bW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLmFubm90
YXRpb24uQ29uZmlnOwotCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFz
cykKLUBDb25maWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBSZWZDb3Vu
dERlbGVnYXRlVGVzdCB7Ci0gIEBNb2NrIFJ1bm5hYmxlIG1vY2tSZWxlYXNlQ2FsbGJhY2s7Ci0g
IHByaXZhdGUgUmVmQ291bnREZWxlZ2F0ZSByZWZDb3VudERlbGVnYXRlOwotCi0gIEBCZWZvcmUK
LSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgTW9ja2l0b0Fubm90YXRpb25zLmluaXRNb2Nr
cyh0aGlzKTsKLQotICAgIHJlZkNvdW50RGVsZWdhdGUgPSBuZXcgUmVmQ291bnREZWxlZ2F0ZSht
b2NrUmVsZWFzZUNhbGxiYWNrKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RS
ZWxlYXNlUnVuc1JlbGVhc2VDYWxsYmFjaygpIHsKLSAgICByZWZDb3VudERlbGVnYXRlLnJlbGVh
c2UoKTsKLSAgICB2ZXJpZnkobW9ja1JlbGVhc2VDYWxsYmFjaykucnVuKCk7Ci0gIH0KLQotICBA
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0YWluSW5jcmVhc2VzUmVmQ291bnQoKSB7Ci0gICAg
cmVmQ291bnREZWxlZ2F0ZS5yZXRhaW4oKTsKLQotICAgIHJlZkNvdW50RGVsZWdhdGUucmVsZWFz
ZSgpOwotICAgIHZlcmlmeShtb2NrUmVsZWFzZUNhbGxiYWNrLCBuZXZlcigpKS5ydW4oKTsKLQot
ICAgIHJlZkNvdW50RGVsZWdhdGUucmVsZWFzZSgpOwotICAgIHZlcmlmeShtb2NrUmVsZWFzZUNh
bGxiYWNrKS5ydW4oKTsKLSAgfQotCi0gIEBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uLmNsYXNzKQotICBwdWJsaWMgdm9pZCB0ZXN0UmVsZWFzZUFmdGVyRnJlZVRocm93c0ls
bGVnYWxTdGF0ZUV4Y2VwdGlvbigpIHsKLSAgICByZWZDb3VudERlbGVnYXRlLnJlbGVhc2UoKTsK
LSAgICByZWZDb3VudERlbGVnYXRlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBUZXN0KGV4cGVjdGVk
ID0gSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNsYXNzKQotICBwdWJsaWMgdm9pZCB0ZXN0UmV0YWlu
QWZ0ZXJGcmVlVGhyb3dzSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkgewotICAgIHJlZkNvdW50RGVs
ZWdhdGUucmVsZWFzZSgpOwotICAgIHJlZkNvdW50RGVsZWdhdGUucmV0YWluKCk7Ci0gIH0KLQot
ICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2FmZVJldGFpbkJlZm9yZUZyZWVSZXR1cm5zVHJ1
ZUFuZEluY3JlYXNlc1JlZkNvdW50KCkgewotICAgIGFzc2VydFRoYXQocmVmQ291bnREZWxlZ2F0
ZS5zYWZlUmV0YWluKCkpLmlzVHJ1ZSgpOwotCi0gICAgcmVmQ291bnREZWxlZ2F0ZS5yZWxlYXNl
KCk7Ci0gICAgdmVyaWZ5KG1vY2tSZWxlYXNlQ2FsbGJhY2ssIG5ldmVyKCkpLnJ1bigpOwotCi0g
ICAgcmVmQ291bnREZWxlZ2F0ZS5yZWxlYXNlKCk7Ci0gICAgdmVyaWZ5KG1vY2tSZWxlYXNlQ2Fs
bGJhY2spLnJ1bigpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNhZmVSZXRh
aW5BZnRlckZyZWVSZXR1cm5zRmFsc2UoKSB7Ci0gICAgcmVmQ291bnREZWxlZ2F0ZS5yZWxlYXNl
KCk7Ci0gICAgYXNzZXJ0VGhhdChyZWZDb3VudERlbGVnYXRlLnNhZmVSZXRhaW4oKSkuaXNGYWxz
ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9zZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TY2FsaW5nU2V0dGlu
Z3NUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9z
ZGsvYW5kcm9pZC90ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TY2FsaW5nU2V0dGluZ3NUZXN0LmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwOTJhN2M0ODUzMTBiZDQ4YTE2NDdlN2E1
MmNjOTQ5M2ViN2RmMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL2FuZHJv
aWQvdGVzdHMvc3JjL29yZy93ZWJydGMvU2NhbGluZ1NldHRpbmdzVGVzdC5qYXZhCisrKyAvZGV2
L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxOCBUaGUgV2ViUlRD
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwot
Ci1pbXBvcnQgb3JnLmNocm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RS
dW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5S
dW5XaXRoOwotaW1wb3J0IG9yZy5yb2JvbGVjdHJpYy5hbm5vdGF0aW9uLkNvbmZpZzsKLWltcG9y
dCBvcmcud2VicnRjLlZpZGVvRW5jb2Rlci5TY2FsaW5nU2V0dGluZ3M7Ci0KLUBSdW5XaXRoKExv
Y2FsUm9ib2xlY3RyaWNUZXN0UnVubmVyLmNsYXNzKQotQENvbmZpZyhtYW5pZmVzdCA9IENvbmZp
Zy5OT05FKQotcHVibGljIGNsYXNzIFNjYWxpbmdTZXR0aW5nc1Rlc3QgewotICBAVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmcoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKCJbIDEsIDIgXSIs
IG5ldyBTY2FsaW5nU2V0dGluZ3MoMSwgMikudG9TdHJpbmcoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KCJPRkYiLCBTY2FsaW5nU2V0dGluZ3MuT0ZGLnRvU3RyaW5nKCkpOwotICB9Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvb2JqYy9j
b21wb25lbnRzL3ZpZGVvX2NvZGVjL1JUQ1ZpZGVvRGVjb2RlckgyNjQubW0gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvb2JqYy9jb21wb25lbnRzL3ZpZGVv
X2NvZGVjL1JUQ1ZpZGVvRGVjb2RlckgyNjQubW0KaW5kZXggYjE0ZjBjODdlYjViNWNiYzVhN2E5
Zjg1YjlhZmQxZWZlNzgyMmE2NS4uZWIwMmU1MGU5NDUzYzI0YjIzM2I5ZDVjMGM1ZGM3NWVhNGRm
ZDcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvc2RrL29iamMvY29tcG9uZW50cy92aWRlb19jb2RlYy9SVENWaWRlb0RlY29kZXJIMjY0Lm1t
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9vYmpj
L2NvbXBvbmVudHMvdmlkZW9fY29kZWMvUlRDVmlkZW9EZWNvZGVySDI2NC5tbQpAQCAtODIsNiAr
ODIsNyBAQCB2b2lkIGRlY29tcHJlc3Npb25PdXRwdXRDYWxsYmFjayh2b2lkICpkZWNvZGVyUmVm
LAogICBpZiAoc2VsZikgewogICAgIF9tZW1vcnlQb29sID0gQ01NZW1vcnlQb29sQ3JlYXRlKG5p
bCk7CiAgIH0KKyAgICBSVENfTE9HKExTX0VSUk9SKSA8PCAiSDI2NCBkZWNvZGUgaW5pdCI7CiAg
IHJldHVybiBzZWxmOwogfQogCkBAIC0xMDksNiArMTEwLDcgQEAgdm9pZCBkZWNvbXByZXNzaW9u
T3V0cHV0Q2FsbGJhY2sodm9pZCAqZGVjb2RlclJlZiwKICAgICAgICAgc2l6ZTooc2l6ZV90KXNp
emUKICAgICAgICAgdGltZVN0YW1wOih1aW50MzJfdCl0aW1lU3RhbXAgewogCisgICAgUlRDX0xP
RyhMU19FUlJPUikgPDwgIkgyNjQgZGVjb2RlRGF0YSI7CiAgIGlmIChfZXJyb3IgIT0gbm9FcnIp
IHsKICAgICBSVENfTE9HKExTX1dBUk5JTkcpIDw8ICJMYXN0IGZyYW1lIGRlY29kZSBmYWlsZWQu
IjsKICAgICBfZXJyb3IgPSBub0VycjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9vYmpjL2NvbXBvbmVudHMvdmlkZW9fY29kZWMvUlRD
VmlkZW9FbmNvZGVySDI2NC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3Nkay9vYmpjL2NvbXBvbmVudHMvdmlkZW9fY29kZWMvUlRDVmlkZW9FbmNvZGVySDI2
NC5tbQppbmRleCBiMGJiMjE1YTAyMTBhZTBlMjViZGEzYWZhMTIzMmQ5MTQ1ODEyYTljLi5jNTky
YTQ3YTlkOTEzY2U0YjhlZTZiOTY0NDE3OWFjYmM1MzNiOWE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvb2JqYy9jb21wb25lbnRzL3Zp
ZGVvX2NvZGVjL1JUQ1ZpZGVvRW5jb2RlckgyNjQubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL29iamMvY29tcG9uZW50cy92aWRlb19jb2RlYy9S
VENWaWRlb0VuY29kZXJIMjY0Lm1tCkBAIC0zNzcsNiArMzc3LDggQEAgTlNVSW50ZWdlciBHZXRN
YXhTYW1wbGVSYXRlKGNvbnN0IHdlYnJ0Yzo6SDI2NDo6UHJvZmlsZUxldmVsSWQgJnByb2ZpbGVf
bGV2ZWxfaWQKICAgX2lzS2V5RnJhbWVSZXF1aXJlZCA9IGZhbHNlOwogICBfaXNIMjY0TG93TGF0
ZW5jeUVuY29kZXJFbmFibGVkID0gdHJ1ZTsKIAorICBSVENfTE9HKExTX0VSUk9SKSA8PCAiSDI2
NCBlbmNvZGUgaW5pdFdpdGhDb2RlY0luZm8iOworCiAgIHJldHVybiBzZWxmOwogfQogCkBAIC00
MjcsNiArNDI5LDkgQEAgTlNVSW50ZWdlciBHZXRNYXhTYW1wbGVSYXRlKGNvbnN0IHdlYnJ0Yzo6
SDI2NDo6UHJvZmlsZUxldmVsSWQgJnByb2ZpbGVfbGV2ZWxfaWQKIC0gKE5TSW50ZWdlcillbmNv
ZGU6KFJUQ1ZpZGVvRnJhbWUgKilmcmFtZQogICAgIGNvZGVjU3BlY2lmaWNJbmZvOihudWxsYWJs
ZSBpZDxSVENDb2RlY1NwZWNpZmljSW5mbz4pY29kZWNTcGVjaWZpY0luZm8KICAgICAgICAgICAg
ZnJhbWVUeXBlczooTlNBcnJheTxOU051bWJlciAqPiAqKWZyYW1lVHlwZXMgeworCisgIFJUQ19M
T0coTFNfRVJST1IpIDw8ICJIMjY0IGVuY29kZSBuZXcgZnJhbWUiOworCiAgIGlmICghX2NhbGxi
YWNrIHx8ICFbc2VsZiBoYXNDb21wcmVzc2lvblNlc3Npb25dKSB7CiAgICAgcmV0dXJuIFdFQlJU
Q19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVEOwogICB9CkBAIC04NzksNiArODg0LDcgQEAgTlNV
SW50ZWdlciBHZXRNYXhTYW1wbGVSYXRlKGNvbnN0IHdlYnJ0Yzo6SDI2NDo6UHJvZmlsZUxldmVs
SWQgJnByb2ZpbGVfbGV2ZWxfaWQKICAgICAgICAgICAgICAgdGltZXN0YW1wOih1aW50MzJfdCl0
aW1lc3RhbXAKICAgICAgICAgICAgICAgIHJvdGF0aW9uOihSVENWaWRlb1JvdGF0aW9uKXJvdGF0
aW9uCiAgICAgIGlzS2V5RnJhbWVSZXF1aXJlZDooYm9vbClpc0tleUZyYW1lUmVxdWlyZWQgewor
ICBSVENfTE9HKExTX0VSUk9SKSA8PCAiSDI2NCBlbmNvZGVkIGZyYW1lICIgPDwgc3RhdHVzOwog
ICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CiAgICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkgyNjQg
ZW5jb2RlIGZhaWxlZCB3aXRoIGNvZGU6ICIgPDwgc3RhdHVzOwogICAgIGlmIChpc0tleUZyYW1l
UmVxdWlyZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy90b29sc193ZWJydGMvbXNhbi9zdXBwcmVzc2lvbnMudHh0IGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdG9vbHNfd2VicnRjL21zYW4vc3VwcHJlc3Np
b25zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U4YjE0MjkyZTA3ZTA5MzFm
NzYwOWYxMmQ4NDY4OWFkMzczNzNlYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy90
b29sc193ZWJydGMvbXNhbi9zdXBwcmVzc2lvbnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTUg
KzAsMCBAQAotIyBUaGUgcnVsZXMgaW4gdGhpcyBmaWxlIGFyZSBvbmx5IGFwcGxpZWQgYXQgY29t
cGlsZSB0aW1lLgotIyBCZWNhdXNlIHRoZSBDaHJvbWUgYnVpbGRzeXN0ZW0gZG9lcyBub3QgYXV0
b21hdGljYWxseSB0b3VjaCB0aGUgZmlsZXMKLSMgbWVudGlvbmVkIGhlcmUsIGNoYW5naW5nIHRo
aXMgZmlsZSByZXF1aXJlcyBjbG9iYmVyaW5nIGFsbCBNU2FuIGJvdHMuCi0jCi0jIFBsZWFzZSB0
aGluayB0d2ljZSBiZWZvcmUgeW91IGFkZCBvciByZW1vdmUgdGhlc2UgcnVsZXMuCi0KLSMgVGhp
cyBpcyBhIHN0cmlwcGVkIGRvd24gY29weSBvZiBDaHJvbWl1bSdzIGJsYWNrbGlzdC50eHQsIHRv
IGVuYWJsZQotIyBhZGRpbmcgV2ViUlRDLXNwZWNpZmljIGJsYWNrbGlzdCBlbnRyaWVzLgotCi0j
IFVuaW5pdCBpbiB6bGliLiBodHRwOi8vY3JidWcuY29tLzExNjI3NwotZnVuOipNT1pfWl9kZWZs
YXRlKgotCi0jIFVuaW5pdCBpbiBIMjY0LiBodHRwOi8vY3JidWcuY29tL3dlYnJ0Yy8xMTcwMgot
c3JjOiovdGhpcmRfcGFydHkvb3BlbmgyNjQvc3JjL2NvZGVjL3Byb2Nlc3Npbmcvc3JjL3ZhYWNh
bGMvdmFhY2FsY2Z1bmNzLmNwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy90b29sc193ZWJydGMvdWJzYW4vc3VwcHJlc3Npb25zLnR4dCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Rvb2xzX3dlYnJ0Yy91
YnNhbi9zdXBwcmVzc2lvbnMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGI2
NmU5MTVhOWU3MDM4NmU5Mjc4ZGQ4OGMwMDI2YTAxZjIyNGQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3Rvb2xzX3dlYnJ0Yy91YnNhbi9zdXBwcmVzc2lvbnMudHh0CisrKyAvZGV2
L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVUJTYW4gYmxh
Y2tsaXN0LgotIwotIyBUaGlzIGlzIGEgV2ViUlRDLXNwZWNpZmljIHJlcGxhY2VtZW50IG9mIENo
cm9taXVtJ3MgYmxhY2tsaXN0LnR4dC4KLSMgT25seSBleGNlcHRpb25zIGZvciB0aGlyZCBwYXJ0
eSBsaWJyYXJpZXMgZ28gaGVyZS4gV2ViUlRDJ3MgY29kZSBzaG91bGQgdXNlCi0jIHRoZSBSVENf
Tk9fU0FOSVRJWkUgbWFjcm8uIFBsZWFzZSB0aGluayB0d2ljZSBiZWZvcmUgYWRkaW5nIG5ldyBl
eGNlcHRpb25zLgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBZQVNNIGRvZXMgc29tZSBmdW5u
eSB0aGluZ3MgdGhhdCBVQnNhbiBkb2Vzbid0IGxpa2UuCi0jIGh0dHBzOi8vY3JidWcuY29tLzQ4
OTkwMQotc3JjOiovdGhpcmRfcGFydHkveWFzbS8qCi0KLSMgT3BlbkgyNjQgdHJpZ2dlcnMgc29t
ZSBlcnJvcnMgdGhhdCBhcmUgb3V0IG9mIG91ciBjb250cm9sLgotc3JjOiovdGhpcmRfcGFydHkv
ZmZtcGVnL2xpYmF2Y29kZWMvKgotc3JjOiovdGhpcmRfcGFydHkvb3BlbmgyNjQvKgotCi0jIFRP
RE8oYnVncy53ZWJydGMub3JnLzExMTEwKS4KLSMgUmVtb3ZlIHRob3NlIG9uY2UgdXBzdHJlYW0g
Y29kZSBoYXMgYmVlbiBjbGVhbmVkLgotc3JjOiovdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNs
L2RlYnVnZ2luZy8qCi1zcmM6Ki90aGlyZF9wYXJ0eS9saWJ2cHgvc291cmNlL2xpYnZweC92cDgv
KgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBJZ25vcmUgc3lzdGVtIGxpYnJhcmllcy4KLXNy
YzoqL3Vzci8qCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy90b29sc193ZWJydGMvdWJzYW4vdnB0cl9zdXBwcmVzc2lvbnMudHh0IGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdG9vbHNfd2VicnRjL3Vic2FuL3Zw
dHJfc3VwcHJlc3Npb25zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM5ZGUz
NjY1OTI4ZGNjNzkxNzMyMjM3ZmMxNjRjNTJkNDg4OTdjOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy90b29sc193ZWJydGMvdWJzYW4vdnB0cl9zdXBwcmVzc2lvbnMudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVUJTYW4g
dnB0ciBibGFja2xpc3QuCi0jIEZ1bmN0aW9uIGFuZCB0eXBlIGJhc2VkIGJsYWNrbGlzdGluZyB1
c2UgYSBtYW5nbGVkIG5hbWUsIGFuZCBpdCBpcyBlc3BlY2lhbGx5Ci0jIHRyaWNreSB0byByZXBy
ZXNlbnQgQysrIHR5cGVzLiBGb3Igbm93LCBhbnkgcG9zc2libGUgY2hhbmdlcyBieSBuYW1lIG1h
bmdsaW5ncwotIyBhcmUgc2ltcGx5IHJlcHJlc2VudGVkIGFzIHdpbGRjYXJkIGV4cHJlc3Npb25z
IG9mIHJlZ2V4cCwgYW5kIHRodXMgaXQgbWlnaHQgYmUKLSMgb3Zlci1ibGFja2xpc3RlZC4KLSMK
LSMgUGxlYXNlIHRoaW5rIHR3aWNlIGJlZm9yZSB5b3UgYWRkIG9yIHJlbW92ZSB0aGVzZSBydWxl
cy4KLSMKLSMgVGhpcyBpcyBhIHN0cmlwcGVkIGRvd24gY29weSBvZiBDaHJvbWl1bSdzIHZwdHJf
YmxhY2tsaXN0LnR4dCwgdG8gZW5hYmxlCi0jIGFkZGluZyBXZWJSVEMtc3BlY2lmaWMgYmxhY2ts
aXN0IGVudHJpZXMuCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFVzaW5nIHJhdyBwb2ludGVy
IHZhbHVlcy4KLSMKLSMgQSByYXcgcG9pbnRlciB2YWx1ZSAoMTYpIGlzIHVzZWQgdG8gaW5mZXIg
dGhlIGZpZWxkIG9mZnNldCBieQotIyBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VULgotCi1zcmM6Ki90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wYi5jYwotc3JjOiovdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2UuY2MKLXNyYzoqL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5jYwot
Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBVQnNhbiBnb2VzIGludG8gYW4gaW5maW5pdGUgcmVj
dXJzaW9uIHdoZW4gX19keW5hbWljX2Nhc3QgaW5zdHJ1bWVudGVkIHdpdGgKLSMgInZwdHIiLiBT
ZWUgY3JidWcuY29tLzYwOTc4Ni4KLQotc3JjOiovdGhpcmRfcGFydHkvbGliY1wrXCthYmkvdHJ1
bmsvc3JjL3ByaXZhdGVfdHlwZWluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy90b29sc193ZWJydGMvdmltL3dlYnJ0Yy55Y21fZXh0
cmFfY29uZi5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Rv
b2xzX3dlYnJ0Yy92aW0vd2VicnRjLnljbV9leHRyYV9jb25mLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmY2MzOGZlYzAxOTZjYmMzZDlhNTk0NmQ5OTM2ODhmY2E1YjhhOTBmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Rvb2xzX3dlYnJ0Yy92aW0vd2VicnRjLnlj
bV9leHRyYV9jb25mLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChjKSAyMDE3IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotIwotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotIyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0jIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSMgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0KLSMgQXV0
b2NvbXBsZXRpb24gY29uZmlnIGZvciBZb3VDb21wbGV0ZU1lIGluIFdlYlJUQy4gVGhpcyBpcyBq
dXN0IGNvcGllZCBmcm9tCi0jIHRvb2xzL3ZpbSBpbiBjaHJvbWl1bSB3aXRoIHZlcnkgbWlub3Ig
bW9kaWZpY2F0aW9ucy4KLSMKLSMgVVNBR0U6Ci0jCi0jICAgMS4gSW5zdGFsbCBZQ00gW2h0dHBz
Oi8vZ2l0aHViLmNvbS9WYWxsb3JpYy9Zb3VDb21wbGV0ZU1lXQotIyAgICAgICAgICAoR29vZ2xl
cnMgc2hvdWxkIGNoZWNrIG91dCBbZ28veWNtXSkKLSMKLSMgICAyLiBDcmVhdGUgYSBzeW1ib2xp
YyBsaW5rIHRvIHRoaXMgZmlsZSBjYWxsZWQgLnljbV9leHRyYV9jb25mLnB5IGluIHRoZQotIyAg
ICAgIGRpcmVjdG9yeSBhYm92ZSB5b3VyIFdlYlJUQyBjaGVja291dCAoaS5lLiBuZXh0IHRvIHlv
dXIgLmdjbGllbnQgZmlsZSkuCi0jCi0jICAgICAgICAgIGNkIHNyYwotIyAgICAgICAgICBsbiAt
cnMgdG9vbHNfd2VicnRjL3ZpbS93ZWJydGMueWNtX2V4dHJhX2NvbmYucHkgXAotIyAgICAgICAg
ICAuLi8ueWNtX2V4dHJhX2NvbmYucHkKLSMKLSMgICAzLiAob3B0aW9uYWwpIFdoaXRlbGlzdCB0
aGUgLnljbV9leHRyYV9jb25mLnB5IGZyb20gc3RlcCAjMiBieSBhZGRpbmcgdGhlCi0jICAgICAg
Zm9sbG93aW5nIHRvIHlvdXIgLnZpbXJjOgotIwotIyAgICAgICAgICBsZXQgZzp5Y21fZXh0cmFf
Y29uZl9nbG9ibGlzdD1bJzxwYXRoIHRvIC55Y21fZXh0cmFfY29uZi5weT4nXQotIwotIyAgICAg
IFlvdSBjYW4gYWxzbyBhZGQgb3RoZXIgLnljbV9leHRyYV9jb25mLnB5IGZpbGVzIHlvdSB3YW50
IHRvIHVzZSB0byB0aGlzCi0jICAgICAgbGlzdCB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBwcm9tcHRp
bmcgZWFjaCB0aW1lIHlvdSB2aXNpdCBhIGRpcmVjdG9yeQotIyAgICAgIGNvdmVyZWQgYnkgYSBj
b25maWcgZmlsZS4KLSMKLSMgICA0LiBQcm9maXQKLSMKLSMKLSMgVXNhZ2Ugbm90ZXM6Ci0jCi0j
ICAgKiBZb3UgbXVzdCB1c2UgbmluamEgJiBjbGFuZyB0byBidWlsZCBXZWJSVEMuCi0jCi0jICAg
KiBZb3UgbXVzdCBoYXZlIHJ1biAiZ24gZ2VuIiBhbmQgYnVpbHQgV2ViUlRDIHJlY2VudGx5Lgot
IwotIwotIyBIYWNraW5nIG5vdGVzOgotIwotIyAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBzY3Jp
cHQgaXMgdG8gY29uc3RydWN0IGFuIGFjY3VyYXRlIGVub3VnaCBjb21tYW5kIGxpbmUKLSMgICAg
IGZvciBZQ00gdG8gcGFzcyB0byBjbGFuZyBzbyBpdCBjYW4gYnVpbGQgYW5kIGV4dHJhY3QgdGhl
IHN5bWJvbHMuCi0jCi0jICAgKiBSaWdodCBub3csIHdlIG9ubHkgcHVsbCB0aGUgLUkgYW5kIC1E
IGZsYWdzLiBUaGF0IHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQKLSMgICAgIGZvciBldmVyeXRoaW5n
IEkndmUgdXNlZCBpdCBmb3IuCi0jCi0jICAgKiBUaGF0IHdob2xlIG5pbmphICYgY2xhbmcgdGhp
bmc/IFdlIGNvdWxkIHN1cHBvcnQgb3RoZXIgY29uZmlncyBpZiBzb21lb25lCi0jICAgICB3ZXJl
IHdpbGxpbmcgdG8gd3JpdGUgdGhlIGNvcnJlY3QgY29tbWFuZHMgYW5kIGEgcGFyc2VyLgotIwot
IyAgICogVGhpcyBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiBnUHJlY2lzZS4KLQotCi1pbXBvcnQg
b3MKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc2hsZXgKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBv
cnQgc3lzCi0KLSMgRmxhZ3MgZnJvbSBZQ00ncyBkZWZhdWx0IGNvbmZpZy4KLV9ERUZBVUxUX0ZM
QUdTID0gWwotICAnLURVU0VfQ0xBTkdfQ09NUExFVEVSJywKLSAgJy1zdGQ9YysrMTEnLAotICAn
LXgnLAotICAnYysrJywKLV0KLQotX0hFQURFUl9BTFRFUk5BVEVTID0gKCcuY2MnLCAnLmNwcCcs
ICcuYycsICcubW0nLCAnLm0nKQotCi1fRVhURU5TSU9OX0ZMQUdTID0gewotICAnLm0nOiBbJy14
JywgJ29iamVjdGl2ZS1jJ10sCi0gICcubW0nOiBbJy14JywgJ29iamVjdGl2ZS1jKysnXSwKLX0K
LQotZGVmIFBhdGhFeGlzdHMoKmFyZ3MpOgotICByZXR1cm4gb3MucGF0aC5leGlzdHMob3MucGF0
aC5qb2luKCphcmdzKSkKLQotCi1kZWYgRmluZFdlYnJ0Y1NyY0Zyb21GaWxlbmFtZShmaWxlbmFt
ZSk6Ci0gICIiIlNlYXJjaGVzIGZvciB0aGUgcm9vdCBvZiB0aGUgV2ViUlRDIGNoZWNrb3V0Lgot
Ci0gIFNpbXBseSBjaGVja3MgcGFyZW50IGRpcmVjdG9yaWVzIHVudGlsIGl0IGZpbmRzIC5nY2xp
ZW50IGFuZCBzcmMvLgotCi0gIEFyZ3M6Ci0gICAgZmlsZW5hbWU6IChTdHJpbmcpIFBhdGggdG8g
c291cmNlIGZpbGUgYmVpbmcgZWRpdGVkLgotCi0gIFJldHVybnM6Ci0gICAgKFN0cmluZykgUGF0
aCBvZiAnc3JjLycsIG9yIE5vbmUgaWYgdW5hYmxlIHRvIGZpbmQuCi0gICIiIgotICBjdXJkaXIg
PSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkpCi0gIHdoaWxlIG5v
dCAob3MucGF0aC5iYXNlbmFtZShjdXJkaXIpID09ICdzcmMnCi0gICAgICAgICAgICAgYW5kIFBh
dGhFeGlzdHMoY3VyZGlyLCAnREVQUycpCi0gICAgICAgICAgICAgYW5kIChQYXRoRXhpc3RzKGN1
cmRpciwgJy4uJywgJy5nY2xpZW50JykKLSAgICAgICAgICAgICAgICAgIG9yIFBhdGhFeGlzdHMo
Y3VyZGlyLCAnLmdpdCcpKSk6Ci0gICAgbmV4dGRpciA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0
aC5qb2luKGN1cmRpciwgJy4uJykpCi0gICAgaWYgbmV4dGRpciA9PSBjdXJkaXI6Ci0gICAgICBy
ZXR1cm4gTm9uZQotICAgIGN1cmRpciA9IG5leHRkaXIKLSAgcmV0dXJuIGN1cmRpcgotCi0KLWRl
ZiBHZXREZWZhdWx0U291cmNlRmlsZSh3ZWJydGNfcm9vdCwgZmlsZW5hbWUpOgotICAiIiJSZXR1
cm5zIHRoZSBkZWZhdWx0IHNvdXJjZSBmaWxlIHRvIHVzZSBhcyBhbiBhbHRlcm5hdGl2ZSB0byB8
ZmlsZW5hbWV8LgotCi0gIENvbXBpbGUgZmxhZ3MgdXNlZCB0byBidWlsZCB0aGUgZGVmYXVsdCBz
b3VyY2UgZmlsZSBpcyBhc3N1bWVkIHRvIGJlIGEKLSAgY2xvc2UtZW5vdWdoIGFwcHJveGltYXRp
b24gZm9yIGJ1aWxkaW5nIHxmaWxlbmFtZXwuCi0KLSAgQXJnczoKLSAgICB3ZWJydGNfcm9vdDog
KFN0cmluZykgQWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBvZiBXZWJSVEMgY2hlY2tvdXQuCi0g
ICAgZmlsZW5hbWU6IChTdHJpbmcpIEFic29sdXRlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlLgot
Ci0gIFJldHVybnM6Ci0gICAgKFN0cmluZykgQWJzb2x1dGUgcGF0aCB0byBzdWJzdGl0dXRlIHNv
dXJjZSBmaWxlLgotICAiIiIKLSAgaWYgJ3Rlc3QuJyBpbiBmaWxlbmFtZToKLSAgICByZXR1cm4g
b3MucGF0aC5qb2luKHdlYnJ0Y19yb290LCAnYmFzZScsICdsb2dnaW5nX3VuaXR0ZXN0LmNjJykK
LSAgcmV0dXJuIG9zLnBhdGguam9pbih3ZWJydGNfcm9vdCwgJ2Jhc2UnLCAnbG9nZ2luZy5jYycp
Ci0KLQotZGVmIEdldE5pbmphQnVpbGRPdXRwdXRzRm9yU291cmNlRmlsZShvdXRfZGlyLCBmaWxl
bmFtZSk6Ci0gICIiIlJldHVybnMgYSBsaXN0IG9mIGJ1aWxkIG91dHB1dHMgZm9yIGZpbGVuYW1l
LgotCi0gIFRoZSBsaXN0IGlzIGdlbmVyYXRlZCBieSBpbnZva2luZyAnbmluamEgLXQgcXVlcnkn
IHRvb2wgdG8gcmV0cmlldmUgYSBsaXN0IG9mCi0gIGlucHV0cyBhbmQgb3V0cHV0cyBvZiB8Zmls
ZW5hbWV8LiBUaGlzIGxpc3QgaXMgdGhlbiBmaWx0ZXJlZCB0byBvbmx5IGluY2x1ZGUKLSAgLm8g
YW5kIC5vYmogb3V0cHV0cy4KLQotICBBcmdzOgotICAgIG91dF9kaXI6IChTdHJpbmcpIEFic29s
dXRlIHBhdGggdG8gbmluamEgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeS4KLSAgICBmaWxlbmFtZTog
KFN0cmluZykgQWJzb2x1dGUgcGF0aCB0byBzb3VyY2UgZmlsZS4KLQotICBSZXR1cm5zOgotICAg
IChMaXN0IG9mIFN0cmluZ3MpIExpc3Qgb2YgdGFyZ2V0IG5hbWVzLiBXaWxsIHJldHVybiBbXSBp
ZiB8ZmlsZW5hbWV8IGRvZXNuJ3QKLSAgICAgICAgeWllbGQgYW55IC5vIG9yIC5vYmogb3V0cHV0
cy4KLSAgIiIiCi0gICMgTmluamEgbmVlZHMgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlIHJl
bGF0aXZlIHRvIHRoZSBvdXRwdXQgYnVpbGQKLSAgIyBkaXJlY3RvcnkuCi0gIHJlbF9maWxlbmFt
ZSA9IG9zLnBhdGgucmVscGF0aChmaWxlbmFtZSwgb3V0X2RpcikKLQotICBwID0gc3VicHJvY2Vz
cy5Qb3BlbihbJ25pbmphJywgJy1DJywgb3V0X2RpciwgJy10JywgJ3F1ZXJ5JywgcmVsX2ZpbGVu
YW1lXSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3Rk
ZXJyPXN1YnByb2Nlc3MuU1RET1VULAotICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxf
bmV3bGluZXM9VHJ1ZSkKLSAgc3Rkb3V0LCBfID0gcC5jb21tdW5pY2F0ZSgpCi0gIGlmIHAucmV0
dXJuY29kZSAhPSAwOgotICAgIHJldHVybiBbXQotCi0gICMgVGhlIG91dHB1dCBsb29rcyBsaWtl
OgotICAjICAgLi4vLi4vcmVsYXRpdmUvcGF0aC90by9zb3VyY2UuY2M6Ci0gICMgICAgIG91dHB1
dHM6Ci0gICMgICAgICAgb2JqL3JlYXRpdmUvcGF0aC90by90YXJnZXQuc291cmNlLm8KLSAgIyAg
ICAgICBvYmovc29tZS9vdGhlci90YXJnZXQyLnNvdXJjZS5vCi0gICMgICAgICAgYW5vdGhlci90
YXJnZXQudHh0Ci0gICMKLSAgb3V0cHV0c190ZXh0ID0gc3Rkb3V0LnBhcnRpdGlvbignXG4gIG91
dHB1dHM6XG4nKVsyXQotICBvdXRwdXRfbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGlu
IG91dHB1dHNfdGV4dC5zcGxpdCgnXG4nKV0KLSAgcmV0dXJuIFt0YXJnZXQgZm9yIHRhcmdldCBp
biBvdXRwdXRfbGluZXMKLSAgICAgICAgICBpZiB0YXJnZXQgYW5kICh0YXJnZXQuZW5kc3dpdGgo
Jy5vJykgb3IgdGFyZ2V0LmVuZHN3aXRoKCcub2JqJykpXQotCi0KLWRlZiBHZXRDbGFuZ0NvbW1h
bmRMaW5lRm9yTmluamFPdXRwdXQob3V0X2RpciwgYnVpbGRfdGFyZ2V0KToKLSAgIiIiUmV0dXJu
cyB0aGUgQ2xhbmcgY29tbWFuZCBsaW5lIGZvciBidWlsZGluZyB8YnVpbGRfdGFyZ2V0fAotCi0g
IEFza3MgbmluamEgZm9yIHRoZSBsaXN0IG9mIGNvbW1hbmRzIHVzZWQgdG8gYnVpbGQgfGZpbGVu
YW1lfCBhbmQgcmV0dXJucyB0aGUKLSAgZmluYWwgQ2xhbmcgaW52b2NhdGlvbi4KLQotICBBcmdz
OgotICAgIG91dF9kaXI6IChTdHJpbmcpIEFic29sdXRlIHBhdGggdG8gbmluamEgYnVpbGQgb3V0
cHV0IGRpcmVjdG9yeS4KLSAgICBidWlsZF90YXJnZXQ6IChTdHJpbmcpIEEgYnVpbGQgdGFyZ2V0
IHVuZGVyc3Rvb2QgYnkgbmluamEKLQotICBSZXR1cm5zOgotICAgIChTdHJpbmcgb3IgTm9uZSkg
Q2xhbmcgY29tbWFuZCBsaW5lIG9yIE5vbmUgaWYgYSBDbGFuZyBjb21tYW5kIGxpbmUgY291bGRu
J3QKLSAgICAgICAgYmUgZGV0ZXJtaW5lZC4KLSAgIiIiCi0gIHAgPSBzdWJwcm9jZXNzLlBvcGVu
KFsnbmluamEnLCAnLXYnLCAnLUMnLCBvdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAg
Jy10JywgJ2NvbW1hbmRzJywgYnVpbGRfdGFyZ2V0XSwKLSAgICAgICAgICAgICAgICAgICAgICAg
c3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCi0gIHN0ZG91
dCwgXyA9IHAuY29tbXVuaWNhdGUoKQotICBpZiBwLnJldHVybmNvZGUgIT0gMDoKLSAgICByZXR1
cm4gTm9uZQotCi0gICMgTmluamEgd2lsbCByZXR1cm4gbXVsdGlwbGUgYnVpbGQgc3RlcHMgZm9y
IGFsbCBkZXBlbmRlbmNpZXMgdXAgdG8KLSAgIyB8YnVpbGRfdGFyZ2V0fC4gVGhlIGJ1aWxkIHN0
ZXAgd2Ugd2FudCBpcyB0aGUgbGFzdCBDbGFuZyBpbnZvY2F0aW9uLCB3aGljaAotICAjIGlzIGV4
cGVjdGVkIHRvIGJlIHRoZSBvbmUgdGhhdCBvdXRwdXRzIHxidWlsZF90YXJnZXR8LgotICBmb3Ig
bGluZSBpbiByZXZlcnNlZChzdGRvdXQuc3BsaXQoJ1xuJykpOgotICAgIGlmICdjbGFuZycgaW4g
bGluZToKLSAgICAgIHJldHVybiBsaW5lCi0gIHJldHVybiBOb25lCi0KLQotZGVmIEdldENsYW5n
Q29tbWFuZExpbmVGcm9tTmluamFGb3JTb3VyY2Uob3V0X2RpciwgZmlsZW5hbWUpOgotICAiIiJS
ZXR1cm5zIGEgQ2xhbmcgY29tbWFuZCBsaW5lIHVzZWQgdG8gYnVpbGQgfGZpbGVuYW1lfC4KLQot
ICBUaGUgc2FtZSBzb3VyY2UgZmlsZSBjb3VsZCBiZSBidWlsdCBtdWx0aXBsZSB0aW1lcyB1c2lu
ZyBkaWZmZXJlbnQgdG9vbAotICBjaGFpbnMuIEluIHN1Y2ggY2FzZXMsIHRoaXMgY29tbWFuZCBy
ZXR1cm5zIHRoZSBmaXJzdCBDbGFuZyBpbnZvY2F0aW9uLiBXZQotICBjdXJyZW50bHkgZG9uJ3Qg
cHJlZmVyIG9uZSB0b29sY2hhaW4gb3ZlciBhbm90aGVyLiBIb3BlZnVsbHkgdGhlIHRvb2wgY2hh
aW4KLSAgY29ycmVzcG9uZGluZyB0byB0aGUgQ2xhbmcgY29tbWFuZCBsaW5lIGlzIGNvbXBhdGli
bGUgd2l0aCB0aGUgQ2xhbmcgYnVpbGQKLSAgdXNlZCBieSBZQ00uCi0KLSAgQXJnczoKLSAgICBv
dXRfZGlyOiAoU3RyaW5nKSBBYnNvbHV0ZSBwYXRoIHRvIFdlYlJUQyBjaGVja291dC4KLSAgICBm
aWxlbmFtZTogKFN0cmluZykgQWJzb2x1dGUgcGF0aCB0byBzb3VyY2UgZmlsZS4KLQotICBSZXR1
cm5zOgotICAgIChTdHJpbmcgb3IgTm9uZSk6IENvbW1hbmQgbGluZSBmb3IgQ2xhbmcgaW52b2Nh
dGlvbiB1c2luZyB8ZmlsZW5hbWV8IGFzIGEKLSAgICAgICAgc291cmNlLiBSZXR1cm5zIE5vbmUg
aWYgbm8gc3VjaCBjb21tYW5kIGxpbmUgY291bGQgYmUgZm91bmQuCi0gICIiIgotICBidWlsZF90
YXJnZXRzID0gR2V0TmluamFCdWlsZE91dHB1dHNGb3JTb3VyY2VGaWxlKG91dF9kaXIsIGZpbGVu
YW1lKQotICBmb3IgYnVpbGRfdGFyZ2V0IGluIGJ1aWxkX3RhcmdldHM6Ci0gICAgY29tbWFuZF9s
aW5lID0gR2V0Q2xhbmdDb21tYW5kTGluZUZvck5pbmphT3V0cHV0KG91dF9kaXIsIGJ1aWxkX3Rh
cmdldCkKLSAgICBpZiBjb21tYW5kX2xpbmU6Ci0gICAgICByZXR1cm4gY29tbWFuZF9saW5lCi0g
IHJldHVybiBOb25lCi0KLQotZGVmIEdldENsYW5nT3B0aW9uc0Zyb21Db21tYW5kTGluZShjbGFu
Z19jb21tYW5kbGluZSwgb3V0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkaXRpb25hbF9mbGFncyk6Ci0gICIiIkV4dHJhY3RzIHJlbGV2YW50IGNvbW1hbmQgbGlu
ZSBvcHRpb25zIGZyb20gfGNsYW5nX2NvbW1hbmRsaW5lfAotCi0gIEFyZ3M6Ci0gICAgY2xhbmdf
Y29tbWFuZGxpbmU6IChTdHJpbmcpIEZ1bGwgQ2xhbmcgaW52b2NhdGlvbi4KLSAgICBvdXRfZGly
OiAoU3RyaW5nKSBBYnNvbHV0ZSBwYXRoIHRvIG5pbmphIGJ1aWxkIGRpcmVjdG9yeS4gUmVsYXRp
dmUgcGF0aHMgaW4KLSAgICAgICAgdGhlIGNvbW1hbmQgbGluZSBhcmUgcmVsYXRpdmUgdG8gfG91
dF9kaXJ8LgotICAgIGFkZGl0aW9uYWxfZmxhZ3M6IChMaXN0IG9mIFN0cmluZykgQWRkaXRpb25h
bCBmbGFncyB0byByZXR1cm4uCi0KLSAgUmV0dXJuczoKLSAgICAoTGlzdCBvZiBTdHJpbmdzKSBU
aGUgbGlzdCBvZiBjb21tYW5kIGxpbmUgZmxhZ3MgZm9yIHRoaXMgc291cmNlIGZpbGUuIENhbgot
ICAgIGJlIGVtcHR5LgotICAiIiIKLSAgY2xhbmdfZmxhZ3MgPSBbXSArIGFkZGl0aW9uYWxfZmxh
Z3MKLQotICAjIFBhcnNlIGZsYWdzIHRoYXQgYXJlIGltcG9ydGFudCBmb3IgWUNNJ3MgcHVycG9z
ZXMuCi0gIGNsYW5nX3Rva2VucyA9IHNobGV4LnNwbGl0KGNsYW5nX2NvbW1hbmRsaW5lKQotICBm
b3IgZmxhZ19pbmRleCwgZmxhZyBpbiBlbnVtZXJhdGUoY2xhbmdfdG9rZW5zKToKLSAgICBpZiBm
bGFnLnN0YXJ0c3dpdGgoJy1JJyk6Ci0gICAgICAjIFJlbGF0aXZlIHBhdGhzIG5lZWQgdG8gYmUg
cmVzb2x2ZWQsIGJlY2F1c2UgdGhleSdyZSByZWxhdGl2ZSB0byB0aGUKLSAgICAgICMgb3V0cHV0
IGRpciwgbm90IHRoZSBzb3VyY2UuCi0gICAgICBpZiBmbGFnWzJdID09ICcvJzoKLSAgICAgICAg
Y2xhbmdfZmxhZ3MuYXBwZW5kKGZsYWcpCi0gICAgICBlbHNlOgotICAgICAgICBhYnNfcGF0aCA9
IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKG91dF9kaXIsIGZsYWdbMjpdKSkKLSAgICAg
ICAgY2xhbmdfZmxhZ3MuYXBwZW5kKCctSScgKyBhYnNfcGF0aCkKLSAgICBlbGlmIGZsYWcuc3Rh
cnRzd2l0aCgnLXN0ZCcpOgotICAgICAgY2xhbmdfZmxhZ3MuYXBwZW5kKGZsYWcpCi0gICAgZWxp
ZiBmbGFnLnN0YXJ0c3dpdGgoJy0nKSBhbmQgZmxhZ1sxXSBpbiAnRFdGZm1PJzoKLSAgICAgIGlm
IGZsYWcgPT0gJy1Xbm8tZGVwcmVjYXRlZC1yZWdpc3Rlcicgb3IgZmxhZyA9PSAnLVduby1oZWFk
ZXItZ3VhcmQnOgotICAgICAgICAjIFRoZXNlIGZsYWdzIGNhdXNlcyBsaWJjbGFuZyAoMy4zKSB0
byBjcmFzaC4gUmVtb3ZlIGl0IHVudGlsIHRoaW5ncwotICAgICAgICAjIGFyZSBmaXhlZC4KLSAg
ICAgICAgY29udGludWUKLSAgICAgIGNsYW5nX2ZsYWdzLmFwcGVuZChmbGFnKQotICAgIGVsaWYg
ZmxhZyA9PSAnLWlzeXNyb290JzoKLSAgICAgICMgT24gTWFjIC1pc3lzcm9vdCA8cGF0aD4gaXMg
dXNlZCB0byBmaW5kIHRoZSBzeXN0ZW0gaGVhZGVycy4KLSAgICAgICMgQ29weSBvdmVyIGJvdGgg
ZmxhZ3MuCi0gICAgICBpZiBmbGFnX2luZGV4ICsgMSA8IGxlbihjbGFuZ190b2tlbnMpOgotICAg
ICAgICBjbGFuZ19mbGFncy5hcHBlbmQoZmxhZykKLSAgICAgICAgY2xhbmdfZmxhZ3MuYXBwZW5k
KGNsYW5nX3Rva2Vuc1tmbGFnX2luZGV4ICsgMV0pCi0gICAgZWxpZiBmbGFnLnN0YXJ0c3dpdGgo
Jy0tc3lzcm9vdD0nKToKLSAgICAgICMgT24gTGludXggd2UgdXNlIGEgc3lzcm9vdCBpbWFnZS4K
LSAgICAgIHN5c3Jvb3RfcGF0aCA9IGZsYWcubHN0cmlwKCctLXN5c3Jvb3Q9JykKLSAgICAgIGlm
IHN5c3Jvb3RfcGF0aC5zdGFydHN3aXRoKCcvJyk6Ci0gICAgICAgIGNsYW5nX2ZsYWdzLmFwcGVu
ZChmbGFnKQotICAgICAgZWxzZToKLSAgICAgICAgYWJzX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRo
KG9zLnBhdGguam9pbihvdXRfZGlyLCBzeXNyb290X3BhdGgpKQotICAgICAgICBjbGFuZ19mbGFn
cy5hcHBlbmQoJy0tc3lzcm9vdD0nICsgYWJzX3BhdGgpCi0gIHJldHVybiBjbGFuZ19mbGFncwot
Ci0KLWRlZiBHZXRDbGFuZ09wdGlvbnNGcm9tTmluamFGb3JGaWxlbmFtZSh3ZWJydGNfcm9vdCwg
ZmlsZW5hbWUpOgotICAiIiJSZXR1cm5zIHRoZSBDbGFuZyBjb21tYW5kIGxpbmUgb3B0aW9ucyBu
ZWVkZWQgZm9yIGJ1aWxkaW5nIHxmaWxlbmFtZXwuCi0KLSAgQ29tbWFuZCBsaW5lIG9wdGlvbnMg
YXJlIGJhc2VkIG9uIHRoZSBjb21tYW5kIHVzZWQgYnkgbmluamEgZm9yIGJ1aWxkaW5nCi0gIHxm
aWxlbmFtZXwuIElmIHxmaWxlbmFtZXwgaXMgYSAuaCBmaWxlLCB1c2VzIGl0cyBjb21wYW5pb24g
LmNjIG9yIC5jcHAgZmlsZS4KLSAgSWYgYSBzdWl0YWJsZSBjb21wYW5pb24gZmlsZSBjYW4ndCBi
ZSBsb2NhdGVkIG9yIGlmIG5pbmphIGRvZXNuJ3Qga25vdyBhYm91dAotICB8ZmlsZW5hbWV8LCB0
aGVuIHVzZXMgZGVmYXVsdCBzb3VyY2UgZmlsZXMgaW4gV2ViUlRDIGZvciBkZXRlcm1pbmluZyB0
aGUKLSAgY29tbWFuZGxpbmUuCi0KLSAgQXJnczoKLSAgICB3ZWJydGNfcm9vdDogKFN0cmluZykg
UGF0aCB0byBzcmMvLgotICAgIGZpbGVuYW1lOiAoU3RyaW5nKSBBYnNvbHV0ZSBwYXRoIHRvIHNv
dXJjZSBmaWxlIGJlaW5nIGVkaXRlZC4KLQotICBSZXR1cm5zOgotICAgIChMaXN0IG9mIFN0cmlu
Z3MpIFRoZSBsaXN0IG9mIGNvbW1hbmQgbGluZSBmbGFncyBmb3IgdGhpcyBzb3VyY2UgZmlsZS4g
Q2FuCi0gICAgYmUgZW1wdHkuCi0gICIiIgotICBpZiBub3Qgd2VicnRjX3Jvb3Q6Ci0gICAgcmV0
dXJuIFtdCi0KLSAgIyBHZW5lcmFsbHksIGV2ZXJ5b25lIGJlbmVmaXRzIGZyb20gaW5jbHVkaW5n
IFdlYlJUQydzIHNyYy8sIGJlY2F1c2UgYWxsIG9mCi0gICMgV2ViUlRDJ3MgaW5jbHVkZXMgYXJl
IHJlbGF0aXZlIHRvIHRoYXQuCi0gIGFkZGl0aW9uYWxfZmxhZ3MgPSBbJy1JJyArIG9zLnBhdGgu
am9pbih3ZWJydGNfcm9vdCldCi0KLSAgIyBWZXJzaW9uIG9mIENsYW5nIHVzZWQgdG8gY29tcGls
ZSBXZWJSVEMgY2FuIGJlIG5ld2VyIHRoZW4gdmVyc2lvbiBvZgotICAjIGxpYmNsYW5nIHRoYXQg
WUNNIHVzZXMgZm9yIGNvbXBsZXRpb24uIFNvIGl0J3MgcG9zc2libGUgdGhhdCBZQ00ncyBsaWJj
bGFuZwotICAjIGRvZXNuJ3Qga25vdyBhYm91dCBzb21lIHVzZWQgd2FybmluZyBvcHRpb25zLCB3
aGljaCBjYXVzZXMgY29tcGlsYXRpb24KLSAgIyB3YXJuaW5ncyAoYW5kIGVycm9ycywgYmVjYXVz
ZSBvZiAnLVdlcnJvcicpOwotICBhZGRpdGlvbmFsX2ZsYWdzLmFwcGVuZCgnLVduby11bmtub3du
LXdhcm5pbmctb3B0aW9uJykKLQotICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKHdlYnJ0
Y19yb290LCAndG9vbHMnLCAndmltJykpCi0gIGZyb20gbmluamFfb3V0cHV0IGltcG9ydCBHZXRO
aW5qYU91dHB1dERpcmVjdG9yeQotICBvdXRfZGlyID0gR2V0TmluamFPdXRwdXREaXJlY3Rvcnko
d2VicnRjX3Jvb3QpCi0KLSAgYmFzZW5hbWUsIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQo
ZmlsZW5hbWUpCi0gIGlmIGV4dGVuc2lvbiA9PSAnLmgnOgotICAgIGNhbmRpZGF0ZXMgPSBbYmFz
ZW5hbWUgKyBleHQgZm9yIGV4dCBpbiBfSEVBREVSX0FMVEVSTkFURVNdCi0gIGVsc2U6Ci0gICAg
Y2FuZGlkYXRlcyA9IFtmaWxlbmFtZV0KLQotICBjbGFuZ19saW5lID0gTm9uZQotICBidWlsZGFi
bGVfZXh0ZW5zaW9uID0gZXh0ZW5zaW9uCi0gIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlczoK
LSAgICBjbGFuZ19saW5lID0gR2V0Q2xhbmdDb21tYW5kTGluZUZyb21OaW5qYUZvclNvdXJjZShv
dXRfZGlyLCBjYW5kaWRhdGUpCi0gICAgaWYgY2xhbmdfbGluZToKLSAgICAgIGJ1aWxkYWJsZV9l
eHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGNhbmRpZGF0ZSlbMV0KLSAgICAgIGJyZWFrCi0K
LSAgYWRkaXRpb25hbF9mbGFncyArPSBfRVhURU5TSU9OX0ZMQUdTLmdldChidWlsZGFibGVfZXh0
ZW5zaW9uLCBbXSkKLQotICBpZiBub3QgY2xhbmdfbGluZToKLSAgICAjIElmIG5pbmphIGRpZG4n
dCBrbm93IGFib3V0IGZpbGVuYW1lIG9yIGl0J3MgY29tcGFuaW9uIGZpbGVzLCB0aGVuIHRyeSBh
Ci0gICAgIyBkZWZhdWx0IGJ1aWxkIHRhcmdldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZmls
ZSBpcyBuZXcsIG9yIGJ1aWxkLm5pbmphCi0gICAgIyBpcyBzdGFsZS4KLSAgICBjbGFuZ19saW5l
ID0gR2V0Q2xhbmdDb21tYW5kTGluZUZyb21OaW5qYUZvclNvdXJjZSgKLSAgICAgICAgb3V0X2Rp
ciwgR2V0RGVmYXVsdFNvdXJjZUZpbGUod2VicnRjX3Jvb3QsIGZpbGVuYW1lKSkKLQotICBpZiBu
b3QgY2xhbmdfbGluZToKLSAgICByZXR1cm4gYWRkaXRpb25hbF9mbGFncwotCi0gIHJldHVybiBH
ZXRDbGFuZ09wdGlvbnNGcm9tQ29tbWFuZExpbmUoY2xhbmdfbGluZSwgb3V0X2RpciwgYWRkaXRp
b25hbF9mbGFncykKLQotCi1kZWYgRmxhZ3NGb3JGaWxlKGZpbGVuYW1lKToKLSAgIiIiVGhpcyBp
cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgWUNNLiBJdHMgaW50ZXJmYWNlIGlzIGZpeGVkLgot
Ci0gIEFyZ3M6Ci0gICAgZmlsZW5hbWU6IChTdHJpbmcpIFBhdGggdG8gc291cmNlIGZpbGUgYmVp
bmcgZWRpdGVkLgotCi0gIFJldHVybnM6Ci0gICAgKERpY3Rpb25hcnkpCi0gICAgICAnZmxhZ3Mn
OiAoTGlzdCBvZiBTdHJpbmdzKSBDb21tYW5kIGxpbmUgZmxhZ3MuCi0gICAgICAnZG9fY2FjaGUn
OiAoQm9vbGVhbikgVHJ1ZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBiZSBjYWNoZWQuCi0gICIiIgot
ICBhYnNfZmlsZW5hbWUgPSBvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpCi0gIHdlYnJ0Y19yb290
ID0gRmluZFdlYnJ0Y1NyY0Zyb21GaWxlbmFtZShhYnNfZmlsZW5hbWUpCi0gIGNsYW5nX2ZsYWdz
ID0gR2V0Q2xhbmdPcHRpb25zRnJvbU5pbmphRm9yRmlsZW5hbWUod2VicnRjX3Jvb3QsIGFic19m
aWxlbmFtZSkKLQotICAjIElmIGNsYW5nX2ZsYWdzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLCB0
aGVuIGFzc3VtZSB0aGF0IHdhcyBkdWUgdG8gYQotICAjIHRyYW5zaWVudCBmYWlsdXJlLiBQcmV2
ZW50aW5nIFlDTSBmcm9tIGNhY2hpbmcgdGhlIGZsYWdzIGFsbG93cyB1cyB0byB0cnkgdG8KLSAg
IyBkZXRlcm1pbmUgdGhlIGZsYWdzIGFnYWluLgotICBzaG91bGRfY2FjaGVfZmxhZ3NfZm9yX2Zp
bGUgPSBib29sKGNsYW5nX2ZsYWdzKQotCi0gIGZpbmFsX2ZsYWdzID0gX0RFRkFVTFRfRkxBR1Mg
KyBjbGFuZ19mbGFncwotCi0gIHJldHVybiB7Ci0gICAgJ2ZsYWdzJzogZmluYWxfZmxhZ3MsCi0g
ICAgJ2RvX2NhY2hlJzogc2hvdWxkX2NhY2hlX2ZsYWdzX2Zvcl9maWxlCi0gIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417076</attachid>
            <date>2021-01-06 02:27:54 -0800</date>
            <delta_ts>2021-01-07 00:10:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220101-20210106112753.patch</filename>
            <type>text/plain</type>
            <size>4913</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBmODQ5ZjJiYWIyMzU0MTY3MzA0ZGU0ZDY5ZTdiOTljNjQ0NDViYjg2Li41MWE5
ZTA4Yzc4MTkxY2ViM2QwODAxM2ZiNzliYjU1ZDZhODEyOGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMS0wMS0wNiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG5vbi1pbmNsdXNpdmUg
bGFuZ3VhZ2UgZnJvbSBsaWJ3ZWJydGMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDEwMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzI3Mjc5Njg+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
IGxvZ2dpbmcgZXJyb25lb3VzbHkgYWRkZWQgaW4gaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hh
bmdlc2V0LzI3MTE1MC4KKyAgICAgICAgUmVtb3ZlIG5vbi1pbmNsdXNpdmUgbGFuZ3VhZ2UgZnJv
bSBTb3VyY2Uvd2VicnRjL3J0Y19iYXNlL21lc3NhZ2VfZGlnZXN0LmggYXMgZG9uZSBpbgorICAg
ICAgICBodHRwczovL3dlYnJ0Yy1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS9jL3NyYy8rLzIwMDcw
MS4KKworICAgICAgICAqIFNvdXJjZS93ZWJydGMvcnRjX2Jhc2UvbWVzc2FnZV9kaWdlc3QuaDoK
KyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL3Nkay9vYmpjL2NvbXBvbmVudHMvdmlkZW9fY29kZWMv
UlRDVmlkZW9EZWNvZGVySDI2NC5tbToKKyAgICAgICAgKC1bUlRDVmlkZW9EZWNvZGVySDI2NCBp
bml0XSk6CisgICAgICAgICgtW1JUQ1ZpZGVvRGVjb2RlckgyNjQgZGVjb2RlRGF0YTpzaXplOnRp
bWVTdGFtcDpdKToKKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL3Nkay9vYmpjL2NvbXBvbmVudHMv
dmlkZW9fY29kZWMvUlRDVmlkZW9FbmNvZGVySDI2NC5tbToKKyAgICAgICAgKC1bUlRDVmlkZW9F
bmNvZGVySDI2NCBpbml0V2l0aENvZGVjSW5mbzpdKToKKyAgICAgICAgKC1bUlRDVmlkZW9FbmNv
ZGVySDI2NCBlbmNvZGU6Y29kZWNTcGVjaWZpY0luZm86ZnJhbWVUeXBlczpdKToKKyAgICAgICAg
KC1bUlRDVmlkZW9FbmNvZGVySDI2NCBmcmFtZVdhc0VuY29kZWQ6ZmxhZ3M6c2FtcGxlQnVmZmVy
OmNvZGVjU3BlY2lmaWNJbmZvOndpZHRoOmhlaWdodDpyZW5kZXJUaW1lTXM6dGltZXN0YW1wOnJv
dGF0aW9uOmlzS2V5RnJhbWVSZXF1aXJlZDpdKToKKwogMjAyMS0wMS0wNSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIG5vbi1pbmNsdXNpdmUgbGFu
Z3VhZ2UgZnJvbSBsaWJ3ZWJydGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL21lc3NhZ2VfZGlnZXN0LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS9tZXNzYWdlX2RpZ2VzdC5o
CmluZGV4IDM2ZjAwYjUyNzMzOWNjNGU4ODc3MTg4OTFjNmQ5OGU3ZjRmNDg4OWEuLjY5MTMzMGUy
M2MxMTc3MmEwNWIyMzI2N2UwMjI3N2UxODU3NGZlZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL21lc3NhZ2VfZGlnZXN0LmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcnRjX2Jhc2Uv
bWVzc2FnZV9kaWdlc3QuaApAQCAtNDUsNyArNDUsOCBAQCBjbGFzcyBNZXNzYWdlRGlnZXN0RmFj
dG9yeSB7CiAgIHN0YXRpYyBNZXNzYWdlRGlnZXN0KiBDcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcm
IGFsZyk7CiB9OwogCi0vLyBBIHdoaXRlbGlzdCBvZiBhcHByb3ZlZCBkaWdlc3QgYWxnb3JpdGht
cyBmcm9tIFJGQyA0NTcyIChGSVBTIDE4MCkuCisvLyBBIGNoZWNrIHRoYXQgYW4gYWxnb3JpdGht
IGlzIGluIGEgbGlzdCBvZiBhcHByb3ZlZCBkaWdlc3QgYWxnb3JpdGhtcworLy8gZnJvbSBSRkMg
NDU3MiAoRklQUyAxODApLgogYm9vbCBJc0ZpcHMxODBEaWdlc3RBbGdvcml0aG0oY29uc3Qgc3Rk
OjpzdHJpbmcmIGFsZyk7CiAKIC8vIEZ1bmN0aW9ucyB0byBjcmVhdGUgaGFzaGVzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL29iamMv
Y29tcG9uZW50cy92aWRlb19jb2RlYy9SVENWaWRlb0RlY29kZXJIMjY0Lm1tIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL29iamMvY29tcG9uZW50cy92aWRl
b19jb2RlYy9SVENWaWRlb0RlY29kZXJIMjY0Lm1tCmluZGV4IGViMDJlNTBlOTQ1M2MyNGIyMzNi
OWQ1YzBjNWRjNzVlYTRkZmQ3MTEuLmIxNGYwYzg3ZWI1YjVjYmM1YTdhOWY4NWI5YWZkMWVmZTc4
MjJhNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3Nkay9vYmpjL2NvbXBvbmVudHMvdmlkZW9fY29kZWMvUlRDVmlkZW9EZWNvZGVySDI2NC5t
bQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvb2Jq
Yy9jb21wb25lbnRzL3ZpZGVvX2NvZGVjL1JUQ1ZpZGVvRGVjb2RlckgyNjQubW0KQEAgLTgyLDcg
KzgyLDYgQEAgdm9pZCBkZWNvbXByZXNzaW9uT3V0cHV0Q2FsbGJhY2sodm9pZCAqZGVjb2RlclJl
ZiwKICAgaWYgKHNlbGYpIHsKICAgICBfbWVtb3J5UG9vbCA9IENNTWVtb3J5UG9vbENyZWF0ZShu
aWwpOwogICB9Ci0gICAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkgyNjQgZGVjb2RlIGluaXQiOwog
ICByZXR1cm4gc2VsZjsKIH0KIApAQCAtMTEwLDcgKzEwOSw2IEBAIHZvaWQgZGVjb21wcmVzc2lv
bk91dHB1dENhbGxiYWNrKHZvaWQgKmRlY29kZXJSZWYsCiAgICAgICAgIHNpemU6KHNpemVfdClz
aXplCiAgICAgICAgIHRpbWVTdGFtcDoodWludDMyX3QpdGltZVN0YW1wIHsKIAotICAgIFJUQ19M
T0coTFNfRVJST1IpIDw8ICJIMjY0IGRlY29kZURhdGEiOwogICBpZiAoX2Vycm9yICE9IG5vRXJy
KSB7CiAgICAgUlRDX0xPRyhMU19XQVJOSU5HKSA8PCAiTGFzdCBmcmFtZSBkZWNvZGUgZmFpbGVk
LiI7CiAgICAgX2Vycm9yID0gbm9FcnI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zZGsvb2JqYy9jb21wb25lbnRzL3ZpZGVvX2NvZGVjL1JU
Q1ZpZGVvRW5jb2RlckgyNjQubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9zZGsvb2JqYy9jb21wb25lbnRzL3ZpZGVvX2NvZGVjL1JUQ1ZpZGVvRW5jb2Rlckgy
NjQubW0KaW5kZXggYzU5MmE0N2E5ZDkxM2NlNGI4ZWU2Yjk2NDQxNzlhY2JjNTMzYjlhOS4uYjBi
YjIxNWEwMjEwYWUwZTI1YmRhM2FmYTEyMzJkOTE0NTgxMmE5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvc2RrL29iamMvY29tcG9uZW50cy92
aWRlb19jb2RlYy9SVENWaWRlb0VuY29kZXJIMjY0Lm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Nkay9vYmpjL2NvbXBvbmVudHMvdmlkZW9fY29kZWMv
UlRDVmlkZW9FbmNvZGVySDI2NC5tbQpAQCAtMzc3LDggKzM3Nyw2IEBAIE5TVUludGVnZXIgR2V0
TWF4U2FtcGxlUmF0ZShjb25zdCB3ZWJydGM6OkgyNjQ6OlByb2ZpbGVMZXZlbElkICZwcm9maWxl
X2xldmVsX2lkCiAgIF9pc0tleUZyYW1lUmVxdWlyZWQgPSBmYWxzZTsKICAgX2lzSDI2NExvd0xh
dGVuY3lFbmNvZGVyRW5hYmxlZCA9IHRydWU7CiAKLSAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkgy
NjQgZW5jb2RlIGluaXRXaXRoQ29kZWNJbmZvIjsKLQogICByZXR1cm4gc2VsZjsKIH0KIApAQCAt
NDI5LDkgKzQyNyw2IEBAIE5TVUludGVnZXIgR2V0TWF4U2FtcGxlUmF0ZShjb25zdCB3ZWJydGM6
OkgyNjQ6OlByb2ZpbGVMZXZlbElkICZwcm9maWxlX2xldmVsX2lkCiAtIChOU0ludGVnZXIpZW5j
b2RlOihSVENWaWRlb0ZyYW1lICopZnJhbWUKICAgICBjb2RlY1NwZWNpZmljSW5mbzoobnVsbGFi
bGUgaWQ8UlRDQ29kZWNTcGVjaWZpY0luZm8+KWNvZGVjU3BlY2lmaWNJbmZvCiAgICAgICAgICAg
IGZyYW1lVHlwZXM6KE5TQXJyYXk8TlNOdW1iZXIgKj4gKilmcmFtZVR5cGVzIHsKLQotICBSVENf
TE9HKExTX0VSUk9SKSA8PCAiSDI2NCBlbmNvZGUgbmV3IGZyYW1lIjsKLQogICBpZiAoIV9jYWxs
YmFjayB8fCAhW3NlbGYgaGFzQ29tcHJlc3Npb25TZXNzaW9uXSkgewogICAgIHJldHVybiBXRUJS
VENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsKICAgfQpAQCAtODg0LDcgKzg3OSw2IEBAIE5T
VUludGVnZXIgR2V0TWF4U2FtcGxlUmF0ZShjb25zdCB3ZWJydGM6OkgyNjQ6OlByb2ZpbGVMZXZl
bElkICZwcm9maWxlX2xldmVsX2lkCiAgICAgICAgICAgICAgIHRpbWVzdGFtcDoodWludDMyX3Qp
dGltZXN0YW1wCiAgICAgICAgICAgICAgICByb3RhdGlvbjooUlRDVmlkZW9Sb3RhdGlvbilyb3Rh
dGlvbgogICAgICBpc0tleUZyYW1lUmVxdWlyZWQ6KGJvb2wpaXNLZXlGcmFtZVJlcXVpcmVkIHsK
LSAgUlRDX0xPRyhMU19FUlJPUikgPDwgIkgyNjQgZW5jb2RlZCBmcmFtZSAiIDw8IHN0YXR1czsK
ICAgaWYgKHN0YXR1cyAhPSBub0VycikgewogICAgIFJUQ19MT0coTFNfRVJST1IpIDw8ICJIMjY0
IGVuY29kZSBmYWlsZWQgd2l0aCBjb2RlOiAiIDw8IHN0YXR1czsKICAgICBpZiAoaXNLZXlGcmFt
ZVJlcXVpcmVkKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>